From e057fc8eef125e4bbdf47f5c9a7bf6d54eceb427 Mon Sep 17 00:00:00 2001 From: guipublic Date: Tue, 13 Feb 2024 11:47:11 +0000 Subject: [PATCH 01/98] Remove sha256 opcode --- .../dsl/acir_format/acir_format.cpp | 3 - .../dsl/acir_format/acir_format.hpp | 2 - .../dsl/acir_format/acir_format.test.cpp | 7 +- .../acir_format/acir_to_constraint_buf.hpp | 11 - .../acir_format/bigint_constraint.test.cpp | 4 - .../dsl/acir_format/block_constraint.test.cpp | 1 - .../dsl/acir_format/ec_operations.test.cpp | 1 - .../dsl/acir_format/ecdsa_secp256k1.test.cpp | 3 - .../dsl/acir_format/ecdsa_secp256r1.test.cpp | 4 - .../acir_format/recursion_constraint.test.cpp | 2 - .../dsl/acir_format/serde/acir.hpp | 200 +----------------- .../dsl/acir_format/sha256_constraint.cpp | 41 ---- .../dsl/acir_format/sha256_constraint.hpp | 4 - .../acir_format/sha256_constraint.test.cpp | 1 - .../contracts/card_game_contract/src/cards.nr | 2 +- .../ecdsa_account_contract/src/main.nr | 2 +- noir/acvm-repo/acir/codegen/acir.cpp | 104 +-------- .../acir/src/circuit/black_box_functions.rs | 4 - .../opcodes/black_box_function_call.rs | 11 +- noir/acvm-repo/acvm/src/pwg/blackbox/mod.rs | 10 +- noir/acvm-repo/blackbox_solver/Cargo.toml | 1 - noir/acvm-repo/blackbox_solver/src/lib.rs | 6 - noir/acvm-repo/brillig/src/black_box.rs | 5 - noir/acvm-repo/brillig_vm/src/black_box.rs | 40 +--- .../brillig/brillig_gen/brillig_black_box.rs | 13 -- .../src/brillig/brillig_ir/debug_show.rs | 3 - .../ssa/acir_gen/acir_ir/generated_acir.rs | 7 +- .../src/ssa/ir/instruction/call.rs | 1 - noir/noir_stdlib/src/field.nr | 8 + noir/noir_stdlib/src/hash.nr | 5 +- 30 files changed, 23 insertions(+), 483 deletions(-) diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.cpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.cpp index 79f39889e56..fef4da405c3 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.cpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.cpp @@ -29,9 +29,6 @@ void build_constraints(Builder& builder, AcirFormat const& constraint_system, bo } // Add sha256 constraints - for (const auto& constraint : constraint_system.sha256_constraints) { - create_sha256_constraints(builder, constraint); - } for (const auto& constraint : constraint_system.sha256_compression) { create_sha256_compression_constraints(builder, constraint); } diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.hpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.hpp index c74607e7412..6dd84f88696 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.hpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.hpp @@ -33,7 +33,6 @@ struct AcirFormat { std::vector logic_constraints; std::vector range_constraints; - std::vector sha256_constraints; std::vector sha256_compression; std::vector schnorr_constraints; std::vector ecdsa_k1_constraints; @@ -65,7 +64,6 @@ struct AcirFormat { public_inputs, logic_constraints, range_constraints, - sha256_constraints, sha256_compression, schnorr_constraints, ecdsa_k1_constraints, diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.test.cpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.test.cpp index 7107c95970a..d911b8fe47c 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.test.cpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.test.cpp @@ -33,7 +33,6 @@ TEST_F(AcirFormatTests, TestASingleConstraintNoPubInputs) .public_inputs = {}, .logic_constraints = {}, .range_constraints = {}, - .sha256_constraints = {}, .sha256_compression = {}, .schnorr_constraints = {}, .ecdsa_k1_constraints = {}, @@ -148,7 +147,6 @@ TEST_F(AcirFormatTests, TestLogicGateFromNoirCircuit) .public_inputs = { 1 }, .logic_constraints = { logic_constraint }, .range_constraints = { range_a, range_b }, - .sha256_constraints = {}, .sha256_compression = {}, .schnorr_constraints = {}, .ecdsa_k1_constraints = {}, @@ -215,7 +213,6 @@ TEST_F(AcirFormatTests, TestSchnorrVerifyPass) .public_inputs = {}, .logic_constraints = {}, .range_constraints = range_constraints, - .sha256_constraints = {}, .sha256_compression = {}, .schnorr_constraints = { schnorr_constraint }, .ecdsa_k1_constraints = {}, @@ -310,7 +307,7 @@ TEST_F(AcirFormatTests, TestSchnorrVerifySmallRange) .public_inputs = {}, .logic_constraints = {}, .range_constraints = range_constraints, - .sha256_constraints = {}, + , .sha256_compression = {}, .schnorr_constraints = { schnorr_constraint }, .ecdsa_k1_constraints = {}, @@ -424,7 +421,6 @@ TEST_F(AcirFormatTests, TestVarKeccak) .public_inputs = {}, .logic_constraints = {}, .range_constraints = { range_a, range_b, range_c, range_d }, - .sha256_constraints = {}, .sha256_compression = {}, .schnorr_constraints = {}, .ecdsa_k1_constraints = {}, @@ -470,7 +466,6 @@ TEST_F(AcirFormatTests, TestKeccakPermutation) .public_inputs = {}, .logic_constraints = {}, .range_constraints = {}, - .sha256_constraints = {}, .sha256_compression = {}, .schnorr_constraints = {}, .ecdsa_k1_constraints = {}, diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_to_constraint_buf.hpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_to_constraint_buf.hpp index 44cfc8a1091..9152f03b625 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_to_constraint_buf.hpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_to_constraint_buf.hpp @@ -128,17 +128,6 @@ void handle_blackbox_func_call(Circuit::Opcode::BlackBoxFuncCall const& arg, Aci .witness = arg.input.witness.value, .num_bits = arg.input.num_bits, }); - } else if constexpr (std::is_same_v) { - af.sha256_constraints.push_back(Sha256Constraint{ - .inputs = map(arg.inputs, - [](auto& e) { - return Sha256Input{ - .witness = e.witness.value, - .num_bits = e.num_bits, - }; - }), - .result = map(arg.outputs, [](auto& e) { return e.value; }), - }); } else if constexpr (std::is_same_v) { af.sha256_compression.push_back(Sha256Compression{ .inputs = map(arg.inputs, diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/bigint_constraint.test.cpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/bigint_constraint.test.cpp index ab1035b0112..21928b521de 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/bigint_constraint.test.cpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/bigint_constraint.test.cpp @@ -171,7 +171,6 @@ TEST_F(BigIntTests, TestBigIntConstraintMultiple) .public_inputs = {}, .logic_constraints = {}, .range_constraints = {}, - .sha256_constraints = {}, .sha256_compression = {}, .schnorr_constraints = {}, .ecdsa_k1_constraints = {}, @@ -238,7 +237,6 @@ TEST_F(BigIntTests, TestBigIntConstraintSimple) .public_inputs = {}, .logic_constraints = {}, .range_constraints = {}, - .sha256_constraints = {}, .sha256_compression = {}, .schnorr_constraints = {}, .ecdsa_k1_constraints = {}, @@ -290,7 +288,6 @@ TEST_F(BigIntTests, TestBigIntConstraintReuse) .public_inputs = {}, .logic_constraints = {}, .range_constraints = {}, - .sha256_constraints = {}, .sha256_compression = {}, .schnorr_constraints = {}, .ecdsa_k1_constraints = {}, @@ -346,7 +343,6 @@ TEST_F(BigIntTests, TestBigIntConstraintReuse2) .public_inputs = {}, .logic_constraints = {}, .range_constraints = {}, - .sha256_constraints = {}, .sha256_compression = {}, .schnorr_constraints = {}, .ecdsa_k1_constraints = {}, diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/block_constraint.test.cpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/block_constraint.test.cpp index 37a4dd6dd53..93851adafac 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/block_constraint.test.cpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/block_constraint.test.cpp @@ -114,7 +114,6 @@ TEST_F(UltraPlonkRAM, TestBlockConstraint) .public_inputs = {}, .logic_constraints = {}, .range_constraints = {}, - .sha256_constraints = {}, .sha256_compression = {}, .schnorr_constraints = {}, .ecdsa_k1_constraints = {}, diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/ec_operations.test.cpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/ec_operations.test.cpp index 92dc537bfbd..0b55826997e 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/ec_operations.test.cpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/ec_operations.test.cpp @@ -53,7 +53,6 @@ TEST_F(EcOperations, TestECOperations) .public_inputs = {}, .logic_constraints = {}, .range_constraints = {}, - .sha256_constraints = {}, .sha256_compression = {}, .schnorr_constraints = {}, .ecdsa_k1_constraints = {}, diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/ecdsa_secp256k1.test.cpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/ecdsa_secp256k1.test.cpp index 9e546398c07..f04b15441e3 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/ecdsa_secp256k1.test.cpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/ecdsa_secp256k1.test.cpp @@ -93,7 +93,6 @@ TEST_F(ECDSASecp256k1, TestECDSAConstraintSucceed) .public_inputs = {}, .logic_constraints = {}, .range_constraints = {}, - .sha256_constraints = {}, .sha256_compression = {}, .schnorr_constraints = {}, .ecdsa_k1_constraints = { ecdsa_k1_constraint }, @@ -141,7 +140,6 @@ TEST_F(ECDSASecp256k1, TestECDSACompilesForVerifier) .public_inputs = {}, .logic_constraints = {}, .range_constraints = {}, - .sha256_constraints = {}, .sha256_compression = {}, .schnorr_constraints = {}, .ecdsa_k1_constraints = { ecdsa_k1_constraint }, @@ -184,7 +182,6 @@ TEST_F(ECDSASecp256k1, TestECDSAConstraintFail) .public_inputs = {}, .logic_constraints = {}, .range_constraints = {}, - .sha256_constraints = {}, .sha256_compression = {}, .schnorr_constraints = {}, .ecdsa_k1_constraints = { ecdsa_k1_constraint }, diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/ecdsa_secp256r1.test.cpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/ecdsa_secp256r1.test.cpp index 8269593eefb..e9ebcc393b5 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/ecdsa_secp256r1.test.cpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/ecdsa_secp256r1.test.cpp @@ -128,7 +128,6 @@ TEST(ECDSASecp256r1, test_hardcoded) .public_inputs = {}, .logic_constraints = {}, .range_constraints = {}, - .sha256_constraints = {}, .sha256_compression = {}, .schnorr_constraints = {}, .ecdsa_k1_constraints = {}, @@ -177,7 +176,6 @@ TEST(ECDSASecp256r1, TestECDSAConstraintSucceed) .public_inputs = {}, .logic_constraints = {}, .range_constraints = {}, - .sha256_constraints = {}, .sha256_compression = {}, .schnorr_constraints = {}, .ecdsa_k1_constraints = {}, @@ -224,7 +222,6 @@ TEST(ECDSASecp256r1, TestECDSACompilesForVerifier) .public_inputs = {}, .logic_constraints = {}, .range_constraints = {}, - .sha256_constraints = {}, .sha256_compression = {}, .schnorr_constraints = {}, .ecdsa_k1_constraints = {}, @@ -266,7 +263,6 @@ TEST(ECDSASecp256r1, TestECDSAConstraintFail) .public_inputs = {}, .logic_constraints = {}, .range_constraints = {}, - .sha256_constraints = {}, .sha256_compression = {}, .schnorr_constraints = {}, .ecdsa_k1_constraints = {}, diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/recursion_constraint.test.cpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/recursion_constraint.test.cpp index 1c530678e87..053db31e687 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/recursion_constraint.test.cpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/recursion_constraint.test.cpp @@ -86,7 +86,6 @@ Builder create_inner_circuit() .public_inputs = { 1, 2 }, .logic_constraints = { logic_constraint }, .range_constraints = { range_a, range_b }, - .sha256_constraints = {}, .sha256_compression = {}, .schnorr_constraints = {}, .ecdsa_k1_constraints = {}, @@ -242,7 +241,6 @@ Builder create_outer_circuit(std::vector& inner_circuits) .public_inputs = {}, .logic_constraints = {}, .range_constraints = {}, - .sha256_constraints = {}, .sha256_compression = {}, .schnorr_constraints = {}, .ecdsa_k1_constraints = {}, diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/serde/acir.hpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/serde/acir.hpp index 2c6bea75698..4c9c3a72b83 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/serde/acir.hpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/serde/acir.hpp @@ -159,15 +159,6 @@ struct HeapVector { struct BlackBoxOp { - struct Sha256 { - Circuit::HeapVector message; - Circuit::HeapArray output; - - friend bool operator==(const Sha256&, const Sha256&); - std::vector bincodeSerialize() const; - static Sha256 bincodeDeserialize(std::vector); - }; - struct Blake2s { Circuit::HeapVector message; Circuit::HeapArray output; @@ -361,8 +352,7 @@ struct BlackBoxOp { static Sha256Compression bincodeDeserialize(std::vector); }; - std::variant); }; - struct SHA256 { - std::vector inputs; - std::vector outputs; - - friend bool operator==(const SHA256&, const SHA256&); - std::vector bincodeSerialize() const; - static SHA256 bincodeDeserialize(std::vector); - }; - struct Blake2s { std::vector inputs; std::vector outputs; @@ -917,7 +898,6 @@ struct BlackBoxFuncCall { std::variant); }; - struct PermutationSort { - std::vector> inputs; - uint32_t tuple; - std::vector bits; - std::vector sort_by; - - friend bool operator==(const PermutationSort&, const PermutationSort&); - std::vector bincodeSerialize() const; - static PermutationSort bincodeDeserialize(std::vector); - }; - - std::variant value; + std::variant value; friend bool operator==(const Directive&, const Directive&); std::vector bincodeSerialize() const; @@ -2244,58 +2213,6 @@ Circuit::BlackBoxFuncCall::RANGE serde::Deserializable BlackBoxFuncCall::SHA256::bincodeSerialize() const -{ - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} - -inline BlackBoxFuncCall::SHA256 BlackBoxFuncCall::SHA256::bincodeDeserialize(std::vector input) -{ - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw_or_abort("Some input bytes were not read"); - } - return value; -} - -} // end of namespace Circuit - -template <> -template -void serde::Serializable::serialize(const Circuit::BlackBoxFuncCall::SHA256& obj, - Serializer& serializer) -{ - serde::Serializable::serialize(obj.inputs, serializer); - serde::Serializable::serialize(obj.outputs, serializer); -} - -template <> -template -Circuit::BlackBoxFuncCall::SHA256 serde::Deserializable::deserialize( - Deserializer& deserializer) -{ - Circuit::BlackBoxFuncCall::SHA256 obj; - obj.inputs = serde::Deserializable::deserialize(deserializer); - obj.outputs = serde::Deserializable::deserialize(deserializer); - return obj; -} - -namespace Circuit { - inline bool operator==(const BlackBoxFuncCall::Blake2s& lhs, const BlackBoxFuncCall::Blake2s& rhs) { if (!(lhs.inputs == rhs.inputs)) { @@ -3574,57 +3491,6 @@ Circuit::BlackBoxOp serde::Deserializable::deserialize(Dese namespace Circuit { -inline bool operator==(const BlackBoxOp::Sha256& lhs, const BlackBoxOp::Sha256& rhs) -{ - if (!(lhs.message == rhs.message)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; -} - -inline std::vector BlackBoxOp::Sha256::bincodeSerialize() const -{ - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} - -inline BlackBoxOp::Sha256 BlackBoxOp::Sha256::bincodeDeserialize(std::vector input) -{ - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw_or_abort("Some input bytes were not read"); - } - return value; -} - -} // end of namespace Circuit - -template <> -template -void serde::Serializable::serialize(const Circuit::BlackBoxOp::Sha256& obj, - Serializer& serializer) -{ - serde::Serializable::serialize(obj.message, serializer); - serde::Serializable::serialize(obj.output, serializer); -} - -template <> -template -Circuit::BlackBoxOp::Sha256 serde::Deserializable::deserialize(Deserializer& deserializer) -{ - Circuit::BlackBoxOp::Sha256 obj; - obj.message = serde::Deserializable::deserialize(deserializer); - obj.output = serde::Deserializable::deserialize(deserializer); - return obj; -} - -namespace Circuit { - inline bool operator==(const BlackBoxOp::Blake2s& lhs, const BlackBoxOp::Blake2s& rhs) { if (!(lhs.message == rhs.message)) { @@ -6309,68 +6175,6 @@ Circuit::Directive::ToLeRadix serde::Deserializable Directive::PermutationSort::bincodeSerialize() const -{ - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} - -inline Directive::PermutationSort Directive::PermutationSort::bincodeDeserialize(std::vector input) -{ - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw_or_abort("Some input bytes were not read"); - } - return value; -} - -} // end of namespace Circuit - -template <> -template -void serde::Serializable::serialize(const Circuit::Directive::PermutationSort& obj, - Serializer& serializer) -{ - serde::Serializable::serialize(obj.inputs, serializer); - serde::Serializable::serialize(obj.tuple, serializer); - serde::Serializable::serialize(obj.bits, serializer); - serde::Serializable::serialize(obj.sort_by, serializer); -} - -template <> -template -Circuit::Directive::PermutationSort serde::Deserializable::deserialize( - Deserializer& deserializer) -{ - Circuit::Directive::PermutationSort obj; - obj.inputs = serde::Deserializable::deserialize(deserializer); - obj.tuple = serde::Deserializable::deserialize(deserializer); - obj.bits = serde::Deserializable::deserialize(deserializer); - obj.sort_by = serde::Deserializable::deserialize(deserializer); - return obj; -} - -namespace Circuit { - inline bool operator==(const Expression& lhs, const Expression& rhs) { if (!(lhs.mul_terms == rhs.mul_terms)) { diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/sha256_constraint.cpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/sha256_constraint.cpp index f7a0a421362..3778292b73e 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/sha256_constraint.cpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/sha256_constraint.cpp @@ -6,42 +6,6 @@ namespace acir_format { -// This function does not work (properly) because the stdlib:sha256 function is not working correctly for 512 bits -// pair -template void create_sha256_constraints(Builder& builder, const Sha256Constraint& constraint) -{ - using byte_array_ct = bb::stdlib::byte_array; - using field_ct = bb::stdlib::field_t; - - // Create byte array struct - byte_array_ct arr(&builder); - - // Get the witness assignment for each witness index - // Write the witness assignment to the byte_array - for (const auto& witness_index_num_bits : constraint.inputs) { - auto witness_index = witness_index_num_bits.witness; - auto num_bits = witness_index_num_bits.num_bits; - - // XXX: The implementation requires us to truncate the element to the nearest byte and not bit - auto num_bytes = round_to_nearest_byte(num_bits); - - field_ct element = field_ct::from_witness_index(&builder, witness_index); - byte_array_ct element_bytes(element, num_bytes); - - arr.write(element_bytes); - } - - // Compute sha256 - byte_array_ct output_bytes = bb::stdlib::sha256(arr); - - // Convert byte array to vector of field_t - auto bytes = output_bytes.bytes(); - - for (size_t i = 0; i < bytes.size(); ++i) { - builder.assert_equal(bytes[i].normalize().witness_index, constraint.result[i]); - } -} - template void create_sha256_compression_constraints(Builder& builder, const Sha256Compression& constraint) { @@ -86,11 +50,6 @@ void create_sha256_compression_constraints(Builder& builder, const Sha256Compres } } -template void create_sha256_constraints(UltraCircuitBuilder& builder, - const Sha256Constraint& constraint); -template void create_sha256_constraints(GoblinUltraCircuitBuilder& builder, - const Sha256Constraint& constraint); - template void create_sha256_compression_constraints(UltraCircuitBuilder& builder, const Sha256Compression& constraint); template void create_sha256_compression_constraints(GoblinUltraCircuitBuilder& builder, diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/sha256_constraint.hpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/sha256_constraint.hpp index 0c36058393a..5cb417a7828 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/sha256_constraint.hpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/sha256_constraint.hpp @@ -34,10 +34,6 @@ struct Sha256Compression { MSGPACK_FIELDS(inputs, hash_values, result); }; -// This function does not work (properly) because the stdlib:sha256 function is not working correctly for 512 bits -// pair -template void create_sha256_constraints(Builder& builder, const Sha256Constraint& constraint); - template void create_sha256_compression_constraints(Builder& builder, const Sha256Compression& constraint); diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/sha256_constraint.test.cpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/sha256_constraint.test.cpp index fbce9f6e246..dd536decde2 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/sha256_constraint.test.cpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/sha256_constraint.test.cpp @@ -36,7 +36,6 @@ TEST_F(Sha256Tests, TestSha256Compression) .public_inputs = {}, .logic_constraints = {}, .range_constraints = {}, - .sha256_constraints = {}, .sha256_compression = { sha256_compression }, .schnorr_constraints = {}, .ecdsa_k1_constraints = {}, diff --git a/noir-projects/noir-contracts/contracts/card_game_contract/src/cards.nr b/noir-projects/noir-contracts/contracts/card_game_contract/src/cards.nr index 9569a41b774..736f1fa3099 100644 --- a/noir-projects/noir-contracts/contracts/card_game_contract/src/cards.nr +++ b/noir-projects/noir-contracts/contracts/card_game_contract/src/cards.nr @@ -198,7 +198,7 @@ pub fn get_pack_cards(seed: Field, owner: AztecAddress, context: &mut PrivateCon // generate pseudo randomness deterministically from 'seed' and user secret let secret = context.request_nullifier_secret_key(owner); let mix = secret.high + secret.low + seed; - let random_bytes = std::hash::sha256(mix.to_le_bytes(32)); + let random_bytes = std::hash::sha256(mix.to_le_32_bytes()); let mut cards = [Card::from_field(0); PACK_CARDS]; // we generate PACK_CARDS cards diff --git a/noir-projects/noir-contracts/contracts/ecdsa_account_contract/src/main.nr b/noir-projects/noir-contracts/contracts/ecdsa_account_contract/src/main.nr index dfe804c0fa3..0522d3f016a 100644 --- a/noir-projects/noir-contracts/contracts/ecdsa_account_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/ecdsa_account_contract/src/main.nr @@ -72,7 +72,7 @@ contract EcdsaAccount { // Verify payload signature using Ethereum's signing scheme // Note that noir expects the hash of the message/challenge as input to the ECDSA verification. - let hashed_message: [u8; 32] = std::hash::sha256(message_field.to_be_bytes(32)); + let hashed_message: [u8; 32] = std::hash::sha256(message_field.to_be_32_bytes()); let verification = std::ecdsa_secp256k1::verify_signature(public_key.x, public_key.y, signature, hashed_message); assert(verification == true); diff --git a/noir/acvm-repo/acir/codegen/acir.cpp b/noir/acvm-repo/acir/codegen/acir.cpp index 0fc84d47a0f..4c6e31d1314 100644 --- a/noir/acvm-repo/acir/codegen/acir.cpp +++ b/noir/acvm-repo/acir/codegen/acir.cpp @@ -159,15 +159,6 @@ namespace Circuit { struct BlackBoxOp { - struct Sha256 { - Circuit::HeapVector message; - Circuit::HeapArray output; - - friend bool operator==(const Sha256&, const Sha256&); - std::vector bincodeSerialize() const; - static Sha256 bincodeDeserialize(std::vector); - }; - struct Blake2s { Circuit::HeapVector message; Circuit::HeapArray output; @@ -361,7 +352,7 @@ namespace Circuit { static Sha256Compression bincodeDeserialize(std::vector); }; - std::variant value; + std::variant value; friend bool operator==(const BlackBoxOp&, const BlackBoxOp&); std::vector bincodeSerialize() const; @@ -654,15 +645,6 @@ namespace Circuit { static RANGE bincodeDeserialize(std::vector); }; - struct SHA256 { - std::vector inputs; - std::vector outputs; - - friend bool operator==(const SHA256&, const SHA256&); - std::vector bincodeSerialize() const; - static SHA256 bincodeDeserialize(std::vector); - }; - struct Blake2s { std::vector inputs; std::vector outputs; @@ -877,7 +859,7 @@ namespace Circuit { static Sha256Compression bincodeDeserialize(std::vector); }; - std::variant value; + std::variant value; friend bool operator==(const BlackBoxFuncCall&, const BlackBoxFuncCall&); std::vector bincodeSerialize() const; @@ -2017,47 +1999,6 @@ Circuit::BlackBoxFuncCall::RANGE serde::Deserializable BlackBoxFuncCall::SHA256::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } - - inline BlackBoxFuncCall::SHA256 BlackBoxFuncCall::SHA256::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - -} // end of namespace Circuit - -template <> -template -void serde::Serializable::serialize(const Circuit::BlackBoxFuncCall::SHA256 &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.inputs, serializer); - serde::Serializable::serialize(obj.outputs, serializer); -} - -template <> -template -Circuit::BlackBoxFuncCall::SHA256 serde::Deserializable::deserialize(Deserializer &deserializer) { - Circuit::BlackBoxFuncCall::SHA256 obj; - obj.inputs = serde::Deserializable::deserialize(deserializer); - obj.outputs = serde::Deserializable::deserialize(deserializer); - return obj; -} - namespace Circuit { inline bool operator==(const BlackBoxFuncCall::Blake2s &lhs, const BlackBoxFuncCall::Blake2s &rhs) { @@ -3036,47 +2977,6 @@ Circuit::BlackBoxOp serde::Deserializable::deserialize(Dese return obj; } -namespace Circuit { - - inline bool operator==(const BlackBoxOp::Sha256 &lhs, const BlackBoxOp::Sha256 &rhs) { - if (!(lhs.message == rhs.message)) { return false; } - if (!(lhs.output == rhs.output)) { return false; } - return true; - } - - inline std::vector BlackBoxOp::Sha256::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } - - inline BlackBoxOp::Sha256 BlackBoxOp::Sha256::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - -} // end of namespace Circuit - -template <> -template -void serde::Serializable::serialize(const Circuit::BlackBoxOp::Sha256 &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.message, serializer); - serde::Serializable::serialize(obj.output, serializer); -} - -template <> -template -Circuit::BlackBoxOp::Sha256 serde::Deserializable::deserialize(Deserializer &deserializer) { - Circuit::BlackBoxOp::Sha256 obj; - obj.message = serde::Deserializable::deserialize(deserializer); - obj.output = serde::Deserializable::deserialize(deserializer); - return obj; -} - namespace Circuit { inline bool operator==(const BlackBoxOp::Blake2s &lhs, const BlackBoxOp::Blake2s &rhs) { diff --git a/noir/acvm-repo/acir/src/circuit/black_box_functions.rs b/noir/acvm-repo/acir/src/circuit/black_box_functions.rs index 0a7ee244a5e..e634a847318 100644 --- a/noir/acvm-repo/acir/src/circuit/black_box_functions.rs +++ b/noir/acvm-repo/acir/src/circuit/black_box_functions.rs @@ -15,8 +15,6 @@ pub enum BlackBoxFunc { XOR, /// Range constraint to ensure that a [`FieldElement`][acir_field::FieldElement] can be represented in a specified number of bits. RANGE, - /// Calculates the SHA256 hash of the inputs. - SHA256, /// Calculates the Blake2s hash of the inputs. Blake2s, /// Calculates the Blake3 hash of the inputs. @@ -74,7 +72,6 @@ impl std::fmt::Display for BlackBoxFunc { impl BlackBoxFunc { pub fn name(&self) -> &'static str { match self { - BlackBoxFunc::SHA256 => "sha256", BlackBoxFunc::SchnorrVerify => "schnorr_verify", BlackBoxFunc::Blake2s => "blake2s", BlackBoxFunc::Blake3 => "blake3", @@ -103,7 +100,6 @@ impl BlackBoxFunc { pub fn lookup(op_name: &str) -> Option { match op_name { - "sha256" => Some(BlackBoxFunc::SHA256), "schnorr_verify" => Some(BlackBoxFunc::SchnorrVerify), "blake2s" => Some(BlackBoxFunc::Blake2s), "blake3" => Some(BlackBoxFunc::Blake3), diff --git a/noir/acvm-repo/acir/src/circuit/opcodes/black_box_function_call.rs b/noir/acvm-repo/acir/src/circuit/opcodes/black_box_function_call.rs index f73417a4b5b..bf43b6405e4 100644 --- a/noir/acvm-repo/acir/src/circuit/opcodes/black_box_function_call.rs +++ b/noir/acvm-repo/acir/src/circuit/opcodes/black_box_function_call.rs @@ -31,10 +31,6 @@ pub enum BlackBoxFuncCall { RANGE { input: FunctionInput, }, - SHA256 { - inputs: Vec, - outputs: Vec, - }, Blake2s { inputs: Vec, outputs: Vec, @@ -178,7 +174,6 @@ impl BlackBoxFuncCall { BlackBoxFuncCall::AND { .. } => BlackBoxFunc::AND, BlackBoxFuncCall::XOR { .. } => BlackBoxFunc::XOR, BlackBoxFuncCall::RANGE { .. } => BlackBoxFunc::RANGE, - BlackBoxFuncCall::SHA256 { .. } => BlackBoxFunc::SHA256, BlackBoxFuncCall::Blake2s { .. } => BlackBoxFunc::Blake2s, BlackBoxFuncCall::Blake3 { .. } => BlackBoxFunc::Blake3, BlackBoxFuncCall::SchnorrVerify { .. } => BlackBoxFunc::SchnorrVerify, @@ -209,8 +204,7 @@ impl BlackBoxFuncCall { pub fn get_inputs_vec(&self) -> Vec { match self { - BlackBoxFuncCall::SHA256 { inputs, .. } - | BlackBoxFuncCall::Blake2s { inputs, .. } + BlackBoxFuncCall::Blake2s { inputs, .. } | BlackBoxFuncCall::Blake3 { inputs, .. } | BlackBoxFuncCall::Keccak256 { inputs, .. } | BlackBoxFuncCall::Keccakf1600 { inputs, .. } @@ -307,8 +301,7 @@ impl BlackBoxFuncCall { pub fn get_outputs_vec(&self) -> Vec { match self { - BlackBoxFuncCall::SHA256 { outputs, .. } - | BlackBoxFuncCall::Blake2s { outputs, .. } + BlackBoxFuncCall::Blake2s { outputs, .. } | BlackBoxFuncCall::Blake3 { outputs, .. } | BlackBoxFuncCall::Keccak256 { outputs, .. } | BlackBoxFuncCall::Keccakf1600 { outputs, .. } diff --git a/noir/acvm-repo/acvm/src/pwg/blackbox/mod.rs b/noir/acvm-repo/acvm/src/pwg/blackbox/mod.rs index 7146dff87e0..0a3bf95bc69 100644 --- a/noir/acvm-repo/acvm/src/pwg/blackbox/mod.rs +++ b/noir/acvm-repo/acvm/src/pwg/blackbox/mod.rs @@ -3,7 +3,7 @@ use acir::{ native_types::{Witness, WitnessMap}, FieldElement, }; -use acvm_blackbox_solver::{blake2s, blake3, keccak256, keccakf1600, sha256}; +use acvm_blackbox_solver::{blake2s, blake3, keccak256, keccakf1600}; use self::{bigint::BigIntSolver, pedersen::pedersen_hash}; @@ -69,14 +69,6 @@ pub(crate) fn solve( BlackBoxFuncCall::AND { lhs, rhs, output } => and(initial_witness, lhs, rhs, output), BlackBoxFuncCall::XOR { lhs, rhs, output } => xor(initial_witness, lhs, rhs, output), BlackBoxFuncCall::RANGE { input } => solve_range_opcode(initial_witness, input), - BlackBoxFuncCall::SHA256 { inputs, outputs } => solve_generic_256_hash_opcode( - initial_witness, - inputs, - None, - outputs, - sha256, - bb_func.get_black_box_func(), - ), BlackBoxFuncCall::Blake2s { inputs, outputs } => solve_generic_256_hash_opcode( initial_witness, inputs, diff --git a/noir/acvm-repo/blackbox_solver/Cargo.toml b/noir/acvm-repo/blackbox_solver/Cargo.toml index 7359cf307e4..486561ae339 100644 --- a/noir/acvm-repo/blackbox_solver/Cargo.toml +++ b/noir/acvm-repo/blackbox_solver/Cargo.toml @@ -18,7 +18,6 @@ thiserror.workspace = true blake2 = "0.10.6" blake3 = "1.5.0" -sha2 = "0.10.6" sha3 = "0.10.6" keccak = "0.1.4" k256 = { version = "0.11.0", features = [ diff --git a/noir/acvm-repo/blackbox_solver/src/lib.rs b/noir/acvm-repo/blackbox_solver/src/lib.rs index afba4eff17c..aaa4fd61aff 100644 --- a/noir/acvm-repo/blackbox_solver/src/lib.rs +++ b/noir/acvm-repo/blackbox_solver/src/lib.rs @@ -10,7 +10,6 @@ use acir::BlackBoxFunc; use blake2::digest::generic_array::GenericArray; use blake2::{Blake2s256, Digest}; -use sha2::Sha256; use sha3::Keccak256; use thiserror::Error; @@ -24,11 +23,6 @@ pub enum BlackBoxResolutionError { Failed(BlackBoxFunc, String), } -pub fn sha256(inputs: &[u8]) -> Result<[u8; 32], BlackBoxResolutionError> { - generic_hash_256::(inputs) - .map_err(|err| BlackBoxResolutionError::Failed(BlackBoxFunc::SHA256, err)) -} - pub fn blake2s(inputs: &[u8]) -> Result<[u8; 32], BlackBoxResolutionError> { generic_hash_256::(inputs) .map_err(|err| BlackBoxResolutionError::Failed(BlackBoxFunc::Blake2s, err)) diff --git a/noir/acvm-repo/brillig/src/black_box.rs b/noir/acvm-repo/brillig/src/black_box.rs index 29861d0fd84..29ad85402d7 100644 --- a/noir/acvm-repo/brillig/src/black_box.rs +++ b/noir/acvm-repo/brillig/src/black_box.rs @@ -5,11 +5,6 @@ use serde::{Deserialize, Serialize}; /// They are implemented as native functions in the VM. #[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)] pub enum BlackBoxOp { - /// Calculates the SHA256 hash of the inputs. - Sha256 { - message: HeapVector, - output: HeapArray, - }, /// Calculates the Blake2s hash of the inputs. Blake2s { message: HeapVector, diff --git a/noir/acvm-repo/brillig_vm/src/black_box.rs b/noir/acvm-repo/brillig_vm/src/black_box.rs index 04aa2bcf9af..f7e84b5f34a 100644 --- a/noir/acvm-repo/brillig_vm/src/black_box.rs +++ b/noir/acvm-repo/brillig_vm/src/black_box.rs @@ -2,7 +2,7 @@ use acir::brillig::{BlackBoxOp, HeapArray, HeapVector, Value}; use acir::{BlackBoxFunc, FieldElement}; use acvm_blackbox_solver::{ blake2s, blake3, ecdsa_secp256k1_verify, ecdsa_secp256r1_verify, keccak256, keccakf1600, - sha256, BlackBoxFunctionSolver, BlackBoxResolutionError, + BlackBoxFunctionSolver, BlackBoxResolutionError, }; use crate::Memory; @@ -36,12 +36,6 @@ pub(crate) fn evaluate_black_box( memory: &mut Memory, ) -> Result<(), BlackBoxResolutionError> { match op { - BlackBoxOp::Sha256 { message, output } => { - let message = to_u8_vec(read_heap_vector(memory, message)); - let bytes = sha256(message.as_slice())?; - memory.write_slice(memory.read_ref(output.pointer), &to_value_vec(&bytes)); - Ok(()) - } BlackBoxOp::Blake2s { message, output } => { let message = to_u8_vec(read_heap_vector(memory, message)); let bytes = blake2s(message.as_slice())?; @@ -191,7 +185,6 @@ pub(crate) fn evaluate_black_box( fn black_box_function_from_op(op: &BlackBoxOp) -> BlackBoxFunc { match op { - BlackBoxOp::Sha256 { .. } => BlackBoxFunc::SHA256, BlackBoxOp::Blake2s { .. } => BlackBoxFunc::Blake2s, BlackBoxOp::Blake3 { .. } => BlackBoxFunc::Blake3, BlackBoxOp::Keccak256 { .. } => BlackBoxFunc::Keccak256, @@ -222,35 +215,4 @@ mod test { black_box::{evaluate_black_box, to_u8_vec, to_value_vec}, DummyBlackBoxSolver, HeapArray, HeapVector, Memory, }; - - #[test] - fn sha256() { - let message: Vec = b"hello world".to_vec(); - let message_length = message.len(); - - let mut memory = Memory::default(); - let message_pointer = 3; - let result_pointer = message_pointer + message_length; - memory.write(MemoryAddress(0), message_pointer.into()); - memory.write(MemoryAddress(1), message_length.into()); - memory.write(MemoryAddress(2), result_pointer.into()); - memory.write_slice(MemoryAddress(message_pointer), to_value_vec(&message).as_slice()); - - let op = BlackBoxOp::Sha256 { - message: HeapVector { pointer: 0.into(), size: 1.into() }, - output: HeapArray { pointer: 2.into(), size: 32 }, - }; - - evaluate_black_box(&op, &DummyBlackBoxSolver, &mut memory).unwrap(); - - let result = memory.read_slice(MemoryAddress(result_pointer), 32); - - assert_eq!( - to_u8_vec(result), - vec![ - 185, 77, 39, 185, 147, 77, 62, 8, 165, 46, 82, 215, 218, 125, 171, 250, 196, 132, - 239, 227, 122, 83, 128, 238, 144, 136, 247, 172, 226, 239, 205, 233 - ] - ); - } } diff --git a/noir/compiler/noirc_evaluator/src/brillig/brillig_gen/brillig_black_box.rs b/noir/compiler/noirc_evaluator/src/brillig/brillig_gen/brillig_black_box.rs index dfe23b45034..0782742dca4 100644 --- a/noir/compiler/noirc_evaluator/src/brillig/brillig_gen/brillig_black_box.rs +++ b/noir/compiler/noirc_evaluator/src/brillig/brillig_gen/brillig_black_box.rs @@ -15,19 +15,6 @@ pub(crate) fn convert_black_box_call( function_results: &[BrilligVariable], ) { match bb_func { - BlackBoxFunc::SHA256 => { - if let ([message], [BrilligVariable::BrilligArray(result_array)]) = - (function_arguments, function_results) - { - let message_vector = convert_array_or_vector(brillig_context, message, bb_func); - brillig_context.black_box_op_instruction(BlackBoxOp::Sha256 { - message: message_vector.to_heap_vector(), - output: result_array.to_heap_array(), - }); - } else { - unreachable!("ICE: SHA256 expects one array argument and one array result") - } - } BlackBoxFunc::Blake2s => { if let ([message], [BrilligVariable::BrilligArray(result_array)]) = (function_arguments, function_results) diff --git a/noir/compiler/noirc_evaluator/src/brillig/brillig_ir/debug_show.rs b/noir/compiler/noirc_evaluator/src/brillig/brillig_ir/debug_show.rs index dd57f0c4426..87720b96554 100644 --- a/noir/compiler/noirc_evaluator/src/brillig/brillig_ir/debug_show.rs +++ b/noir/compiler/noirc_evaluator/src/brillig/brillig_ir/debug_show.rs @@ -359,9 +359,6 @@ impl DebugShow { /// Debug function for black_box_op pub(crate) fn black_box_op_instruction(&self, op: &BlackBoxOp) { match op { - BlackBoxOp::Sha256 { message, output } => { - debug_println!(self.enable_debug_trace, " SHA256 {} -> {}", message, output); - } BlackBoxOp::Keccak256 { message, output } => { debug_println!(self.enable_debug_trace, " KECCAK256 {} -> {}", message, output); } diff --git a/noir/compiler/noirc_evaluator/src/ssa/acir_gen/acir_ir/generated_acir.rs b/noir/compiler/noirc_evaluator/src/ssa/acir_gen/acir_ir/generated_acir.rs index 1d05e998b13..98bd294f92e 100644 --- a/noir/compiler/noirc_evaluator/src/ssa/acir_gen/acir_ir/generated_acir.rs +++ b/noir/compiler/noirc_evaluator/src/ssa/acir_gen/acir_ir/generated_acir.rs @@ -163,7 +163,6 @@ impl GeneratedAcir { BlackBoxFuncCall::XOR { lhs: inputs[0][0], rhs: inputs[1][0], output: outputs[0] } } BlackBoxFunc::RANGE => BlackBoxFuncCall::RANGE { input: inputs[0][0] }, - BlackBoxFunc::SHA256 => BlackBoxFuncCall::SHA256 { inputs: inputs[0].clone(), outputs }, BlackBoxFunc::Blake2s => { BlackBoxFuncCall::Blake2s { inputs: inputs[0].clone(), outputs } } @@ -582,7 +581,6 @@ fn black_box_func_expected_input_size(name: BlackBoxFunc) -> Option { // All of the hash/cipher methods will take in a // variable number of inputs. BlackBoxFunc::Keccak256 - | BlackBoxFunc::SHA256 | BlackBoxFunc::Blake2s | BlackBoxFunc::Blake3 | BlackBoxFunc::PedersenCommitment @@ -635,10 +633,7 @@ fn black_box_expected_output_size(name: BlackBoxFunc) -> Option { BlackBoxFunc::AND | BlackBoxFunc::XOR => Some(1), // 32 byte hash algorithms - BlackBoxFunc::Keccak256 - | BlackBoxFunc::SHA256 - | BlackBoxFunc::Blake2s - | BlackBoxFunc::Blake3 => Some(32), + BlackBoxFunc::Keccak256 | BlackBoxFunc::Blake2s | BlackBoxFunc::Blake3 => Some(32), BlackBoxFunc::Keccakf1600 => Some(25), // The permutation returns a fixed number of outputs, equals to the inputs length which depends on the proving system implementation. diff --git a/noir/compiler/noirc_evaluator/src/ssa/ir/instruction/call.rs b/noir/compiler/noirc_evaluator/src/ssa/ir/instruction/call.rs index 4217a3d4710..c7745344536 100644 --- a/noir/compiler/noirc_evaluator/src/ssa/ir/instruction/call.rs +++ b/noir/compiler/noirc_evaluator/src/ssa/ir/instruction/call.rs @@ -400,7 +400,6 @@ fn simplify_black_box_func( dfg: &mut DataFlowGraph, ) -> SimplifyResult { match bb_func { - BlackBoxFunc::SHA256 => simplify_hash(dfg, arguments, acvm::blackbox_solver::sha256), BlackBoxFunc::Blake2s => simplify_hash(dfg, arguments, acvm::blackbox_solver::blake2s), BlackBoxFunc::Blake3 => simplify_hash(dfg, arguments, acvm::blackbox_solver::blake3), BlackBoxFunc::Keccakf1600 => SimplifyResult::None, //TODO(Guillaume) diff --git a/noir/noir_stdlib/src/field.nr b/noir/noir_stdlib/src/field.nr index 66fb50119f9..1b71c762ed7 100644 --- a/noir/noir_stdlib/src/field.nr +++ b/noir/noir_stdlib/src/field.nr @@ -48,6 +48,14 @@ impl Field { self.__to_be_radix(radix, result_len) } + pub fn to_le_32_bytes(self: Self) -> [u8;32]{ + let bytes = self.to_le_bytes(32); + let mut result = [0;32]; + for i in 0..32 { + result[i] = bytes[i]; + } + result + } // decompose `_self` into a `_result_len` vector over the `_radix` basis diff --git a/noir/noir_stdlib/src/hash.nr b/noir/noir_stdlib/src/hash.nr index cc864039a90..886e8fa717b 100644 --- a/noir/noir_stdlib/src/hash.nr +++ b/noir/noir_stdlib/src/hash.nr @@ -1,11 +1,12 @@ mod poseidon; mod mimc; -#[foreign(sha256)] // docs:start:sha256 pub fn sha256(input: [u8; N]) -> [u8; 32] // docs:end:sha256 -{} +{ + crate::sha256::digest(input) +} #[foreign(blake2s)] // docs:start:blake2s From f81d1985cea9e6ec8ae2ad95bd5d751515a2cbb4 Mon Sep 17 00:00:00 2001 From: guipublic Date: Tue, 13 Feb 2024 13:14:02 +0000 Subject: [PATCH 02/98] fix test case --- .../cpp/src/barretenberg/dsl/acir_format/acir_format.test.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.test.cpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.test.cpp index d911b8fe47c..d876bbcf6db 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.test.cpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.test.cpp @@ -307,7 +307,6 @@ TEST_F(AcirFormatTests, TestSchnorrVerifySmallRange) .public_inputs = {}, .logic_constraints = {}, .range_constraints = range_constraints, - , .sha256_compression = {}, .schnorr_constraints = { schnorr_constraint }, .ecdsa_k1_constraints = {}, From 076033ed60944820cc3596958068339c07fe9e83 Mon Sep 17 00:00:00 2001 From: guipublic Date: Tue, 13 Feb 2024 13:26:30 +0000 Subject: [PATCH 03/98] remove sha256 from acvm_js --- noir/acvm-repo/acvm_js/src/black_box_solvers.rs | 6 ------ 1 file changed, 6 deletions(-) diff --git a/noir/acvm-repo/acvm_js/src/black_box_solvers.rs b/noir/acvm-repo/acvm_js/src/black_box_solvers.rs index fc0e3b28ebf..6f614cf60d3 100644 --- a/noir/acvm-repo/acvm_js/src/black_box_solvers.rs +++ b/noir/acvm-repo/acvm_js/src/black_box_solvers.rs @@ -22,12 +22,6 @@ pub fn xor(lhs: JsString, rhs: JsString) -> JsString { field_element_to_js_string(&result) } -/// Calculates the SHA256 hash of the input bytes -#[wasm_bindgen] -pub fn sha256(inputs: &[u8]) -> Vec { - acvm::blackbox_solver::sha256(inputs).unwrap().into() -} - /// Calculates the Blake2s256 hash of the input bytes #[wasm_bindgen] pub fn blake2s256(inputs: &[u8]) -> Vec { From d6c8d447d91f83766ec4053fef88433d4c0f233a Mon Sep 17 00:00:00 2001 From: guipublic Date: Tue, 13 Feb 2024 13:34:01 +0000 Subject: [PATCH 04/98] fix the build for acvm-js --- noir/acvm-repo/acvm_js/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/noir/acvm-repo/acvm_js/src/lib.rs b/noir/acvm-repo/acvm_js/src/lib.rs index 88afd1767c9..e22d4ce47d7 100644 --- a/noir/acvm-repo/acvm_js/src/lib.rs +++ b/noir/acvm-repo/acvm_js/src/lib.rs @@ -19,7 +19,7 @@ cfg_if::cfg_if! { mod js_execution_error; mod black_box_solvers; - pub use black_box_solvers::{and, xor, sha256, blake2s256, keccak256, ecdsa_secp256k1_verify, ecdsa_secp256r1_verify}; + pub use black_box_solvers::{and, xor, blake2s256, keccak256, ecdsa_secp256k1_verify, ecdsa_secp256r1_verify}; pub use build_info::build_info; pub use compression::{compress_witness, decompress_witness}; pub use execute::{execute_circuit, execute_circuit_with_black_box_solver, create_black_box_solver}; From 4df681017667cba5d0bf759eda302132991e7a44 Mon Sep 17 00:00:00 2001 From: guipublic Date: Tue, 13 Feb 2024 13:49:46 +0000 Subject: [PATCH 05/98] fix for ecdsa account contract --- noir/noir_stdlib/src/field.nr | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/noir/noir_stdlib/src/field.nr b/noir/noir_stdlib/src/field.nr index 1b71c762ed7..a73d9fd5f5c 100644 --- a/noir/noir_stdlib/src/field.nr +++ b/noir/noir_stdlib/src/field.nr @@ -57,6 +57,14 @@ impl Field { result } + pub fn to_be_32_bytes(self: Self) -> [u8;32]{ + let bytes = self.to_be_bytes(32); + let mut result = [0;32]; + for i in 0..32 { + result[i] = bytes[i]; + } + result + } // decompose `_self` into a `_result_len` vector over the `_radix` basis // `_radix` must be less than 256 From 69318e52f2ea4d762cecb55791824c7d2a59b908 Mon Sep 17 00:00:00 2001 From: guipublic Date: Tue, 13 Feb 2024 17:31:42 +0000 Subject: [PATCH 06/98] remove sha256 test case from acvm_js --- .../acvm_js/test/browser/black_box_solvers.test.ts | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/noir/acvm-repo/acvm_js/test/browser/black_box_solvers.test.ts b/noir/acvm-repo/acvm_js/test/browser/black_box_solvers.test.ts index 3c54fe8e38f..6490ab959e1 100644 --- a/noir/acvm-repo/acvm_js/test/browser/black_box_solvers.test.ts +++ b/noir/acvm-repo/acvm_js/test/browser/black_box_solvers.test.ts @@ -6,7 +6,6 @@ import initACVM, { ecdsa_secp256r1_verify, initLogLevel, keccak256, - sha256, xor, } from '@noir-lang/acvm_js'; @@ -34,16 +33,6 @@ it('successfully calculates the bitwise XOR of two fields', async () => { } }); -it('successfully calculates the sha256 hash', async () => { - const { sha256_test_cases } = await import('../shared/black_box_solvers'); - - for (const testCase of sha256_test_cases) { - const [preimage, expectedResult] = testCase; - const hash = sha256(preimage); - hash.forEach((value, index) => expect(value).to.be.eq(expectedResult.at(index))); - } -}); - it('successfully calculates the blake2s256 hash', async () => { const { blake2s256_test_cases } = await import('../shared/black_box_solvers'); From 8161122cfd67ca35e7364bed251b8ba524295828 Mon Sep 17 00:00:00 2001 From: guipublic Date: Tue, 13 Feb 2024 17:58:24 +0000 Subject: [PATCH 07/98] remove sha256 from noir_js import --- noir/tooling/noir_js/src/index.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/noir/tooling/noir_js/src/index.ts b/noir/tooling/noir_js/src/index.ts index bacb391a464..bc1f41beb39 100644 --- a/noir/tooling/noir_js/src/index.ts +++ b/noir/tooling/noir_js/src/index.ts @@ -7,7 +7,6 @@ export { ecdsa_secp256k1_verify, keccak256, blake2s256, - sha256, xor, and, } from '@noir-lang/acvm_js'; From 8284f9f5a4fe17b41e4a2a2de77c207bdc783dfe Mon Sep 17 00:00:00 2001 From: guipublic Date: Thu, 15 Feb 2024 09:39:24 +0000 Subject: [PATCH 08/98] fix test case --- .../barretenberg/dsl/acir_format/poseidon2_constraint.test.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/poseidon2_constraint.test.cpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/poseidon2_constraint.test.cpp index a7b02619734..32e118942c5 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/poseidon2_constraint.test.cpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/poseidon2_constraint.test.cpp @@ -34,7 +34,6 @@ TEST_F(Poseidon2Tests, TestPoseidon2Permutation) .public_inputs = {}, .logic_constraints = {}, .range_constraints = {}, - .sha256_constraints = {}, .sha256_compression = {}, .schnorr_constraints = {}, .ecdsa_k1_constraints = {}, From 261208bfc3f4a83033b90ea7749890fa394db6c5 Mon Sep 17 00:00:00 2001 From: guipublic Date: Fri, 15 Mar 2024 08:52:44 +0000 Subject: [PATCH 09/98] fix the build --- noir/noir-repo/acvm-repo/blackbox_solver/src/hash.rs | 5 ----- 1 file changed, 5 deletions(-) diff --git a/noir/noir-repo/acvm-repo/blackbox_solver/src/hash.rs b/noir/noir-repo/acvm-repo/blackbox_solver/src/hash.rs index ac56029b436..f73b28ebeb8 100644 --- a/noir/noir-repo/acvm-repo/blackbox_solver/src/hash.rs +++ b/noir/noir-repo/acvm-repo/blackbox_solver/src/hash.rs @@ -14,11 +14,6 @@ fn generic_hash_256(message: &[u8]) -> Result<[u8; 32], String> { Ok(output_bytes) } -pub fn sha256(inputs: &[u8]) -> Result<[u8; 32], BlackBoxResolutionError> { - generic_hash_256::(inputs) - .map_err(|err| BlackBoxResolutionError::Failed(BlackBoxFunc::SHA256, err)) -} - pub fn blake2s(inputs: &[u8]) -> Result<[u8; 32], BlackBoxResolutionError> { generic_hash_256::(inputs) .map_err(|err| BlackBoxResolutionError::Failed(BlackBoxFunc::Blake2s, err)) From 3c24cadbc6e7a020528b3bfde83e3331c464f7dc Mon Sep 17 00:00:00 2001 From: guipublic Date: Fri, 15 Mar 2024 09:03:21 +0000 Subject: [PATCH 10/98] fix the build(2) --- noir/noir-repo/acvm-repo/blackbox_solver/src/hash.rs | 1 - noir/noir-repo/acvm-repo/blackbox_solver/src/lib.rs | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/noir/noir-repo/acvm-repo/blackbox_solver/src/hash.rs b/noir/noir-repo/acvm-repo/blackbox_solver/src/hash.rs index f73b28ebeb8..d4de5f9d5c8 100644 --- a/noir/noir-repo/acvm-repo/blackbox_solver/src/hash.rs +++ b/noir/noir-repo/acvm-repo/blackbox_solver/src/hash.rs @@ -1,7 +1,6 @@ use acir::BlackBoxFunc; use blake2::digest::generic_array::GenericArray; use blake2::{Blake2s256, Digest}; -use sha2::Sha256; use sha3::Keccak256; use crate::BlackBoxResolutionError; diff --git a/noir/noir-repo/acvm-repo/blackbox_solver/src/lib.rs b/noir/noir-repo/acvm-repo/blackbox_solver/src/lib.rs index dc798bdab32..fe82368e0b3 100644 --- a/noir/noir-repo/acvm-repo/blackbox_solver/src/lib.rs +++ b/noir/noir-repo/acvm-repo/blackbox_solver/src/lib.rs @@ -16,7 +16,7 @@ mod hash; pub use curve_specific_solver::{BlackBoxFunctionSolver, StubbedBlackBoxSolver}; pub use ecdsa::{ecdsa_secp256k1_verify, ecdsa_secp256r1_verify}; -pub use hash::{blake2s, blake3, keccak256, keccakf1600, sha256, sha256compression}; +pub use hash::{blake2s, blake3, keccak256, keccakf1600, sha256compression}; #[derive(Clone, PartialEq, Eq, Debug, Error)] pub enum BlackBoxResolutionError { From d3b162ea836b90c0b55d9ce3a955b24ddb911cf4 Mon Sep 17 00:00:00 2001 From: guipublic Date: Mon, 18 Mar 2024 15:47:24 +0000 Subject: [PATCH 11/98] Fix issue with conditional_1 test case --- .../compiler/noirc_evaluator/src/ssa/ir/instruction.rs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/noir/noir-repo/compiler/noirc_evaluator/src/ssa/ir/instruction.rs b/noir/noir-repo/compiler/noirc_evaluator/src/ssa/ir/instruction.rs index 0b6c7074e45..be04586cfba 100644 --- a/noir/noir-repo/compiler/noirc_evaluator/src/ssa/ir/instruction.rs +++ b/noir/noir-repo/compiler/noirc_evaluator/src/ssa/ir/instruction.rs @@ -241,7 +241,7 @@ impl Instruction { // In ACIR, a division with a false predicate outputs (0,0), so it cannot replace another instruction unless they have the same predicate bin.operator != BinaryOp::Div } - Cast(_, _) | Truncate { .. } | Not(_) | ArrayGet { .. } | ArraySet { .. } => true, + Cast(_, _) | Truncate { .. } | Not(_) => true, // These either have side-effects or interact with memory Constrain(..) @@ -250,7 +250,9 @@ impl Instruction { | Load { .. } | Store { .. } | IncrementRc { .. } - | RangeCheck { .. } => false, + | RangeCheck { .. } + | ArrayGet { .. } + | ArraySet { .. } => false, Call { func, .. } => match dfg[*func] { Value::Intrinsic(intrinsic) => !intrinsic.has_side_effects(), From 4b81f58f7e5a89bfa70e8bfc7cf4c579b6338ac8 Mon Sep 17 00:00:00 2001 From: guipublic Date: Mon, 18 Mar 2024 17:07:19 +0000 Subject: [PATCH 12/98] fix contract for sha256 --- .../noir-contracts/contracts/ecdsa_account_contract/src/main.nr | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/noir-projects/noir-contracts/contracts/ecdsa_account_contract/src/main.nr b/noir-projects/noir-contracts/contracts/ecdsa_account_contract/src/main.nr index 62066fb0678..cd2bd1d39a3 100644 --- a/noir-projects/noir-contracts/contracts/ecdsa_account_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/ecdsa_account_contract/src/main.nr @@ -78,7 +78,7 @@ contract EcdsaAccount { // Verify payload signature using Ethereum's signing scheme // Note that noir expects the hash of the message/challenge as input to the ECDSA verification. - let hashed_message: [u8; 32] = std::hash::sha256(outer_hash.to_be_bytes(32)); + let hashed_message: [u8; 32] = std::hash::sha256(outer_hash.to_be_32_bytes()); let verification = std::ecdsa_secp256k1::verify_signature(public_key.x, public_key.y, signature, hashed_message); assert(verification == true); From 6b44397f59ed037730c0b5bce54ca5ec9ddd5240 Mon Sep 17 00:00:00 2001 From: guipublic Date: Wed, 20 Mar 2024 14:56:16 +0000 Subject: [PATCH 13/98] fix merge from master --- .../src/barretenberg/dsl/acir_format/acir_to_constraint_buf.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_to_constraint_buf.hpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_to_constraint_buf.hpp index 85c1107013f..6302b98b80d 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_to_constraint_buf.hpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_to_constraint_buf.hpp @@ -129,7 +129,7 @@ void handle_blackbox_func_call(Program::Opcode::BlackBoxFuncCall const& arg, Aci .witness = arg.input.witness.value, .num_bits = arg.input.num_bits, }); - } else if constexpr (std::is_same_v) { + } else if constexpr (std::is_same_v) { af.sha256_compression.push_back(Sha256Compression{ .inputs = map(arg.inputs, [](auto& e) { From bb156a05ca7c302b57d3150b34c3921a00e725df Mon Sep 17 00:00:00 2001 From: guipublic Date: Wed, 20 Mar 2024 15:15:55 +0000 Subject: [PATCH 14/98] update test snapshots --- .../contract/__snapshots__/contract_class.test.ts.snap | 10 +++++----- .../src/gas-token/__snapshots__/index.test.ts.snap | 10 +++++----- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/yarn-project/circuits.js/src/contract/__snapshots__/contract_class.test.ts.snap b/yarn-project/circuits.js/src/contract/__snapshots__/contract_class.test.ts.snap index 8cfb5bcac13..bf383d073c3 100644 --- a/yarn-project/circuits.js/src/contract/__snapshots__/contract_class.test.ts.snap +++ b/yarn-project/circuits.js/src/contract/__snapshots__/contract_class.test.ts.snap @@ -9,18 +9,18 @@ exports[`ContractClass creates a contract class from a contract compilation arti "selector": { "value": 2381782501 }, - "bytecode": "0x1f8b08000000000000ffed9d779815c5b6f67b6040643b0398b3830915c56118e20cb03127cc2822220cc3080a0c51cc98250773468292b380802020869373f2243d1e4fbaf79e739efbc7fdeefd82dfeddabbd69d778aea61f6d8b579f7eceae7a9d9d56baa7bfdeaedd5d5a9baab20484fff0c5381ceb70cd399c18193fc3fa97f4bbfd9d435c67595bae42cc811ce1639c2d93247380b7384b3558e70b6ce11cec37284b34d8e701e1e23a7626b11d49fe2e66deb40d7b8191339a6e91139a069518e695a9c039ab60b72a38d6a9f239c1d7284f3c81ce13c2a47388fce11ce637284f3d81ce13c2e47388fcf11ce137284f3c41ce13c2947384fce11ce537284f3d41ce13c2d47384b7284b3638e709e9e239c67e408e79939c279568e709e1d236767e0eca47fcfd1bfe7eadff3f4af943d5fff5ea07fbbe83a16eaf90b155798d4439a32e37fddc2541ea6ee61ea61fcaf67987a85a97798fae8ff95e8ff5584a9324c7dc3d42f4cfdb50603c27451982e0ed32561ba344c9785e9f2305d11a62bc3745598ae0ed335611a18a66bc3745d98ae0fd30d61ba314c3785e9e6300d0ad32d61ba354c83c3745b9886182cb787696898ee08d3b030dd19a6e1611a11a6aa308d0c5375984685a9264c7785697498c684e9ee30dd13a6b1611a17a6f161aa0dd384304d0cd3a4304d0ed394304d0dd3bd619a16a6fbc2747f981e30347b304c0f85e9e1303d62704e0fd3a3617a2c4c8f87e989303d19a6a7c2f474989e09d38c30cd0cd3ac30cd0ed39c30cd0dd3bc30cd0fd382302d0cd3b3617a2e4ccf87e98530bd18a697c2f472985e09d3ab617a2d4caf87e98d30bda95964475814a6b7c2b4384c4bc2b4344ccbc2f47698de09d3f230ad08d3ca30ad0ad3ea30ad09d3da30ad0bd3fa306d08d3c6306d0ad3e630bd1ba62d61da1aa66d617a2f4cdbc3b4234c3bc3f47e9876856977983e08d39e30ed0dd3be307d18a6fd61fa284c1f87e993307d1aa66f85e9db61fa4e98be1ba6ef85e9fb86e63f08d30fc3f4a330fd58db7ea27f7faacbcafdbb9f85e9e73aff0bfdfb4bfdfb2bfdfb99b1ccafc3f41bc3f6db30fdceb0fd3e4c9febfc17faf70ffaf74bfdfb47fdfb95fefd93fefdb3fefd8bfefdabfefd9bfefd17fdfbaffaf7dff4efdff5ef3ff4ef3fc3b4b9633adf26a89b92414c6d54794dead98f88df29a83f292d5aeaffc96f89b617ea79f915ed5ae9f95686bdb59e6f6daca78d9e6f63d83be8f90e86fd283d7f94613f46cf1f63d88fd3f3c719f633f5fc99604f04706f58db95ada53615804de2b505d85a695b4bb0b596d581ed306d6b0536d9beadc176b8b61d06b6b6dad6066c096d3b5cb40cd311da960ce28a95d2116abd4571af573f2f2b8e9f77a45a6f3b47bcede3e71da5d6dbc101af8a8f23f5bada43dc1ca56d1dc076b4b61d09b663b4ed28b01dab6d4783ed386d3b066cc76bdbb1603b41db8e03db89da763cd84ed2b613c076b2b69d08b653b4ed24b09daa6d2783ed346d3b056c25da762ad874931b9c06b6d3b5ad046c67685b47b09da96da783ed2c6d3b036c676bdb996093f6f72cb0c9f9e2d9daa6da8ec30b60196d97762bb58cb4d9603b57da6bb09d276d35d83a4b3b0db6f3c1b7d82e80b6466c5db44dda2df5bf3e3a9f0ce2da4fca6ad47a2be25e6fb866b5debef1af37f5ccb15f50a77512fc548056fd753ec67e4d5dd177814ee247ec8590bf0aca4a39d1438e3dc2ae8e05953adfbf81e5fa18cb1543994a4bfd9341bcf5ef6bf0f435985b41de4dcc76ebe663b6d153c6313b18ca9ab127e741cd31660702878398ede963b6d153c6315b0365cdd89373e1e618b3b703878398ad7213b365a53e66d3f7cd82c01e7b723dd41c63760c70c41fb3dd7dcc367eca38661f87b266ecc93571738cd969c0117fccf6acf2e7068d9e328ed90550d68c3db93fd31c63f629e07010b335be9d6df49471ccbe0965cdd8937b85cd31669f038ef863b6b7a398ede66336483f030d027becc97debe618b38b8123fe981de9efcf367eca386677405933f6e4194a738cd9f53aaf9e33fc443f6738196c3fd5b6538037fed8aeeeee28b6cb7c6ca7fb8604813d46e5795e738ced0f745ec5f12fa03f82d87ea96d1dc1f62b6d3b1d6c9f69db19502f07fb4095df071a3d65bc0ffc06ca9ab12ccf969be33ef023e07010b3d53e661b3d651cb37f83b266ec493f87e618b3bf070e07315be363b6d153c631fb9f50d68cbd7374be39c6acf43555e70b5fe8f385f3c0f6076deb0cb62fb5ed7cb0fd51db2e00db57dad6056c7fd2b60bc1f6676d2b05db5fb4ad2bd8feaa6d6560fb9bb67503dbbf685b39d8fe55dbba83eddfb4ad07d8feae6d3dc1f60f6deb05b67f6a5b6f6d53fdf4a4ef959cb7b601fe6410efb6957e97b26e99ef9a05dfed0cdfedb2e8bb83e1bb83c5779903df09f0215381319f847c995b9ed262e0415fe5f1fbeaa6eade2d687cddcb81a7bb83ba27c0476378ba034f8ff87952fd7f7bc6bfded436ee66689a005fdda05ebd1cd4ab007cc9ba655efc15830ddbd65e16c6def1339615802f59b7ccf70646b1615b2fef5cc9fea38e879d0aea781dec4ba97322f127df2d138e72b04b992b3bd6b175d66c45f07f3ceef5306c8ee2321517e24bd62df3e2af08ead323fb8c658d65ec6e30ba6a230ac097acdbfbaedb0e92c7e3b8836b1d6b9b26be2bb2e0bbb7e1bbdcf08d6da74c0d1ddb7a0373ecd79cfad85619ff7a4bf1fa44ae0dc50f9e3fe0355c5c7542df726d287ec45e08f96b0beaca4a39d143da616157b12cdb12d9cde57a19cb1543990a4bfd9341bcf5af34782a0d66b54d2e8663a183fd211503150687cc9783769511da55807652e61cd0ce557bd6c7e091f91ec023ed584fe071754d14c5938debb183f9c67358bc7e96ffe37980abedd5d5609479dbf6ea0d8cb6731507d7330d9eab740746b1f5019e6e8e348bdaaedd487c3b8895547b243ee4dc5cf6df1e609732bdf50b75aaadbc1bda4a173182f1285363af79e3df4e65a96bf0ee19f0e0b673705dd5d5513c96e2fd9baf837863cd6c97ba1b5a45dde371d596773378645efc7966cfec993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367e667c6e749d86f4bcaf5206134fbbfb9bacf9ffafea15e97ac5f3dd7f93f4efb83959562ff18e907719e51e7422853d4a2aeecff87fe60e6732aec23d9c3ad76a96d89fd3193302ffeb0af156e4b86fe4e25b1f92e1be9ea799bea63adbea369f6fdec61d1d445ff67d4b4c0d014fbe39f6ff0a838ad6c59c7e6e2d95fa6cf22512bc9c7f96caf38b0c77afcdba5acde33eb1641fdf6038f33aefaef485b2dcfcb2b0cdf8550e6a41675db46fa56c918c3dd8ce5b0df8fac5b96390fec95c6badbeb6585a395b1fe9eb0ac943915dad4bd2dea3473d0569665da771d9f9bc77f1c4e3fc7ef96014f57e071d1ce383adf28c57d20eee7f866ff34db798c94c1be7d0efa5536d8df49fc7966cfec993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367e667563ce6b3567cbfb69c84314b7d1f52cf33e45b65b2fed4f7825bd4f975fd1c4e9e397536ea8cef8efeb3455dd9cd3a5f141cd8df216a5bbafa3e45d4b6147ff8ed197c16e4e2b96e01f892759759b4907c496cbed3cff15d8c0d21cff1bb19ba965b3475b5bfe23356d414f7d7ee060f3e1b8dfab64f996173d977282a2ec41fee4b6560933cbe1fed623be3b1c4ecd723fef0f9f577b4b6ed0357dbbeacd465bb81df4d490607c6377e4fe587d0f6fd58e7b10f07f61df9c2f27f991a7a4e2dfaa93a3bf8be666901ac4bb6afeddb9e03803526df5d715d053a0d30342884fce72deaca4a39292b5a0bbbda47e41b30c86e2ed7dd58ae18caf4b3d43f19c45b7ff35babfd0d66b54d7e0671f6051cff5db549fd22343a0f3492328ebfd968ed5f69f62bc476b4b5514696c56fd1fd15daa8a8fea3b66380ebe398acdb761c338f0b8de9e799effdb4fe0bda8bb8fb69fd17c410f6d30a8cf57786f50b57eb20fad82265fe9fb17ef39c5c96c17e60ffb39fc0f75cca743e9373f243757d653b27c7e5a2eaae98f13b68c9189931269005cf13a44c5badb56cb3ca08eede96658b229615adcc6f85150507eae7e63b6be97dbebf5117896bfc06b994390aeae2e6bc257d0ee8ea9b7249a893ca9759ea2a658e877ded449d4fc076c2fdf65ccbff656ae81c10c770bf28fe3aa7b6efc5c099043fe8fb12608dc97757f42de780e247ec85903fa7655d5929277a88d6c2aef611398f427673b90a63b9622833c052ff64106ffd2f32782e3298d5363905e2ec5ce887eeaaad1e10a15167d048cae03d45db77406df73a5cbdbf11752e85ef2f99e757789c7473de643f8f35efabd9ce113a1bfc788ed013dad984a5ac79bf508e9771f61bc677257a825f7c57c2d5b79bfb806e4998c7f38243e9dbc5776c95bfa83113fa64c177d49809d9f0ddc1f0dd218bbebde65e7326cd1d8c41907aff0cbf59aaa686ce4b715c0259ae0530ba18cb2111d4fff6f8c118717c0759ae2530ba383e64faedf39ec028cb1502a38b774b71fc8dc630e23786f1382f8c0ebe15dbb5a9df8ac57b7aad8191e99d4d7c36751830ba382f6eeabb7a783edf067e5d8d4bd42d03c6326094e50e074617f7c6f15aa6318c785d24cbb5054617cfb0321ddf09bf3d8ff7965d3236746c77dc17a52cd37b2f956e791a3cd740df0ec6354c6981f7190fa6455fb73c0d9efba06f07f7fd525ae0388307d3029f0dba18f73011d47f0e77301e7c7e29cb1d098c49478cfd33604c02e3ffdc2b06c6018e189319300e0046b11f0d8c0eeebfa6180764c088f72965b96380f162478c1765c0783130ca72c702a38b7ba909f0db18c64b8051963b0e182f75c47849068c9702a32c773c305ee688f1d20c182f034659ee0460bcdc11e36519305e0e8cb2dc89c0788523c6cb3360bc021865b99380f14a478c5764c0782530ca722703e3558e18afcc80f12a6094e54e01c6ab1d315e9501e3d5c028cb9d0a8cd73862bc3a03c66b8051963b0d18073a62bc2603c681c028cb9500e3b58e180766c0782d30ca721d81f13a478cd766c0781d30ca72a703e3f58e18afcb80f17a6094e5ce00c61b1c315e9f01e30dc028cb9d098c373a62bc2103c61b8151963b0b186f72c47863068c3701a32c773630deec88f1a60c186f06c69b2c8c831c31de9c01e3206094e5ce07c65be2674c5d4b0fca80f116e0b9357e9e9466b764c073ab5b9ed477f56eb1f8ba2d7e5fa96d3138687cdd6f039e21f1f3a4b6c56d19f00843312c879add1e3f634ab3211930de0e3c43e3e74969767b063c4341b3db2d9add113f634ab3a11930de013cc3e2e749697647063cc340b33b2c9add193f634ab3611930de093cc3e3e749697667063cc3833acdeeb46836227ec69466c333601c013c55f1f3a4341b91014f156836c2a2d9c8f819539a5565c0381278aae3e749693632039e6ad06ca445b351f133a634abce807114f0d4c4cf93d26c54063c35a0d9288b6677c5cf98d2ac2603c6bb806774fc3c29cdeeca80673468769745b331f133a6341b9d01e318e0b93b7e9e94666332e0b91b341b63d1ec1e478c7767c0788f8527eeef64df6df135ce51ddc7068dafbb3014c372d84f62bc23c67119308e0746590efb49d43a621c9f01632d30ca7209c78c0df593a805df13e2f79d6a976a83c6eb33c12d4f83fd24d0f744475a4c081aafc544b73c0df69340df931c69313168bc16938067b2032d12e0a3313cc2500ccb613f89298e182767c03805186539ec2731d511e3940c18a702a32c87fd24ee75c4383503c67b815196c37e12d31c31de9b01e3346094e5b09fc47d8e18a765c0781f30ca72d84fe27e478cf765c0783f30ca72d84fe201478cf767c0f80030ca72d84fe241478c0f64c0f82030ca72d84fe221478c0f66c0f81030ca72d84fe261478c0f65c0f83030ca72d84fe211478c0f67c0f80830ca72d84f62ba23c64732609c0e8cb21cf69378d411e3f40c181f0546590efb493ce688f1d10c181f034659ee1ec78c0d5dbf3cd6cc7d475dab3477df51d725cdddb78f731fe7f9e0dbc7b98ff37cf0ede3dcc7793ef8f671eee33c1f7cfb38f7719e0fbe7d9cfb38cf07df3ece7d9c33f97edc81ef04f890a9c0984f425e188a61b97b3c63b366449e92f8784ab1eee8eb0982ba3f61e129705477f4f52441dd8521d7181fcf01c67b7280d1eb98ee83d81446c5f394239e2733e0790a789e76c4f354063c4f03cf33f1f3a462eae90c7884a11896bb2707181fcf0146afa3d79189d1eb983f3a7a46cfe8193de3a160cc8536dc33e6443c96359551f1cc889f27a5d93319f0cc00cd64b95bdd3296359551f1cc8c9f27a5d98c0c78668266332c9a39602c6b2aa3e299153f4f4ab39919f0cc02cd665a3473c058d65446c5333b7e9e9466b332e0990d9acdb268e680b1aca98c8a674efc3c29cd6667c03307349b6dd1cc016359531915cfdcf879529acdc980672e6836c7a29903c6b2a6322a9e79f1f3a4349b9b01cf3cd06cae4533078c654d65543cf3e3e74969362f039ef9a0d93c8b660e18cb9acaa87816c4cf93d26c7e063c0b40b3f916cd5819efc901c6c77380d1b18e654d65543c0b1df12cc8806721f03ceb886761063ccf02cf73f1f3a462ead90c7884a11896bb2707181fcf0146afa3d79189d1eb983f3a7a46cfe81933637c220718fdb6f68cac8c0eaeaf1a7c87e6d966ee3bea1d9ae6ee3bea1d9ae6eedbc7b98ff37cf0ede3dcc7793ef8f671eee33c1f7cfb38f7719e0fbe7d9cfb38cf07df3ece7d9ce7836f1fe73ecef3c1b78f731fe7f9e0dbc7b98ff37cf0ede3dcc7793ef8f671eee33c1f7cfb38f7719e0fbe7d9cfb38cf07df3ece7d9ce7836f1fe73ecef3c1b78f731fe7f9e0dbc7b98ff37cf0ede3dcc7793ef8f671eee33c1f7cfb38f7719e0fbe7d9cfb38cf07df3ece7d9ce7836f1fe73ece997c3f1fbfefb24cbf31f33cf0b8f8e68da37a96aaf5bea0d7f5758cfa29ad5e34b47ad6d0aa18cabc00fabde840bf02f02beb9679f197297327026647becb54fb7238d45f7c3c6ee8a1fcbfe4a8ee516dfd4bcddc77545bdfdc7d47b5f5cdddb78f731fe7f9e0dbc7b98ff37cf0ede3dcc7398b6fccb70aeacedbe5fba76a1d2feb7ca19e97f24f805dca4c3e2cfddb3ef0fb900bdf7e1ff2c78a7cf0ede3dcc7793ef8f671eee33c1f7cfb38f7719e0fbe7d9cfb38cf07df3ece7d9ce7836f1fe73ecef3c1b78f73be382f86ff5766812730788206781690f14c25e3994dc6339a8c672819cf75643c1793f13c44c6534ec633818c672419cf2d643c5791f15c48c6d38f8c671a194f6f329e39643c7793f13c4dc6338c8ce706329e4bc9781e21e32923e39944c6338a8ce736329e6bc87892643cf793f1f424e339978c671c19cf5c329e73c8788693f13c43c67313194f31194f3b329ecbc9789e24e3b9808ca7828ce751329ef9643c53c878ee22e3b99d8ca7948ce75a329e2e643c1791f13c48c6d39d8c671e194f2d19cf0c329e2a329e41643ce791f15c49c6d3928ca72f19cf42329e7bc978fa90f18c21e3e94cc6730719cff5643c9790f13c4cc6d38d8c672219cf4c329e6a329ec1643c5793f1f427e3b98f8ca71719cf58329e4e643c7792f1dc48c6938def9966c27304194f1119cf65643c8f91f14c27e3e94ac633998c6716194f0d19cf10329e81643c03c8781e20e3e941c6339e8c670419cfcd643c4f91f1b427e3e940c67305194f01014f2238700c9304fcff79b0b53096559f7d9dd3b1eeffaf687b0b58e6559d6f6959f72b60936fc9be6a5916757a05ea92d4f9d26f36a574425f4998177f45c0f12a09cf15643c1dc878da93f13c45c6733319cf08329ef1643c3dc8781e20e31940c633908c6708194f0d19cf2c329ec9643c5dc978a693f13c46c67319194f1119cf11643ccf93f1dc48c67327194f27329eb1643cbdc878ee23e3e94fc6733519cf60329e6a329e99643c13c978ba91f13c4cc6730919cff5643c7790f17426e31943c6d3878ce75e329e85643c7dc9785a92f15c49c6731e19cf20329e2a329e19643cb5643cf3c878ba93f13c48c67311194f17329e6bc9784ac9786e27e3b98b8c670a19cf7c329e47c9782ac8782e20e379928ce772329e76643cc5643c3791f13c43c6339c8ce71c329eb9643ce3c878ce25e3e949c6733f194f928ce71a329edbc8784691f14c22e32923e379848ce752329e1bc8788691f13c4dc6733719cf1c329ede643cd3c878fa91f15c48c6731519cf2d643c23c9782690f19493f13c44c6733119cf75643c43c9784693f1cc26e3994ac6b3808ca7d2c2f3bc231e79df5dd62df3cf93f876b01d4ad57a5f7354a7d7f5ba5ae9f50abff82b8432d3dba67fd5fbe1b8ac7099df27c077735e078d5e775417d91e05c6f641df2f3bf22def68c9ba65fee566eebb9de1bb5d9ef8ee60f8ee9027be7d9cfb38cf07df3ece7d9ce7836f1fe73ece997c3bb83628c3efa4c95460cc27218fd70b2ebe2fe7a89ef5ae13bf8e513fa5d51b8656e6b5553194790df47bc3817eb66b4f99177f9932772260c6b82809e28d8b37e3af53996ab70e075ddf34f4c57a2d72a469d431645133f71d750c69eebea38e21cdddb78f731fe7f9e0dbc7b98ff37cf0ede3dcc73993efb7743ec6ebc652f4a19e2fcaf5c05be07789ce17c4e857ad6bb15e57a15eb7702c01bb94f9dff05cd3eff37e9f8fcbb73fb6f938cf07df3ece7d9ce7836f1fe73ecef3c1b78f731fe7f9e0dbc7b98ff37cf0cd1ce7665efa8b9f036caefaf347c56236de253894bea362b1b9fb8e8ac5e6eedbc7b98f7326df4b1df84e800f991aeae3b71478163be07154cfd4b38d65469d9e37ea540c65f018bfcc413d0bc0afac5be697018f4c95c0e3220e1ab3cd91670119cf54329ed9643ca3c9788692f15c47c6733119cf43643ce5643c13c8784692f1dc42c6731519cf85643cfdc878a691f1f426e39943c6733719cfd3643cc3c8786e20e3b9948ce711329e32329e49643ca3c8786e23e3b9868c2749c6733f194f4f329e73c978c691f1cc25e3194ec6f30c19cf4d643cc5643cedc8782e27e379928ce702329e0a329e47c978e693f14c21e3b98b8ce776329e52329e45643cd792f17421e3b9888ce741329eee643cf3c8786ac9786690f15491f10c22e3398f8ce74a329e96643c7dc9781692f1dc4bc6d3878c670c194f67329e3bc878ae27e3b9848ce761329e6e643c13c9786692f15493f10c26e379838ce76a329efe643cf791f1f422e3194bc6d3898ce74e329e1bc9788e20e32922e3b98c8ce731329ee9643c5dc9782693f1cc22e3a921e31942c633908c670019cf03643c3dc878c693f18c20e3b9998ce729329ef6643c1dc878ae20e32920e0490407befb9f80ffbf01367947fd79b0bdadf38bc1d6c2e2a3a5ce2f035ba1cecb3a0e0bd34b1d0f5c37eae4eabd7cf4958479f157041c6f93f05c41c6d3818ca73d19cf53643c3793f18c20e3194fc6d3838ce701329e01643c03c9788690f1d490f1cc22e3994cc6d3958c673a19cf63643c9791f11491f11c41c6732319cf9d643c9dc878c692f1f422e3b98f8ca73f19cfd5643c6f90f10c26e3a926e39949c633918ca71b19cfc3643c9790f15c4fc67307194f67329e31643c7dc878ee25e35948c6d3978ca72519cf95643ce791f10c22e3a922e39941c6534bc6338f8ca73b19cf83643c1791f17421e3b9968c6711194f2919cfed643c7791f14c21e3994fc6f328194f0519cf05643c4f92f15c4ec6d38e8ca7988ce726329e67c8788693f1cc25e31947c6732e194f4f329efbc97892643cd790f1dc46c6338a8c6712194f1919cf23643c9792f1dc40c6338c8ce769329ebbc978e690f1f426e39946c6d38f8ce742329eabc8786e21e31949c633818ca79c8ce721329e8bc978ae23e3194ac6339a8c673619cf54329e05643c95d9e12953efb64b5feb00b8704a427e19f02c72a08fa37a96e2770dbe8e71bd4aab770cadde30b42a86324b41bf771ce857007e65dd322ffe729159f13ca6f3b6ef403c46c228b6456e7952fbed6341fda9a1fdf61de071d1ae39aa676aff5a6ed4e9318bee52066375b9837adaf61d995f0edb21d79815cf933a2fac0928f72409a3d896b9e549ed5f4f06f5a786f6afe5c0e3a2fd7154cfd4feb5c2a8d39316dda50cc6ea0a07f5b4ed3b32bf02b643ae312b9ea7745e581350ee291246b1bde396a73c017596a9a1fd6b05f0b8687f1cd533b57fad34eaf49445772983b1bad2413d6dfb8eccaf84ede0993db38d59f1c8b31d614d40b9a74918c5b6dc294f796902ea2c5343edd84ae071d1ce3bd23dd58ead32eaf4b445772983b1baca413d6dfb8eccafb2f82e09e2d5627523b4586de1599d652dc45fa6cc4b7390d9ebec758e62f63a7b9da398bdce5ee72866afb3d7398ad9ebec758e62f63a7b9da398bdce5ee72866afb3d7398ad9ebec758e62f63a7b9da398bdce5ee72866afb3d7398ad9ebec758e62f63a7b9da398bdce5ee72866afb3d7594d5e67afb3d7d9eb1c07b3d7d9eb1cc5ec75f63a473133e8ac78e4db95c29a8072cf90308a6d855b9ed47b41cf04f5a702633e09f9d5c0b3d2813e8eea99ea43bec6a8d33316dda50cee5f6b1cd4d3b6efc8fc1ad80e9930afca4166af73d39815cf0c9d17d604949b41c228b6956e7952edd88ca0fed4503bb606785cb4f38eea996ac7d61a759a61d15dcae0feb5d6413d6dfb8eccaf85ede0993db38d59f1ccd479614d40b999248c625bed94a72cf57ee3cca0fed4503bb616785cb4f38e744fb563eb8c3acdb4e82e653056d739a8a76ddf91f975b01d32615e9583cc5e67af7314b3d7d9eb1cc5ec75f63a47317b9dbdce51cc5e67af7314b3d7d9eb1cc5ec75f63a47317b9dbdce51cc5e67af7314b3d7397f74563cb3745e5813506e1609a3d8d638e5e9967aee302ba83f35f4dc611df0b8782ee348f7d47387f5469d6659749732b87fad77504fdbbe23f3eb613b3477e65539c8ec63233bcc3e363c7314b38f0dcf1cc5ec63c3334731fbd8f0cc51cc3e363c7314b38f0dcf1cc5ec63c3334731fbd8f0cc51cc3e363c7314b38f0dcf1cc5ec63c3334731fbd8f0cc51cc3e363c7314b38f0dcf1cc5cc101b8a67b6ce0b6b02cacd266114db5ab73ca9ef1ecc0eea4f0df5db590f3ceb1ce8e3a89ea97e3b1b8c3acdb6e82e6570ffdae0a09eb67d47e637c076f0cc9ed9c6ac78e6e8bcb026a0dc1c1246b1ad73cb936ac7e604f5a786dab10dc0e3a29d7754cf543bb6d1a8d31c8bee52066375a3837adaf61d99df08dbc1337b661bb3e299abf3c29a8072734918c5b6de2d4faa1d9b1bd49f1a6ac736028f8b76de513d53edd826a34e732dba4b198cd54d0eea69db77647e136c07cfec996dcc8a679ece0b6b02cacd236114db06b73c6509a8b34c0db5639b80c7453befa89ea9766cb351a77916dda50cc6ea6607f5b4ed3b32bf19b643ae312b9ef93a2fac0928379f84516c1bddf2a4f6aff941fda9a1fd6b33f0b8687f1cd533b57fbd6bd469be45772983b1faae837adaf61d997f17b643ae312b9e053a2fac0928b78084516c9bdcf2a4f6af0541fda9a1fdeb5de071d1fe38aa676affda62d4698145772983b1bac5413d6dfb8ecc6f81ed906bcc8a67a1ce0b6b02ca2d2461141b1e2f163ae22932788a2c5a1c2adf4a8b0a9d3f42ff26e0ff15c0e8aa3d5c6830ca3cc6b8d88ab2a0593b83a79da1d9a1f4adb4a884bc9a707b550223c3f66a9705cd3a183c1d0ccd0ea56fa5455f9d6faf7f717bf5054686edd501781cb4cfe50983474d0d9d6f6c71ac8fa37aa6ce37b60676ddf1382465f0d8bdd5413d6de71232bf15b68367f6cc3666c53348e7853501e50691308a0daf53b6c5cf539e3078d4d4503bb6cdb13e8eea996ac7de0becba6f03dda50cc6ea7b0eea59007e65dd32ff1e6c874c9857e520b3d7b969cc8a67b0ce0b6b02ca0d266114db56e0d91e3f4f79c2e0515343edd876c7fa38aa67aa1ddb11d875df0eba4b19dcbf7638a86701f89575cbfc0ed80e9930afca4166af73d39815cf109d17d604941b42c228b6f7806767ec3ce9f18090474d0db5633b1debe3a69ee976ecfdc0aefb4ed05dcae0fef5be837a16805f59b7ccbf0fdbc1337b66cfec993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993d3337b3e219aaf3c29a8072434918c5b6037876c5ce937eee803c6a6ae8b9c32ec7fab8a967fab9c3eec0aefb2ed05dca60acee7650cf02f02beb96f9ddb01d3cb367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367f6cc9ed93373332b9e613a2fac0928378c84516cef03cf07f1f394270c1e3535f4dce103c7fa38aa67eab9c39ec0aefb07a0bb94c158dde3a09e05e057d62df37b603becf1cc9ed9c2ac7886ebbcb026a0dc701246b1ed069ebdb1f3a49f9f228f9a1a6ac7f63ad6c74d3dd3edd8bec0aefb5ed05dca60acee7350cf02f02beb96f97db01d32615e9583cc5e67af7314b3d7d9eb1cc5ec75f63a47317b9dbdce51cc5e67af7314b3d7d9eb1cc5ec75f63a47317b9dbdce51cc5e67af7314b3d7397f74563c553a2fac09285745c228b63dc0f361ec3cdd4a13068f9a0a8cf924e43f74ac8f9b7aa69f3bec0fecba7f08ba4b19dcbff63ba86701f89575cbfc7ed80ecd9d79550e32fbd8c80eb38f0dcf1cc5ec63c3334731fbd8f0cc51cc3e363c7314b38f0dcf1cc5ec63c3334731fbd8f0cc51cc3e363c7314b38f0dcf1cc5ec63c3334731fbd8f0cc51cc3e363c7314b38f0dcf1cc5ec63c333473133c486e2a9d679614d40b96a1246b1ed039e8fe2e7294f183c6a2a30e69390ffc8b13e8eea99eab7f37160d7fd23d05dcae0fef5b1837a16805f59b7cc7f0cdbc1337b661bb3e2a9d179614d40b91a1246b1ed079e4fe2e7294b183c6a6aa81dfbc4b13e8eea996ac73e0decba7f02ba4b198cd54f1dd4b300fccaba65fe53d80eb9c6ac7846ebbcb026a0dc681246b17d0c3c0ee22ec55364f0c8fc2704be9516b53a7f84fec5ed550b8c0cdbab280b9ab53378da199a1d4adf4a8b099057136eaf09c0c8b0bdda6541b30e064f0743b343e95b693151e7dbeb5fdc5e138191617b75c8826687b23d3c94fbf6a18c53aff9a1d3bce0106a5e7008352ff09a5369eee0f85286c7b20018704a42fe53e0f976fc3ca9fb729f66c0f36de0f956fc3c5d1dd5b354adf73bc01ed77a9556df35b4fad4d0aa18ca20c3771de857007e65dd322ffe3cb3678e62c6735b614d40b94f4818c5f62de071d16ea8ba5fa0d725eb6f15a6cf8eaef3ebe27909de2b6ea5d72b1ce2af10ca4c2ca92bfb3bcd5604ff97eda6eab3dfb0397a87b9abedb99dcc8bbfa2206bf76e1bbc978c5ab878de94e9717fbf85e7ebf8784a713f475ffb1cd53d93677ffb2c3c31d6bd6bd473cfbdf1d73dd57e74d1eb92f5ab7df4df8f76aa7939ee7bd27e7431ea5c08650696d495fd0f683f6c6d85eb7d53cec9cd7db34550d79e095789b69bcf84bed67629f71194c736a742ffe2fe59017575d52e46dd63c276d16cbb5d6a6f3e97347d17832e1f916a667b4e813a565ab82b09b8311eb3b99fc9ba6dcfc82a0d1dd934c36dfd9145c7be16eebe04dc8cfb755f434736cd0eb65f0fb2700f22e066dcaf07193ab26976b0fd7ab0857b300137e37e3dd8d0914db383edd7432cdc4308b819f7eb21868e6c9a1d6cbf1e6ae11e4ac0cdb85f0f357464d3ec60fbf5300bf730026ec6fd7a98a1239b6607dbaf875bb887137033eed7c383fa3ab26976b0fdbacac25d45c0cdb85f57193ab26976b0fdbadac25d4dc0cdb85f571b3ab26976b0fdbac6c25d43c0cdb85fd7183ab26976b0fd7ab4857b340137e37eddd87efbacfb75ad85bb96809b71bfae357464d3ec60fbf5040bf704026ec6fd7a82a1239b6607dbaf275ab827127033eed7130d1dd934b3edd78ede25ccf8ddc68f9dea931e63fae30c783e041e1731e5280e4a1df57349f54ddd6b68f5b1a1158eddb10ff473d017a6c16f12883fcfec993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367f6ccfcccf85d467cbe22e53e2261141b3e9372719f5fd5fd42bd2e597fab300d3cb6ceefbed8fd96951618fe92c021fe0aa1cc89a7d595bd41b31505076e371c8b1bb7e59ed8eb90de9666fccbbcf82b82faec051e07efe7a778f6193cfb2c5ae07ba7f1f82e1be946e3b252f5fd9dc383baedbcc7a80f6afa41ecfeeb6b5a6068fa8163df89a0fef614069c9290471e17cf861dd533d516ec36ea646a5c0c653a413d773ba86701f89575cbfc6ee091a905f0b88ac1c0e0092cfac85449c633958c673419cf99643c43c9788e27e3b98e8ce770329e8bc9781e22e32927e39940c633928ce734329e5bc8788e22e3b98a8ce742329e42329e7e643cd3c8787a93f1dc4dc6733619cf30329ef3c9784e24e3b9818c2741c6732919cf23643c65643c93c8784691f17424e3b98d8ce718329e6bc8785a93f124c978ee27e3e949c6732e19cf38329e73c8788693f19c4cc67313194f31194f3b329ecbc9781e25e3a920e3b9808c670a19cf5d643c6790f1dc4ec6534ac6731c19cfb5643c5dc8782e22e36943c6f320194f77329e5a329e2a329e53c9780691f19c47c6732419cf95643c2dc978fa92f1dc4bc6d3878c670c194f67329eb3c878ee20e339818ce77a329eb6643c9790f1ec25e379988ca71b19cf44329e6a329efd643c25643c83c9788e26e3b99a8ca715194f7f329efbc8787a91f18c25e3e944c6732719cf49643c3792f11c41c65344c6731919cf74329eae643c93c9786ac8784e27e31942c6732c19cf40329ec3c8780690f13c40c6d3838c673c19cf08329e53c8786e26e3694fc6d3818ce70a329e02029e4470e0b79812f0ff7d60936f067d08b61696f5c9736a29af8e8b8b3b1eb8ee1696757f6061409d76415d923a5ffacda6944ee82b09f3e2af08383e20e1b9828ca703194f7b329e9bc9784e21e31941c6339e8ca70719cf03643c03c8780e23e31948c6732c19cf10329ed3c9786ac8782693f17425e3994ec67319194f1119cf11643c3792f19c44c67327194f27329eb1643cbdc878ee23e3e94fc6d38a8ce76a329ea3c9780693f19490f1ec27e3a926e39948c6d38d8ce761329ebd643c9790f1b425e3b99e8ce704329e3bc878ce22e3e94cc633868ca70f19cfbd643c7dc9785a92f15c49c6732419cf79643c83c8784e25e3a922e3a925e3e94ec6f320194f1b329e8bc878ba90f15c4bc6731c194f2919cfed643c6790f1dc45c633858ce702329e0a329e47c9782e27e36947c6534cc6731319cfc9643cc3c978ce21e31947c6732e194f4f329efbc97892643cadc978ae21e339868ce736329e8e643ca3c8782691f19491f13c42c67329194f828ce706329e13c978ce27e31946c6733619cfdd643cbdc978a691f1f423e32924e3b9908ce72a329ea3c8786e21e3398d8c672419cf04329e72329e87c8782e26e3399c8ce73a329ee3c9788692f19c49c6339a8c672a194f25194f0b8307ffafde0ddbabf3f2eda042f8ff24ddb9bcbd5e97949167c4ea5ec5fb864dd577a7a3fabe1fd44d4998df09f515f6f781e77d473cbb0c1ed37711e42b41b31d864d316e77c4b8c36094f9edc028faed009e1d8e78761a3ca6ef22c8f705cdde336c8a719b23c6f70c4699df068ca2df7bc0f39e239eed068fe9bb08f28340b3ad864d316e71c4b8d56094f92dc028fa6d059ead8e78b6193ca6ef22c80f06cdde356c8a71b323c6770d4699df0c8ca2dfbbc0f3ae239e2d068fe9bb08f24340b34d864d316e74c4b8c96094f98dc028fa6d029e4d8e78361b3ca6ef22c80f05cd361836c5b8de11e3068351e6d703a3e8b701783638e2d968f098be8b203f0c345b67d814e35a478ceb0c46995f0b8ca2df3ae059e78867bdc163fa2e82fc70d06c8d61538cab1d31ae3118657e35308a7e6b80678d239eb5068fe9bb08f255a0d92ac3a618573a625c6530cafc4a6014fd5601cf2a473cab0d1ed37711e4ab41b315864d312e77c4b8c26094f9e5c028faad009e158e78561a3ca6ef22c8d78066ef1836c5f8b623c6770c46997f1b1845bf7780e71d473ccb0d1ed37711e4478366cb0c9b625cea887199c128f34b8151f45b063ccb1cf1bc6df098be8b205f0b9a2d316c8a71b123c62506a3cc2f0646d16f09f02c71c4b3d4e0317d17417e0268f69661538c8b1c31be6530cafc226014fdde029eb71cf12c36784cdf45909f089abd69d814e31b8e18df341865fe0d6014fdde049e371df12c32784cdf4590bf096cc2db076cafeb7c6fb0bda6f3bdc0f6aacef704db2b3adf036c2feb7c77b0bda4f3e5607b51e7bb81ed059d2f03dbf33adf156ccfe97c3fb03dabf3fdc1b650e793605ba0f303c0365fe72f02db3c9dbf186c7375fe12b0cdd1f94bc1365be72f03db2c9dbf1c6c3375fe0ab0cdd0f92bc1f68cce5f05b6a775fe6ab03da5f3d780ed499d1f08b62774fe5ab03daef3d781ed319dbf1e6cf7e8fc0d60bb55e76f04dbc73a7f33d83ed1f95bc0f6a9cedf06b66fe9fced60fbb6cedf01b6efe8fc9d60fbaece8f00dbf7747e24d8beaff3a3c0f6039dbf0b6c3fd4f93160fb91cedf0db61febfc58b0fd44e7c781eda73a3f1e6c3fd3f94960fbb9ce4f06db2f747e0ad87ea9f353c1f62b9dbf176c9fe9fc34b0fd5ae7ef03db6f74fe7eb0fd56e71f00dbef74fe41b0fd5ee71f02dbe73aff30d8bed0f947c0f6079d9f0eb62f75fe51b0fd51e7a55d53edec9f74be2488b79dfd2aa89b4ac0b7f85365feacf3ad8d32b26c2194395b772854cf38d4bb4bd20e4bbbac6cd20ebf0e3669875f039bb4c3af824ddae157c026edf0cb609376f825b0493bfc22d8a41d7e016cd20e3f0f3669879f039bb4c3cf822da9f30bc126edf002b0493b3c1f6cd20ecf039bb4c373c126edf01cb0493b3c1b6cd20ecf029bb4c333c126edf00cb0493bfc0cd8a41d7e1a6cd20e3f053669879f049bb4c34f804ddae1c7c126edf063609376f81eb0493b7c2bd8647ff90a6cd2367f0c36699b3f019bb4cd9f824ddae66f814ddae66f834ddae6ef804ddae6ef824ddae6ef814ddae6ef834ddae61f804ddae61f824ddae61f814ddae61f834ddae69f806dbcceff146cd236ff0c6cd236ff1c6cd236ff026cd236ff126cd236ff0a6cd2367f0636699b7f0d36699b7f0336699b7f0b36699b7f0736699b7f0f36699b3f079bb4cd5f804ddae63f80ed519d97b6ba0dd8e459b19a4abfe184e3f0b4005fc2920ce26dfb714a421eeb2e532519cf1c329ed1643c2f93f19c49c633948ce778329ec3c978de24e39940c6b3908c671919cf52329e37c8784e23e3d940c6b39e8ce728329ef7c9787692f15c48c65348c6338b8ce745329eb3c9788691f19c4fc67322194f828c673e19cf12329ec5643caf91f17424e35947c6b3968ce718329e1d643cdbc9785a93f17c45c633838ce75c329ee7c978ce21e3194ec67332194f31194f3b329e0a329e0bc878e692f1bc45c6b3888ce715329e33c878d690f1ac26e32925e3398e8ce73d329e6d643c5dc878da90f13c4dc6534bc6f32c194f1519cfa9643c83c878ce23e339928ca725194f5f329e5bc9786693f1bc44c6d3998ce72c329e55643c2bc978be24e339818c672b19cf16329eb6643c7bc9782692f12c20e3a926e3799d8c673f194f0919cf60329ea3c9785a91f17c4cc633938ce705329e15643ccbc9784e22e379978c673319cf11643c45643cf3c8786ac8785e25e3399d8c670819cfb1643c8791f13c43c6f31c19cf3b643c6f93f19c42c6b3898c6723194f7b329e0e643cbbc9787691f11410f0248023009bfcbf25d8e43b3cfbc1f685ceef059b7cc3e74db07daef38f82ed618bad85854f18a6834dde95fd026c727fe611b0c93b139f834dce1bc4bf9a5fd9f140fe16b08cf86969e1477f9f5bb8248fdb5b964906f16e6ff4950cecdfbc2b30180f35cf2e329edd643c1dc878da93f16c24e3d944c6730a19cfdb643cef90f13c47c6f30c19cf61643cc792f10c21e3399d8ce755329e1a329e79643c45643c4790f16c26e379978ce724329ee5643c2bc8785e20e39949c6f331194f2b329ea3c9780693f19490f1ec27e3799d8ca79a8c670119cf44329ebd643c6dc978b690f16c25e339818ce74b329e95643cabc878ce22e3e94cc6f31219cf6c329e5bc978fa92f1b424e339928ce73c329e41643ca792f15491f13c4bc6534bc6f334194f1b329e2e643cdbc878de23e3398e8ca7948c673519cf1a329e33c8785e21e35944c6f31619cf5c329e0bc8782ac878da91f11493f19c4cc6339c8ce71c329ee7c978ce25e39941c6f315194f6b329eed643c3bc8788e21e3594bc6b38e8ca72319cf6b643c8bc9789690f1cc27e34990f19c48c6733e19cf30329eb3c9785e24e39945c65348c6732119cf4e329ef7c9788e22e3594fc6b3818ce734329e37c8789692f12c23e35948c633818ce74d329ec3c9788e27e3194ac6732619cfcb643ca3c978e690f15492f1b4b0f0ec77c423df8a9175cbfcfe66ee7ba7e17b679ef8de6ef8de9e27beb719beb7e589ef2d86ef2d79e27bb3e17b739ef8de68f8de9827bed71bbed7e789efb586efb579e27bb5e17b759ef85e69f85e9927be971bbe97e789efb70ddf6fe789efa586efa579e27bb1e17b719ef85e64f85e9427be99afbf553f5ce9abbc5bff26e0ff15c0f8a623c6fd06a3ccbf098c62c3ef515738e289ba76af20f0adb4907b59f2cc3301ffaf04465731556130cabc2da676024fa5239ea87b0e9504be9516f22eb6f4a94cc0ff71fc655731556930cabc2da6b6034f5f473c51f74afa12f8565ac8bbcff2ce5f02fe8fe3adbb8aa9be06a3ccdb626a1bf00c72c413758f6710816fa5857c2b4cbe499380ffe3f88cae626a90c128f3b698c2f173073be289ba373598c0b7d242beb52bdfbc4cc0ff71fc26573135d86094795b4ce1f871431cf144dd531b42e05b6921cf82e51bed09f8ff5060741553430c4699b7c5148e7733d4114fd4bdc0a104be9516c3745efa5825e0ffc380d1554c0d351865de1653eb816798239ea87b98c3087c2b2d86ebbcbcc39180ff0f0746573135cc6094795b4cad059ee18e78a2eebd0e27f0adb4a8d27979a73f01ffaf0246573135dc6094795b4cad069e2a473c51f78cab087c2b2daa755ebe399780ffe3f8efc31d3156198c323f1c18c5b61278aa1df144ddebae26f0adb4906ffbafd0bf09f83f8ec7ea2aa6aa0d4699b7c5148e075de38827ea1e7d0d816fa5c5689d97316112f0ffd1c0e82aa66a0c4699b7c5148e5f39da114fd4b385d104be9516f26dae65fa3701ffaf0546573135da6094795b4c2d059e5a473c8b0d9ec5162d0e956fa585f4e55ea27f13f0ff09c0e82aa66a0d4699b7c5d462e099e08827ea59ce0402df4a0bf9b6f65bfa3701ff9f088cae626a82c128f3b6985a043c131df1443d839a9805df51cf53b2e13bead940367c47dde7ce86efa87bb6d9f01d75ff311bbea3eea565c377d47da16cf88ebac7910ddf51d7ebd9f01d75ed990ddf51d751d9f01d754d900ddf51e7b7d9f01d75ae960ddf51e71dbe3df7ed79dcbe0fe5b943beb6e787f2187a288f25fedac05f1b64cbb73f96f86b836cf9ced76b03df9e67bf3d97ebaf8220fa7aec6d47be971abe651e9fb32c75e47bb1e15be6f199c16247be1719be651eef7f2f72e4bbc8f02df38bb2e0bb9de1bb5d167d77307c77b0f876b0bdcb1241fdeb6f61c02909798c81b71c68e1a89ea56abd4bf4babe8e71bdb6fb36e6fe520c6596807eaedb0e59b7d976e42233c645417cbe4b13e043be4ba66cf2fcf875b049bbff1ad8a45fc0ab609363d32b609367522f834d9e59bd04b6d13aff31d8e4d931f6d997e7ffdbc056a5f3d8577cb8ce6f019bf4a5c23ecad21f6e33d8a44f23f68d957ea91bc1267d8bb14fa6f40f5f0f36e9e38f7d01e53d8db56093776db00f9abc2fb51a6c7b751efb3ec9776856826dbaceaf00db1f747e39d81ed2f95bc1f67b9dff0a6cbfd3f945607b50e7df02db6f757e09d81ed0f917c1f61b9d7f016cf7ebfcf360bb4fe7f15db65febfc2eb07da6f3f80ed5349ddf09b65fe93cbebb73afce6f07db2f75fe39b04dd5f967c13645e71782ed173abf006c3fd7f9f9609bacf3f3c0f6339d9f0bb6493a3f076c3fd5f9d9601baff3b3c0f6139d9f09b6713a3f036c6375fe19b0fd58e79f06db8f74fe4bb0ddadf38bc1d642e797824dc68cc47e2a853aff36d85ae93cf63f92effb4f04db613a3f016c6d74be166cf26db8d16093f1a06bc096d0f96ab01da1f3556093f3b3e16093f14f86814dcea58682adbdce0f019b9cf70c069b8c6739086cf20dd2be603b5ae72bc126dfd6af00dbb13abf1f6c32e6d89b6093efd6ed059b8cc5fc08d8e47bd5d3c17692ceff016c320ecb43603b45e77f0fb65375fe7760936f783e08b6129dff2dd83aeafc03603b5de77f03361923eb7eb09da9f3f7814dc60efe35d8e47bcf9f81ad93ce4f03db393aff2bb0c95822f7824dc607fd25d83aebfc54b0c977b8a780ed029dff05d864bcbf9f834dbe313c196c32aedbcfc0d655e72781ad4ce77f0ab66e3a3f1e6ce53aff13b075d7f97160eba1f363c1d653e77f0cb65e3aff23b0f5d6796967d4feacf6f37d7a3e19c4775ea6fc7d18d49f1aba361006e489f35cbb1878d0d79ed8eb5e963aaf97fdbe855eafc4d01ef0bd3b76dfe96b8a0ff4ba0af57a771bbe0ba1cc39ba7150cbc931bfa55e6eafb11cdec79275cb3217827d97b1eef6babe1f38aaef6e8349b851072973be6652c7c61fe87c1b582646b6d4f5b1c45a001ae29484bc30b8d1aaac14cf7b1bc3f301f0ec899d277dbdee222670df8afb7addbc8f6bc65a3194d90dfaed72a01feeebb26e99177f9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec99f99915cf3e9dc7e7ca526e1f09a3d8f6008f8bfbfcf81c56d6af9eebec3aadceef9ed8fdd67fbed74aafb7d4a8732194f91a9e39edd5f922f8bf6cb7a86de9e0396183db52fc15417df059d03e473c7b0c9e3d162d245f129befb2916e342e2b55fd56d433f6bd86aefb2c9abada5ff7e87515189ae2fefaa1c183cf468b80f723fd9b80f57c047570b08f371817e20ff7a53d6093fc87c0e8623be3b144da03791e8ecfa6a5ccaf8ce7e2f16ffbb25297edc6fb50a76470607c174299df41dbf7b9ce63df907da0db3f2cff97a9a1e7d4a29faaf38ef8eb9cdabedb8133097ed0f77bc01a93ef7aefd014e8247ec45e08f9bf437f0e29277a88d6c28ee39523bbb9dc87c672c55066a7a5fec920defaef30787618cc6a9b7c0971f60f38febb6a937646687421682465f680467b1df1ec31788443fca932b2fd5b1b6564d94228f3bfa08d527591765eea897d5bf018e0ea3826be64dd326f3b37fe0018cd3aaaf818786c1def9ed87973abffd76125e95f6cd7e3eaff25eb6eaf97158ec0587f29ac5fb85a07d1c796ffd9be2575eb77d9bf6caf516761419da54cbb92f4af8ab3cb743e9373fd4375dd1675aebfd3014f22a87fedada6868eef788c79df018fa37a96da8e5dbb8c3a1543994e504f07e7310dbe0bbc037cbbd8e6a8859c43ed36b42884321d4bd2bfd27644e988d7aa1f64a52e65d6f3c1524b5da44ca792babab4017b9c4c2eb7db7b5027b5de3d96ba4a99f34bea74e9a2f309d84e78dfa4afe5ff3235d41ee0583c5be3af736afb6e01ce24f841dfef026b4cbeeb7d0b44cef7c58fd80b215f59525756ca891ea2b5b0ab7d44def9437673b9ddc672c550669ba5fec920defa6f3578b61acc6a9b742da9cb4b1cb96c37b74568540a1a4919bc7f2cc7767cefce76dcdfe3883beab8bf0718cd7613cf5d5cb2ed35d8cc7ba8b6f3412983e76452e6ea92f4af6a671396b2e6bd6117f731f11dd400ea111875950963c0c1b561395e3b493b257eba807d8fce8bce5d0ced0aa1cca092f4afc3f36eebbd4bf3fa0eaf2984dbdcb7f0dd8f212575dc3876e21efd5b04b64ff4afa3ebb472db3d43e1b0dd331c5e52c78ecb0ad7c796ba98d7c82d8203efa97f6d94c5fb6e0d2d67e6cd712895be9f18e56c7ef09a27b67735ba969622538bc07ebfe04383bd203870cc4dd90f30e6ccfb285d8cf5e07d94da92f4afb4496659b5edfffde83a7d643b8a76d89e604c7e088c499d2ffd6653575bfd655efc29c68f8c3ab869bbd2ef2b65721f782ff0b868db1db5d1a5788c6d13db7a7b57d98eff1f1a5a65f179adf5986f3e736f63e4e3f15d566dbbff64d362b785c7d57394282d765b7cc7a7458f91b6e3874d8b5d169e5d59d66297c5778c5ad4e07dcf86b478dfc2e3e25e54435abc6ff11d9f163d4b1b7aae815aecb4f0b8baf710a585f8cb94791701731b231f8feff22adb7d329b163b2c3caeae9ba3b4d861f11d9f165d7be03dba86b4d86ee189fffe5cc35a6cb7f88e4f8b5ebdf11e5e435abc67e171f54c374a8bf72cbe638c8b51b67b39362db65978b665598b6d16df319e1ff6b0dd6bb369b1d5c2e3e0be6b835a6cb5f88e518b1178dfb5212db65878b664598b2d16dff16951d5dd764fd8a6c5bb161e57f784a3b478d7e23b3e2d46f452be3737428bcd169ecd59d662b3c5778cd750a9b8d8d4082d3659783665598b4d16dff169519d3ad7dad8082d365a783666598b8d16dff169519a3aa66e6884161b2c3c1bb2acc5068bef18e322753db9be115aacb7f0accfb216eb2dbe633c8ea4e2625d23b45867e15997652dd6597cc7a7454deafed3da4668b1d6c2b336cb5aacb5f88ef19e4b2a2ed634428b35169e3559d6628dc5777c5a744b1d535737428bd5169ed559d662b5c5777c5a8c4a3d135bd5082d5659785665598b5516df319e77a6da8b958dd062a585676596b55869f11de37967eafec58a4668b1c2c2b322cb5aacb0f88eb1ed4c9d772e6f8416cb2d3ccbb3acc5728bef18cf3b535abcd3082ddeb1f0bc93652ddeb1f88ef1bc33751c79bb115abc6de17135064a94166f5b7cc71817a9b6735923b45866e15996652d96597cc7785f2bd5762e6d84164b2d3caec66b88d262a9c5778cd723a97b7c4b1aa1c5120bcf922c6bb1c4e23bc66745a973f0c58dd062b185677196b5580cbef7c6ee3bdd9f5b7c485fac0b0c2d0aa1cca91dd3bfd2172b4a475907f62bc3babc157b5dd2fdca1645d4e52da88b943913ead22670324651b9a3baa662e64da8935aef4796ba4a99733bd6e9d259e713b04d3e06ddfa58fe2f5381319f84bce8a7eafc7afc754ec5ea6bc099043fe8fb55608dc97757f45da093f8117b21e47b77ac2b2be5440fd15ad8d53ef286ce23bbb9dc6263b96228f386a5fec920defabf6ef0bc6e30a7de7b8038933872d376a599de88d0e802d048ca609fbd8f1cf1987d088543fca932b2fd5b1b65b00fa594b908da28ec572af54c0407f69b74d49675457659b7cc8bbf62b0ed0546b38e2a3e3e83be9f3256848c23a16c322e4437584f4fc3a6eadacb515dc597ac5be67b01a38c53d133fb8c658d65ec61302a9e3e0e34c3b137646ae878d107787a3be07154cfd471a8c2a8532fa34ec55006df6dac7050cf02f02beb96f90af0ed629ba316724c3ed7d0a210ca0c37ce1fa3749475a8f8ed69a94b3fc77591754bbbd42f0bbe2b0ddfdd0ddf89a0fe760e8286f7af4a60eeeb8059adb77ffceb2dc5f3368929f1d31dea34003488ab4eb82e39cf1b60685b08f9a9709e27e5a4ac1cbf845dc5b26c4b643797eb632c570c65fa59ea9f0ce2ad7f7f83a7bfc1acb6c9dd706ee7607f48c5403f8343e6bb8376fd23b4eb07da49193cfef570a45d5f8347e67b008f9ce354804dce15843f01ffef96056eb3ddabb0708b0dc789eb6161ec1e3f63ea5ca787c128f3dd81516c7d81a7d29166e6b63ed7d0078fcbad8d32b26c21949905c7c684a5acdaef3a15d4d5aba5b6c7f6ee986ed35b3bd00bc7690c409fc0d03000bda49ead1cf0b40deac66a9c3ca576d288bb46dd382afde851d00a0d4cfc2db054a305d830dfd2620b82fa435216824d86a46c05b616862c3814a6949721ed5cc8857ac8ba0b0dce36c012a76f1cce53a68642e730e07111ca2a7464484f1d3ab74e1a336514c6472b83b329b1a3fed7b2817251eb72b51dcc7d2209f3660c163af2df12ea9b8479f1a7b68d0cad3a61c4c87b064cba6beab851e3a74c46a1cc1d1bf30541fd0d60fe4609ee6aa7c300c00a63e3d0caa8173618f23fd9306de3e72cc731734d6d02f027535bd0ed7007baa9f5cbd8b723478c1d7bfdd4aab163465e3675fcc829636ac7e3d66c632817b5a5e5ffadc1666be2b1ac9ab0d9c2650fb3d86c138e32dc066c72e43a1c6cc2d3166c2d212fe5cd2de3245c3bc1fa659752ff53e2b4d2153f2ca80b01391cab7655edbfea544e7d42569d0aa9a18dd5e6544317ab3b866a6862f5153b35f4b01a6a580d2d7c62901e3a580d157c4a901e0a587deda224480fed7b7a901ebaf7cc203d34efd9c0f76d603e27489f76a9a1753b07e9a173d5adcb2e41fa336feadd7a75faae6e0ba8535e7589a74e3fd569a7babc50b72fd4ad2c754aa74e97d5a9a03a7d539723fdb5d603c27451982e0ed32561ba344c9785e9f2305d11a62bc3745598ae0ed335611a18a66bc3745d98ae0fd30d61ba314c3785e9e6203dbcf32d417af87535fcf36d417a68e8db83f4b0d17704e921a5ef0cd2c34d8f08d243518f0cd2c3548f0ad24358df15a487b71e13a487c9bd27480fb5ab86e01d1fa487c356c364abe1b3d530bf6a486035a4b01a6a580d4bac8630564320aba1911f08d2432eab219b1f0ed2c33e4f0fd3a3617a2c4c8f87e989303d19a6a782f4f0e06ad8f019417a987135fcf8ec203d5cf9dc203dbcb91af65c0d87ae864957c3a7ab61d5d530ef6af877352cfc4b617a394caf04e94712ea518c7a44a16effabc760ea16f55b41fad6f99220fd885b3df2575d20549710d545664590ee42a5ba94a92e76aacba1ea82a9baa4aa2ebaaacbb2eac2adbab4ab2efeea9507f50a887a2546bd22a45e9952af90a957ead42b86ea3551f5daa57a8d58bd56bd2748df16df17a41f95aadbe1ead180ba65ae6edf7f1aa66f05e998fc4e98be1ba6ef85e9fb61fa41987e18a4873556c31dabe192d5d0ca6a18663564b31aca590d05ad868dfe2c480f3dad86aefe6d901e12fbf761fa3c4c5f04e9e1b5bf0cd31fc3f45598fe14a63f87e92f61fa6b98fe16a67f09d3bf86e9dfc2f4f730fd234cff0cea86d9c686e444ddfae82b9860c49429a3c64d985232a5b664dcd4b153c64c187b7fc9b431534697d4de3b6a52cdd8da69b8f0b7f5c23246f880499346dc5f32667cf5a8fb4a6aa74e29a9ad29a9aa9d3abebade41fc2f7aa1930ff438a2ba3adad97f7e13d2ffdb44a787eb7651465fbfb2e1ba1dd1b209821cd994857ab46c5a8526e923985ceade943e0f2e993cb6764a4969c9f8f06f78e0ad9d36aaba4b09fe6f7228f2e4292593a78c9834a5a46652edb892ae5d70bd8fb46d4225feabad1b98b34e6c9a389df477969a1462bf3cad090afcc7694d236d5df20d48db9634cd694949136a78765316baaa8984379744ca32796ad5944923464e895ef8b66fb2f09d4da9e6f82656f3948e4d70764653161ad0b169847736c5d9cc0c9c05ff0d9c7a335e8c550600", + "bytecode": "0x1f8b08000000000000ffed9d779815c5b6f67b6040643b0398b3830915c56118e20c3098136614111186610405862866cc9283392341c95940401010c3c93979921e8f27dd7bcf39cffde37ef77ec1ef76ed5debce3b45f566f6d8b579f7eceae7a9d9d56baa7bfdeaedd5d5a9baab20484dff0c5381ceb70cd399c18193fcbf4aff967eb3a96b8ceb2a75c95990239c2d7284b3658e7016e60867ab1ce16c9d239c87e508679b1ce13c3c464ec5d6226838c5cddbd681ae713326724cd3237240d3a21cd3b43807346d17e4461bd53e47383be408e79139c279548e701e9d239cc7e408e7b139c2795c8e701e9f239c27e408e78939c279528e709e9c239ca7e408e7a939c2795a8e7096e40867c71ce13c3d4738cfc811ce337384f3ac1ce13c3b46cecec0d949ff9ea37fcfd5bfe7e95f297bbefebd40ff76d1752cd4f3172aae30a9873465c6ffba85a93c4cddc3d4c3f85fcf30f50a53ef30f5d1ff2bd1ffab08536598fa86a95f98fa6b0d0684e9a2305d1ca64bc27469982e0bd3e561ba224c5786e9aa305d1da66bc234304cd786e9ba305d1fa61bc27463986e0ad3cd611a14a65bc2746b980687e9b6300d31586e0fd3d030dd11a66161ba334cc3c334224cd5611a19a69a308d0a536d98ee0ad3e8308d09d3dd61ba274c63c3342e4ce3c35417a609619a18a649619a1ca629619a1aa67bc3342d4cf785e9fe303d6068f660981e0ad3c3617ac4e09c1ea647c3f458981e0fd313617a324c4f85e9e9303d13a619619a19a659619a1da639619a1ba679619a1fa605615a18a667c3f45c989e0fd30b617a314c2f85e9e530bd12a657c3f45a985e0fd31b617a53b3c88eb0284c6f8569719896846969989685e9ed30bd13a6e5615a11a695615a15a6d5615a13a6b5615a17a6f561da10a68d61da14a6cd617a374c5bc2b4354cdbc2f45e98b6876947987686e9fd30ed0ad3ee307d10a63d61da1ba67d61fa304cfbc3f451983e0ed32761fa344cdf0ad3b7c3f49d307d374cdf0bd3f70dcd7f10a61f86e94761fab1b6fd44fffe549795fb773f0bd3cf75fe17faf797faf757faf73363995f87e93786edb761fa9d61fb7d983ed7f92ff4ef1ff4ef97faf78ffaf72bfdfb27fdfb67fdfb17fdfb57fdfb37fdfb2ffaf75ff5efbfe9dfbfebdf7fe8df7f866973c754be4d503f550531b551e5b5c9673f227ea7a0e1a4b468a9ff27bf25da5ea8e7e557b46ba5e75b19f6d67abeb5b19e367abe8d61efa0e73b18f6a3f4fc5186fd183d7f8c613f4ecf1f67d8cfd4f367823d11c0bd616d57b696da54003689d716606ba56d2dc1d65a5607b6c3b4ad15d864fbb606dbe1da7618d8da6a5b1bb025b4ed70d1324c47685b551057ac948e50eb2d8a7bbdfa795971fcbc23d57adb39e26d1f3fef28b5de0e0e78557c1ca9d7d51ee2e6286deb00b6a3b5ed48b01da36d4781ed586d3b1a6cc769db31603b5edb8e05db09da761cd84ed4b6e3c17692b69d00b693b5ed44b09da26d2781ed546d3b196ca769db29602bd1b653c1a69bdce034b09dae6d25603b43db3a82ed4c6d3b1d6c6769db19603b5bdbce049bb4bf67814dce17cfd636d5761c5e00cb68bbb45bc965a4cd06dbb9d25e83ed3c69abc1d659da69b09d0fbec57601b43562eba26dd26ea9fff5d1f9aa20aefda4ac56adb722eef5866b56ebed1bff7a93cf1cfb05f55a57819f0ad0aabfcec7d8afa92bfa2ed049fc88bd10f257415929277ac8b147d8d5b1a052e7fba759ae8fb15c3194a9b4d4bf2a88b7fe7d0d9ebe06732bc8bb89d96edd7ccc367aca386607435933f6e43ca839c6ec40e07010b33d7dcc367aca38666ba1ac197b722edc1c63f676e07010b3d56e62b6acd4c76ceabe5910d8634fae879a63cc8e018ef863b6bb8fd9c64f19c7ece350d68c3db9266e8e313b0d38e28fd99ed5fedca0d153c631bb00ca9ab127f7679a63cc3e051c0e62b6d6b7b38d9e328ed937a1ac197b72afb039c6ec73c0117fccf67614b3dd7ccc06a967a041608f3db96fdd1c63763170c41fb323fdfdd9c64f19c7ec0e286bc69e3c43698e31bb5ee7d573869fe8e70c2783eda7da760af0c61fdb35dd1dc576998fed54df9020b0c7a83ccf6b8eb1fd81ceab38fe05f44710db2fb5ad23d87ea56da783ed336d3b03eae5601fa8f6fb40a3a78cf781df40593396e5d97273dc077e041c0e62b6c6c76ca3a78c63f66f50d68c3de9e7d01c63f6f7c0e120666b7dcc367aca3866ff13ca9ab1778ece37c79895bea6ea7ce10b7dbe701ed8fea06d9dc1f6a5b69d0fb63f6adb0560fb4adbba80ed4fda7621d8feac6da560fb8bb67505db5fb5ad0c6c7fd3b66e60fb176d2b07dbbf6a5b77b0fd9bb6f500dbdfb5ad27d8fea16dbdc0f64f6debad6daa9f9ef4bd92f3d636c05f15c4bb6da5dfa5ac5be6bb66c1773bc377bb2cfaee60f8ee60f15de6c077027cc85460cc5741becc2d4f6931f0a0aff2f87d755375ef1634beeee5c0d3dd41dd13e0a3313cdd81a747fc3cc9febf3de35f6f721b7733344d80af6e50af5e0eea5500be64dd322ffe8ac1866d6b2f0b63eff819cb0ac097ac5be67b03a3d8b0ad9777ae64ff51c7c34e05f5bc0ef6a5e43991f893ef96094739d8a5cc951debd93a6bb622f83f1ef77a18364771998c0bf125eb9679f15704f5e9917dc6b2c6327637185db51105e04bd6ed7dd76f07c9e371dcc1b58eb54d13df1559f0dddbf05d6ef8c6b653a674c7b6dec01cfb35a73eb655c6bfde52bc3e916b43f183e70f780d17579dd0b75c1b8a1fb11742feda82fab2524ef4907658d8552ccbb6447673b95ec672c550a6c252ffaa20defa571a3c9506b3da2617c3b1d0c1fe908c810a8343e6cb41bbca08ed2a403b29730e68e7aa3deb63f0c87c0fe09176ac27f0b8ba268ae2c9c6f5d8c17ce3392c5e3fcbfff13cc0d5f6ea6a30cabc6d7bf50646dbb98a83eb99b4e72add81516c7d80a79b23cda2b66b3712df0e6225d91e890f393797fdb707d8a54c6ffd429d6a2bef86b6d2458c603ccad4d86bdef8b75359f21abc7b063cb8ed1c5c577575148fa578ffe6eb20de5833dba5ee865651f7785cb5e5dd0c1e99177f9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec99f999f17912f6db92723d4818cdfe6faeeef327bf7fa8d725eb57cf75fe8fd3fe6065a5d83f46fa419c67d4b910ca14b5a82ffbffa13f98f99c0afb48f670ab5d725b627fcc2a98177fd8d70ab725437fa792d87c978d74f5bcad5dd0b0af9cb99fa2a62efa3fa3a60586a6d81fff7c8347c56965cb7a3617cffe327d16895a493ece677bc5813dd6e3df2e650d9e59b7081ab61f789c71d57f47da6a795e5e61f82e843227b5a8df36d2b74ac618ee662c87fd7e64ddb2cc7960af34d6dd5e2f2b1cad8cf5f78465a5cca9d0a6ee6d51af9983b6b22cd3beebf8dc3cfee370ea397eb70c78ba028f8b76c6d1f94629ee03713fc737fba7d9ce63a40cf6ed73d0af326d7f27f1e7993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367f6cc9e999f59f198cf5af1fdda7212c62cf57d483ecf906f95c9fa93df0b6e51efd7f5733879e6d4d9a833be3bfacf16f56537eb7c5170607f87a86de9eafb1451db52fce1b767f059908be7ba05e04bd65d66d142f225b1f94e3dc7773136843cc7ef66e85a6ed1d4d5fe8acf585153dc5fbb1b3cf86c34eadb3e6586cdd13e9e362ec41fee4b6560933cbe1fed623be3b1c4ecd723fef0f9f577b4b6ed0357dbbeacd465bb81df4da90a0e8c6ffc9eca0fa1edfbb1ce631f0eec3bf285e5ff32a57b4e2dfaa93a3bf8be666901ac4bb6afeddb9e03803526df5d715d053a0d30342884fce72deacb4a39292b5a0bbbda47e41b30c86e2ed7dd58ae18caf4b3d4bf2a88b7fee6b756fb1bcc6a9bfc0ce2ec0b38febb6a93fa4568741e6824651c7fb3d1dabfd2ec5788ed686ba38c2c8bdfa2fb2bb45151fd476dc700d7c73159b7ed38661e171ad3cf33dffb69fd17b41771f7d3fa2f8821eca71518ebef0ceb17aed641f4b145cafc3f63fde639b92c83fdc0fe673f81efb994e97c26e7e487eafaca764e8ecb45d55d31e377d0aa6264c69840163c4f90326db5d6b2cd2a23b87b5b962d8a5856b432bf1556141ca89f9befaca5f6f9fe465d24aef11be452e628a88b9bf396d439a0ab6fca55419d54becc525729733cec6b27ea7c02b613eeb7e75afe2f53ba73401cc3fda2f8eb9cdcbe17036715f841df97006b4cbebba26f3907143f622f84fc392debcb4a39d143b41676b58fc87914b29bcb5518cb1543990196fa5705f1d6ff2283e72283596d935320cece857ee8aedaea01111a75068da40cde53b47d07d476afc3d5fb1b51e752f8fe92797e85c74937e74df6f358f3be9aed1ca1b3c18fe7083da19d4d58ca9af70be5781967bf617c57a227f8c577255c7dbbb90fe85605f3785e70287dbbf88eadf2173566429f2cf88e1a33211bbe3b18be3b64d1b7d7dc6bcea4b983310892ef9fe1374bd594eebc14c72590e55a00a38bb11c1241c36f8f1f8c11c77790e55a02a38be343a6df3eef098cb25c2130ba78b714c7df680c237e63188ff3c2e8e05bb15d9bfaad58bca7d71a1899ded9c467538701a38bf3e2a6beab87e7f36de0d7d5b844dd32602c034659ee706074716f1caf651ac388d745b25c5b6074f10c2bd3f19df0dbf3786fd92563ba63bbe3be286599de7ba974cb93f65c037d3b18d730a905de673c98167dddf2a43df741df0eeefb25b5c071060fa6053e1b7431ee612268f81cee603cf8fc52963b1218ab1c31f6cf80b10a18ffe75e31300e70c4589501e3006014fbd1c0e8e0fe6b927140068c789f52963b06182f76c47851068c1703a32c772c30bab8979a00bf8d61bc041865b9e380f152478c9764c0782930ca72c703e3658e182fcd80f1326094e54e00c6cb1d315e9601e3e5c028cb9d088c573862bc3c03c62b8051963b0918af74c47845068c5702a32c7732305ee588f1ca0c18af024659ee1460bcda11e35519305e0d8cb2dca9c0788d23c6ab3360bc061865b9d38071a023c66b32601c088cb25c09305eeb887160068cd702a32cd71118af73c4786d068cd701a32c773a305eef88f1ba0c18af074659ee0c60bcc111e3f51930de008cb2dc99c078a323c61b3260bc111865b9b380f126478c3766c0781330ca726703e3cd8e186fca80f16660bcc9c238c811e3cd19300e024659ee7c60bc257ec6e4b5f4a00c186f019e5be3e7496a764b063cb7bae5497e57ef168bafdbe2f795dc168383c6d7fd36e019123f4f725bdc96018f3014c372a8d9edf13326351b9201e3edc033347e9ea466b767c0331434bbdda2d91df13326351b9a01e31dc0332c7e9ea4667764c0330c34bbc3a2d99df13326351b9601e39dc0333c7e9ea4667766c0333ca8d7ec4e8b6623e2674c6a363c03c611c0531d3f4f52b31119f0548366232c9a8d8c9f31a95975068c2381a7267e9ea4662333e0a901cd465a341b153f6352b39a0c1847014f6dfc3c49cd4665c0530b9a8db2687657fc8c49cd6a3360bc0b7846c7cf93d4ecae0c784683667759341b133f6352b3d119308e019ebbe3e7496a3626039ebb41b33116cdee71c47877068cf75878e2fe4ef6dd165fe31cd57d6cd0f8ba0b43312c87fd24c63b621c9701e3786094e5b09f449d23c6f11930d601a32c9770cc98ae9f441df89e10bfef64bb5417345e9f096e79d2f69340df131d69312168bc1613ddf2a4ed2781be2739d26262d0782d2601cf64075a24c047637884a11896c37e12531c314ece80710a30ca72d84f62aa23c62919304e0546590efb49dceb88716a068cf702a32c87fd24a63962bc3703c669c028cb613f89fb1c314ecb80f13e6094e5b09fc4fd8e18efcb80f17e6094e5b09fc4038e18efcf80f1016094e5b09fc4838e181fc880f1416094e5b09fc4438e181fcc80f1216094e5b09fc4c38e181fca80f1616094e5b09fc4238e181fce80f1116094e5b09fc474478c8f64c0381d186539ec27f1a823c6e919303e0a8cb21cf69378cc11e3a319303e068cb2dc3d8e19d35dbf3cd6cc7d475dab3477df51d725cdddb78f731fe7f9e0dbc7b98ff37cf0ede3dcc7793ef8f671eee33c1f7cfb38f7719e0fbe7d9cfb38cf07df3ece7d9c33f97edc81ef04f890a9c098af82bc3014c372f778c666cd883c25f1f19462ddd1d71304757fc2c253e0a8eee8eb4982ba0b43ae313e9e038cf7e400a3d731d507b1298c8ae729473c4f66c0f314f03ced88e7a90c789e069e67e2e749c6d4d319f00843312c774f0e303e9e038c5e47af2313a3d7317f74f48c9ed1337ac643c1980b6db867cc89782c6b2aa3e299113f4f52b36732e099019ac972b7ba652c6b2aa3e299193f4f52b31919f0cc04cd66583473c058d65446c5332b7e9ea4663333e099059acdb468e680b1aca98c8a6776fc3c49cd6665c0331b349b65d1cc016359531915cf9cf879929acdce80670e6836dba29903c6b2a6322a9eb9f1f324359b9301cf5cd06c8e4533078c654d65543cf3e2e7496a3637039e79a0d95c8b660e18cb9acaa878e6c7cf93d46c5e063cf341b37916cd1c3096359551f12c889f27a9d9fc0c78168066f32d9ab132de93038c8fe700a3631dcb9acaa878163ae2599001cf42e079d611cfc20c789e059ee7e2e749c6d4b319f00843312c774f0e303e9e038c5e47af2313a3d7317f74f48c9ed13366c6f8440e30fa6ded1959191d5c5fa57d87e6d966ee3bea1d9ae6ee3bea1d9ae6eedbc7b98ff37cf0ede3dcc7793ef8f671eee33c1f7cfb38f7719e0fbe7d9cfb38cf07df3ece7d9ce7836f1fe73ecef3c1b78f731fe7f9e0dbc7b98ff37cf0ede3dcc7793ef8f671eee33c1f7cfb38f7719e0fbe7d9cfb38cf07df3ece7d9ce7836f1fe73ecef3c1b78f731fe7f9e0dbc7b98ff37cf0ede3dcc7793ef8f671eee33c1f7cfb38f7719e0fbe7d9cfb38cf07df3ece7d9ce7836f1fe73ece997c3f1fbfefb24cbf31f33cf0b8f8e68da37a96aaf5bea0d7f5758cfa29ad5e34b47ad6d0aa18cabc00fabde840bf02f02beb9679f197297327026647becbda050df76bf1f1b8a1872af392a3ba47b5f52f3573df516d7d73f71dd5d63777df3ece7d9ce7836f1fe73ecef3c1b78f731fe72cbe31df2aa83f6f97ef9faa75bcacf3857a5eca3f01762933f9b0d46ffbc0ef432e7cfb7dc81f2bf2c1b78f731fe7f9e0dbc7b98ff37cf0ede3dcc7793ef8f671eee33c1f7cfb38f7719e0fbe7d9cfb38cf07df3ecef9e2bc18fe5f99059ec0e009d2f02c20e3994ac6339b8c673419cf50329eebc8782e26e379888ca79c8c670219cf48329e5bc878ae22e3b9908ca71f19cf34329ede643c73c878ee26e3799a8c671819cf0d643c9792f13c42c65346c633898c671419cf6d643cd790f15491f1dc4fc6d3938ce75c329e71643c73c978ce21e3194ec6f30c19cf4d643cc5643cedc8782e27e379928ce702329e0a329e47c978e693f14c21e3b98b8ce776329e52329e6bc978ba90f15c44c6f320194f77329e79643c75643c33c878aac9780691f19c47c67325194f4b329ebe643c0bc978ee25e3e943c633868ca73319cf1d643cd793f15c42c6f330194f37329e89643c33c9786ac8780693f15c4dc6d39f8ce73e329e5e643c63c9783a91f1dc49c67323194f36be679a09cf11643c45643c9791f13c46c6339d8ca72b19cf64329e59643cb5643c43c8780692f10c20e379808ca70719cf78329e11643c3793f13c45c6d39e8ca70319cf15643c05043c89e0c0314c12f0ffe7c1d6c258567df6754ec7faffbfa2ed2d60995775bea565ddaf804dbe25fbaa6559d4e915a84b95ce977eb329a913faaa8279f157041caf92f05c41c6d3818ca73d19cf53643c3793f18c20e3194fc6d3838ce701329e01643c03c9788690f1d492f1cc22e3994cc6d3958c673a19cf63643c9791f11491f11c41c6f33c19cf8d643c7792f17422e3194bc6d38b8ce73e329efe643c5793f10c26e3a921e39949c633918ca71b19cfc3643c9790f15c4fc67307194f67329e31643c7dc878ee25e35948c6d3978ca72519cf95643ce791f10c22e3a926e39941c65347c6338f8ca73b19cf83643c1791f17421e3b9968ca7948ce776329ebbc878a690f1cc27e379948ca7828ce702329e27c9782e27e36947c6534cc6731319cf33643cc3c978ce21e3994bc6338e8ce75c329e9e643cf793f15491f15c43c6731b19cf28329e49643c65643c8f90f15c4ac6730319cf30329ea7c978ee26e39943c6d39b8c671a194f3f329e0bc978ae22e3b9858c672419cf04329e72329e87c8782e26e3b98e8c672819cf68329ed9643c53c9781690f1545a789e77c423efbbcbba65fe7912df0eb643a95aef6b8eeaf4ba5e572bbd5ee1177f8550667adbd4af7a3f1c97152ef3fb04f86eceeba0d1eb8eea22dba3c0d83ee8fb6547bee51d2d59b7ccbfdccc7db7337cb7cb13df1d0cdf1df2c4b78f731fe7f9e0dbc7b98ff37cf0ede3dcc739936f07d70665f89d34990a8cf92ac8e3f5828befcb39aa6783ebc4af63d44f69f586a195796d550c655e03fdde70a09fedda53e6c55fa6cc9d0898312e4a8278e3e2cdf8eb54d62e68d85ebc69e88bf55ae448d3a863c8a266ee3bea18d2dc7d471d439abb6f1fe73ecef3c1b78f731fe7f9e0dbc7b98f7326df6fe97c8cd78da5e8433d5f94eb81b7c0ef129d2f88d1af5ad762bdae42bd6ee158027629f3bfe1b9a6dfe7fd3e1f976f7f6cf3719e0fbe7d9cfb38cf07df3ece7d9ce7836f1fe73ecef3c1b78f731fe7f9e09b39cecdbcf4173f07d85cf5e78f8ac56cbc4b70287d47c56273f71d158bcdddb78f731fe74cbe973af09d001f32a5ebe3b71478163be07154cfe4b38d65469d9e37ea540c65f018bfcc413d0bc0afac5be697018f4c95c0e3220e1ab3cd91670119cf54329ed9643ca3c9788692f15c47c6733119cf43643ce5643c13c8784692f1dc42c6731519cf85643cfdc878a691f1f426e39943c6733719cfd3643cc3c8786e20e3b9948ce711329e32329e49643ca3c8786e23e3b9868ca78a8ce77e329e9e643ce792f18c23e3994bc6339c8ce719329e9bc8788ac978da91f15c4ec6f32419cf05643c15643c8f92f1cc27e39942c6731719cfed643ca5643c8bc878ae25e3e942c6731119cf83643cddc978e691f1d491f1cc20e3a926e31944c6731e19cf95643c2dc978fa92f12c24e3b9978ca70f19cf18329ece643c7790f15c4fc6730919cfc3643cddc8782692f1cc24e3a921e3194cc6f30619cfd5643cfdc978ee23e3e945c633968ca71319cf9d643c3792f11c41c65344c6731919cf63643cd3c978ba92f14c26e39945c6534bc633848c672019cf00329e07c8787a90f18c27e31941c6733319cf53643cedc9783a90f15c41c65340c093080e7cf73f01ff7f036cf28efaf3607b5be71783ad85c5474b9d5f06b6429d97751c16a6973a1eb86ed4c9d57bf9e8ab0ae6c55f1170bc4dc27305194f07329ef6643c4f91f1dc4cc633828c673c194f0f329e07c8780690f10c24e31942c6534bc6338b8c6732194f57329ee9643c8f91f15c46c65344c6730419cf8d643c7792f17422e3194bc6d38b8ce73e329efe643c5793f1bc41c633988ca7868c672619cf44329e6e643c0f93f15c42c6733d19cf1d643c9dc978c690f1f421e3b9978c6721194f5f329e96643c5792f19c47c633888ca79a8c6706194f1d19cf3c329eee643c0f92f15c44c6d3858ce75a329e45643ca5643cb793f1dc45c633858c673e19cfa3643c15643c1790f13c49c67339194f3b329e62329e9bc8789e21e3194ec633978c671c19cfb9643c3dc978ee27e3a922e3b9868ce736329e51643c93c878cac8781e21e3b9948ce706329e61643c4f93f1dc4dc633878ca73719cf34329e7e643c1792f15c45c6730b19cf48329e09643ce5643c0f91f15c4cc6731d19cf50329ed1643cb3c978a692f12c20e3a9cc0e4f997ab75dfa5a07c0855315e49701cf2207fa38aa67297ed7e0eb18d7abb47ac7d0ea0d43ab6228b314f47bc7817e05e057d62df3e22f179915cf633a6ffb0ec463248c625be49627b9df3e16349cd2edb7ef008f8b76cd513d93fbd772a34e8f5974973218abcb1dd4d3b6efc8fc72d80eb9c6ac789ed479614d40b9274918c5b6cc2d4f72ff7a326838a5dbbf96038f8bf6c7513d93fbd70aa34e4f5a74973218ab2b1cd4d3b6efc8fc0ad80eb9c6ac789ed279614d40b9a74818c5f68e5b9ef204d459a674fbd70ae071d1fe38aa6772ff5a69d4e9298bee52066375a5837adaf61d995f09dbc1337b661bb3e291673bc29a80724f93308a6db9539ef2d204d459a674edd84ae071d1ce3bd23dd98ead32eaf4b445772983b1baca413d6dfb8eccafb2f82e09e2d5627523b4586de1599d652dc45fa6cc4b7390d9ebec758e62f63a7b9da398bdce5ee72866afb3d7398ad9ebec758e62f63a7b9da398bdce5ee72866afb3d7398ad9ebec758e62f63a7b9da398bdce5ee72866afb3d7398ad9ebec758e62f63a7b9da398bdce5ee72866afb3d7594d5e67afb3d7d9eb1c07b3d7d9eb1cc5ec75f63a473133e8ac78e4db95c29a8072cf90308a6d855b9ee47b41cf040da70263be0af2ab8167a5037d1cd533d9877c8d51a7672cba4b19dcbfd638a8a76ddf91f935b01d32615e9583cc5ee7a6312b9e193a2fac0928378384516c2bddf224dbb11941c3295d3bb606785cb4f38eea996cc7d61a759a61d15dcae0feb5d6413d6dfb8eccaf85ede0993db38d59f1ccd479614d40b999248c625bed94a72cf97ee3cca0e194ae1d5b0b3c2eda7947ba27dbb175469d665a74973218abeb1cd4d3b6efc8fc3ad80e9930afca4166afb3d7398ad9ebec758e62f63a7b9da398bdce5ee72866afb3d7398ad9ebec758e62f63a7b9da398bdce5ee72866afb3d7398ad9eb9c3f3a2b9e593a2fac0928378b84516c6b9cf2744b3e779815349cd23d7758073c2e9ecb38d23df9dc61bd51a75916dda50cee5feb1dd4d3b6efc8fc7ad80ecd9d79550e32fbd8c80eb38f0dcf1cc5ec63c3334731fbd8f0cc51cc3e363c7314b38f0dcf1cc5ec63c3334731fbd8f0cc51cc3e363c7314b38f0dcf1cc5ec63c3334731fbd8f0cc51cc3e363c7314b38f0dcf1cc5ec63c333473133c486e299adf3c29a8072b34918c5b6d62d4ff2bb07b3838653ba7e3beb81679d037d1cd533d96f678351a7d916dda50cee5f1b1cd4d3b6efc8fc06d80e9ed933db9815cf1c9d17d604949b43c228b6756e7992edd89ca0e194ae1ddb003c2eda7947f54cb6631b8d3acdb1e82e653056373aa8a76ddf91f98db01d3cb367b6312b9eb93a2fac0928379784516cebddf224dbb1b941c3295d3bb611785cb4f38eea996cc73619759a6bd15dca60ac6e72504fdbbe23f39b603b7866cf6c63563cf3745e5813506e1e09a3d836b8e5294b409d654ad78e6d021e17edbca37a26dbb1cd469de65974973218ab9b1dd4d3b6efc8fc66d80eb9c6ac78e6ebbcb026a0dc7c1246b16d74cb93dcbfe6070da774fbd766e071d1fe38aa6772ff7ad7a8d37c8bee520663f55d07f5b4ed3b32ff2e6c875c63563c0b745e5813506e0109a3d836b9e549ee5f0b828653bafdeb5de071d1fe38aa6772ffda62d4698145772983b1bac5413d6dfb8ecc6f81ed906bcc8a67a1ce0b6b02ca2d2461141b1e2f163ae22932788a2c5a1c2adf4a8b0a9d3f42ff26e0ff15c0e8aa3d5c6830ca3cc6b8d88ab2a0593b83a79da1d9a1f4adb4a884bc9a707b550223c3f66a9705cd3a183c1d0ccd0ea56fa5455f9d6faf7f717bf5054686edd501781cb4cfe50983474de9ce37b638d6c7513d93e71b5b03bbee781c923278ecdeeaa09eb6730999df0adbc1337b661bb3e219a4f3c29a8072834818c586d729dbe2e7294f183c6a4ad78e6d73ac8fa37a26dbb1f702bbeedb40772983b1fa9e837a16805f59b7ccbf07db2113e65539c8ec756e1ab3e219acf3c29a8072834918c5b61578b6c7cf539e3078d494ae1ddbee581f47f54cb6633b02bbeedb41772983fbd70e07f52c00bfb26e99df01db2113e65539c8ec756e1ab3e219a2f3c29a8072434818c5f61ef0ec8c9d27351e10f2a8295d3bb6d3b13e6eea996ac7de0fecbaef04dda50cee5fef3ba86701f89575cbfcfbb01d3cb367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367f6cc9ed93373332b9ea13a2fac0928379484516c3b806757ec3ca9e70ec8a3a674cf1d7639d6c74d3d53cf1d760776dd7781ee52066375b7837a16805f59b7ccef86ede0993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367f6cc9e999b59f10cd379614d40b961248c627b1f783e889fa73c61f0a829dd73870f1cebe3a89ec9e70e7b02bbee1f80ee520663758f837a16805f59b7ccef81edb0c7337b660bb3e219aef3c29a8072c34918c5b61b78f6c6ce937a7e8a3c6a4ad78eed75ac8f9b7aa6dab17d815df7bda0bb94c158dde7a09e05e057d62df3fb603b64c2bc2a0799bdce5ee72866afb3d7398ad9ebec758e62f63a7b9da398bdce5ee72866afb3d7398ad9ebec758e62f63a7b9da398bdce5ee72866af73fee8ac78aa755e581350ae9a84516c7b80e7c3d879ba95260c1e351518f35590ffd0b13e6eea997aeeb03fb0ebfe21e82e6570ffdaefa09e05e057d62df3fb613b3477e65539c8ec63233bcc3e363c7314b38f0dcf1cc5ec63c3334731fbd8f0cc51cc3e363c7314b38f0dcf1cc5ec63c3334731fbd8f0cc51cc3e363c7314b38f0dcf1cc5ec63c3334731fbd8f0cc51cc3e363c7314b38f0dcf1cc5cc101b8aa746e7853501e56a4818c5b60f783e8a9fa73c61f0a8a9c098af82fc478ef57154cf64bf9d8f03bbee1f81ee5206f7af8f1dd4b300fccaba65fe63d80e9ed933db98154fadce0b6b02cad592308a6d3ff07c123f4f59c2e05153ba76ec13c7fa38aa67b21dfb34b0ebfe09e82e6530563f7550cf02f02beb96f94f613be41ab3e219adf3c29a8072a34918c5f631f03888bb244f91c123f39f10f8565ad4e9fc11fa17b7571d30326cafa22c68d6cee069676876287d2b2d26405e4db8bd260023c3f66a9705cd3a183c1d0ccd0ea56fa5c5449d6faf7f717b4d044686edd5210b9a1dcaf6f050eedb87324ebde6874ef38243a879c121d4bcc06b4ea5b983e34b191ecb0260c0a90af29f02cfb7e3e749de97fb34039e6f03cfb7e2e7e9eaa89ea56abddf01f6b8d6abb4faaea1d5a78656c5500619beeb40bf02f02beb9679f1e7993d7314339edb0a6b02ca7d42c228b66f018f8b7643d5fd02bd2e597fab307d7674bd5f17cf4bf05e712bbd5ee1107f85506662497dd9df69b622f8bf6c37559ffd86cdd13bcc5d6dcfed645efc150559bb779bf65e326ae1e27953a6c7fdfd169eafe3e329c5fd1c7ded7354f74c9efdedb3f0c458f7ae51cf3df7c65ff764fbd145af4bd6aff6d17f3fdaa9e6e5b8ef49fbd1c5a87321941958525ff63fa0fdb0b515aef74d392737f7cd16417d7b265c25da6e3e13fa5adba5dc47501edb9c0afd8bfb6705d4d555bb18758f09db45b3ed76a9bdf95cd2f45d0cba7c44aa99ed3905ea5869e1ae24e0c678cce67e26ebb63d23ab347464d30cb7f547161dfb5ab8fb127033eed77d0d1dd9343bd87e3dc8c23d88809b71bf1e64e8c8a6d9c1f6ebc116eec104dc8cfbf560434736cd0eb65f0fb1700f21e066dcaf87183ab26976b0fd7aa8857b280137e37e3dd4d0914db383edd7c32cdcc308b819f7eb61868e6c9a1d6cbf1e6ee11e4ec0cdb85f0f0f1aeac8a6d9c1f6eb6a0b77350137e37e5d6de8c8a6d9c1f6eb1a0b770d0137e37e5d63e8c8a6d9c1f6eb5a0b772d0137e37e5d6be8c8a6d9c1f6ebd116eed104dc8cfb7563fbedb3eed77516ee3a026ec6fdbaced0914db383edd7132cdc1308b819f7eb09868e6c9a1d6cbf9e68e19e48c0cdb85f4f347464d3ccb65f3b7a9730e3771b3f76aa4f6a8ce98f33e0f910785cc494a3382875d4cf25d93775afa1d5c786563876c73ed0cf415f98b4df24107f9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec99f999f1bb8cf87c45ca7d44c228367c26e5e23ebfaafb857a5db2fe56611a786cbddf7db1fb2d2b2d30fc550187f82b8432279e565ff606cd56141cb8dd702c6edc967b62af436a5b9af12ff3e2af08eab317781cbc9f9fe4d967f0ecb36881ef9dc6e3bb6ca41b8dcb4adb050d637f8f511fd4f483d8fd37d4b4c0d0f403c7be1341c3ed290c3855411e795c3c1b7654cf645bb0dba893a9713194e904f5dceda09e05e057d62df3bb8147a616c0e32a06038327b0e823532519cf54329ed1643c6792f10c25e3399e8ce73a329ec3c9782e26e379888ca79c8c670219cf48329ed3c8786e21e3398a8ce72a329e0bc9780ac978fa91f14c23e3e94dc6733719cfd9643cc3c878ce27e339918ce706329e0419cfa5643c8f90f19491f14c22e31945c6d3918ce736329e63c878ae21e3694dc65345c6733f194f4f329e73c978c691f19c43c6339c8ce764329e9bc8788ac978da91f15c4ec6f328194f0519cf05643c53c878ee22e339838ce776329e52329ee3c878ae25e3e942c67311194f1b329e07c978ba93f1d491f15493f19c4ac633888ce73c329e23c978ae24e36949c6d3978ce75e329e3e643c63c8783a93f19c45c6730719cf09643cd793f1b425e3b9848c672f19cfc3643cddc8782692f1d490f1ec27e32921e3194cc6733419cfd5643cadc878fa93f1dc47c6d38b8c672c194f27329e3bc9784e22e3b9918ce708329e22329ecbc878a693f17425e3994cc6534bc6733a19cf10329e63c9780692f11c46c633808ce701329e1e643ce3c9784690f19c42c67333194f7b329e0e643c5790f11410f0248203bfc59480ffef039b7c33e843b0b5b0ac4f9e534b79755c5cdcf1c075b7b0acfb030b03eab40bea52a5f3a5df6c4aea84beaa605efc1501c707243c5790f17420e3694fc6733319cf29643c23c878c693f1f420e379808c670019cf61643c03c9788e25e31942c6733a194f2d19cf64329eae643cd3c9782e23e32922e339828ce746329e93c878ee24e3e944c633968ca71719cf7d643cfdc9785a91f15c4dc6733419cf60329e12329efd643c35643c13c978ba91f13c4cc6b3978ce712329eb6643cd793f19c40c6730719cf59643c9dc978c690f1f421e3b9978ca72f194f4b329e2bc9788e24e3398f8c671019cfa9643cd5643c75643cddc9781e24e36943c67311194f17329e6bc9788e23e32925e3b99d8ce70c329ebbc878a690f15c40c65341c6f32819cfe5643cedc8788ac9786e22e339998c673819cf39643ce3c878ce25e3e949c6733f194f15194f6b329e6bc8788e21e3b98d8ca72319cf28329e49643c65643c8f90f15c4ac69320e3b9818ce744329ef3c9788691f19c4dc67337194f6f329e69643cfdc8780ac9782e24e3b98a8ce728329e5bc8784e23e31949c633818ca79c8ce721329e8bc9780e27e3b98e8ce778329ea1643c6792f18c26e3994ac65349c6d3c2e0c1ffab77c3f6eabc7c3ba810fe3f49772e6fafd72565e419b1ba57f1be6153f5dde9a8beef07f55315ccef84fa0afbfbc0f3be239e5d068fe9bb08f295a0d90ec3a618b73b62dc6130cafc766014fd7600cf0e473c3b0d1ed37711e4fb8266ef1936c5b8cd11e37b06a3cc6f0346d1ef3de079cf11cf7683c7f45d04f941a0d956c3a618b73862dc6a30cafc166014fdb602cf56473cdb0c1ed37711e4078366ef1a36c5b8d911e3bb06a3cc6f0646d1ef5de079d711cf1683c7f45d04f921a0d926c3a618373a62dc6430cafc466014fd3601cf26473c9b0d1ed37711e48782661b0c9b625cef887183c128f3eb8151f4db003c1b1cf16c34784cdf45901f069aad336c8a71ad23c67506a3ccaf0546d16f1df0ac73c4b3dee0317d17417e3868b6c6b029c6d58e18d7188c32bf1a1845bf35c0b3c611cf5a83c7f45d04f96ad06c9561538c2b1d31ae3218657e25308a7eab806795239ed5068fe9bb08f235a0d90ac3a618973b625c6130cafc726014fd5600cf0a473c2b0d1ed37711e46b41b3770c9b627cdb11e33b06a3ccbf0d8ca2df3bc0f38e239ee5068fe9bb08f2a341b365864d312e75c4b8cc6094f9a5c028fa2d039e658e78de36784cdf4590af03cd961836c5b8d811e3128351e61703a3e8b704789638e2596af098be8b203f01347bcbb029c6458e18df3218657e11308a7e6f01cf5b8e78161b3ca6ef22c84f04cdde346c8af10d478c6f1a8c32ff06308a7e6f02cf9b8e7816193ca6ef22c8df0436e1ed03b6d775be37d85ed3f95e607b55e77b82ed159def01b69775be3bd85ed2f972b0bda8f3ddc0f682ce9781ed799def0ab6e774be1fd89ed5f9fe605ba8f355605ba0f303c0365fe72f02db3c9dbf186c7375fe12b0cdd1f94bc1365be72f03db2c9dbf1c6c3375fe0ab0cdd0f92bc1f68cce5f05b6a775fe6ab03da5f3d780ed499d1f08b62774fe5ab03daef3d781ed319dbf1e6cf7e8fc0d60bb55e76f04dbc73a7f33d83ed1f95bc0f6a9cedf06b66fe9fced60fbb6cedf01b6efe8fc9d60fbaece8f00dbf7747e24d8beaff3a3c0f6039dbf0b6c3fd4f93160fb91cedf0db61febfc58b0fd44e7c781eda73a3f1e6c3fd3f94960fbb9ce4f06db2f747e0ad87ea9f353c1f62b9dbf176c9fe9fc34b0fd5ae7ef03db6f74fe7eb0fd56e71f00dbef74fe41b0fd5ee71f02dbe73aff30d8bed0f947c0f6079d9f0eb62f75fe51b0fd51e7a55d53edec9f74be2488b79dfd2aa89f4ac0b7f85365feacf3ad8d32b26c2194395b772854cf38d4bb4bd20e4bbbac6cd20ebf0e3669875f039bb4c3af824ddae157c026edf0cb609376f825b0493bfc22d8a41d7e016cd20e3f0f3669879f039bb4c3cf82ad4ae717824ddae105609376783ed8a41d9e07366987e7824ddae1396093767836d8a41d9e0536698767824ddae119609376f819b0493bfc34d8a41d7e0a6cd20e3f093669879f009bb4c38f834ddae1c7c026edf03d609376f856b0c9fef215d8a46dfe186cd2367f0236699b3f059bb4cddf029bb4cddf069bb4cddf019bb4cddf059bb4cddf039bb4cddf079bb4cd3f009bb4cd3f049bb4cd3f029bb4cd3f069bb4cd3f01db789dff29d8a46dfe19d8a46dfe39d8a46dfe05d8a46dfe25d8a46dfe15d8a46dfe0c6cd236ff1a6cd236ff066cd236ff166cd236ff0e6cd236ff1e6cd2367f0e36699bbf009bb4cd7f00dba33a2f6d751bb0c9b36235957ec309c7e16901be84a52a88b7edc7a90af25877992ac978e690f18c26e379998ce74c329ea1643cc793f11c4ec6f32619cf04329e85643ccbc8789692f1bc41c6731a19cf06329ef5643c4791f1bc4fc6b3938ce742329e42329e59643c2f92f19c4dc6338c8ce77c329e13c97812643cf3c9789690f12c26e3798d8ca72319cf3a329eb5643cc790f1ec20e3d94ec6d39a8ce72b329e19643ce792f13c4fc6730e19cf70329e93c9788ac978da91f15490f15c40c633978ce72d329e45643caf90f19c41c6b3868c6735194f2919cf71643cef91f16c23e3e942c6d3868ce769329e3a329e67c978aac9784e25e31944c6731e19cf91643c2dc978fa92f1dc4ac6339b8ce725329ece643c6791f1ac22e35949c6f32519cf09643c5bc978b690f1b425e3d94bc633918c6701194f0d19cfeb643cfbc9784ac8780693f11c4dc6d38a8ce763329e99643c2f90f1ac20e3594ec6731219cfbb643c9bc9788e20e32922e39947c6534bc6f32a19cfe9643c43c8788e25e3398c8ce719329ee7c878de21e3799b8ce714329e4d643c1bc978da93f17420e3d94dc6b38b8ca7808027011c01d8e4ff2dc126dfe1d90fb62f747e2fd8e41b3e6f82ed739d7f146c0f5b6c2d2c7cc2301d6cf2aeec176093fb338f804dde99f81c6c72de20fed5fcca8e07f2b78065c44f4b0b3ffafbdcc22579dcdeb24c5510eff6465f5581fd9b770506e3a1e6d945c6b39b8ca703194f7b329e8d643c9bc8784e21e3799b8ce71d329ee7c8789e21e3398c8ce758329e21643ca793f1bc4ac6534bc6338f8ca7888ce708329ecd643cef92f19c44c6b39c8c670519cf0b643c33c9783e26e36945c6733419cf60329e12329efd643caf93f1d490f12c20e39948c6b3978ca72d19cf16329ead643c2790f17c49c6b3928c671519cf59643c9dc9785e22e3994dc6732b194f5f329e96643c4792f19c47c633888ce754329e6a329e67c978eac8789e26e36943c6d3858c671b19cf7b643cc791f19492f1ac26e35943c6730619cf2b643c8bc878de22e3994bc67301194f05194f3b329e62329e93c9788693f19c43c6f33c19cfb9643c33c878be22e3694dc6b39d8c670719cf31643c6bc978d691f17424e3798d8c673119cf12329ef9643c09329e13c978ce27e31946c6733619cf8b643cb3c8780ac9782e24e3d949c6f33e19cf51643cebc9783690f19c46c6f30619cf52329e65643c0bc9782690f1bc49c6733819cff1643c43c978ce24e379998c673419cf1c329e4a329e16169efd8e78e45b31b26e99dfdfcc7def347cefcc13dfdb0ddfdbf3c4f736c3f7b63cf1bdc5f0bd254f7c6f367c6fce13df1b0ddf1bf3c4f77ac3f7fa3cf1bdd6f0bd364f7caf367cafce13df2b0ddf2bf3c4f772c3f7f23cf1fdb6e1fbed3cf1bdd4f0bd344f7c2f367c2fce13df8b0cdf8bf2c437f3f5b7ea872b7d9577ebdf04fcbf0218df74c4b8df6094f93781516cf83dea0a473c51d7ee1504be9516722f4b9e7926e0ff95c0e82aa62a0c4699b7c5d44ee0a974c41375cfa192c0b7d242dec5963e9509f83f8ebfec2aa62a0d4699b7c5d476e0e9eb8827ea5e495f02df4a0b79f759def94bc0ff71bc755731d5d76094795b4c6d039e418e78a2eef10c22f0adb4906f85c9376912f07f1c9fd1554c0d321865de1653387eee60473c51f7a60613f8565ac8b776e59b9709f83f8edfe42aa6061b8c326f8b291c3f6e88239ea87b6a43087c2b2de459b07ca33d01ff1f0a8cae626a88c128f3b698c2f16e863ae289ba173894c0b7d26298ce4b1fab04fc7f1830ba8aa9a106a3ccdb626a3df00c73c413750f7318816fa5c5709d97773812f0ffe1c0e82aa686198c326f8ba9b5c033dc114fd4bdd7e104be9516d53a2feff427e0ffd5c0e82aa6861b8c326f8ba9d5c053ed8827ea9e7135816fa5458dcecb37e712f07f1cff7db823c66a8351e68703a3d856024f8d239ea87bdd3504be9516f26dff15fa3701ffc7f1585dc5548dc128f3b698c2f1a06b1df144dda3af25f0adb418adf332264c02fe3f1a185dc554adc128f3b698c2f12b473be2897ab6309ac0b7d242becdb54cff26e0ff75c0e82aa6461b8c326f8ba9a5c053e78867b1c1b3d8a2c5a1f2adb490bedc4bf46f02fe3f01185dc5549dc128f3b6985a0c3c131cf1443dcb9940e05b6921dfd67e4bff26e0ff1381d1554c4d301865de16538b8067a2239ea8675013b3e03bea794a367c473d1bc886efa8fbdcd9f01d75cf361bbea3ee3f66c377d4bdb46cf88eba2f940ddf51f738b2e13bea7a3d1bbea3ae3db3e13bea3a2a1bbea3ae09b2e13beafc361bbea3ced5b2e13beabcc3b7e7be3d8fdbf7a13c77c8d7f6fc501e430fe5b1c45f1bf86b836cf9f6c7127f6d902ddff97a6de0dbf3ecb7e772fd5510445f8fbdedc8f752c3b7cce37396a58e7c2f367ccb3c3e3358ecc8f722c3b7cce3fdef458e7c1719be657e51167cb7337cb7cba2ef0e86ef0e16df0eb67759226878fd2d0c3855411e63e02d075a38aa67a95aef12bdaeaf635cafedbe8db9bf14439925a09febb643d66db61db9c88c7151109fefd204f890ef92299b3c3f7e1d6cd2eebf0636e917f02ad8e4d8f40ad8e499d4cb609367562f816db4ce7f0c3679768c7df6e5f9ff36b055eb3cf6151faef35bc0267da9b08fb2f487db0c36e9d3887d63a55fea46b049df62ec9329fdc3d7834dfaf8635f40794f632dd8e45d1bec8326ef4bad06db5e9dc7be4ff21d9a95609baef32bc0f6079d5f0eb68774fe56b0fd5ee7bf02dbef747e11d81ed4f9b7c0f65b9d5f02b60774fe45b0fd46e75f00dbfd3aff3cd8eed3797c97edd73abf0b6c9fe93cbe43354de77782ed573a8fefeedcabf3dbc1f64b9d7f0e6c5375fe59b04dd1f98560fb85ce2f00dbcf757e3ed826ebfc3cb0fd4ce7e7826d92cecf01db4f757e36d8c6ebfc2cb0fd44e767826d9ccecf00db589d7f066c3fd6f9a7c1f6239dff126c77ebfc62b0b5d0f9a560933123b19f4aa1cebf0db6563a8ffd8fe4fbfe13c17698ce4f005b1b9daf039b7c1b6e34d8643ce85ab02574be066c47e87c35d8e4fc6c38d864fc9361609373a9a1606baff343c026e73d83c126e3590e029b7c83b42fd88ed6f94ab0c9b7f52bc076acceef079b8c39f626d8e4bb757bc12663313f0236f95ef574b09da4f37f009b8cc3f210d84ed1f9df83ed549dff1dd8e41b9e0f82ad44e77f0bb68e3aff00d84ed7f9df804dc6c8ba1f6c67eafc7d6093b1837f0d36f9def36760eba4f3d3c0768eceff0a6c3296c8bd6093f1417f09b6ce3a3f156cf21dee2960bb40e77f013619efefe760936f0c4f069b8cebf633b075d5f949602bd3f99f82ad9bce8f075bb9ceff046cdd757e1cd87ae8fc58b0f5d4f91f83ad97ceff086cbd755eda19b53fabfd7c9f9eaf0ae23b2f53fe3e0c1a4ee9ae0d840179e23cd72e061ef4b527f6ba9725cfeb65bf6fa1d72b31b4077cef8edd77ea9ae203bdae42bddedd86ef4228738e6e1cd47272cc6fa997db6b2c87f7b164ddb2cc8560df65acbbbdaeef078eeabbdb60126ed441ca9caf99d4b1f1073adf069689912d797d2cb11680863855415e18dc6855568ae7bd8de1f90078f6c4ce93ba5e771113b86fc57dbd6edec73563ad18caec06fd7639d00ff77559b7cc8b3fcfec993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367f6ccfccc8a679fcee3736529b78f84516c7b80c7c57d7e7c0e2beb57cf75769d56ef774fec7e1b3edf6ba5d75b6ad4b910ca7c0dcf9cf6ea7c11fc5fb65bd4b674f09c30edb6147f45501f7c16b4cf11cf1e83678f450bc997c4e6bb6ca41b8dcb4adb050d9f2dee36ea839abada5ff7e87515189ae2fefaa1c183cf468b80f723fd9b80f57c047570b08fa78d0bf187fbd21eb049fe436074b19df15822ed813c0fc767d352e657c673f1f8b77d59a9cb76e37da8535570607c174299df41dbf7b9ce63df907da0db3f2cff9729dd736ad14fd57947fc754e6edfedc059057ed0f77bc01a93ef06efd014e8247ec45e08f9bf437f0e29277a88d6c28ee39523bbb9dc87c672c55066a7a5fe5541bcf5df61f0ec3098d536f912e2ec1f70fc77d526ed8cd0e842d048caec018df63ae2d963f00887f8536564fbb736cac8b28550e67f411ba5ea22edbcd413fbb6e031c0d5714c7cc9ba65de766efc01309a7554f131f0d87ade3db1f3e656ffafc34a52bfd8aec7d5ff4bd6dd5e2f2b1c81b1fe5258bf70b50ea28f2dffb37d4bead7efb27fd95ea3cec2823a4b997625a95f156797e97c26e7fa87eaba2dea5c7fa7039e44d0f0da5b4de98eef788c79df018fa37a96da8e5dbb8c3a1543994e504f07e73169df05de01be5d6c73d442cea1761b5a1442998e25a95f693ba274c46bd50fb2529732ebf960a9a52e52a653497d5dda803d4e2697dbed3da8935aef1e4b5da5ccf925f5ba74d1f9046c27bc6fd2d7f27f99d2b5073816cfd6f8eb9cdcbe5b80b30afca0ef77813526df0dbe0522e7fbe247ec8590af2ca92f2be5440fd15ad8d53e22effc21bbb9dc6e63b96228b3cd52ffaa20defa6f3578b61acc6a9b742da9cf4b1cb96c37b74568540a1a4919bc7f2cc7767cefce76dcdfe3883beab8bf0718cd7613cf5d5cb2ed35d8cc7ba8b6f3412983e76452e6ea92d4af6a671396b2e6bd6117f731f11dd400ea111875950963c0c1b561395e3b493b257eba807d8fce8bce5d0ced0aa1cca092d4afc3f36eebbd4bf3fa0eaf2984dbdcb7f0dd8f2125f5dc3876e21efd5b04b64ff4afa3ebb472db3d43e1b0dd331c5e52cf8ecb0ad7c796ba98d7c82d8203efa97f6d94c5fb6ee99633f3e638944adf4f8c72363f78cd13dbbb1a5d4b4b91a94560bf5ff0a1c15e101c38e6a6ec071873e67d942ec67af03e4a5d49ea57da24b3acdaf6ff7e74bd3eb21d453b6c4f30263f04c62a9d2ffd6653575bfd655efc29c68f8c3ab869bb52ef2b65721f782ff0b868db1db5d1a5788c6d13db7a7b57db8eff1f1a5a65f179adf5986f3e736f63e4e3f15d5663bbff64d362b785c7d57394282d765b7cc7a7458f91b6e3874d8b5d169e5d59d66297c5778c5ad4e27dcf745abc6fe171712f2a9d16ef5b7cc7a745cfd274cf35508b9d161e57f71ea2b4107f9932ef22606e63e4e3f15d5e6dbb4f66d3628785c7d5757394163b2cbee3d3a26b0fbc47974e8bed169ef8efcfa5d762bbc5777c5af4ea8df7f0d269f19e85c7d533dd282ddeb3f88e312e46d9eee5d8b4d866e1d996652db6597cc7787ed8c376afcda6c5560b8f83fbae69b5d86af11da31623f0be6b3a2db65878b664598b2d16dff16951dddd764fd8a6c5bb161e57f784a3b478d7e23b3e2d46f452be3737428bcd169ecd59d662b3c5778cd750c9b8d8d4082d3659783665598b4d16dff16951933cd7dad8082d365a783666598b8d16dff169519a3ca66e6884161b2c3c1bb2acc5068bef18e322793db9be115aacb7f0accfb216eb2dbe633c8e24e3625d23b45867e15997652dd6597cc7a7456df2fed3da4668b1d6c2b336cb5aacb5f88ef19e4b322ed634428b35169e3559d6628dc5777c5a744b1e535737428bd5169ed559d662b5c5777c5a8c4a3e135bd5082d5659785665598b5516df319e7726db8b958dd062a585676596b55869f11de37967f2fec58a4668b1c2c2b322cb5aacb0f88eb1ed4c9e772e6f8416cb2d3ccbb3acc5728bef18cf3b935abcd3082ddeb1f0bc93652ddeb1f88ef1bc33791c79bb115abc6de17135064a94166f5b7cc71817c9b6735923b45866e15996652d96597cc7785f2bd9762e6d84164b2d3caec66b88d262a9c5778cd723c97b7c4b1aa1c5120bcf922c6bb1c4e23bc66745c973f0c58dd062b185677196b5580cbef7c6ee3bd59f5b7c485fac0b0c2d0aa1cca91d53bfd2172b4a475907f62bc3babc157b5d52fdca1645d4e52da88b943913ead22670324651b9a3ba2663e64da8935aef4796ba4a99733bd6ebd259e713b04d3e06ddfa58fe2f5381315f0579d14fd5f9f5f8eb9c8cd5d780b30afca0ef57813526df5dd177814ee247ec8590efddb1beac94133d446b6157fbc81b3a8fece6728b8de58aa1cc1b96fa5705f1d6ff7583e7758339f9de03c499c4919bb62bc5f44684461780465206fbec7de488c7ec43281ce24f9591eddfda28837d28a5cc45d04661bf52a9672238b0dfa4a3b6ac2bb2cbba655efc15836d2f309a7554f1f119f4fd94b122641c0965937121bac17a7a1a3655d75e8eea2abe64dd32df0b18659c8a9ed9672c6b2c630f8351f1f471a0198ebd2153bae3451fe0e9ed80c7513d93c7a10aa34ebd8c3a1543197cb7b1c2413d0bc0afac5be62bc0b78b6d8e5ac831f95c438b422833dc387f8cd251d6a1e2b7a7a52efd1cd745d62ded52bf2cf8ae347c77377c278286db3908d2ef5f95c0dcd701b35a6ffff8d75b8ae76d1253e2a73bd469006810579d705d729e37c0d0b610f253e13c4fca4959397e09bb8a65d996c86e2ed7c758ae18caf4b3d4bf2a88b7fefd0d9efe06b3da2677c3b99d83fd211903fd0c0e99ef0edaf58fd0ae1f682765f0f8d7c391767d0d1e99ef013c728e530136395710fe04fcbf5b16b8cd76afc2c22d361c27ae8785b17bfc8cc9739d1e06a3cc770746b1f5059e4a479a99dbfa5c431f3c2eb736cac8b2855066161c1b1396b26abfeb54505faf96da1edbbb63ba4d6fed402f1ca731007d0243c300f4927ab672c0d336a81fab71f294ba4923ee1a75e3a8d4a347412b3430f1b7c0528d1660c37c4b8b2d081a0e495908361992b215d85a18b2e05098525e86b4732117ea21eb2e3438db004b9cbe71384f99d285ce61c0e3229455e8c8909e3a746e9d3466ca288c8f560667536247fdaf659a7251eb72b51dcc7da20ae6cd182c74e4bf25d4b70ae6c59fda3632b4ea841123ef1930e9aea9e3468d9f32198532776ccc17040d3780f91b25b8ab9d0e03002b8c8d432ba35ed860c8ff64c3b48d9fb31cc7cc35b509c09f4c6d41b7c31de8a6d62f63df8e1c3176ecf553abc78e1979d9d4f123a78ca91b8f5bb38da15cd49696ffb7069bad89c7b26ac2660b973dcc62b34d38ca701bb0c991eb70b0094f5bb0b584bc9437b78c9370ed04eb975d4afd4f89d34a57fcb0a03e04e470acda55b5ffaa5339f50959752aa48636569b530d5dacee18aaa189d557ecd4d0c36aa86135b4f089416ae8603554f029416a2860f5b58b922035b4efe9416ae8de3383d4d0bc6703dfb781f99c2075daa586d6ed1ca486ce55b72ebb04a9cfbca977ebd5e9bbba2da04e79d5259e3afd54a79deaf242ddbe50b7b2d4299d3a5d56a782eaf44d5d8ef4d75a0f08d34561ba384c9784e9d2305d16a6cbc3744598ae0cd35561ba3a4cd784696098ae0dd37561ba3e4c3784e9c630dd14a69b83d4f0ceb704a9e1d7d5f0cfb705a9a1a16f0f52c346df11a48694be33480d373d22480d453d32480d533d2a480d617d57901ade7a4c901a26f79e2035d4ae1a82777c901a0e5b0d93ad86cf56c3fcaa2181d590c26aa861352cb11ac2580d81ac86467e20480db9ac866c7e38480dfb3c3d4c8f86e9b1303d1ea627c2f464989e0a52c383ab61c36704a961c6d5f0e3b383d470e57383d4f0e66ad873351cba1a265d0d9fae865557c3bcabe1dfd5b0f02f85e9e530bd12a41e49a84731ea1185bafdaf1e83a95bd46f05a95be74b82d4236ef5c85f7581505d425417991541aa0b95ea52a6bad8a92e87aa0ba6ea92aabae8aa2ecbaa0bb7ead2aebaf8ab571ed42b20ea9518f58a907a654abd42a65ea953af18aad744d56b97ea3562f55af59e20755b7c5f907a54aa6e87ab4703ea96b9ba7dff6998be15a462f23b61fa6e98be17a6ef87e90761fa61901ad6580d77ac864b56432bab6198d590cd6a28673514b41a36fab32035f4b41abafab7416a48ecdf87e9f3307d11a486d7fe324c7f0cd35761fa5398fe1ca6bf84e9af61fa5b98fe254cff1aa67f0bd3dfc3f48f30fd33a81f661b1b921375eba3af60821153a68c1a37614ac994ba927153c74e193361ecfd25d3c64c195d5277efa849b563eba6e1c2dfd60bcb18e103264d1a717fc998f135a3ee2ba99b3aa5a4aeb6a4ba6eeaf89a0607f1bfe8854e3ed0e3889a9a6867fff94d48ff6f139d1eaedb45197dfdcaf4753ba265130439b2290bf568d9b40a4dd24730b9d4bd29751e5c32796cdd9492d292f1e1dff0c05b376d544d9712fcdfe450e4c9534a264f1931694a49eda4ba71255dbbe07a1f69db844afc575b3730679dd834713ae9ef2c3529c47e795a1314f88fd39a46dabae41b90b62d699ad3929226d4f0eca62c745513096f2e899465f2d4ea2993468c9c12bdf06ddf64e13b9b52cdf14dace6291d9be0ec8ca62c34a063d308ef6c8ab39919380bfe1bf7f9a6538c550600", "isInternal": false }, { "selector": { "value": 2603445359 }, - "bytecode": "0x1f8b08000000000000ffed9d77741cc795ee7b901846000892600e50a299000e06194c60ce9428c9ca8120098ab4488222a16459966449ce3967cb692de79cd7da68efae77bdebb5d772f63adb92d3fbe71dbff3f61c9fadeaa96b7c28768f31a3bee06dcced732ea6fa4e4ddf5f7d7dbbbaa7aaa791090acb1f8c655cb9dad8c5c1b90bbd3fe05e734f6f694f705b394ece4c4a38ab52c2599d12ce9a9470d6a684b32e259c5352c23935259cd312e4b46c55c1d82569dee90cba26cd984d99a617a440d3fa9469da90024d1b8374f4513352c2d99412ce9929e19c9512ced929e16c4e09e79c9470ce4d09e7bc9470ce4f09e78294702e4c09e7a294702e4e09e79294702e4d09674b4a382f4c09e74529e1bc38259c97a484f3d204395701e732f7fa0cf7badcbdae70af2bdd2b7d66b57b6d756dac71eb6dc6d6583663edde7b79631dc63a8d7579ef751beb31d66baccfbdd7e2deeb37b6d6d83a63eb8d6d30b6d1e9b0c9d866635b8c6d35b6cdd876633b8ced34b6cbd86e637b8ced35b6cfd87e639719bbdcd801635718bbd2d855c69e69ec6a63d718bbd6d8751ecbf5c66e3076a3b19b8cdd6cec1663078d0d1a3b64ecb0b123c6868c1d3576abb163c68e1b7b96b1db8c9d3076d2d82963c3c64e1bbbddd81963678d8d18bbc3d89dc6ee3276b7b17b3ccd9e6dec5e63cf31769fc7f95c63f71b7bc0d883c69e67ec21630f1b7bc4d8f38dbdc0d80b8dbdc8d88b8dbdc4d84b8dbdccd8cb8dbdc2d82b8dbdcad8ab8dbdc6d86b8dbdced8eb8dbdc1d81b8dbdc9d89b8dbdc5d85b8dbdcdb1d081f07663ef30f6a8b1771a7b97b1771b7b8fb1f71afb2b63ef33f698b1f71bfb80b10f1afb90b10f1bfb88b18f1afb98b18f1bfb84b14f1afb94b14f1bfb8cb1cf1afb9cb1cf1bfb82b12f1afb6b635f32f6b8b1bf31f6b7c6feced8df1bfb0763ff68eccbc6be62ec9f8cfdb3b17f31f65563ff6aecdf8c7dcdd3fcdf8dfd87b1af1bfb4fe7fb867bfda6ab4be362ff65ec5baefc847bfdb67bfd8e7bfdaef799ef19fbbee7fb81b11f7abe1f19fb6f57feb17bfd897bfda97bfd997bfdb97bfd857bfda57bfd957bfdb57b7dd2bd3ee55e7fe35e7feb5e7fe75e7fef5eed9ceae5cd85f2d46074190812eaa33a8fe6ec9c0a89bf2c18bb582daadd7bf4dae2fc356e9d5e49bb5ab75eebf9ebdc7a9db79da96e7daae76f72eb4d9e7f965b9fe5f99bdd7ab3e79febd6e77afe4bdcfa25e0cf0630e6eafcd657ed5c19f051be5681afd6f9aac157479b03df14e7ab051feddf3af04d73be29e09bee7c53c19775be69a4a5b10b9c6f20482a57728376bbf5496fd7cd433524cf7bd86eb791897746f2bc4376bb4d0cbc363f66ba6dcd80bc99e57c4de09bed7c33c1e7baa03f1f73d637c7f966836faef335836f9ef3cd01df7ce79b0bbe05ce370f7c0b9d6f3ef81639df02f02d76be85e05be27c8bc0b7d4f91683afc5f99680ef42e75b0abe8b9caf057c748fcb85e0bbc4f92e02dfa5ce7731f8a8afbd047c746d78a9f3d97e626a063ee3fcd447859fa1fe197ccba96f06df0aea97c1b792fa64f0ad82d8e45b0dfd0af95a9d8ffa28fb5ebf2b0f04491d13f9f098589bf476cd96ed76d727bfdd70de6e4330aaf500c4590b5a6d74e504ef0d6ac7d819671487fc3550de0575a91ee941e71962b7fdfe3a57de58e473fddee71aa0ceba88f60f04c9b67fbdc7b3de63ae85f6f3e46c475e7376dc4bc9397b0dd4f5738fae792663ceee050e869cedd69c1df75272ce0e415d3ff7e8ba7732e6ecf5c0c190b3833c399bcf69ce16c6c882203af7e8bbcf64ccd963c0917cce7669ce8e7f2939671f84ba7eeed1f7dfc998b3770247f239db33a8d706e35e4aced957405d3ff7682c6632e6ecc3c0c190b343dacf8e7b293967df0675fddca371c1c998b3af068ee473b68f29673b346783c27c671044e71e8d514fc69c7d143892cfd9c33a3e3bfea5e49cfd3cd4f5738fe64b2663ce7ec495ed3cc337dc3cc322f07dd3f916036ff2b97da49329b7f39adb85fb4082203a4769ee6e32e6f6e3ae6cf3f809b8f7807cdf76be0bc1f71de7bb087cdf75be8ba15d0cc7c0a01e03e35e4a3e06be0f75fd5ca679e4c9780c7c1d381872f6b0e6ecb8979273f649a8ebe71eddd3301973f647c0c190b3439ab3e35e4aced93f425d3ff796bbf264cc59baafd45e2ffcd85d2fac04df4f9c6f15f87eea7cabc1f733e76b05dfcf9daf0d7cbf70be35e0fba5f3e5c0f72be76b07dfaf9d2f0fbe279daf037c4f395f27f87ee37c5de0fbadf37583ef77ced703bedf3b5f2ff8fee07c7dce67efc9a37bafbeea7c76df92460341b2fb96eeb1a46dd3faea0988dde8c56e9cc0d84d5eeca688d8ad0cb1b31083968cb73e00e5565e9e5c4330f6f71f146b4df2b13a6cdbdb82f1b77d0df0e418da9e8518e3e1c9014f7bf23ce1bdbef9e4b71beee3364fd32cc46a83767530b42b03b168dbb44ef11ac087fd7747046367f28cf90cc4a26dd37a2730920fcf27745ea7e3c79e0f97654679198ea5f09a88e2d1b3bf88630df8a9ceef678fb2ad746cf5f03e9e5bdb3d1f535e867941b168dbb44ef1eaa13ded13cf981f2f63ce63e4ea2332108bb6edc7c6e3bd75e2351bd77e6d00df79e893f2e5f649f5c03611d72971fb5a4a6c8ef355066250df469ae7c14f75e6b81f24d8be6d07f4bb0cc75fbed4eb37ec0f92cfe37c0e8febf1f074000fc7b1cf74bce6f0bcffa720d95cebf2b46af7b46a803a9da05f17837ec5ae43289e322bb3322bb3322bb3322bb3322bb3322bb3322bb3322bb3322bb3322bb332cb67c6fb2f707e93eaad16c248be3cf0708cf387cf8f72dba2eddb799defc0bc4ef2f316f91cce59d23d862bbc36d7409da732a3757f00f3e9fedc20ce69aee6d56e5cf759d407e7cec572ce21c6cd0347cd5fb624163b7f986bbecddea3669f43d6e6e9ba3a425386fb54c6689af134c5fb1457793c364fe7578fb271ccfd953a17895a5139c9b93dbcc78077bf14fa0fca85aa606cff81e799eec4638f9dc3a4f9f26e2f760dd4f97f99d17d43f7a2d2ff39f4ef79b2757abc6dd3675680bfc7dbf60cf759e2a8f5b6df069fa53aff037deadbab823f6bc671ff07f6cb01b415970128e3bc79f2e7e1c23c7e47093c5dc0c3d1cf305d6fe4f018487a1ebfc7d32aea3a86ea74837e3d0cfa455d8bd23ac55366655666655666655666655666655666655666655666655666655666655666f9ccf85b5162cd42bdbc10c609baf7219ccfa0e7bfd0f6edbcce4bab46e372cfc3d19cd34aafcd3550e76b55a3755fe9caf5c1b9f73bc4ed4b86f9bca2fb92e2d5437b702e88ebf7dc9d1e4f678416546e492c76611e3f798d47e7f13b3c5df3119a721daf38c78a9ae2f1daeef1e0dc687d70eebd2559d8ce44dc3b149717140f8fa54ef051197f1fcdb19ff15ce2dfd743f170fefa31a7ed8c806bdfe7739cfd462fb469203837bf6ba0ce87a1effba82be33d1c78efc8e311efd3526c9e9af46379965dae30efbb163807200ec65e07ac09c56ec7d819671487fc3550fe52d5685daa477a90d6c46e8f117a2618b2fb9f6bf73ed70075fa22da3f1024dbfe7e8fa7df63b6fbe41390678fc3f99fab4fea8bd16805684475f03a88eb9e3cbf8ff4ef6fc4fbf6eabc3a78cd4275be027d54dcfda351f71c729dc7e2ee398cba36ee0246bf8dfe7d9e957e9fd613d05f247d9fd6139043789f56e06d7f256c9fb8ea82f8730bd5f99eb77dff9a9c3e83f781519d1f427fd1e8ee59ac0fcebdfec67ba626e2fb55dc7dd2140faf6bf0d8fe4b6db7ccbd507f204166cc0964c1eb04aaf32b6f9ff5c470af89f8ec53319f25ade83954f8fdc5d7cfead0079f19484487c231dfefb585f2ba0fda4275fe8f770d98fc754be11a30f9b68ebd26a17ea033a2ad54e7ffc2b1f647b8c6a3fd84df3beaaacf7d9f9662d780a49f6df3443f1f18634b783e706df5685dff39bfa475a9cf07eef63e27f1f9c0ff1ff2ac0eee43e7eaabd7c568b41234a23af8db203a8fe0b37ca3ce315cf7f6c79d63a29e4189fd7363f5c4b3f9e36a51d70854873e8bd708b31df30ca7b35fd71f2fa4f36592f70de36f25da202efe56a28d49cf1ce83600eb785d703e63e79862c73d733a3701b1e39e393d11b19bbcd84d13185b3557cd2569cef04ce4f0f767f8cc52bb14bb2e258606f85c550a18ab53c0589302c6da1430d6a580714a0a18a7a680715a0a18a7a780310b8ce7f3dccea04fbe5c7db8f657b16b0d8ccdf0bf4bf2a5feff0ee6ffa552f4da0763337ca70bb5680dc6af057ecfe378f643a9ffeb8518f07f17cc4c01e3ac1430ce4e0163730a18e7a480716e0a18e7a580717e0a1817a48071610a1817a58071710a1897a48071690a185b52c078610a182f4a01e3c52960bc24058c97a68071993226c2b88a97315f2ea3e5e1f89f7f4fe77f8e31f0e4a2ee3965faed49c9ff6f8df9f9a4ede53e370eef2de1fd9f704fefd9761cf78e94fa6cbb62ff6f9589315f2e23d77decf83b9ef1f0e0ef22a37e5bc3c0982f9791ebf72ff81bbdf1f07483665d119a3130e6cb65e4ba57aed47b39f19efeee08cd1818f3e532e27dd509f2849af594c0d30b9af54468c6c0982f9791ebbee42cc4180f4f1f68d61ba1190363be5c46a6dfb6859af595c083bf01eb8bd08c81315f2ea3e559cba4597f093c6b41b3fe08cd2431224fd2cfc9ee8f88c5f19bc152db4e0cc8382d058cd353c088f74970f45fc5ee93e8e7d5275fae3e5cfbabd87d12189be1f731a116f87b88bfa4c57a5e9ea2f74960ec0d4c5ae0ef55fe92161b8087e3f7335988311e1e626880cfcd4c01e3ac1430ce4e0163730a18e7a480716e0a18e7a580717e0a1817a48071610a1817a58071710a1897a48071690a18f1bb2ac3b562d1ef2f1b2679ecb8ef2a933d76dcf792c91e5bf35cf3bc12626b9e6b9e57426ccd73cdf34a88ad79ae795e09b135cf35cf2b21b6e6b9e67925c4d63cd73c97143b0d63fcca38f91891a725399e1cb61d630d0868fb40044f86a9ed186b9380b61343da1837a680716d0a1855c7c23d88e5305a9ecd4c3c9b4ae0d90c3c5b98783697c0b30578b626cf13e6d496127888a1013eb736058c1b53c0a83aaa8ed6ec927b7a8bea2888310d3a2aa3322aa3329e0fc634f4e1ca988a7ccc97cb6879b625cf136ab6b5049e6da0197dae9d97315f2ea3e5d99e3c4fa8d9b61278b68366db22346360cc97cb68797624cf136ab6bd049e1da0d9f608cd1818f3e5325a9e9dc9f3849aed2881672768b623423306c67cb98c966757f23ca1663b4be0d9059aed8cd08c81315f2ea3e5d99d3c4fa8d9ae1278768366bb22346360cc97cb6879f624cf136ab6bb049e3da0d9ee08cd1818f3e5325a9ebdc9f3849aed2981672f68b627423306c67cb98c96675ff23ca1667b4be0d9079aed8dd04c2ae3da14306e4c0123b38ef972192dcf7e269e7d25f0ec079ecb9878f697c07319f05c9e3c4f98539795c0430c0df0b9b52960dc980246d5517594c4a83a568e8ecaa88cca581ae3400a18755f2ba3544686ef57457f4373d9248fdde8c56eac90d871bfa199ecb135cf35cf2b21b6e6b9e67925c4d63cd73caf84d89ae79ae795105bf35cf3bc12626b9e6b9e57426ccd73cdf34a88ad79ae795e09b135cf35cf2b21b6e6b9e67925c4d63cd73caf84d89ae79ae795105bf35cf3bc12626b9e6b9e57426ccd73cdf34a88ad79ae795e09b135cf35cf2b21b6e6b9e67925c4d63cd73caf84d89ae79ae795105bf35cf3bc12626b9e6b9e57426ccd73cd7349b10f241f3b5fea33660e000fc7336f98da99b3dbbdc26deb4f09ea67b5bad2d3ea324fab06a87305e87725837e19884bdba6758a572af333043033c5cedbfe651ab49f626cf4f4b0f1af626a7b5c5f7fd5248f1dd7d74ff6d8717dfd648fad79ae795e09b135cf35cf2b21b6e6b9e6b994d858ae0d46afdbe9f9a7761bcf74e51ab78eace4a73a974f29bcce08f418e288adc7909e2b2a21b6e6b9e67925c4d63cd73caf84d89ae79ae795105bf35cf3bc12626b9e6b9e57426ccd73cdf34a88ad792e2fcf1be0fdaa09e0093c9ea008cf06613cbb85f1ec10c6d32b8c6789309e2e613cf384f1e485f1cc14c6b35518cf34613c2b84f1540be3d9248c27278c67af309ea5c278560ae3992f8c6796309ee9c2786a84f16c16c6b34618cf3e613c7b84f1f40be359268ca74f18cf36613cddc2781608e3e910c6335b18cf2a613c59613c6dc2786a85f1ec14c6d32a8c67b9309efdc278d609e359288ca75918cf05c278ea85f1d409e3592f8c6797309eedc2787a84f12c12c6d3298c678e309ed5c2781a84f1340ae3d9228c678a309ec5c278e60ae399218ca74918cf54613c13f1bca15278320278b2c1b9cf24cbc2fb07c057e57dd6f657edcda3ef5fedfc55f0996b5cb93a62db57838f7e1b7e4dc46751a7aba12d03ae9c7b7a4ba813c61a80758a570f1cd708e139208c67aa309e26613c3384f1cc15c6b35818cf14613c5b84f1340ae36910c6b35a18cf1c613c9dc2781609e3e911c6b35d18cf2e613ceb85f1d409e3a917c67381309e66613c0b85f1ac13c6b35f18cf72613cadc278760ae3a915c6d3268c272b8c6795309ed9c2783a84f12c10c6d32d8c679b309e3e613ccb84f1f40be3d9238c679f309e35c278360be3a911c6335d18cf2c613cf385f1ac14c6b35418cf5e613c39613c9b84f1540be359218c679a309eadc278660ae3c90be399278ca74b18cf12613cbdc2787608e3d92d8c6783309eaa081e86ff7f19f2d0fd6bb46d5a3f202436c37e08ffefe7b54c6dbace6dabd66d97f8295e0dd4b9de5d18d8fbabf0b3c4e5df6f88f7ce5d071a5dc7d416da1f196fff30c7cee37d950130049e3e41040fc7fda84ced1c938709feffd99cd5ea7a4f2b7fdf35409d6b41bfeb19f48bcaed3f1f03ee358dcc9687ce1dc49a857a1b843092ef2a5e9ef0b8dd108c5d8a1db7d7030f471fc6d4cef0f8bac16bd38608dda90ee6ea0d0ced8c3a7668fd06d80f6963b63c9b5c9958b3506f931046f25dc7cb131e5f9b82b14bb1e3eb06e0e1e87f98da191e5f377a6dda14a13bd5c15cbd91a19d51c70eaddf08fb216dcc9667b32b136b16ea6d16c248beeb79793ab3d0665a8a1d5f37020f47ffc3d4cef0f8bac96bd3e608dda90ee6ea4d0ced8c3a7668fd26d80fcaaccc51cc96877e6342ac59a8b7450823f96e60e5e9cc65a1cdb414ebc76e021e8e7e9e49f7b01fbbd96bd39608dda90ee6eacd0ced8c3a7668fde688d82d41b25adc320e2d6e89e0b96582b5a078a5325f9b4266d559758e63569d55e73866d559758e63569d55e73866d559758e63569d5567bba8ceaab3eaac3a27c1ac3aabce71ccaab3ea1cc7ac3aabce71ccaab3ea1cc7ac3aabce71ccaab3ea1cc7ac3aabce71ccaab3ea1cc7ac3aabce71ccaab3ea1cc7ac3aabce71ccaab3ea1cc72c4167cb43cf8821d62cd4db2a84917c37f2f284bf0bda1a8c5d32defa00946f019e9b18f4616a67780ff941af4d5b2374a73a787c1d646867d4b143eb07613f1c2c81f9e61432abcee5315b1e7a562cb166a1de36218ce4bb899727ecc7b605639762fdd841e0e1e8e799da19f663835e9bb645e84e75f0f81a646867d4b143eb144f9995398ed9f2d0ffb021d62cd4db2e84917cb7b0f2e4c3df376e0fc62ec5fab141e03998384fa11f63d03decc70e796dda1ea13bd5c15c3dc4d0cea86387d60fc17e2885f9e61432abceaa731cb3eaac3ac731abceaa731cb3eaac3ac731abceaa731cb3eaac3ac731abceaa731cb3eaac3ac731abceaa731cb3ea5c393a5b1efadf21c49a857a3b843092ef202b4f4738efb02318bb64bcf501281f029ec1c4790af30e0cba87f30e87bd36ed88d09deae0f17598a19d51c70ead1f86fd30d9996f4e21b3e6c6c4306b6e28731cb3e68632c7316b6e28731cb3e68632c7316b6e28731cb3e68632c7316b6e28731cb3e68632c7316b6e28731cb3e68632c7316b6e28731cb3e68632c7316b6e28731cb3e68632c7314bc80dcbb3d39589350bf5760a6124df202f4ff8dc839dc1d8a5d87d3b8781e710833e4ced0cefdb39e2b5696784ee54078faf230ced8c3a7668fd08ec076556e62866cbb3cb9589350bf576096124df215e9eb01fdb158c5d8af563478087a39f676a67d88f0d796dda15a13bd5c15c1d626867d4b143eb43b01f945999a3982dcf6e5726d62cd4db2d84917c877979c27e6c77307629d68f0d010f473fcfd4ceb01f3beab5697784ee540773f528433ba38e1d5a3f0afb419995398ad9f2ec716562cd42bd3d4218c9778497279f8536d352ac1f3b0a3c1cfd3c533bc37eec56af4d7b2274a73a98abb732b433ead8a1f55b613fa48dd9f2ec756562cd42bdbd4218c937c4cb131e5f7b83b14bb1e3eb56e0e1e87f98da191e5fc7bc36ed8dd09dea60ae1e636867d4b143ebc7603fa48dd9f2ec736562cd42bd7d4218c9779497273cbef605639762c7d731e0e1e87f98da191e5fc7bd36ed8bd09dea60ae1e676867d4b143ebc7613fa48dd9f2ec776562cd42bdfd4218c987e78bfd4c3cf51e4f7d8416933176a317bbb142623779b19b2a24b6e6b9e67925c4d63cd73caf84d89ae79ae79510bb52734d35af4ccd33e751f3cc79d43ca39a8bd4fc4fc9c5ee6a0846972a88758ca99db80c4019c7e768e915c6b344184f97309e79c278f2c278660ae399268c6785309e6a613c39613c4b85f1ac14c6335f18cf2c613cd385f1d408e359238ca75f18cf32613c7dc278ba85f12c10c6d3218c67b6309e55c278b2c278da84f1d40ae36915c6b35c18cf3a613c0b85f1340be3b940184fbd309e03c278ea84f1ac17c6d3238c6791309e4e613c7384f1ac16c6d3208ca75118cf14613c8b85f1cc15c63343184f93309ea9c278320278b2c1b9bf47c1df1354838feeefdf0fbe67b9f201f05545c4a0ed1c071f8d9fd2366c7fb3aef95c862af8cc6d115ccf8a8847716e8bf8ec44e88eb106609de2d503c76d4278a60ae36912c6334318cf5c613c8b85f14c11c6d3288ca74118cf6a613c7384f1740ae359248ca74718cf7a613c75c2780e08e3a917c67381309e66613c0b85f1ac13c6b35c184fab309e5a613c6dc278b2c2785609e3992d8ca74318cf02613cddc278fa84f12c13c6d32f8c678d309e1a613cd385f1cc12c6335f18cf4a613c4b85f1e484f1540be359218c679a309e99c278f2c278e609e3e912c6b344184faf309eaa089e034c3c71cf53382020b69dc7a173158d1966e1fd89f81de0018f91d68f0123f9f03ed41c134fdc33287202625b2dd640d92e59781f7fc7c59553398f91d6a3720aef4b5bc3c413f7dc8e3502625b2d68ec92ee01c8c2fbf8bb05ae9c5ae331d27a544e35f1f284ff5ba23518bb14bbd7088f398e7dc8d4ce1c1e7f093e4323f259d4ad9e560d506722ee938feb0f289e322b731cb3e5a1b90b62c5f3d944fcee6d3c8c51e757069eb07f6c0bc62ec5fac763c0c371fe606a67d88f9df0dad416a13bd5c15c3dc1d0cea86387d64f44c46e0992d5e2e438b43819c1737282b5a078a5321f4821b3049d2d0fdddb46ac59a8b75a0823f972bc3c61ffb83a18bb14eb1f4f020fc7f983a99d619f70ca6bd3ea08dda90e1e5fa718da1975ecd0fa29d80fa5309f4821b3ea5c1eb3e5a1316462cd42bdbc1046f21d63e5c9e7b2d0665a8af563a78087a39f67d23decc786bd36e52374a73a787c0d33b433ead8a1f561d80fcaaccccaaccccaaccccaaccccaaccccaaccccaaccccaaccccaaccccaacccca2c9bd9f2d06f1b89350bf53a843092ef242b4f61dea12318bb149b7718069e5389f314e61d18740fe71d4e7b6dea88d09dea60ae9e666867d4b143eba7613f28b3322bb3322bb3322bb3322bb3322bb3322bb3322bb3322bb3322bb3322bb36c66cb43cfdc26d62cd4eb14c248be53bc3ce1efb63a83b14bb17987d3c0c3312fc3d4ce70dee176af4d9d11ba531dccd5db19da1975ecd0faedb01f945999a3982d0f3ddb8a58b350af4b0823f98659790af3a75dc1d8a5583f763bf070f4f34cba87fdd819af4d5d11ba531dccd5330ced8c3a7668fd0cec8752984fa4905975569de3985567d5398e5975569de3985567d5398e5975569de3985567d5398e5975569de3985567d5398e5975569de39855e7cad1d9f2d0ff5c23d62cd4eb16c248bed3ac3c1de1bc437730762936ef70067838e66598740fe71dce7a6dea8ed09deae0f17596a19d51c70ead9f85fd30d9994fa4905973636298353794398e59734399e398353794398e59734399e398353794398e59734399e398353794398e59734399e398353794398e59734399e398353794398e59734399e398353794398e59734399e39825e486e5e9716562cd42bd1e218ce4bb9d97277cee414f30762976dfce59e039c3a00f533bc3fb7646bc36f544e84e75f0f81a616867d4b143eb23b01f945999a3982d4faf2b136b16eaf50a6124df195e9e7c16da4c4bb17e6c047838fa79a67686fdd81d5e9b7a2374a73a98ab7730b433ead8a1f53b603fa48dd9f2f4b932b166a15e9f1046f2e179b98f89a7dee3a98fd0e27cc5b65af4bbf205ee350beff70323577fd8e731d23ae638f9ea81a79f89a7d1e3698cd0e27cc5b65aac83b25db2f0fe3a60e4caa97e8f91d6a372aa1178d631f134793c4d115a9cafd8568bf5ae3cc3bd66e1fdf5c0c89553eb3c465a8fcaa926e059cfc413d727ad9f80d871c7d744c48ecb958988ad9aabe6aab96acea979e63c6a9e398f9a675473519a335c4785e3bd142300065c06a08cdf1538ae3d99da998bfa3eb6de6b137e1fc33187f3f57d439995398e9969dca233ebc5267d028f879611662d2672dcb4df6b531ac64d8b319f4821b3ea5c1eb38d7d67f2b13bb35e6cd227f07868b993590ba67686fdc15d41b4c614af01ea609edec5d0ce0cc4a56dd3fa5db01f4a613e914266d5b93c661bfbeec463179e278fb1499fc0e3a1e56e662d78da59e80fee09a235a6780d5007f3f41e867666202e6d9bd6ef81fda0cccaaccccaaccccaaccccaaccccaaccccaaccccaaccccaaccccaaccccaacccb2996dec67271ebb307e8fb1499fc0e3a1e5d9cc5af0b4b3307e7f6f10ad31c56b803ab8cfef65686706e2d2b669fd5ed80fcaaccccaaccccaaccccaaccccaaccccaaccccaaccccaaccccaaccccaacccca2c9bd9c67e4ef2b1c3dfe3606cd227f07868790eb3164ced0cc7efef0ba235a6780d5007f7f97d0cedcc405cda36addf07fb419995398ad9c67e6ee2b10bf379189bf4093c1e5a9ecbac054f3b0bfdc1fd41b4c614af01eae03ebf9fa19d19884bdba6f5fb613f94c27c2285ccaab3ea1cc7ac3aabce71ccaab3ea1cc7ac3aabce71ccaab3ea1cc7ac3aabce71ccaab3ea1cc7ac3aabce71ccaab3ea1cc7ac3a578ece36f60389c7ee08c7ef3136e913783cb43cc0ac054f3b0be3f70f06d11a53bc06a88379fa20433b331097b64deb14af12984fa4905973636298353794398e59734399e398353794398e59734399e398353794398e59734399e398353794398e59734399e398353794398e59734399e398353794398e59734399e398353794398e59734399e39825e4868dfdbce46387bf67c7d8a44fe0f1d0f23c662d98da19defff25010ad31c56b803a98a70f31b433037169dbb4fe10ec076556e628661bfbe1e463e7b35e6cd227f078687998590ba67686fdc12341b4c614af01eae03e7f84a19d19884bdba6f547603fa48d19f75f26b9d8e17d9b14a3cabd5adff35db91a7c2f70e51af0bdd0956bc1f72257ae03df8b5d790af85e026d23df4b5d7915f85ee6caebc1f772575e07be57b8723ff85ee9ca7de07b952b8f80efd5ae7c07f85ee3ca7782efb5ae7c17f85ee7ca7783eff5ae7c0ff8dee0cacf06df1b5df95ef0bdc9959f03be37bbf27de07b8b2b3f177c6f75e5fbc1f736577e007c6f77e507c1f70e575e06be47237cef74e5e781ef5daefc10f8deedca07c0f71e579e06bef7baf274f0fd1594e9f57dae7c01f81e73e57af0bddf951bc0f701576e04df075d7906f83ee4ca4de0fbb02bcf04df475c7916f83eeacab3c1f731576e06dfc75d790ef83ee1ca73c1f749579e07be4fb9f27cf07dda951780ef33aebc107c9f75e545e0fb9c2b2f06dfe75d7909f8bee0ca4bc1f74557c6fdfbd7aefc30f8a85f79047cd4af3c1f7cd4afbc007cd4afbc107cd4afbc087cd4afbc187cd4afbc047c94772f051fe5ddcbc04779f772f051debd027c9477af041fe5ddabc04779f76af051debd067c9477af051fe5ddebc04779f77af051debd017c94776f041fe5dd9bc04779f766f051debd057c94776f051fe5dddbc04779f776f051debd037c94778f828ff2ee9de0a3bc7b17f85a5cf9dde0bbd095df03be8b5cf9bde0bbd895b19fb9c495df07be4b5df931f0515ff87ef03dc3953f00bee5aefc41f0ad70e50f816fa52b7f187cab5cf923e05bedca1f055fab2b7f0c7c6daefc71f0ad71e54f802fe7ca9f045fbb2b7f0a7c7957fe34f83a5cf933e0eb74e5cf82afcb953f07be6e57fe3cf87a5cf90be0eb75e52f828fcee3d4cfd8e3d91e83a40369647dd4e6b688b6906f2ab4652048f69a8e62d1b669bd0318691fe4279e313f5ec6768fd1f27431688679454bb1ef4c5dc0d3c9c0c3d4cef03b53b7d7a60eaf4d0d50e719d0ce6e867666202e6d9bd6bb2136c73e472d6add76977b5ad4601d7742b3e7ce623ad2366cfee623dad2c7dc16da36f54b7d1310bbc78b9df362637f4c4bb1e3ab07987b1998ed76fb93df6e787cad75dba29ca2383968d33ad020a93661ec8c338a43fe1a282f681ead4bf5480f3a7f11bbcd65da97c8ee7faecbfb5c03d4e98b68ff40906cfbfb3d9e7e8fd9ee93c6e6510e86e321cc813e8f83d673a05d7f8c767da01dd5c1f35f2b9376bd1e0fadb7020f5de374838fae15881fafb3da2680dbeff7ba23b8c9d7038cad118cf9e419c36b9d568f91d6f3c048be5ee0e961d2ccdfd7cb3d7df0bc5ce7d5a1cfd6409d35706ecc46d4b5c7ddb2cc68bbe83bf89f8264fbf43a06bd707c20007d024fc300f4a276d632f04c0f46c708ce8e0c9f19bc75e88aa1c1231940abf130f13513d18c2af061b93ac2170463874270489686427048b6ca93058760a8befd2a659b45c30d43278f8f3cf3d4d0a9c367ee393d327464eff0ad485debd123695c0b90147db44c0d46076d0682642763eabc58c592672abc4e499ea79da99de1496f9ad7a63aaf4d0d50a716de9bc6d0ce0cc4a56dd3fab488d8097644a116d3c7a1c5f4089ee913ac050e7c930f8f547a1f274faabcb6e0118d6df2f33cd10651c065b0fd8c83b3efd983bdd635664a30bab3a9f7b423aaf6aad6ee083b426acf5c7604d476417684d38e68da939a1db1b423947644d28e40da11473bc2684714ed08a21d31b423842d416104d08ef8d9113e3ba27729b07d1578edb76a7b86b423727604ce8eb8d92b2b7b0560af46ecd5b7bd52b4a31ff60ac17eb3b4a30cf66c6baf64ec59da9e59ed95a2bd42b457f4f60ad7ce526d30b6d169bdc9d866635b8c6d35b6cdd876633b8ced34b6cbd86e637b8ced35b6cfd87e639719bb3c288cae5f61ec4a6357197ba6b1ab8d5d63ec5a63d719bbded80dc66e347693b19b8ddd62eca0b14163878c1d3676c4d890b1a3c66e3576ccd87163cf32765b50b843e7a4b153c6868d9d3676bbb133c6ce068519333b436667c4ec0c989df1b2335c7646cbce60d9192b3b436567a4ec0cd403416186c9ce14d999213b2b606701eca8bf1de57f615018c5b7a3f62f090aa3f27614de8ebadb51763baa6e47d1eda8b91d25b7a3e27614dc8e7adb516e3baa6d47b1eda8b51da5b6a3d27614da8e3adb51e64783c228b21d35b6a3c47654d88e02db515f3bcafb585018c5b5a3b67694d68ecada51583bea6a4759eda8aa1d45b5a3a67694d48e8ada51503bea694739eda8a61dc5b4a3967694d28e4a7ec9d8e3c6fec6d8df1afb3b637f6fec1f8cfda3b12f1bfb8ab17f32f6cfc6fe2528e4e5bf1afb37635f33f6efc6fec3d8d78dfda7b16f18fba6b1ff32f62d634f18fbb6b1ef18fbaeb1ef19fbbeb11f18fba1b11f19fb6f633f36f613633f35f633633f37f60b63bf34f62b63bf36f6a4b1a78cfdc6d86f8dfdced8ef8dfd21189dddc04ee48f6e8546da074746864e9e1e6919196e3979c78991e3a74fdcd372d7f191632dc3770e9d397a62f82efcf0fb5cb745d3089bce9c19bca7e5f8a9234377b70cdf31d2327cb4e5d0f01da78e9cc50f7dd97d68d1b911078f1c890ff6adaaa741fadd3283fed27d8e266876156fdb93e508f287723e34abbabc065de6ce3af4edfdcac2d56ecbd913c3232db99653e6efe009f399a1236d2df8de5923f2d99196b3238367465a8e9e193ed9d2de86dbbd6e5a198da8692ee3436dcde36f79f0bfd4e28b812d0a0400", + "bytecode": "0x1f8b08000000000000ffed9d77745cc5f5c7dfaab92c5a59b6e55e4473dc24af565d6e72ef0603a117cbb68c1d6ccbd8a2851020407aef95900a2940422a29a4f7de08a457082481df3fbf93dff9fdcee1fc66dece8dbe1acfdb689737f27ddafbceb9da797767dffdccf7dd997d3bf376950af2dbd3ca52a65ca9ecf4e0c48d9eef358fd967b7b5c478acac4fce5442382b12c2599910ceaa8470562784b326219ce312c2393e219c1362e4d46c15c1f02d6ede891e748d9b319d304d4f4980a6b509d33493004deb82648c519312c2599f10cec909e19c9210cea909e16c4808e7b484704e4f08e78c8470ce4c08e7ac8470ce4e08e79c8470ce4d08e7bc8470ce4f08676342384f4d08e76909e13c3d219c672484f3cc18399700e702f3f81cf3b8d03c2e328f8bcd23bd66a9796c326dac32fbcdca966936652dd6733965adcada94b55bcf7528eb54d6a5acdb3cd7689eeb51b65cd90a652b95ad52b6dae8b046d95a65eb94ad57b641d946659b946d56b645d95665db946d57b643d94e6567293b5bd92e65e7283b57d979ca9eabec7c651728bb50d94516cbc5ca2e5176a9b2cb945daeec0a65bb95f529dba36cafb27dcafa95ed5776a5b203ca0e2a7b9eb2ab941d527658d9116503ca8e2abb5ad93165c7950d2abb46d9b5caae5376bdb21b2ccd9eafec46652f507693c5f94265372bbb45d9adca5ea4ec3665b72bbb43d98b95bd44d94b95bd4cd9cb95bd42d92b95bd4ad9ab95bd46d96b95bd4ed9eb95bd41d91b95bd49d99b95bd45d95b95bd4dd9db95bd43d93b95bdcbb05047b853d9bb95dda5ec3dcadeabec7dcadeafec03ca3ea8ec6e65f728fb90b20f2bfb88b28f2abb57d97dcaee57f631651f57f680b24f28fba4b24f29fbb4b2cf28fbacb207957d4ed9e7957d41d917953da4ec4bcabeacec2bcabeaaec6bcabeaeec1bcabea9ec5bcabeadec3bcabeabec7bcabeafec0796e63f54f623653f56f613e3fba979fc99a94bf3623f57f60b537ed83cfed23c3e621e1fb55ef32b65bfb67cbf51f65bcbf73b65bf37e53f98c73f9ac73f99c73f9bc7bf98c7bf9ac7c7cce3e3e6f16fe6f109f3f8a479fcbb79fc8779fca7797cca3cea35d5b31bf2e5f1c1d0d61bc43446b5edcfea3515127f41307cd35a549ae7e8b1d1f8abcc3e3d9276d566bfdaf2d798fd1aeb38e3cdfe78cb5f6ff6eb2dff14b33fc5f23798fd06cb3fddec4fb7fc6798fd33c09f0e60ced5f8b5afd2b852e0a37cad005fb5f15582af860e07be71c6570d3e3abf35e09b607ce3c037d1f8c6832f6d7c13484b65a7185f6f1057ae64fbf4716be33eae5987cac4cfbb571fb7ce13efa4f879fbf571eb3df0eafc986c8e3509f2668af1d5836faaf14d069f1982fedde7b46f9af14d05df74e36b00df0ce39b06be99c6371d7cb38c6f06f8661bdf4cf0cd31be59e09b6b7cb3c137cff8e6806fbef1cd055fa3f1cd03dfa9c6371f7ca7195f23f8e81e9753c17786f19d06be338def74f0d1587b06f8e8daf04ce3d3e3c4f814bcc6f8698c0a5f43e333f816d2d80cbe45342e836f318dc9e05b02b1c9b714c615f235191f8d51fab91e53ee0de2ea13b9b04f2c8ffbb8eac8fab82be33f6eb86eb72a18d2ba17e22c07ad569b728cf706b560ec94318a43fe2a286f81ba548ff4a0f71962d7e3fe0a535e5de0753dd6eb32506785a3fdbd41bced5f69f1acb498aba1fd7e72b63527393be2ade89cbd00eadab947d73c633167b70387879ced909c1df15674cef6435d3bf7e8ba772ce6ecc5c0e12167fbfce46c2e2b399b9f230b0277eed1679fb198b3078023fe9c6d979c1df95674cede0a75eddca3cfbf633167af058ef873b6b34fae0d46bc159db3af81ba76eed15ccc58ccd9db81c343cef6cb383be2ade89c7d17d4b5738fe605c762cebe1e38e2cfd96e4f39db2a391be4d73b83c09d7b34473d1673f62ee0883f67f7cafcecc8b7a273f641a86be71ead978cc59cbdcf94f53ac34fcd3ac31cf0fdccf8e6026ffcb9bdafcd536ee724b7f3f78104813b4769ed6e2ce6f643a6acf3f861b8f7807cbf34be53c1f788f19d06be478def746897873ed0277d60c45bd17de0d750d7ce655a471e8b7de0c7c0e12167f74ace8e782b3a679f80ba76eed13d0d6331677f071c1e72b65f7276c45bd139fb2fa86be7de42531e8b394bf795eaeb853f98eb85c5e0fba3f12d01df9f8c6f29f8fe6c7c4de0fb8bf13583efafc6b70c7c8f195f167c8f1b5f0bf8fe667c39f03d617cade07bd2f8dac0f777e36b07df3f8caf037cff34be4ef03d657c5de07bdaf8ba8d4fdf9347f75e7dd7f8f4b9258d7a8378cf2ddd6349c7a6fda5a310bbce8a5d378ab1ebadd8f58ed84d1e62a721066d296bbf17ca4d7e79b29960f8f73f28d6b2f863b5eab63707236ffb32e0c97a687b1a628c84270b3c2df1f384f7fae6e23f6e788e9b2d4dd310ab19dad5eaa15d298845c7a67d8a97011f8edfad0ec6b6f81973298845c7a6fd3660241fbe9fd0fb3af51ffd7eb82035c4eba12f85d744148f7efb8b3896819fea3c3575886db161ab85e7f1bdb5c5f279cacb302f28161d9bf6295e2db4a765f419732365cc5a8cbec68814c4a263dbb1b1bf378dbe66233aaf19f09d84312957ea98540b6ca3719d1275aeb9c4f6f17e95821834b691e639f0539d69e60b097a6cdb04e3ae87fe972bf6fa0dc783f8f33897c57e3d129e56e0f1d1f73df5d72cbeef3f13c49b6bed96562d965619a8d306fab57bd0afd07508c51366611666611666611666611666611666611666611666611666611666611666fecc78ff05ae6f52bda54c18c997031e1ff3fce1ef479963d1f1f5bace23b0ae13ffba452e8b6b96748fe122abcd5550e7c9d450dddfc07ababd36886b9a4bfd6a37a2fb2c6a8313d7627dae2146ad03bbd62f1b638b9ddbeb6bbdadce30375bba2e7568eae13e95619aa62c4df13ec525168fced39995436c3ed6fe8a5d8b44ada81ce7da1ede63e0f7bce4c70fca858a60f8f881ef331db1c71ebe8649ebe51d56ec2aa8f33fa9a17343f7a2d2ff39b4ef79d2753aad63d36b1681bfd33af624f35ae2a8b68edf0cafa53aff0763ea9d15c1bf35f371ff078ecb01b415b75e28e3ba79fcefc3f975fcd62278da81c7c738e3e97a238b7d20ee75fc4e4b2bd7750cd5e900fd3a3de8e7ba16a57d8a27ccc22cccc22cccc22cccc22cccc22cccc22cccc22cccc22cccc22cccc22cccfc99f1bba2c49a867a39268ca374ef43b89e41bfff42c7d7eb3aafac188aeb7b1d8ed69c165b6dae823a3fa818aafb5a53ae0d4ebcdf21ea5c7a58cf2b782e295e2db407d7827c7d9fbbcde269736841e5c6d862e7d7f1e3d778681dbfd5d235e7d0d4577fc53556d414fb6b8bc5836ba3b5c189f796a4e138a371ef50545e503cec4b6de0a3327e3fdac779c6f712fbbe1e8a87ebd7f7186d2705bece7d2eeb73dce88236f50627e67715d4b917c6befb4d19efe1c07b471e723c4f5ba1756ad24fb739f6dfb2cbe6d77d9703672fc4c1d82b8035a6d82d183b658ce290bf0aca5fac18aa4bf5480fd29ad8751fa1df044376fb752dd6eb3250a7dbd1fede20def6f7583c3d16b33e270f409e3d04efffbec6a4ee088d1681465407af837cdd93678f91f6fd8d78df5e8d5507af59a8ce37618c8aba7fd475cfa1aff7b1a87b0e5dd7c6edc068b7d1becfb3dcefd37a18c68bb8efd37a187208efd30aace32f86e313574d10fdde42757e651ddfbe26a7d7e07d6054e7b7305ed4997b166b8313afbff19ea9d1f87c15759f34c5c3eb1aecdbffa9ed9ab90beaf7c6c88c39812c789d40751eb7ce596704f732c76b9f8c782d6945bf43859f5f6cfdb40eddf09ade5874c8f7f91eab2d94d7ddd016aaf35fd63560fcd72df96bc0f8db3afc9a84c68136475ba9ce7f435ffb175ce3d179c2cf1d3595273e4f5ba16b40d24fb779b47f1f186373f87de0eacaa1baf6effc92d6c5fe3e7087f53a8ebf0ffcbf906735701fbaafb17a4584468b4123aa83df0da2f711fc2d5fd77b8caf7bfba3de635cbf4189e3735de5e8b3d9f36aae6b04aa43afc56b84a9867992d1d9ae6bcf17d2fb659cf70de377259a212e7e57a2d9939e59d0ad17f6f1bae064c6ce7a8a1df59bd3d951881df59bd3a311bbde8a5d3f8ab14573d19c93e61e7e1339fcfe19fe66a9de0a5d971243065e579100c6ca0430562580b13a018c3509601c9700c6f109609c9000c68909604c03e3c97c6ff7a04fae547d7c9daf42d71a18dbc3ff2ec915fbff3b3cff2f9582d73e18dbc367ba508ba660e45ae0e73c1fbffd50ecff7a2106fcdf059313c03825018c5313c0d89000c66909609c9e00c61909609c9900c65909609c9d00c63909609c9b00c67909609c9f00c6c604309e9a00c6d312c0787a0218cf4800e39909605c208cb1302ef1cb982b9551f3f8f89f7fcfe67f8e79e0c9baee39f5f4dd93a2ffdf9ae7df276d29f577e3f0de12bfff13eed9fdb69d8f7b478afd6dbb42ff6fd51363ae54465ff7b1e3f77846c283df8b747db7c60363ae54465fdf7fc1efe88d84a703346b7768e68131572aa3af7be58abd9713efe9ef7068e68131572a23de571d234fa85967113c5da059a743330f8cb952197ddd979c861823e1e906cdba1c9a7960cc95cae8e9bb6da166dd45f0e077c0ba1d9a7960cc95caa879967bd2aca7089ee5a0598f43334e8cc813f7ef64f73862f9f8ce60b16d2706649c9000c6890960c4fb247c8c5f85ee93e8f1ab4fae547d7c9daf42f749606c0fdf8f09b5c0ef43fc272d56fae529789f04c65ee5490bfcbeca7fd26215f0f8f8fe4c1a628c84871832f0bac909609c9200c6a909606c4800e3b404304e4f00e38c0430ce4c00e3ac0430ce4e00e39c0430ce4d00e3bc0430ce4f00237e56f570ad58f0f3cbaa311e3beab3ca588f1df5b964acc7963c973c2f87d892e792e7e5105bf25cf2bc1c624b9e4b9e97436cc973c9f372882d792e795e0eb125cf25cf39c54ec21cbf308e3d46e4698c8f278b6dc758bd0cdadeebe049796a3bc65ac3a0edc49034c6d509605c9e0046d1317f0f62298c9a67ad279e3545f0ac059e759e78d616c1b30e78d6c7cf13e6d4ba2278882103af5b9e00c6d50960141d45476d7acb3ebb4d7464c498041d8551188551184f066312c670614c443ee64a65d43c1be2e709355b5f04cf06d08c5ed7e29731572aa3e6d9183f4fa8d98622783682661b1c9a7960cc95caa87936c5cf136ab6b1089e4da0d94687661e1873a5326a9ecdf1f3849a6d2a82673368b6c9a19907c65ca98c9a674bfc3ca1669b8be0d9029a6d7668e68131572aa3e6d91a3f4fa8d9962278b682665b1c9a7960cc95caa879b6c5cf136ab6b5089e6da0d95687661e1873a5326a9eedf1f3849a6d2b82673b68b6cda19907c65ca98c9a6747fc3ca166db8be0d9019a6d7768c69571790218572780d1b38eb9521935cf4e4f3c3b8ae0d9093c6779e2d95904cf59c07376fc3c614e9d55040f3164e075cb13c0b83a018ca2a3e8c88951742c1f1d85511885b138c6de0430cab91646ae8c1e3e5f15fc0ecd59633c769d15bbae4c62477d8766acc7963c973c2f87d892e792e7e5105bf25cf2bc1c624b9e4b9e97436cc973c9f372882d792e795e0eb125cf25cfcb21b6e4b9e47939c4963c973c2f87d892e792e7e5105bf25cf2bc1c624b9e4b9e97436cc973c9f372882d792e795e0eb125cf25cfcb21b6e4b9e47939c4963c973c2f87d892e792e7e5105bf25cf2bc1c624b9e4b9e97436cc973c9f372882d792e795e0eb125cf25cf39c5de157fec5cb1bf31b30b787cfce68da77666f571cf31c77a2646fdb456e75a5a9d656995813ae7807ee77ad02f0571e9d8b44ff18a657e0e03664fb17375c1f07e4d31565b7ae83ae7796a7bd4587fde188f1d35d68ff5d85163fd588f2d792e795e0eb125cf25cfcb21b6e4b9e43997d858ae0e86aedbe9f74ff5319e6bca55661f59c94f75ce1e977f9c14481ff2115bfa90bc5794436cc973c9f372882d792e795e0eb125cf25cfcb21b6e4b9e47939c4963c973c2f87d892e792e7e5105bf29c5f9e67e0f98a51e0092c9ea000cf2a663c5b99f16c62c6d3c58c671e339e76663c3398f1e498f14c66c6b39e19cf04663c8b98f15432e359c38c27cb8c673b339ef9cc781633e399c98c670a339e89cc78aa98f1ac65c6b38c19cf0e663cdb98f1f430e359c08ca79b19cf06663c1dcc786631e36965c6339519cf12663c69663ccdcc78aa99f16c66c6d3c48c6721339e9dcc785630e399cd8ca78119cf29cc786a99f1d430e359c98c670b339e8dcc783a99f1cc61c6d3c68c671a339ea5cc7832cc78ea98f1ac63c6338e19cf5c663cd399f14c62c653cf8c673c339ed1f8bda16278520c78d2c189bf499686e77781afc27aad1eaf5a1a869e3fdff82be035179872a5e3d8e7838fbe1b7e81e3b5a8d3f9d0965e53ce3ebb2dd40963f5c23ec5ab058e0b98f0ec62c6339e194f3d339e49cc78a633e399cb8c671c339e75cc78ea98f16498f12c65c6338d194f1b339e39cc783a99f16c64c6b38519cf4a663c35cc786a99f19cc28ca78119cf6c663c2b98f1ec64c6b390194f13339ecdcc78aa99f13433e34933e359c28c672a339e56663cb398f17430e3d9c08ca79b19cf02663c3dcc78b631e3d9c18c6719339eb5cc78aa98f14c64c6338519cf4c663c8b99f1cc67c6b39d194f9619cf1a663c95cc781631e399c08c673d339ec9cc7872cc786630e36967c6338f194f17339e4dcc78b632e359c58ca7c2c1e3e1ff5f863c74ff1a1d9bf6773189ede13c84fff7f3424f6dbac81cabda1c97f8295e15d4b9d85c18e8fbabf0b5c465df6f88f7ce5d041a5de4a92d743e52d6f9f11c3b87f75506c01058fa040e1e1ff7a37a6ae7b03c8cf1ffcf66b556175b5ad9e72e03752e04fd2ef6a09f2bb7ffdd07cc631299350fbd77106b1aeaad62c248bef3fcf284fd7655307c2bd46f2f061e1f6398a77686fdeb12ab4dab1cba531dccd54b3cb4d3d57768ff12380f4963d63c6b4c9958d3506f0d1346f25de49727ec5f6b82e15ba1fe7509f0f8187f3cb533ec5f975a6d5ae3d09dea60ae5eeaa19daebe43fb97c279481ab3e6596bcac49a867a6b993092ef62bf3c6d6968336d85fad7a5c0e363fcf1d4ceb07f5d66b569ad4377aa83b97a998776bafa0eed5f06e7419885d9c5ac79e83b26c49a867aeb983092ef12af3c6dd934b499b642e3d865c0e3639cf7a47b388e5d6eb5699d4377aa83b97ab98776bafa0eed5fee88dd18c4abc51523d0e20a07cf15a3ac05c52b96f9c204328bcea27314b3e82c3a47318bcea27314b3e82c3a47318bcea27314b3e82c3aeb4d74169d4567d1390e66d159748e62169d45e72866d159748e62169d45e72866d159748e62169d45e72866d159748e62169d45e72866d159748e62169d45e72866d159748e62169d45e728660e3a6b1efa8d18624d43bdf54c18c977a95f9ef07b41eb83e15bcadaef85f215c07399077d3cb533bc877cb7d5a6f50edda90ef6afdd1edae9ea3bb4bf1bcec3ee22982f4f20b3e85c1ab3e6a1df8a25d634d4dbc084917c97f9e509c7b10dc1f0add038b61b787c8cf39eda198e637d569b363874a73ad8bffa3cb4d3d577689fe209b33047316b1efa1f36c49a867a1b993092ef0aaf3cb9f0fb8d1b83e15ba171ac0f7876c7ce931fc73ce81e8e637bac366d74e84e753057f77868a7abefd0fe1e380fc5305f9e4066d159748e62169d45e72866d159748e62169d45e72866d159748e62169d45e72866d159748e62169d45e72866d159748e62169dcb4767cd43ff3b8458d3506f131346f2edf6cad31aae3b6c0a866f296bbf17ca7b80a72f769efcba8307ddc37587bd569b363974a73ad8bff67a68a7abefd0fe5e380f639df9f204324b6e8c0eb3e4863047314b6e087314b3e4863047314b6e087314b3e4863047314b6e087314b3e4863047314b6e087314b3e4863047314b6e087314b3e4863047314b6e087314b3e4863047314b6e0873143387dcd03c9b4d9958d3506f331346f2f5f9e5097ff76073307c2b74dfce5ee0d9e3411f4fed0cefdbd967b569b34377aa83fd6b9f8776bafa0eedef83f320ccc2ec62d63c5b4c9958d3506f0b1346f2edf1cb138e635b82e15ba1716c1ff0f818e73db5331cc7faad366d71e84e753057fb3db4d3d57768bf1fce83300bb38b59f36c3565624d43bdad4c18c9b7d72f4f388e6d0d866f85c6b17ee0f131ce7b6a67388eedb7dab4d5a13bd5c15cddefa19daebe43fbfbe13c08b330bb9835cf365326d634d4dbc684917cfbfcf2e4d2d066da0a8d63fb81c7c738efa99de13876a5d5a66d0edda90ee6ea951edae9ea3bb47f259c87a4316b9eeda64cac69a8b79d0923f9fafdf284fd6b7b307c2bd4bfae041e1fe38fa77686fdeb80d5a6ed0edda90ee6ea010fed74f51dda3f00e72169cc9a678729136b1aeaed60c248befd7e79c2feb52318be15ea5f0780c7c7f8e3a99d61ff3a68b569874377aa83b97ad0433b5d7d87f60fc279481ab3e6d969cac49a867a3b9930920fdf2f767ae2a9b5786a1d5a8cc5d87556ecba32895d6fc5ae2f93d892e792e7e5105bf25cf2bc1c624b9e4b9e9743ec72cd35d1bc3c354f9d44cd532751f39468ce52f367e28bdd9e0986b60a8875c0533b71eb8532cecfd1d6c58c671e339e76663c3398f1e498f14c66c6338119cf22663c95cc78b2cc78e633e359cc8c6726339e29cc782632e3a962c6b38c194f0f339e05cc78ba99f17430e399c58ca79519cf54663c4b98f1a499f13433e3a966c6d3c48c6721339e15cc786633e36960c6730a339e5a663cbb98f1d430e359c98ca79319cf1c663c6dcc78a631e359ca8c27c38ca78e19cf38663c7399f14c67c63389194f3d339ef1cc78520c78d2c189df47c1ef1354828feeefdf09bee799f22ef0553862d0710e828fe64fe9187abc59d170224305bce62a07d7f31cf128ce558ed78e86ee18ab17f6295e2d705cc584673c339e7a663c9398f14c67c6339719cf38663c75cc7832cc789632e399c68ca78d19cf1c663c9dcc785632e3a961c6b38b194f2d339e5398f13430e399cd8c6705339e85cc789a98f15433e36966c69366c6b38419cf54663cadcc786631e3e960c6d3cd8c6701339e1e663ccb98f15431e399c88c670a339e99cc781633e399cf8c27cb8ca79219cf22663c1398f14c66c69363c63383194f3b339e79cc78ba98f15438787679e289fa3d855d0c62eb751c7aafa239c3343c3f1adf03dc6531d2fe0160241fde879af5c413f51b145906b1b516cba0acb7343c8fdfe3f29553598b91f65d3985f7a52df3c413f5bb1dcb18c4d65ad0dc25dd039086e7f17b0bbe726a99c548fbae9caaf7cb13fe6f89a660f856e85e23ec733ecea1a77666b1ffc5f81b1acedfa26eb2b4ca409dd1b84f3e6a3ca078c22ccc51cc9a87d62e8815dfcf46e37b6f236174bdbf7ae009c7c7e660f856687c3c003c3ede3f3cb5331cc70e596d6a76e84e7530570f7968a7abefd0fe2147ecc6205e2d0e8f408bc30e9ec3a3ac05c52b967957029939e8ac79e8de36624d43bda54c18c997f5cb138e8f4b83e15ba1f1f130f0f878fff0d4ce704c3862b569a94377aa83fdeb888776bafa0eed1f81f3500cf3a104328bcea5316b1e9a4326d634d4cb316124df01af3cb96c1ada4c5ba171ec08f0f818e73de91e8e6303569b720edda90ef6af010fed74f51dda1f80f320ccc22cccc22cccc22cccc22cccc22cccc22cccc22cccc22cccc22cccc22cccbc99350f7db79158d350af950923f90e7be5c9af3bb406c3b742eb0e03c07324769efcba8307ddc37587a3569b5a1dba531dccd5a31edae9ea3bb47f14ce83300bb3300bb3300bb3300bb3300bb3300bb3300bb3300bb3300bb3300bb330f366d63cf49bdbc49a867a6d4c18c977c42f4ff8bdadb660f85668dde128f0f85897f1d4ce70dde16aab4d6d0edda90ee6ead51edae9ea3bb47f359c0761166617b3e6a1dfb622d634d46b67c248be01af3cf9f5d3f660f856681cbb1a787c8cf39e740fc7b163569bda1dba531dccd5631edae9ea3bb47f0cce4331cc8712c82c3a8bce51cca2b3e81cc52c3a8bce51cca2b3e81cc52c3a8bce51cca2b3e81cc52c3a8bce51cca2b3e81cc52c3a8bce51cca273f9e8ac79e87fae116b1aea75306124df51af3cade1ba4347307c2bb4ee700c787caccb78d23d5c77386eb5a9c3a13bd5c1fe75dc433b5d7d87f68fc37918ebcc8712c82cb9313acc921bc21cc52cb921cc51cc921bc21cc52cb921cc51cc921bc21cc52cb921cc51cc921bc21cc52cb921cc51cc921bc21cc52cb921cc51cc921bc21cc52cb921cc51cc921bc21cc52cb921cc51cc1c7243f3749a32b1a6a15e271346f25ded9727fcdd83ce60f856e8be9de3c073cc833e9eda19deb73368b5a9d3a13bd5c1fe35e8a19daebe43fb83701e8459985dcc9aa7cb9489350df5ba983092ef985f9e5c1ada4c5ba1716c10787c8cf39eda198e63d7586dea72e84e753057aff1d04e57dfa1fd6be03c248d59f3749b32b1a6a15e371346f2e1fb72b7279e5a8ba7d6a1c5c98aadb5e831e553cc631a9eef01465fe361b7c548fb98e3e4ab059e1e4f3c75164f9d438b93155b6bb102ca7a4bc3f32b80d1574ef5588cb4efcaa93ae059e189a7dee2a9776871b2626b2d569af224f39886e75702a3af9c5a6131d2be2ba7ea8167a5279ea83169e528c48eea5fa3113b2a574623b6682e9a8be6a2b94fcd532751f3d449d43c259ab3d2dcc3755438df4b310260c0ad17caf859c1c7b5a7a776665d9fc7565a6dc2cf6338e770b23e6f08b33047317b9ab7684b5bb1499fc0e2a16dd0b316a3396fda63b52909f3a685980f259059742e8d59c7be36fed86d692b36e913583cb45deb590b4fed0cc783eb02b7c6142f0375304faff3d0ce14c4a563d3fe75701e8a613e944066d1b934661dfbfad863e77f4f1e63933e81c543dbf59eb5f0d3cefc787043e0d698e265a00ee6e90d1eda9982b8746cdabf01ce83300bb3300bb3300bb3300bb3300bb3300bb3300bb3300bb3300bb3300bb330f366d6b19f1f7becfcfc3dc6267d028b87b6e77bd6c24f3bf3f3f737066e8d295e06eae039bfd1433b5310978e4dfb37c2791066611666611666611666611666611666611666611666611666611666611666decc3af60be28f1d7e1f0763933e81c543db0b3c6be1a99de1fcfd4d815b638a97813a78ce6ff2d0ce14c4a563d3fe4d701e8459985dcc3af60b638f9d5fcfc3d8a44f60f1d0f642cf5af869677e3cb839706b4cf1325007cff9cd1eda9982b8746cdabf19ce4331cc8712c82c3a8bce51cca2b3e81cc52c3a8bce51cca2b3e81cc52c3a8bce51cca2b3e81cc52c3a8bce51cca2b3e81cc52c3a8bce51cca273f9e8ac63df127becd670fe1e63933e81c543db2d9eb5f0d3cefcfcfdad815b638a97813a98a7b77a68670ae2d2b1699fe29503f3a104324b6e8c0eb3e4863047314b6e087314b3e4863047314b6e087314b3e4863047314b6e087314b3e4863047314b6e087314b3e4863047314b6e087314b3e4863047314b6e087314b3e4863047314b6e0873143387dcd0b15f147fecf0fbec189bf4092c1eda5ee4590b4fed0cef7fb92d706b4cf1325007f3f4360fed4c415c3a36eddf06e7419885d9c5ac63df1e7fec5cda8a4dfa04160f6db77bd6c2533bc3f1e08ec0ad31c5cb401d3ce7777868670ae2d2b169ff0e380f4963c6f3978a2f7678df26c5a8308fdaf76253ae04df4b4cb90a7c2f35e56af0bdcc946bc0f772531e07be5740dbc8f74a535e02be5799f24af0bdda945780ef35a6dc03bed79a7237f85e67ca83e07bbd295f03be3798f2b5e07ba3295f07be3799f2f5e07bb329df00beb798f2f3c1f75653be117c6f33e51780efeda67c13f8de61ca2f04df3b4df966f0bdcb946f01df9da67c2bf8de6dca0bc07797c3f71e537e11f8de6bcab781ef7da6bc0b7cef37e509e0fb80294f04df07a14c8f779bf229e0bbc7946bc1f72153ce80efc3a65c07be8f98f224f07dd494ebc177af294f06df7da63c057cf79bf254f07dcc941bc0f771539e06be074c793af83e61ca33c0f749539e09be4f99f22cf07dda946783ef33a63c077c9f35e5b9e07bd094e781ef73a63c1f7c9f37653cbf5f30e5dbc147e3ca1de0a371e5c5e0a371e525e0a371e5a5e0a371e565e0a371e5e5e0a371e515e0a3bc7b25f828ef5e053ecabb57838ff2ee35e0a3bc7b2df828ef5e073ecabbd7838ff2ee0de0a3bc7b23f828efde043ecabb37838ff2ee2de0a3bc7b2bf828efde063ecabbb7838ff2ee1de0a3bc7b27f828efde053ecabb3bc14779f76ef051dedd053ecabbf7808ff2eebde06b34e5f781ef54537e3ff84e33e50f80ef7453c671e60c53be1b7c679af23de0a3b1f043e07b8e297f187c0b4df923e05b64ca1f05df6253be177c4b4cf93ef02d35e5fbc1d764ca1f035fb3297f1c7ccb4cf901f0654df913e06b31e54f822f67ca9f025fab297f1a7c6da6fc19f0b59bf267c1d761ca0f82afd3943f07be2e53fe3cf8e87d9cc619dd9f751f241d4823eda336373bda42bef1d096de20de6b3a8a45c7a6fd5660a473901b7dc6dc48195b2c46cdd3ee4133cc2bda0a7d666a079e360f3c9eda197e66eab0dad46ab52903759e03edecf0d0ce14c4a563d37e07c4f671ce518b6a73dc8596165558c7bca1e9f7ce423ad23174fee61c6de9f6dc163a368d4bdda310bbd38a9db562e3784c5ba1fed509cc5d1e98f5717be23f6ed8bf969b63514e519c2cb469056810579b3076ca18c5217f159467350cd5a57aa407bd7f11bbce653a97c86ebfaedd7a5d06ea743bdadf1bc4dbfe1e8ba7c762d6e7a4ae6188c3437f0873a0dbe2a0fd2c68d713a15d37684775f0fdafc993765d160fed37010f5de374808fae15881fafb39a4781db1ef73a1cdce4eb04c62607632e7ec6f05aa7c962a4fd1c3092af0b783a3d69669feb85963ef8be5c63d5a1d756419d65f0de9876d4d5fd6e416aa85df419fc9920de31bdc6835e383f10803e81a561007a513bab3df04c0c86e6088e0f0e1cebbbb2ff9cfebe7d2940abb230f131e5684605f8b05ce9f005c1f0a9109c92a5a9109c92adb064c12918aaaf3f4ae966d17443ffe18383cf3dd27f64efb11b8e0ef6efdb3e702552575bf4481ad50224451f6de383a1499bde20dec5981a2b56a1e4190f8fe3e2e769f1d4cef04d6f82d5a61aab4d19a8530dcf4df0d0ce14c4a563d3fe0447ec1807a2508b8923d062a28367e2286b8113dfe4c39e4acfe3e24985d516ecd1d8263bcf636d10055c00c74f1938fd9ceeecd5a631e382a1934da3a79e51d557b5fa44e81952fdcea56740f510a46738f58ca67e53d333967a8652cf48ea19483de3a86718f58ca29e41d433867a86b031c8cf00ea193f3dc3a767f4ce04b6ef02affe54addf21f58c9c9e81d3336efaca4a5f01e8ab117df5adaf14f5ec87be42d09f2cf52c837eb7d55732fa5d5abfb3ea2b457d85a8afe8f515ae5ea55aa56cb5d17a8db2b5cad6295baf6c83b28dca3629dbac6c8bb2adcab629dbae6c87b29dcace527676909f5d3f47d9b9cace53f65c65e72bbb40d985ca2e5276b1b24b945daaec3265972bbb42d96e657dcaf628dbab6c9fb27e65fb955da9ec80b283ca9ea7ecaa207f87ce616547940d283baaec6a65c7941d0ff22b667a854caf88e91530bde2a557b8f48a965ec1d22b567a854aaf48e915a85b82fc0a935e29d22b437a5540af02e8597f3dcbffd2203f8baf67ed5f11e467e5f52cbc9e75d7b3ec7a565dcfa2eb59733d4bae67c5f52cb89ef5d6b3dc7a565bcf62eb596b3d4bad67a5f52cb49e75d6b3cc7705f959643d6bac6789f5acb09e05d6b3be7a96f79e203f8bab676df52cad9e95d5b3b07ad655cfb2ea59553d8baa674df52ca99e15d5b3a07ad653cf72ea594d3d8ba9672df52ca59e95fca2b287947d49d997957d45d957957d4dd9d7957d43d937957d4bd9b7957d27c8e7e5f7947d5fd90f94fd50d98f94fd58d94f94fd54d9cf94fd5cd92f943dacec97ca1e51f6a8b25f29fbb5b2df28fbadb2df29fbbdb23f28fba3b23f29fbb3b2bf28fbabb2c7943daeec6fca9e50f6a4b2bf2bfb87b27f2a7b4ad9d3c1d0ea060e22ff323b34d3de3738d87ff8e860e3e040e3e16b0e0d1e3c7ae886c6eb0e0e1e681cb8b6ffd8fe4303d7e18bef36c3162d23ac3976acef86c68347f6f55fdf3870cd60e3c0fec63d03d71cd9771c5ff40df3a2392746ecdbb72f3ad82f2a9e05e9a325067dccbc8e1668b6146edb13a508f274292f9a52595a83ce32ef3af4e9fddcfcd56ee3f14303838dd9c623ea6fdf21f59afe7dcd8df8dc7125f2f1c1c6e3837dc7061bf71f1b38dcd8d28cc7bd6842098da86a28e145cd0d236f79f0ff6aa10d5f2d0a0400", "isInternal": false } ], - "packedBytecode": "0x000000028df71de500000047ce1f8b08000000000000ffed9d779815c5b6f67b6040643b0398b3830915c56118e20cb03127cc2822220cc3080a0c51cc98250773468292b380802020869373f2243d1e4fbaf79e739efbc7fdeefd82dfeddabbd69d778aea61f6d8b579f7eceae7a9d9d56baa7bfdeaedd5d5a9baab20484fff0c5381ceb70cd399c18193fc3fa97f4bbfd9d435c67595bae42cc811ce1639c2d93247380b7384b3558e70b6ce11cec37284b34d8e701e1e23a7626b11d49fe2e66deb40d7b8191339a6e91139a069518e695a9c039ab60b72a38d6a9f239c1d7284f3c81ce13c2a47388fce11ce637284f3d81ce13c2e47388fcf11ce137284f3c41ce13c2947384fce11ce537284f3d41ce13c2d47384b7284b3638e709e9e239c67e408e79939c279568e709e1d236767e0eca47fcfd1bfe7eadff3f4af943d5fff5ea07fbbe83a16eaf90b155798d4439a32e37fddc2541ea6ee61ea61fcaf67987a85a97798fae8ff95e8ff5584a9324c7dc3d42f4cfdb50603c27451982e0ed32561ba344c9785e9f2305d11a62bc3745598ae0ed335611a18a66bc3745d98ae0fd30d61ba314c3785e9e6300d0ad32d61ba354c83c3745b9886182cb787696898ee08d3b030dd19a6e1611a11a6aa308d0c5375984685a9264c7785697498c684e9ee30dd13a6b1611a17a6f161aa0dd384304d0cd3a4304d0ed394304d0dd3bd619a16a6fbc2747f981e30347b304c0f85e9e1303d62704e0fd3a3617a2c4c8f87e989303d19a6a7c2f474989e09d38c30cd0cd3ac30cd0ed39c30cd0dd3bc30cd0fd382302d0cd3b3617a2e4ccf87e98530bd18a697c2f472985e09d3ab617a2d4caf87e98d30bda95964475814a6b7c2b4384c4bc2b4344ccbc2f47698de09d3f230ad08d3ca30ad0ad3ea30ad09d3da30ad0bd3fa306d08d3c6306d0ad3e630bd1ba62d61da1aa66d617a2f4cdbc3b4234c3bc3f47e9876856977983e08d39e30ed0dd3be307d18a6fd61fa284c1f87e993307d1aa66f85e9db61fa4e98be1ba6ef85e9fb86e63f08d30fc3f4a330fd58db7ea27f7faacbcafdbb9f85e9e73aff0bfdfb4bfdfb2bfdfb99b1ccafc3f41bc3f6db30fdceb0fd3e4c9febfc17faf70ffaf74bfdfb47fdfb95fefd93fefdb3fefd8bfefdabfefd9bfefd17fdfbaffaf7dff4efdff5ef3ff4ef3fc3b4b9633adf26a89b92414c6d54794dead98f88df29a83f292d5aeaffc96f89b617ea79f915ed5ae9f95686bdb59e6f6daca78d9e6f63d83be8f90e86fd283d7f94613f46cf1f63d88fd3f3c719f633f5fc99604f04706f58db95ada53615804de2b505d85a695b4bb0b596d581ed306d6b0536d9beadc176b8b61d06b6b6dad6066c096d3b5cb40cd311da960ce28a95d2116abd4571af573f2f2b8e9f77a45a6f3b47bcede3e71da5d6dbc101af8a8f23f5bada43dc1ca56d1dc076b4b61d09b663b4ed28b01dab6d4783ed386d3b066cc76bdbb1603b41db8e03db89da763cd84ed2b613c076b2b69d08b653b4ed24b09daa6d2783ed346d3b056c25da762ad874931b9c06b6d3b5ad046c67685b47b09da96da783ed2c6d3b036c676bdb996093f6f72cb0c9f9e2d9daa6da8ec30b60196d97762bb58cb4d9603b57da6bb09d276d35d83a4b3b0db6f3c1b7d82e80b6466c5db44dda2df5bf3e3a9f0ce2da4fca6ad47a2be25e6fb866b5debef1af37f5ccb15f50a77512fc548056fd753ec67e4d5dd177814ee247ec8590bf0aca4a39d1438e3dc2ae8e05953adfbf81e5fa18cb1543994a4bfd9341bcf5ef6bf0f435985b41de4dcc76ebe663b6d153c6313b18ca9ab127e741cd31660702878398ede963b6d153c6315b0365cdd89373e1e618b3b703878398ad7213b365a53e66d3f7cd82c01e7b723dd41c63760c70c41fb3dd7dcc367eca38661f87b266ecc93571738cd969c0117fccf6acf2e7068d9e328ed90550d68c3db93fd31c63f629e07010b335be9d6df49471ccbe0965cdd8937b85cd31669f038ef863b6b7a398ede66336483f030d027becc97debe618b38b8123fe981de9efcf367eca386677405933f6e4194a738cd9f53aaf9e33fc443f6738196c3fd5b6538037fed8aeeeee28b6cb7c6ca7fb8604813d46e5795e738ced0f745ec5f12fa03f82d87ea96d1dc1f62b6d3b1d6c9f69db19502f07fb4095df071a3d65bc0ffc06ca9ab12ccf969be33ef023e07010b3d53e661b3d651cb37f83b266ec493f87e618b3bf070e07315be363b6d153c631fb9f50d68cbd7374be39c6acf43555e70b5fe8f385f3c0f6076deb0cb62fb5ed7cb0fd51db2e00db57dad6056c7fd2b60bc1f6676d2b05db5fb4ad2bd8feaa6d6560fb9bb67503dbbf685b39d8fe55dbba83eddfb4ad07d8feae6d3dc1f60f6deb05b67f6a5b6f6d53fdf4a4ef959cb7b601fe6410efb6957e97b26e99ef9a05dfed0cdfedb2e8bb83e1bb83c5779903df09f0215381319f847c995b9ed262e0415fe5f1fbeaa6eade2d687cddcb81a7bb83ba27c0476378ba034f8ff87952fd7f7bc6bfded436ee66689a005fdda05ebd1cd4ab007cc9ba655efc15830ddbd65e16c6def1339615802f59b7ccf70646b1615b2fef5cc9fea38e879d0aea781dec4ba97322f127df2d138e72b04b992b3bd6b175d66c45f07f3ceef5306c8ee2321517e24bd62df3e2af08ead323fb8c658d65ec6e30ba6a230ac097acdbfbaedb0e92c7e3b8836b1d6b9b26be2bb2e0bbb7e1bbdcf08d6da74c0d1ddb7a0373ecd79cfad85619ff7a4bf1fa44ae0dc50f9e3fe0355c5c7542df726d287ec45e08f96b0beaca4a39d143da616157b12cdb12d9cde57a19cb1543990a4bfd9341bcf5af34782a0d66b54d2e8663a183fd211503150687cc9783769511da55807652e61cd0ce557bd6c7e091f91ec023ed584fe071754d14c5938debb183f9c67358bc7e96ffe37980abedd5d5609479dbf6ea0d8cb6731507d7330d9eab740746b1f5019e6e8e348bdaaedd487c3b8895547b243ee4dc5cf6df1e609732bdf50b75aaadbc1bda4a173182f1285363af79e3df4e65a96bf0ee19f0e0b673705dd5d5513c96e2fd9baf837863cd6c97ba1b5a45dde371d596773378645efc7966cfec993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367e667c6e749d86f4bcaf5206134fbbfb9bacf9ffafea15e97ac5f3dd7f93f4efb83959562ff18e907719e51e7422853d4a2aeecff87fe60e6732aec23d9c3ad76a96d89fd3193302ffeb0af156e4b86fe4e25b1f92e1be9ea799bea63adbea369f6fdec61d1d445ff67d4b4c0d014fbe39f6ff0a838ad6c59c7e6e2d95fa6cf22512bc9c7f96caf38b0c77afcdba5acde33eb1641fdf6038f33aefaef485b2dcfcb2b0cdf8550e6a41675db46fa56c918c3dd8ce5b0df8fac5b96390fec95c6badbeb6585a395b1fe9eb0ac943915dad4bd2dea3473d0569665da771d9f9bc77f1c4e3fc7ef96014f57e071d1ce383adf28c57d20eee7f866ff34db798c94c1be7d0efa5536d8df49fc7966cfec993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367e667563ce6b3567cbfb69c84314b7d1f52cf33e45b65b2fed4f7825bd4f975fd1c4e9e397536ea8cef8efeb3455dd9cd3a5f141cd8df216a5bbafa3e45d4b6147ff8ed197c16e4e2b96e01f892759759b4907c496cbed3cff15d8c0d21cff1bb19ba965b3475b5bfe23356d414f7d7ee060f3e1b8dfab64f996173d977282a2ec41fee4b6560933cbe1fed623be3b1c4ecd723fef0f9f577b4b6ed0357dbbeacd465bb81df4d490607c6377e4fe587d0f6fd58e7b10f07f61df9c2f27f991a7a4e2dfaa93a3bf8be666901ac4bb6afeddb9e03803526df5d715d053a0d30342884fce72deaca4a39292b5a0bbbda47e41b30c86e2ed7dd58ae18caf4b3d43f19c45b7ff35babfd0d66b54d7e0671f6051cff5db549fd22343a0f3492328ebfd968ed5f69f62bc476b4b5514696c56fd1fd15daa8a8fea3b66380ebe398acdb761c338f0b8de9e799effdb4fe0bda8bb8fb69fd17c410f6d30a8cf57786f50b57eb20fad82265fe9fb17ef39c5c96c17e60ffb39fc0f75cca743e9373f243757d653b27c7e5a2eaae98f13b68c9189931269005cf13a44c5badb56cb3ca08eede96658b229615adcc6f85150507eae7e63b6be97dbebf5117896bfc06b994390aeae2e6bc257d0ee8ea9b7249a893ca9759ea2a658e877ded449d4fc076c2fdf65ccbff656ae81c10c770bf28fe3aa7b6efc5c099043fe8fb12608dc97757f42de780e247ec85903fa7655d5929277a88d6c2aef611398f427673b90a63b9622833c052ff64106ffd2f32782e3298d5363905e2ec5ce887eeaaad1e10a15167d048cae03d45db77406df73a5cbdbf11752e85ef2f99e757789c7473de643f8f35efabd9ce113a1bfc788ed013dad984a5ac79bf508e9771f61bc677257a825f7c57c2d5b79bfb806e4998c7f38243e9dbc5776c95bfa83113fa64c177d49809d9f0ddc1f0dd218bbebde65e7326cd1d8c41907aff0cbf59aaa686ce4b715c0259ae0530ba18cb2111d4fff6f8c118717c0759ae2530ba383e64faedf39ec028cb1502a38b774b71fc8dc630e23786f1382f8c0ebe15dbb5a9df8ac57b7aad8191e99d4d7c36751830ba382f6eeabb7a783edf067e5d8d4bd42d03c6326094e50e074617f7c6f15aa6318c785d24cbb5054617cfb0321ddf09bf3d8ff7965d3236746c77dc17a52cd37b2f956e791a3cd740df0ec6354c6981f7190fa6455fb73c0d9efba06f07f7fd525ae0388307d3029f0dba18f73011d47f0e77301e7c7e29cb1d098c49478cfd33604c02e3ffdc2b06c6018e189319300e0046b11f0d8c0eeebfa6180764c088f72965b96380f162478c1765c0783130ca72c702a38b7ba909f0db18c64b8051963b0e182f75c47849068c9702a32c773c305ee688f1d20c182f034659ee0460bcdc11e36519305e0e8cb2dc89c0788523c6cb3360bc021865b99380f14a478c5764c0782530ca722703e3558e18afcc80f12a6094e54e01c6ab1d315e9501e3d5c028cb9d0a8cd73862bc3a03c66b8051963b0d18073a62bc2603c681c028cb9500e3b58e180766c0782d30ca721d81f13a478cd766c0781d30ca72a703e3f58e18afcb80f17a6094e5ce00c61b1c315e9f01e30dc028cb9d098c373a62bc2103c61b8151963b0b186f72c47863068c3701a32c773630deec88f1a60c186f06c69b2c8c831c31de9c01e3206094e5ce07c65be2674c5d4b0fca80f116e0b9357e9e9466b764c073ab5b9ed477f56eb1f8ba2d7e5fa96d3138687cdd6f039e21f1f3a4b6c56d19f00843312c879add1e3f634ab3211930de0e3c43e3e74969767b063c4341b3db2d9add113f634ab3a11930de013cc3e2e749697647063cc340b33b2c9add193f634ab3611930de093cc3e3e749697667063cc3833acdeeb46836227ec69466c333601c013c55f1f3a4341b91014f156836c2a2d9c8f819539a5565c0381278aae3e749693632039e6ad06ca445b351f133a634abce807114f0d4c4cf93d26c54063c35a0d9288b6677c5cf98d2ac2603c6bb806774fc3c29cdeeca80673468769745b331f133a6341b9d01e318e0b93b7e9e94666332e0b91b341b63d1ec1e478c7767c0788f8527eeef64df6df135ce51ddc7068dafbb3014c372d84f62bc23c67119308e0746590efb49d43a621c9f01632d30ca7209c78c0df593a805df13e2f79d6a976a83c6eb33c12d4f83fd24d0f744475a4c081aafc544b73c0df69340df931c69313168bc16938067b2032d12e0a3313cc2500ccb613f89298e182767c03805186539ec2731d511e3940c18a702a32c87fd24ee75c4383503c67b815196c37e12d31c31de9b01e3346094e5b09fc47d8e18a765c0781f30ca72d84fe27e478cf765c0783f30ca72d84fe201478cf767c0f80030ca72d84fe241478c0f64c0f82030ca72d84fe221478c0f66c0f81030ca72d84fe261478c0f65c0f83030ca72d84fe211478c0f67c0f80830ca72d84f62ba23c64732609c0e8cb21cf69378d411e3f40c181f0546590efb493ce688f1d10c181f034659ee1ec78c0d5dbf3cd6cc7d475dab3477df51d725cdddb78f731fe7f9e0dbc7b98ff37cf0ede3dcc7793ef8f671eee33c1f7cfb38f7719e0fbe7d9cfb38cf07df3ece7d9c33f97edc81ef04f890a9c0984f425e188a61b97b3c63b366449e92f8784ab1eee8eb0982ba3f61e129705477f4f52441dd8521d7181fcf01c67b7280d1eb98ee83d81446c5f394239e2733e0790a789e76c4f354063c4f03cf33f1f3a462eae90c7884a11896bb2707181fcf0146afa3d79189d1eb983f3a7a46cfe8193de3a160cc8536dc33e6443c96359551f1cc889f27a5d93319f0cc00cd64b95bdd3296359551f1cc8c9f27a5d98c0c78668266332c9a39602c6b2aa3e299153f4f4ab39919f0cc02cd665a3473c058d65446c5333b7e9e9466b332e0990d9acdb268e680b1aca98c8a674efc3c29cd6667c03307349b6dd1cc016359531915cfdcf879529acdc980672e6836c7a29903c6b2a6322a9e79f1f3a4349b9b01cf3cd06cae4533078c654d65543cf3e3e74969362f039ef9a0d93c8b660e18cb9acaa87816c4cf93d26c7e063c0b40b3f916cd5819efc901c6c77380d1b18e654d65543c0b1df12cc8806721f03ceb886761063ccf02cf73f1f3a462ead90c7884a11896bb2707181fcf0146afa3d79189d1eb983f3a7a46cfe81933637c220718fdb6f68cac8c0eaeaf1a7c87e6d966ee3bea1d9ae6ee3bea1d9ae6eedbc7b98ff37cf0ede3dcc7793ef8f671eee33c1f7cfb38f7719e0fbe7d9cfb38cf07df3ece7d9ce7836f1fe73ecef3c1b78f731fe7f9e0dbc7b98ff37cf0ede3dcc7793ef8f671eee33c1f7cfb38f7719e0fbe7d9cfb38cf07df3ece7d9ce7836f1fe73ecef3c1b78f731fe7f9e0dbc7b98ff37cf0ede3dcc7793ef8f671eee33c1f7cfb38f7719e0fbe7d9cfb38cf07df3ece7d9ce7836f1fe73ece997c3f1fbfefb24cbf31f33cf0b8f8e68da37a96aaf5bea0d7f5758cfa29ad5e34b47ad6d0aa18cabc00fabde840bf02f02beb9679f197297327026647becb54fb7238d45f7c3c6ee8a1fcbfe4a8ee516dfd4bcddc77545bdfdc7d47b5f5cdddb78f731fe7f9e0dbc7b98ff37cf0ede3dcc7398b6fccb70aeacedbe5fba76a1d2feb7ca19e97f24f805dca4c3e2cfddb3ef0fb900bdf7e1ff2c78a7cf0ede3dcc7793ef8f671eee33c1f7cfb38f7719e0fbe7d9cfb38cf07df3ece7d9ce7836f1fe73ecef3c1b78f73be382f86ff5766812730788206781690f14c25e3994dc6339a8c672819cf75643c1793f13c44c6534ec633818c672419cf2d643c5791f15c48c6d38f8c671a194f6f329e39643c7793f13c4dc6338c8ce706329e4bc9781e21e32923e39944c6338a8ce736329e6bc87892643cf793f1f424e339978c671c19cf5c329e73c8788693f13c43c67313194f31194f3b329ecbc9789e24e3b9808ca7828ce751329ef9643c53c878ee22e3b99d8ca7948ce75a329e2e643c1791f13c48c6d39d8c671e194f2d19cf0c329e2a329e41643ce791f15c49c6d3928ca72f19cf42329e7bc978fa90f18c21e3e94cc6730719cff5643c9790f13c4cc6d38d8c672219cf4c329e6a329ec1643c5793f1f427e3b98f8ca71719cf58329e4e643c7792f1dc48c6938def9966c27304194f1119cf65643c8f91f14c27e3e94ac633998c6716194f0d19cf10329e81643c03c8781e20e3e941c6339e8c670419cfcd643c4f91f1b427e3e940c67305194f01014f2238700c9304fcff79b0b53096559f7d9dd3b1eeffaf687b0b58e6559d6f6959f72b60936fc9be6a5916757a05ea92d4f9d26f36a574425f4998177f45c0f12a09cf15643c1dc878da93f13c45c6733319cf08329ef1643c3dc8781e20e31940c633908c6708194f0d19cf2c329ec9643c5dc978a693f13c46c67319194f1119cf11643ccf93f1dc48c67327194f27329eb1643cbdc878ee23e3e94fc6733519cf60329e6a329e99643c13c978ba91f13c4cc6730919cff5643c7790f17426e31943c6d3878ce75e329e85643c7dc9785a92f15c49c6731e19cf20329e2a329e19643cb5643cf3c878ba93f13c48c67311194f17329e6bc9784ac9786e27e3b98b8c670a19cf7c329e47c9782ac8782e20e379928ce772329e76643cc5643c3791f13c43c6339c8ce71c329eb9643ce3c878ce25e3e949c6733f194f928ce71a329edbc8784691f14c22e32923e379848ce752329e1bc8788691f13c4dc6733719cf1c329ede643cd3c878fa91f15c48c6731519cf2d643c23c9782690f19493f13c44c6733119cf75643c43c9784693f1cc26e3994ac6b3808ca7d2c2f3bc231e79df5dd62df3cf93f876b01d4ad57a5f7354a7d7f5ba5ae9f50abff82b8432d3dba67fd5fbe1b8ac7099df27c077735e078d5e775417d91e05c6f641df2f3bf22def68c9ba65fee566eebb9de1bb5d9ef8ee60f8ee9027be7d9cfb38cf07df3ece7d9ce7836f1fe73ece997c3bb83628c3efa4c95460cc27218fd70b2ebe2fe7a89ef5ae13bf8e513fa5d51b8656e6b5553194790df47bc3817eb66b4f99177f9932772260c6b82809e28d8b37e3af53996ab70e075ddf34f4c57a2d72a469d431645133f71d750c69eebea38e21cdddb78f731fe7f9e0dbc7b98ff37cf0ede3dcc73993efb7743ec6ebc652f4a19e2fcaf5c05be07789ce17c4e857ad6bb15e57a15eb7702c01bb94f9dff05cd3eff37e9f8fcbb73fb6f938cf07df3ece7d9ce7836f1fe73ecef3c1b78f731fe7f9e0dbc7b98ff37cf0cd1ce7665efa8b9f036caefaf347c56236de253894bea362b1b9fb8e8ac5e6eedbc7b98f7326df4b1df84e800f991aeae3b71478163be07154cfd4b38d65469d9e37ea540c65f018bfcc413d0bc0afac5be697018f4c95c0e3220e1ab3cd91670119cf54329ed9643ca3c9788692f15c47c6733119cf43643ce5643c13c8784692f1dc42c6731519cf85643cfdc878a691f1f426e39943c6733719cfd3643cc3c8786e20e3b9948ce711329e32329e49643ca3c8786e23e3b9868c2749c6733f194f4f329e73c978c691f1cc25e3194ec6f30c19cf4d643cc5643cedc8782e27e379928ce702329e0a329e47c978e693f14c21e3b98b8ce776329e52329e45643cd792f17421e3b9888ce741329eee643cf3c8786ac9786690f15491f10c22e3398f8ce74a329e96643c7dc9781692f1dc4bc6d3878c670c194f67329e3bc878ae27e3b9848ce761329e6e643c13c9786692f15493f10c26e379838ce76a329efe643cf791f1f422e3194bc6d3898ce74e329e1bc9788e20e32922e3b98c8ce731329ee9643c5dc9782693f1cc22e3a921e31942c633908c670019cf03643c3dc878c693f18c20e3b9998ce729329ef6643c1dc878ae20e32920e0490407befb9f80ffbf01367947fd79b0bdadf38bc1d6c2e2a3a5ce2f035ba1cecb3a0e0bd34b1d0f5c37eae4eabd7cf4958479f157041c6f93f05c41c6d3818ca73d19cf53643c3793f18c20e3194fc6d3838ce701329e01643c03c9788690f1d490f1cc22e3994cc6d3958c673a19cf63643c9791f11491f11c41c6732319cf9d643c9dc878c692f1f422e3b98f8ca73f19cfd5643c6f90f10c26e3a926e39949c633918ca71b19cfc3643c9790f15c4fc67307194f67329e31643c7dc878ee25e35948c6d3978ca72519cf95643ce791f10c22e3a922e39941c6534bc6338f8ca73b19cf83643c1791f17421e3b9968c6711194f2919cfed643c7791f14c21e3994fc6f328194f0519cf05643c4f92f15c4ec6d38e8ca7988ce726329e67c8788693f1cc25e31947c6732e194f4f329efbc97892643cd790f1dc46c6338a8c6712194f1919cf23643c9792f1dc40c6338c8ce769329ebbc978e690f1f426e39946c6d38f8ce742329eabc8786e21e31949c633818ca79c8ce721329e8bc978ae23e3194ac6339a8c673619cf54329e05643c95d9e12953efb64b5feb00b8704a427e19f02c72a08fa37a96e2770dbe8e71bd4aab770cadde30b42a86324b41bf771ce857007e65dd322ffe729159f13ca6f3b6ef403c46c228b6456e7952fbed6341fda9a1fdf61de071d1ae39aa676aff5a6ed4e9318bee52066375b9837adaf61d995f0edb21d79815cf933a2fac0928f72409a3d896b9e549ed5f4f06f5a786f6afe5c0e3a2fd7154cfd4feb5c2a8d39316dda50cc6ea0a07f5b4ed3b32bf02b643ae312b9ea7745e581350ee291246b1bde396a73c017596a9a1fd6b05f0b8687f1cd533b57fad34eaf49445772983b1bad2413d6dfb8eccaf84ede0993db38d59f1c8b31d614d40b9a74918c5b6dc294f796902ea2c5343edd84ae071d1ce3bd23dd58ead32eaf4b445772983b1baca413d6dfb8eccafb2f82e09e2d5627523b4586de1599d652dc45fa6cc4b7390d9ebec758e62f63a7b9da398bdce5ee72866afb3d7398ad9ebec758e62f63a7b9da398bdce5ee72866afb3d7398ad9ebec758e62f63a7b9da398bdce5ee72866afb3d7398ad9ebec758e62f63a7b9da398bdce5ee72866afb3d7594d5e67afb3d7d9eb1c07b3d7d9eb1cc5ec75f63a473133e8ac78e4db95c29a8072cf90308a6d855b9ed47b41cf04f5a702633e09f9d5c0b3d2813e8eea99ea43bec6a8d33316dda50cee5f6b1cd4d3b6efc8fc1ad80e9930afca4166af73d39815cf0c9d17d604949b41c228b6956e7952edd88ca0fed4503bb606785cb4f38eea996ac7d61a759a61d15dcae0feb5d6413d6dfb8eccaf85ede0993db38d59f1ccd479614d40b999248c625bed94a72cf57ee3cca0fed4503bb616785cb4f38e744fb563eb8c3acdb4e82e653056d739a8a76ddf91f975b01d32615e9583cc5e67af7314b3d7d9eb1cc5ec75f63a47317b9dbdce51cc5e67af7314b3d7d9eb1cc5ec75f63a47317b9dbdce51cc5e67af7314b3d7397f74563cb3745e5813506e1609a3d8d638e5e9967aee302ba83f35f4dc611df0b8782ee348f7d47387f5469d6659749732b87fad77504fdbbe23f3eb613b3477e65539c8ec63233bcc3e363c7314b38f0dcf1cc5ec63c3334731fbd8f0cc51cc3e363c7314b38f0dcf1cc5ec63c3334731fbd8f0cc51cc3e363c7314b38f0dcf1cc5ec63c3334731fbd8f0cc51cc3e363c7314b38f0dcf1cc5cc101b8a67b6ce0b6b02cacd266114db5ab73ca9ef1ecc0eea4f0df5db590f3ceb1ce8e3a89ea97e3b1b8c3acdb6e82e6570ffdae0a09eb67d47e637c076f0cc9ed9c6ac78e6e8bcb026a0dc1c1246b1ad73cb936ac7e604f5a786dab10dc0e3a29d7754cf543bb6d1a8d31c8bee52066375a3837adaf61d99df08dbc1337b661bb3e299abf3c29a8072734918c5b6de2d4faa1d9b1bd49f1a6ac736028f8b76de513d53edd826a34e732dba4b198cd54d0eea69db77647e136c07cfec996dcc8a679ece0b6b02cacd236114db06b73c6509a8b34c0db5639b80c7453befa89ea9766cb351a77916dda50cc6ea6607f5b4ed3b32bf19b643ae312b9ef93a2fac0928379f84516c1bddf2a4f6aff941fda9a1fd6b33f0b8687f1cd533b57fbd6bd469be45772983b1faae837adaf61d997f17b643ae312b9e053a2fac0928b78084516c9bdcf2a4f6af0541fda9a1fdeb5de071d1fe38aa676affda62d4698145772983b1bac5413d6dfb8ecc6f81ed906bcc8a67a1ce0b6b02ca2d2461141b1e2f163ae22932788a2c5a1c2adf4a8b0a9d3f42ff26e0ff15c0e8aa3d5c6830ca3cc6b8d88ab2a0593b83a79da1d9a1f4adb4a884bc9a707b550223c3f66a9705cd3a183c1d0ccd0ea56fa5455f9d6faf7f717bf5054686edd501781cb4cfe50983474d0d9d6f6c71ac8fa37aa6ce37b60676ddf1382465f0d8bdd5413d6de71232bf15b68367f6cc3666c53348e7853501e50691308a0daf53b6c5cf539e3078d4d4503bb6cdb13e8eea996ac7de0becba6f03dda50cc6ea7b0eea59007e65dd32ff1e6c874c9857e520b3d7b969cc8a67b0ce0b6b02ca0d266114db56e0d91e3f4f79c2e0515343edd876c7fa38aa67aa1ddb11d875df0eba4b19dcbf7638a86701f89575cbfc0ed80e9930afca4166af73d39815cf109d17d604941b42c228b6f7806767ec3ce9f18090474d0db5633b1debe3a69ee976ecfdc0aefb4ed05dcae0fef5be837a16805f59b7ccbf0fdbc1337b66cfec993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993d3337b3e219aaf3c29a8072434918c5b6037876c5ce937eee803c6a6ae8b9c32ec7fab8a967fab9c3eec0aefb2ed05dca60acee7650cf02f02beb96f9ddb01d3cb367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367f6cc9ed93373332b9e613a2fac0928378c84516cef03cf07f1f394270c1e3535f4dce103c7fa38aa67eab9c39ec0aefb07a0bb94c158dde3a09e05e057d62df37b603becf1cc9ed9c2ac7886ebbcb026a0dc701246b1ed069ebdb1f3a49f9f228f9a1a6ac7f63ad6c74d3dd3edd8bec0aefb5ed05dca60acee7350cf02f02beb96f97db01d32615e9583cc5e67af7314b3d7d9eb1cc5ec75f63a47317b9dbdce51cc5e67af7314b3d7d9eb1cc5ec75f63a47317b9dbdce51cc5e67af7314b3d7397f74563c553a2fac09285745c228b63dc0f361ec3cdd4a13068f9a0a8cf924e43f74ac8f9b7aa69f3bec0fecba7f08ba4b19dcbff63ba86701f89575cbfc7ed80ecd9d79550e32fbd8c80eb38f0dcf1cc5ec63c3334731fbd8f0cc51cc3e363c7314b38f0dcf1cc5ec63c3334731fbd8f0cc51cc3e363c7314b38f0dcf1cc5ec63c3334731fbd8f0cc51cc3e363c7314b38f0dcf1cc5ec63c333473133c486e2a9d679614d40b96a1246b1ed039e8fe2e7294f183c6a2a30e69390ffc8b13e8eea99eab7f37160d7fd23d05dcae0fef5b1837a16805f59b7cc7f0cdbc1337b661bb3e2a9d179614d40b91a1246b1ed079e4fe2e7294b183c6a6aa81dfbc4b13e8eea996ac73e0decba7f02ba4b198cd54f1dd4b300fccaba65fe53d80eb9c6ac7846ebbcb026a0dc681246b17d0c3c0ee22ec55364f0c8fc2704be9516b53a7f84fec5ed550b8c0cdbab280b9ab53378da199a1d4adf4a8b099057136eaf09c0c8b0bdda6541b30e064f0743b343e95b693151e7dbeb5fdc5e138191617b75c8826687b23d3c94fbf6a18c53aff9a1d3bce0106a5e7008352ff09a5369eee0f85286c7b20018704a42fe53e0f976fc3ca9fb729f66c0f36de0f956fc3c5d1dd5b354adf73bc01ed77a9556df35b4fad4d0aa18ca20c3771de857007e65dd322ffe3cb3678e62c6735b614d40b94f4818c5f62de071d16ea8ba5fa0d725eb6f15a6cf8eaef3ebe27909de2b6ea5d72b1ce2af10ca4c2ca92bfb3bcd5604ff97eda6eab3dfb0397a87b9abedb99dcc8bbfa2206bf76e1bbc978c5ab878de94e9717fbf85e7ebf8784a713f475ffb1cd53d93677ffb2c3c31d6bd6bd473cfbdf1d73dd57e74d1eb92f5ab7df4df8f76aa7939ee7bd27e7431ea5c08650696d495fd0f683f6c6d85eb7d53cec9cd7db34550d79e095789b69bcf84bed67629f71194c736a742ffe2fe59017575d52e46dd63c276d16cbb5d6a6f3e97347d17832e1f916a667b4e813a565ab82b09b8311eb3b99fc9ba6dcfc82a0d1dd934c36dfd9145c7be16eebe04dc8cfb755f434736cd0eb65f0fb2700f22e066dcaf07193ab26976b0fd7ab0857b300137e37e3dd8d0914db383edd7432cdc4308b819f7eb21868e6c9a1d6cbf1e6ae11e4ac0cdb85f0f357464d3ec60fbf5300bf730026ec6fd7a98a1239b6607dbaf875bb887137033eed7c383fa3ab26976b0fdbacac25d45c0cdb85f57193ab26976b0fdbadac25d4dc0cdb85f571b3ab26976b0fdbac6c25d43c0cdb85fd7183ab26976b0fd7ab4857b340137e37eddd87efbacfb75ad85bb96809b71bfae357464d3ec60fbf5040bf704026ec6fd7a82a1239b6607dbaf275ab827127033eed7130d1dd934b3edd78ede25ccf8ddc68f9dea931e63fae30c783e041e1731e5280e4a1df57349f54ddd6b68f5b1a1158eddb10ff473d017a6c16f12883fcfec993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367f6ccfcccf85d467cbe22e53e2261141b3e9372719f5fd5fd42bd2e597fab300d3cb6ceefbed8fd96951618fe92c021fe0aa1cc89a7d595bd41b31505076e371c8b1bb7e59ed8eb90de9666fccbbcf82b82faec051e07efe7a778f6193cfb2c5ae07ba7f1f82e1be946e3b252f5fd9dc383baedbcc7a80f6afa41ecfeeb6b5a6068fa8163df89a0fef614069c9290471e17cf861dd533d516ec36ea646a5c0c653a413d773ba86701f89575cbfc6ee091a905f0b88ac1c0e0092cfac85449c633958c673419cf99643c43c9788e27e3b98e8ce770329e8bc9781e22e32927e39940c633928ce734329e5bc8788e22e3b98a8ce742329e42329e7e643cd3c8787a93f1dc4dc6733619cf30329ef3c9784e24e3b9818c2741c6732919cf23643c65643c93c8784691f17424e3b98d8ce718329e6bc8785a93f124c978ee27e3e949c6732e19cf38329e73c8788693f19c4cc67313194f31194f3b329ecbc9781e25e3a920e3b9808c670a19cf5d643c6790f1dc4ec6534ac6731c19cfb5643c5dc8782e22e36943c6f320194f77329e5a329e2a329e53c9780691f19c47c6732419cf95643c2dc978fa92f1dc4bc6d3878c670c194f67329eb3c878ee20e339818ce77a329eb6643c9790f1ec25e379988ca71b19cf44329e6a329efd643c25643c83c9788e26e3b99a8ca715194f7f329efbc8787a91f18c25e3e944c6732719cf49643c3792f11c41c65344c6731919cf74329eae643c93c9786ac8784e27e31942c6732c19cf40329ec3c8780690f13c40c6d3838c673c19cf08329e53c8786e26e3694fc6d3818ce70a329e02029e4470e0b79812f0ff7d60936f067d08b61696f5c9736a29af8e8b8b3b1eb8ee1696757f6061409d76415d923a5ffacda6944ee82b09f3e2af08383e20e1b9828ca703194f7b329e9bc9784e21e31941c6339e8ca70719cf03643c03c8780e23e31948c6732c19cf10329ed3c9786ac8782693f17425e3994ec67319194f1119cf11643c3792f19c44c67327194f27329eb1643cbdc878ee23e3e94fc6d38a8ce76a329ea3c9780693f19490f1ec27e3a926e39948c6d38d8ce761329ebd643c9790f1b425e3b99e8ce704329e3bc878ce22e3e94cc633868ca70f19cfbd643c7dc9785a92f15c49c6732419cf79643c83c8784e25e3a922e3a925e3e94ec6f320194f1b329e8bc878ba90f15c4bc6731c194f2919cfed643c6790f1dc45c633858ce702329e0a329e47c9782e27e36947c6534cc6731319cfc9643cc3c978ce21e31947c6732e194f4f329efbc97892643cadc978ae21e339868ce736329e8e643ca3c8782691f19491f13c42c67329194f828ce706329e13c978ce27e31946c6733619cfdd643cbdc978a691f1f423e32924e3b9908ce72a329ea3c8786e21e3398d8c672419cf04329e72329e87c8782e26e3399c8ce73a329ee3c9788692f19c49c6339a8c672a194f25194f0b8307ffafde0ddbabf3f2eda042f8ff24ddb9bcbd5e97949167c4ea5ec5fb864dd577a7a3fabe1fd44d4998df09f515f6f781e77d473cbb0c1ed37711e42b41b31d864d316e77c4b8c36094f9edc028faed009e1d8e78761a3ca6ef22c8f705cdde336c8a719b23c6f70c4699df068ca2df7bc0f39e239eed068fe9bb08f28340b3ad864d316e71c4b8d56094f92dc028fa6d059ead8e78b6193ca6ef22c80f06cdde356c8a71b323c6770d4699df0c8ca2dfbbc0f3ae239e2d068fe9bb08f24340b34d864d316e74c4b8c96094f98dc028fa6d029e4d8e78361b3ca6ef22c80f05cd361836c5b8de11e3068351e6d703a3e8b701783638e2d968f098be8b203f0c345b67d814e35a478ceb0c46995f0b8ca2df3ae059e78867bdc163fa2e82fc70d06c8d61538cab1d31ae3118657e35308a7e6b80678d239eb5068fe9bb08f255a0d92ac3a618573a625c6530cafc4a6014fd5601cf2a473cab0d1ed37711e4ab41b315864d312e77c4b8c26094f9e5c028faad009e158e78561a3ca6ef22c8d78066ef1836c5f8b623c6770c46997f1b1845bf7780e71d473ccb0d1ed37711e4478366cb0c9b625cea887199c128f34b8151f45b063ccb1cf1bc6df098be8b205f0b9a2d316c8a71b123c62506a3cc2f0646d16f09f02c71c4b3d4e0317d17417e0268f69661538c8b1c31be6530cafc226014fdde029eb71cf12c36784cdf45909f089abd69d814e31b8e18df341865fe0d6014fdde049e371df12c32784cdf4590bf096cc2db076cafeb7c6fb0bda6f3bdc0f6aacef704db2b3adf036c2feb7c77b0bda4f3e5607b51e7bb81ed059d2f03dbf33adf156ccfe97c3fb03dabf3fdc1b650e793605ba0f303c0365fe72f02db3c9dbf186c7375fe12b0cdd1f94bc1365be72f03db2c9dbf1c6c3375fe0ab0cdd0f92bc1f68cce5f05b6a775fe6ab03da5f3d780ed499d1f08b62774fe5ab03daef3d781ed319dbf1e6cf7e8fc0d60bb55e76f04dbc73a7f33d83ed1f95bc0f6a9cedf06b66fe9fced60fbb6cedf01b6efe8fc9d60fbaece8f00dbf7747e24d8beaff3a3c0f6039dbf0b6c3fd4f93160fb91cedf0db61febfc58b0fd44e7c781eda73a3f1e6c3fd3f94960fbb9ce4f06db2f747e0ad87ea9f353c1f62b9dbf176c9fe9fc34b0fd5ae7ef03db6f74fe7eb0fd56e71f00dbef74fe41b0fd5ee71f02dbe73aff30d8bed0f947c0f6079d9f0eb62f75fe51b0fd51e7a55d53edec9f74be2488b79dfd2aa89b4ac0b7f85365feacf3ad8d32b26c2194395b772854cf38d4bb4bd20e4bbbac6cd20ebf0e3669875f039bb4c3af824ddae157c026edf0cb609376f825b0493bfc22d8a41d7e016cd20e3f0f3669879f039bb4c3cf822da9f30bc126edf002b0493b3c1f6cd20ecf039bb4c373c126edf01cb0493b3c1b6cd20ecf029bb4c333c126edf00cb0493bfc0cd8a41d7e1a6cd20e3f053669879f049bb4c34f804ddae1c7c126edf063609376f81eb0493b7c2bd8647ff90a6cd2367f0c36699b3f019bb4cd9f824ddae66f814ddae66f834ddae6ef804ddae6ef824ddae6ef814ddae6ef834ddae61f804ddae61f824ddae61f814ddae61f834ddae69f806dbcceff146cd236ff0c6cd236ff1c6cd236ff026cd236ff126cd236ff0a6cd2367f0636699b7f0d36699b7f0336699b7f0b36699b7f0736699b7f0f36699b3f079bb4cd5f804ddae63f80ed519d97b6ba0dd8e459b19a4abfe184e3f0b4005fc2920ce26dfb714a421eeb2e532519cf1c329ed1643c2f93f19c49c633948ce778329ec3c978de24e39940c6b3908c671919cf52329e37c8784e23e3d940c6b39e8ce728329ef7c9787692f15c48c65348c6338b8ce745329eb3c9788691f19c4fc67322194f828c673e19cf12329ec5643caf91f17424e35947c6b3968ce718329e1d643cdbc9785a93f17c45c633838ce75c329ee7c978ce21e3194ec67332194f31194f3b329e0a329e0bc878e692f1bc45c6b3888ce715329e33c878d690f1ac26e32925e3398e8ce73d329e6d643c5dc878da90f13c4dc6534bc6f32c194f1519cfa9643c83c878ce23e339928ca725194f5f329e5bc9786693f1bc44c6d3998ce72c329e55643c2bc978be24e339818c672b19cf16329eb6643c7bc9782692f12c20e3a926e3799d8c673f194f0919cf60329ea3c9785a91f17c4cc633938ce705329e15643ccbc9784e22e379978c673319cf11643c45643cf3c8786ac8785e25e3399d8c670819cfb1643c8791f13c43c6f31c19cf3b643c6f93f19c42c6b3898c6723194f7b329e0e643cbbc9787691f11410f0248023009bfcbf25d8e43b3cfbc1f685ceef059b7cc3e74db07daef38f82ed618bad85854f18a6834dde95fd026c727fe611b0c93b139f834dce1bc4bf9a5fd9f140fe16b08cf86969e1477f9f5bb8248fdb5b964906f16e6ff4950cecdfbc2b30180f35cf2e329edd643c1dc878da93f16c24e3d944c6730a19cfdb643cef90f13c47c6f30c19cf61643cc792f10c21e3399d8ce755329e1a329e79643c45643c4790f16c26e379978ce724329ee5643c2bc8785e20e39949c6f331194f2b329ea3c9780693f19490f1ec27e3799d8ca79a8c670119cf44329ebd643c6dc978b690f16c25e339818ce74b329e95643cabc878ce22e3e94cc6f31219cf6c329e5bc978fa92f1b424e339928ce73c329e41643ca792f15491f13c4bc6534bc6f334194f1b329e2e643cdbc878de23e3398e8ca7948c673519cf1a329e33c8785e21e35944c6f31619cf5c329e0bc8782ac878da91f11493f19c4cc6339c8ce71c329ee7c978ce25e39941c6f315194f6b329eed643c3bc8788e21e3594bc6b38e8ca72319cf6b643c8bc9789690f1cc27e34990f19c48c6733e19cf30329eb3c9785e24e39945c65348c6732119cf4e329ef7c9788e22e3594fc6b3818ce734329e37c8789692f12c23e35948c633818ce74d329ec3c9788e27e3194ac6732619cfcb643ca3c978e690f15492f1b4b0f0ec77c423df8a9175cbfcfe66ee7ba7e17b679ef8de6ef8de9e27beb719beb7e589ef2d86ef2d79e27bb3e17b739ef8de68f8de9827bed71bbed7e789efb586efb579e27bb5e17b759ef85e69f85e9927be971bbe97e789efb70ddf6fe789efa586efa579e27bb1e17b719ef85e64f85e9427be99afbf553f5ce9abbc5bff26e0ff15c0f8a623c6fd06a3ccbf098c62c3ef515738e289ba76af20f0adb4907b59f2cc3301ffaf04465731556130cabc2da676024fa5239ea87b0e9504be9516f22eb6f4a94cc0ff71fc655731556930cabc2da6b6034f5f473c51f74afa12f8565ac8bbcff2ce5f02fe8fe3adbb8aa9be06a3ccdb626a1bf00c72c413758f6710816fa5857c2b4cbe499380ffe3f88cae626a90c128f3b698c2f173073be289ba373598c0b7d242beb52bdfbc4cc0ff71fc26573135d86094795b4ce1f871431cf144dd531b42e05b6921cf82e51bed09f8ff5060741553430c4699b7c5148e7733d4114fd4bdc0a104be9516c3745efa5825e0ffc380d1554c0d351865de1653eb816798239ea87b98c3087c2b2d86ebbcbcc39180ff0f0746573135cc6094795b4cad059ee18e78a2eebd0e27f0adb4a8d27979a73f01ffaf0246573135dc6094795b4cad069e2a473c51f78cab087c2b2daa755ebe399780ffe3f8efc31d3156198c323f1c18c5b61278aa1df144ddebae26f0adb4906ffbafd0bf09f83f8ec7ea2aa6aa0d4699b7c5148e075de38827ea1e7d0d816fa5c5689d97316112f0ffd1c0e82aa66a0c4699b7c5148e5f39da114fd4b385d104be9516f26dae65fa3701ffaf0546573135da6094795b4c2d059e5a473c8b0d9ec5162d0e956fa585f4e55ea27f13f0ff09c0e82aa66a0d4699b7c5d462e099e08827ea59ce0402df4a0bf9b6f65bfa3701ff9f088cae626a82c128f3b6985a043c131df1443d839a9805df51cf53b2e13bead940367c47dde7ce86efa87bb6d9f01d75ff311bbea3eea565c377d47da16cf88ebac7910ddf51d7ebd9f01d75ed990ddf51d751d9f01d754d900ddf51e7b7d9f01d75ae960ddf51e71dbe3df7ed79dcbe0fe5b943beb6e787f2187a288f25fedac05f1b64cbb73f96f86b836cf9ced76b03df9e67bf3d97ebaf8220fa7aec6d47be971abe651e9fb32c75e47bb1e15be6f199c16247be1719be651eef7f2f72e4bbc8f02df38bb2e0bb9de1bb5d167d77307c77b0f876b0bdcb1241fdeb6f61c02909798c81b71c68e1a89ea56abd4bf4babe8e71bdb6fb36e6fe520c6596807eaedb0e59b7d976e42233c645417cbe4b13e043be4ba66cf2fcf875b049bbff1ad8a45fc0ab609363d32b609367522f834d9e59bd04b6d13aff31d8e4d931f6d997e7ffdbc056a5f3d8577cb8ce6f019bf4a5c23ecad21f6e33d8a44f23f68d957ea91bc1267d8bb14fa6f40f5f0f36e9e38f7d01e53d8db56093776db00f9abc2fb51a6c7b751efb3ec9776856826dbaceaf00db1f747e39d81ed2f95bc1f67b9dff0a6cbfd3f945607b50e7df02db6f757e09d81ed0f917c1f61b9d7f016cf7ebfcf360bb4fe7f15db65febfc2eb07da6f3f80ed5349ddf09b65fe93cbebb73afce6f07db2f75fe39b04dd5f967c13645e71782ed173abf006c3fd7f9f9609bacf3f3c0f6339d9f0bb6493a3f076c3fd5f9d9601baff3b3c0f6139d9f09b6713a3f036c6375fe19b0fd58e79f06db8f74fe4bb0ddadf38bc1d642e797824dc68cc47e2a853aff36d85ae93cf63f92effb4f04db613a3f016c6d74be166cf26db8d16093f1a06bc096d0f96ab01da1f3556093f3b3e16093f14f86814dcea58682adbdce0f019b9cf70c069b8c6739086cf20dd2be603b5ae72bc126dfd6af00dbb13abf1f6c32e6d89b6093efd6ed059b8cc5fc08d8e47bd5d3c17692ceff016c320ecb43603b45e77f0fb65375fe7760936f783e08b6129dff2dd83aeafc03603b5de77f03361923eb7eb09da9f3f7814dc60efe35d8e47bcf9f81ad93ce4f03db393aff2bb0c95822f7824dc607fd25d83aebfc54b0c977b8a780ed029dff05d864bcbf9f834dbe313c196c32aedbcfc0d655e72781ad4ce77f0ab66e3a3f1e6ce53aff13b075d7f97160eba1f363c1d653e77f0cb65e3aff23b0f5d6796967d4feacf6f37d7a3e19c4775ea6fc7d18d49f1aba361006e489f35cbb1878d0d79ed8eb5e963aaf97fdbe855eafc4d01ef0bd3b76dfe96b8a0ff4ba0af57a771bbe0ba1cc39ba7150cbc931bfa55e6eafb11cdec79275cb3217827d97b1eef6babe1f38aaef6e8349b851072973be6652c7c61fe87c1b582646b6d4f5b1c45a001ae29484bc30b8d1aaac14cf7b1bc3f301f0ec899d277dbdee222670df8afb7addbc8f6bc65a3194d90dfaed72a01feeebb26e99177f9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec99f99915cf3e9dc7e7ca526e1f09a3d8f6008f8bfbfcf81c56d6af9eebec3aadceef9ed8fdd67fbed74aafb7d4a8732194f91a9e39edd5f922f8bf6cb7a86de9e0396183db52fc15417df059d03e473c7b0c9e3d162d245f129befb2916e342e2b55fd56d433f6bd86aefb2c9abada5ff7e87515189ae2fefaa1c183cf468b80f723fd9b80f57c047570b08f371817e20ff7a53d6093fc87c0e8623be3b144da03791e8ecfa6a5ccaf8ce7e2f16ffbb25297edc6fb50a76470607c174299df41dbf7b9ce63df907da0db3f2cff97a9a1e7d4a29faaf38ef8eb9cdabedb8133097ed0f77bc01a93ef7aefd014e8247ec45e08f9bf437f0e29277a88d6c28ee39523bbb9dc87c672c55066a7a5fec920defaef30787618cc6a9b7c0971f60f38febb6a937646687421682465f680467b1df1ec31788443fca932b2fd5b1b6564d94228f3bfa08d527591765eea897d5bf018e0ea3826be64dd326f3b37fe0018cd3aaaf818786c1def9ed87973abffd76125e95f6cd7e3eaff25eb6eaf97158ec0587f29ac5fb85a07d1c796ffd9be2575eb77d9bf6caf516761419da54cbb92f4af8ab3cb743e9373fd4375dd1675aebfd3014f22a87fedada6868eef788c79df018fa37a96da8e5dbb8c3a1543994e504f07e7310dbe0bbc037cbbd8e6a8859c43ed36b42884321d4bd2bfd27644e988d7aa1f64a52e65d6f3c1524b5da44ca792babab4017b9c4c2eb7db7b5027b5de3d96ba4a99f34bea74e9a2f309d84e78dfa4afe5ff3235d41ee0583c5be3af736afb6e01ce24f841dfef026b4cbeeb7d0b44cef7c58fd80b215f59525756ca891ea2b5b0ab7d44def9437673b9ddc672c550669ba5fec920defa6f3578b61acc6a9b742da9cb4b1cb96c37b74568540a1a4919bc7f2cc7767cefce76dcdfe3883beab8bf0718cd7613cf5d5cb2ed35d8cc7ba8b6f3412983e76452e6ea92f4af6a671396b2e6bd6117f731f11dd400ea111875950963c0c1b561395e3b493b257eba807d8fce8bce5d0ced0aa1cca092f4afc3f36eebbd4bf3fa0eaf2984dbdcb7f0dd8f212575dc3876e21efd5b04b64ff4afa3ebb472db3d43e1b0dd331c5e52c78ecb0ad7c796ba98d7c82d8203efa97f6d94c5fb6e0d2d67e6cd712895be9f18e56c7ef09a27b67735ba969622538bc07ebfe04383bd203870cc4dd90f30e6ccfb285d8cf5e07d94da92f4afb4496659b5edfffde83a7d643b8a76d89e604c7e088c499d2ffd6653575bfd655efc29c68f8c3ab869bbd2ef2b65721f782ff0b868db1db5d1a5788c6d13db7a7b57d98eff1f1a5a65f179adf5986f3e736f63e4e3f15d566dbbff64d362b785c7d57394282d765b7cc7a7458f91b6e3874d8b5d169e5d59d66297c5778c5ad4e07dcf86b478dfc2e3e25e54435abc6ff11d9f163d4b1b7aae815aecb4f0b8baf710a585f8cb94791701731b231f8feff22adb7d329b163b2c3caeae9ba3b4d861f11d9f165d7be03dba86b4d86ee189fffe5cc35a6cb7f88e4f8b5ebdf11e5e435abc67e171f54c374a8bf72cbe638c8b51b67b39362db65978b665598b6d16df319e1ff6b0dd6bb369b1d5c2e3e0be6b835a6cb5f88e518b1178dfb5212db65878b664598b2d16dff16951d5dd764fd8a6c5bb161e57f784a3b478d7e23b3e2d46f452be3737428bcd169ecd59d662b3c5778cd750a9b8d8d4082d3659783665598b4d16dff169519d3ad7dad8082d365a783666598b8d16dff169519a3aa66e6884161b2c3c1bb2acc5068bef18e322753db9be115aacb7f0accfb216eb2dbe633c8ea4e2625d23b45867e15997652dd6597cc7a7454deafed3da4668b1d6c2b336cb5aacb5f88ef19e4b2a2ed634428b35169e3559d6628dc5777c5a744b1d535737428bd5169ed559d662b5c5777c5a8c4a3d135bd5082d5659785665598b5516df319e77a6da8b958dd062a585676596b55869f11de37967eafec58a4668b1c2c2b322cb5aacb0f88eb1ed4c9d772e6f8416cb2d3ccbb3acc5728bef18cf3b535abcd3082ddeb1f0bc93652ddeb1f88ef1bc33751c79bb115abc6de17135064a94166f5b7cc71817a9b6735923b45866e15996652d96597cc7785f2bd5762e6d84164b2d3caec66b88d262a9c5778cd723a97b7c4b1aa1c5120bcf922c6bb1c4e23bc66745a973f0c58dd062b185677196b5580cbef7c6ee3bdd9f5b7c485fac0b0c2d0aa1cca91dd3bfd2172b4a475907f62bc3babc157b5dd2fdca1645d4e52da88b943913ead22670324651b9a3baa662e64da8935aef4796ba4a99733bd6e9d259e713b04d3e06ddfa58fe2f5381319f84bce8a7eafc7afc754ec5ea6bc099043fe8fb55608dc97757f45da093f8117b21e47b77ac2b2be5440fd15ad8d53ef286ce23bbb9dc6263b96228f386a5fec920defabf6ef0bc6e30a7de7b8038933872d376a599de88d0e802d048ca609fbd8f1cf1987d088543fca932b2fd5b1b65b00fa594b908da28ec572af54c0407f69b74d49675457659b7cc8bbf62b0ed0546b38e2a3e3e83be9f3256848c23a16c322e4437584f4fc3a6eadacb515dc597ac5be67b01a38c53d133fb8c658d65ec61302a9e3e0e34c3b137646ae878d107787a3be07154cfd471a8c2a8532fa34ec55006df6dac7050cf02f02beb96f90af0ed629ba316724c3ed7d0a210ca0c37ce1fa3749475a8f8ed69a94b3fc77591754bbbd42f0bbe2b0ddfdd0ddf89a0fe760e8286f7af4a60eeeb8059adb77ffceb2dc5f3368929f1d31dea34003488ab4eb82e39cf1b60685b08f9a9709e27e5a4ac1cbf845dc5b26c4b643797eb632c570c65fa59ea9f0ce2ad7f7f83a7bfc1acb6c9dd706ee7607f48c5403f8343e6bb8376fd23b4eb07da49193cfef570a45d5f8347e67b008f9ce354804dce15843f01ffef96056eb3ddabb0708b0dc789eb6161ec1e3f63ea5ca787c128f3dd81516c7d81a7d29166e6b63ed7d0078fcbad8d32b26c21949905c7c684a5acdaef3a15d4d5aba5b6c7f6ee986ed35b3bd00bc7690c409fc0d03000bda49ead1cf0b40deac66a9c3ca576d288bb46dd382afde851d00a0d4cfc2db054a305d830dfd2620b82fa435216824d86a46c05b616862c3814a6949721ed5cc8857ac8ba0b0dce36c012a76f1cce53a68642e730e07111ca2a7464484f1d3ab74e1a336514c6472b83b329b1a3fed7b2817251eb72b51dcc7d2209f3660c163af2df12ea9b8479f1a7b68d0cad3a61c4c87b064cba6beab851e3a74c46a1cc1d1bf30541fd0d60fe4609ee6aa7c300c00a63e3d0caa8173618f23fd9306de3e72cc731734d6d02f027535bd0ed7007baa9f5cbd8b723478c1d7bfdd4aab163465e3675fcc829636ac7e3d66c632817b5a5e5ffadc1666be2b1ac9ab0d9c2650fb3d86c138e32dc066c72e43a1c6cc2d3166c2d212fe5cd2de3245c3bc1fa659752ff53e2b4d2153f2ca80b01391cab7655edbfea544e7d42569d0aa9a18dd5e6544317ab3b866a6862f5153b35f4b01a6a580d2d7c62901e3a580d157c4a901e0a587deda224480fed7b7a901ebaf7cc203d34efd9c0f76d603e27489f76a9a1753b07e9a173d5adcb2e41fa336feadd7a75faae6e0ba8535e7589a74e3fd569a7babc50b72fd4ad2c754aa74e97d5a9a03a7d539723fdb5d603c27451982e0ed32561ba344c9785e9f2305d11a62bc3745598ae0ed335611a18a66bc3745d98ae0fd30d61ba314c3785e9e6203dbcf32d417af87535fcf36d417a68e8db83f4b0d17704e921a5ef0cd2c34d8f08d243518f0cd2c3548f0ad24358df15a487b71e13a487c9bd27480fb5ab86e01d1fa487c356c364abe1b3d530bf6a486035a4b01a6a580d4bac8630564320aba1911f08d2432eab219b1f0ed2c33e4f0fd3a3617a2c4c8f87e989303d19a6a782f4f0e06ad8f019417a987135fcf8ec203d5cf9dc203dbcb91af65c0d87ae864957c3a7ab61d5d530ef6af877352cfc4b617a394caf04e94712ea518c7a44a16effabc760ea16f55b41fad6f99220fd885b3df2575d20549710d545664590ee42a5ba94a92e76aacba1ea82a9baa4aa2ebaaacbb2eac2adbab4ab2efeea9507f50a887a2546bd22a45e9952af90a957ead42b86ea3551f5daa57a8d58bd56bd2748df16df17a41f95aadbe1ead180ba65ae6edf7f1aa66f05e998fc4e98be1ba6ef85e9fb61fa41987e18a4873556c31dabe192d5d0ca6a18663564b31aca590d05ad868dfe2c480f3dad86aefe6d901e12fbf761fa3c4c5f04e9e1b5bf0cd31fc3f45598fe14a63f87e92f61fa6b98fe16a67f09d3bf86e9dfc2f4f730fd234cff0cea86d9c686e444ddfae82b9860c49429a3c64d985232a5b664dcd4b153c64c187b7fc9b431534697d4de3b6a52cdd8da69b8f0b7f5c23246f880499346dc5f32667cf5a8fb4a6aa74e29a9ad29a9aa9d3abebade41fc2f7aa1930ff438a2ba3adad97f7e13d2ffdb44a787eb7651465fbfb2e1ba1dd1b209821cd994857ab46c5a8526e923985ceade943e0f2e993cb6764a4969c9f8f06f78e0ad9d36aaba4b09fe6f7228f2e4292593a78c9834a5a46652edb892ae5d70bd8fb46d4225feabad1b98b34e6c9a389df477969a1462bf3cad090afcc7694d236d5df20d48db9634cd694949136a78765316baaa8984379744ca32796ad5944923464e895ef8b66fb2f09d4da9e6f82656f3948e4d70764653161ad0b169847736c5d9cc0c9c05ff0d9c7a335e8c5506009b2d6c6f00000028511f8b08000000000000ffed9d77741cc795ee7b901846000892600e50a299000e06194c60ce9428c9ca8120098ab4488222a16459966449ce3967cb692de79cd7da68efae77bdebb5d772f63adb92d3fbe71dbff3f61c9fadeaa96b7c28768f31a3bee06dcced732ea6fa4e4ddf5f7d7dbbbaa7aaa791090acb1f8c655cb9dad8c5c1b90bbd3fe05e734f6f694f705b394ece4c4a38ab52c2599d12ce9a9470d6a684b32e259c5352c23935259cd312e4b46c55c1d82569dee90cba26cd984d99a617a440d3fa9469da90024d1b8374f4513352c2d99412ce9929e19c9512ced929e16c4e09e79c9470ce4d09e7bc9470ce4f09e78294702e4c09e7a294702e4e09e79294702e4d09674b4a382f4c09e74529e1bc38259c97a484f3d204395701e732f7fa0cf7badcbdae70af2bdd2b7d66b57b6d756dac71eb6dc6d6583663edde7b79631dc63a8d7579ef751beb31d66baccfbdd7e2deeb37b6d6d83a63eb8d6d30b6d1e9b0c9d866635b8c6d35b6cdd876633b8ced34b6cbd86e637b8ced35b6cfd87e639719bbdcd801635718bbd2d855c69e69ec6a63d718bbd6d8751ecbf5c66e3076a3b19b8cdd6cec1663078d0d1a3b64ecb0b123c6868c1d3576abb163c68e1b7b96b1db8c9d3076d2d82963c3c64e1bbbddd81963678d8d18bbc3d89dc6ee3276b7b17b3ccd9e6dec5e63cf31769fc7f95c63f71b7bc0d883c69e67ec21630f1b7bc4d8f38dbdc0d80b8dbdc8d88b8dbdc4d84b8dbdccd8cb8dbdc2d82b8dbdcad8ab8dbdc6d86b8dbdced8eb8dbdc1d81b8dbdc9d89b8dbdc5d85b8dbdcdb1d081f07663ef30f6a8b1771a7b97b1771b7b8fb1f71afb2b63ef33f698b1f71bfb80b10f1afb90b10f1bfb88b18f1afb98b18f1bfb84b14f1afb94b14f1bfb8cb1cf1afb9cb1cf1bfb82b12f1afb6b635f32f6b8b1bf31f6b7c6feced8df1bfb0763ff68eccbc6be62ec9f8cfdb3b17f31f65563ff6aecdf8c7dcdd3fcdf8dfd87b1af1bfb4fe7fb867bfda6ab4be362ff65ec5baefc847bfdb67bfd8e7bfdaef799ef19fbbee7fb81b11f7abe1f19fb6f57feb17bfd897bfda97bfd997bfdb97bfd857bfda57bfd957bfdb57b7dd2bd3ee55e7fe35e7feb5e7fe75e7fef5eed9ceae5cd85f2d46074190812eaa33a8fe6ec9c0a89bf2c18bb582daadd7bf4dae2fc356e9d5e49bb5ab75eebf9ebdc7a9db79da96e7daae76f72eb4d9e7f965b9fe5f99bdd7ab3e79febd6e77afe4bdcfa25e0cf0630e6eafcd657ed5c19f051be5681afd6f9aac157479b03df14e7ab051feddf3af04d73be29e09bee7c53c19775be69a4a5b10b9c6f20482a57728376bbf5496fd7cd433524cf7bd86eb791897746f2bc4376bb4d0cbc363f66ba6dcd80bc99e57c4de09bed7c33c1e7baa03f1f73d637c7f966836faef335836f9ef3cd01df7ce79b0bbe05ce370f7c0b9d6f3ef81639df02f02d76be85e05be27c8bc0b7d4f91683afc5f99680ef42e75b0abe8b9caf057c748fcb85e0bbc4f92e02dfa5ce7731f8a8afbd047c746d78a9f3d97e626a063ee3fcd447859fa1fe197ccba96f06df0aea97c1b792fa64f0ad82d8e45b0dfd0af95a9d8ffa28fb5ebf2b0f04491d13f9f098589bf476cd96ed76d727bfdd70de6e4330aaf500c4590b5a6d74e504ef0d6ac7d819671487fc3550de0575a91ee941e71962b7fdfe3a57de58e473fddee71aa0ceba88f60f04c9b67fbdc7b3de63ae85f6f3e46c475e7376dc4bc9397b0dd4f5738fae792663ceee050e869cedd69c1df75272ce0e415d3ff7e8ba7732e6ecf5c0c190b3833c399bcf69ce16c6c882203af7e8bbcf64ccd963c0917cce7669ce8e7f2939671f84ba7eeed1f7dfc998b3770247f239db33a8d706e35e4aced957405d3ff7682c6632e6ecc3c0c190b343dacf8e7b293967df0675fddca371c1c998b3af068ee473b68f29673b346783c27c671044e71e8d514fc69c7d143892cfd9c33a3e3bfea5e49cfd3cd4f5738fe64b2663ce7ec495ed3cc337dc3cc322f07dd3f916036ff2b97da49329b7f39adb85fb4082203a4769ee6e32e6f6e3ae6cf3f809b8f7807cdf76be0bc1f71de7bb087cdf75be8ba15d0cc7c0a01e03e35e4a3e06be0f75fd5ca679e4c9780c7c1d381872f6b0e6ecb8979273f649a8ebe71eddd3301973f647c0c190b3439ab3e35e4aced93f425d3ff796bbf264cc59baafd45e2ffcd85d2fac04df4f9c6f15f87eea7cabc1f733e76b05dfcf9daf0d7cbf70be35e0fba5f3e5c0f72be76b07dfaf9d2f0fbe279daf037c4f395f27f87ee37c5de0fbadf37583ef77ced703bedf3b5f2ff8fee07c7dce67efc9a37bafbeea7c76df92460341b2fb96eeb1a46dd3faea0988dde8c56e9cc0d84d5eeca688d8ad0cb1b31083968cb73e00e5565e9e5c4330f6f71f146b4df2b13a6cdbdb82f1b77d0df0e418da9e8518e3e1c9014f7bf23ce1bdbef9e4b71beee3364fd32cc46a83767530b42b03b168dbb44ef11ac087fd7747046367f28cf90cc4a26dd37a2730920fcf27745ea7e3c79e0f97654679198ea5f09a88e2d1b3bf88630df8a9ceef678fb2ad746cf5f03e9e5bdb3d1f535e867941b168dbb44ef1eaa13ded13cf981f2f63ce63e4ea2332108bb6edc7c6e3bd75e2351bd77e6d00df79e893f2e5f649f5c03611d72971fb5a4a6c8ef355066250df469ae7c14f75e6b81f24d8be6d07f4bb0cc75fbed4eb37ec0f92cfe37c0e8febf1f074000fc7b1cf74bce6f0bcffa720d95cebf2b46af7b46a803a9da05f17837ec5ae43289e322bb3322bb3322bb3322bb3322bb3322bb3322bb3322bb3322bb3322bb332cb67c6fb2f707e93eaad16c248be3cf0708cf387cf8f72dba2eddb799defc0bc4ef2f316f91cce59d23d862bbc36d7409da732a3757f00f3e9fedc20ce69aee6d56e5cf759d407e7cec572ce21c6cd0347cd5fb624163b7f986bbecddea3669f43d6e6e9ba3a425386fb54c6689af134c5fb1457793c364fe7578fb271ccfd953a17895a5139c9b93dbcc78077bf14fa0fca85aa606cff81e799eec4638f9dc3a4f9f26e2f760dd4f97f99d17d43f7a2d2ff39f4ef79b2757abc6dd3675680bfc7dbf60cf759e2a8f5b6df069fa53aff037deadbab823f6bc671ff07f6cb01b415970128e3bc79f2e7e1c23c7e47093c5dc0c3d1cf305d6fe4f018487a1ebfc7d32aea3a86ea74837e3d0cfa455d8bd23ac55366655666655666655666655666655666655666655666655666655666655666f9ccf85b5162cd42bdbc10c609baf7219ccfa0e7bfd0f6edbcce4bab46e372cfc3d19cd34aafcd3550e76b55a3755fe9caf5c1b9f73bc4ed4b86f9bca2fb92e2d5437b702e88ebf7dc9d1e4f678416546e492c76611e3f798d47e7f13b3c5df3119a721daf38c78a9ae2f1daeef1e0dc687d70eebd2559d8ce44dc3b149717140f8fa54ef051197f1fcdb19ff15ce2dfd743f170fefa31a7ed8c806bdfe7739cfd462fb469203837bf6ba0ce87a1effba82be33d1c78efc8e311efd3526c9e9af46379965dae30efbb163807200ec65e07ac09c56ec7d819671487fc3550fe52d5685daa477a90d6c46e8f117a2618b2fb9f6bf73ed70075fa22da3f1024dbfe7e8fa7df63b6fbe41390678fc3f99fab4fea8bd16805684475f03a88eb9e3cbf8ff4ef6fc4fbf6eabc3a78cd4275be027d54dcfda351f71c729dc7e2ee398cba36ee0246bf8dfe7d9e957e9fd613d05f247d9fd6139043789f56e06d7f256c9fb8ea82f8730bd5f99eb77dff9a9c3e83f781519d1f427fd1e8ee59ac0fcebdfec67ba626e2fb55dc7dd2140faf6bf0d8fe4b6db7ccbd507f204166cc0964c1eb04aaf32b6f9ff5c470af89f8ec53319f25ade83954f8fdc5d7cfead0079f19484487c231dfefb585f2ba0fda4275fe8f770d98fc754be11a30f9b68ebd26a17ea033a2ad54e7ffc2b1f647b8c6a3fd84df3beaaacf7d9f9662d780a49f6df3443f1f18634b783e706df5685dff39bfa475a9cf07eef63e27f1f9c0ff1ff2ac0eee43e7eaabd7c568b41234a23af8db203a8fe0b37ca3ce315cf7f6c79d63a29e4189fd7363f5c4b3f9e36a51d70854873e8bd708b31df30ca7b35fd71f2fa4f36592f70de36f25da202efe56a28d49cf1ce83600eb785d703e63e79862c73d733a3701b1e39e393d11b19bbcd84d13185b3557cd2569cef04ce4f0f767f8cc52bb14bb2e258606f85c550a18ab53c0589302c6da1430d6a580714a0a18a7a680715a0a18a7a780310b8ce7f3dccea04fbe5c7db8f657b16b0d8ccdf0bf4bf2a5feff0ee6ffa552f4da0763337ca70bb5680dc6af057ecfe378f643a9ffeb8518f07f17cc4c01e3ac1430ce4e0163730a18e7a480716e0a18e7a580717e0a1817a48071610a1817a58071710a1897a48071690a185b52c078610a182f4a01e3c52960bc24058c97a68071993226c2b88a97315f2ea3e5e1f89f7f4fe77f8e31f0e4a2ee3965faed49c9ff6f8df9f9a4ede53e370eef2de1fd9f704fefd9761cf78e94fa6cbb62ff6f9589315f2e23d77decf83b9ef1f0e0ef22a37e5bc3c0982f9791ebf72ff81bbdf1f07483665d119a3130e6cb65e4ba57aed47b39f19efeee08cd1818f3e532e27dd509f2849af594c0d30b9af54468c6c0982f9791ebbee42cc4180f4f1f68d61ba1190363be5c46a6dfb6859af595c083bf01eb8bd08c81315f2ea3e559cba4597f093c6b41b3fe08cd2431224fd2cfc9ee8f88c5f19bc152db4e0cc8382d058cd353c088f74970f45fc5ee93e8e7d5275fae3e5cfbabd87d12189be1f731a116f87b88bfa4c57a5e9ea2f74960ec0d4c5ae0ef55fe92161b8087e3f7335988311e1e626880cfcd4c01e3ac1430ce4e0163730a18e7a480716e0a18e7a580717e0a1817a48071610a1817a58071710a1897a48071690a18f1bb2ac3b562d1ef2f1b2679ecb8ef2a933d76dcf792c91e5bf35cf3bc12626b9e6b9e57426ccd73cdf34a88ad79ae795e09b135cf35cf2b21b6e6b9e67925c4d63cd73c97143b0d63fcca38f91891a725399e1cb61d630d0868fb40044f86a9ed186b9380b61343da1837a680716d0a1855c7c23d88e5305a9ecd4c3c9b4ae0d90c3c5b98783697c0b30578b626cf13e6d496127888a1013eb736058c1b53c0a83aaa8ed6ec927b7a8bea2888310d3a2aa3322aa3329e0fc634f4e1ca988a7ccc97cb6879b625cf136ab6b5049e6da0197dae9d97315f2ea3e5d99e3c4fa8d9b61278b68366db22346360cc97cb68797624cf136ab6bd049e1da0d9f608cd1818f3e5325a9e9dc9f3849aed2881672768b623423306c67cb98c966757f23ca1663b4be0d9059aed8cd08c81315f2ea3e5d99d3c4fa8d9ae1278768366bb22346360cc97cb6879f624cf136ab6bb049e3da0d9ee08cd1818f3e5325a9ebdc9f3849aed2981672f68b627423306c67cb98c96675ff23ca1667b4be0d9079aed8dd04c2ae3da14306e4c0123b38ef972192dcf7e269e7d25f0ec079ecb9878f697c07319f05c9e3c4f98539795c0430c0df0b9b52960dc980246d5517594c4a83a568e8ecaa88cca581ae3400a18755f2ba3544686ef57457f4373d9248fdde8c56eac90d871bfa199ecb135cf35cf2b21b6e6b9e67925c4d63cd73caf84d89ae79ae795105bf35cf3bc12626b9e6b9e57426ccd73cdf34a88ad79ae795e09b135cf35cf2b21b6e6b9e67925c4d63cd73caf84d89ae79ae795105bf35cf3bc12626b9e6b9e57426ccd73cdf34a88ad79ae795e09b135cf35cf2b21b6e6b9e67925c4d63cd73caf84d89ae79ae795105bf35cf3bc12626b9e6b9e57426ccd73cd7349b10f241f3b5fea33660e000fc7336f98da99b3dbbdc26deb4f09ea67b5bad2d3ea324fab06a87305e87725837e19884bdba6758a572af333043033c5cedbfe651ab49f626cf4f4b0f1af626a7b5c5f7fd5248f1dd7d74ff6d8717dfd648fad79ae795e09b135cf35cf2b21b6e6b9e6b994d858ae0d46afdbe9f9a7761bcf74e51ab78eace4a73a974f29bcce08f418e288adc7909e2b2a21b6e6b9e67925c4d63cd73caf84d89ae79ae795105bf35cf3bc12626b9e6b9e57426ccd73cdf34a88ad792e2fcf1be0fdaa09e0093c9ea008cf06613cbb85f1ec10c6d32b8c6789309e2e613cf384f1e485f1cc14c6b35518cf34613c2b84f1540be3d9248c27278c67af309ea5c278560ae3992f8c6796309ee9c2786a84f16c16c6b34618cf3e613c7b84f1f40be359268ca74f18cf36613cddc2781608e3e910c6335b18cf2a613c59613c6dc2786a85f1ec14c6d32a8c67b9309efdc278d609e359288ca75918cf05c278ea85f1d409e3592f8c6797309eedc2787a84f12c12c6d3298c678e309ed5c2781a84f1340ae3d9228c678a309ec5c278e60ae399218ca74918cf54613c13f1bca15278320278b2c1b9cf24cbc2fb07c057e57dd6f657edcda3ef5fedfc55f0996b5cb93a62db57838f7e1b7e4dc46751a7aba12d03ae9c7b7a4ba813c61a80758a570f1cd708e139208c67aa309e26613c3384f1cc15c6b35818cf14613c5b84f1340ae36910c6b35a18cf1c613c9dc2781609e3e911c6b35d18cf2e613ceb85f1d409e3a917c67381309e66613c0b85f1ac13c6b35f18cf72613cadc278760ae3a915c6d3268c272b8c6795309ed9c2783a84f12c10c6d32d8c679b309e3e613ccb84f1f40be3d9238c679f309e35c278360be3a911c6335d18cf2c613cf385f1ac14c6b35418cf5e613c39613c9b84f1540be359218c679a309eadc278660ae3c90be399278ca74b18cf12613cbdc2787608e3d92d8c6783309eaa081e86ff7f19f2d0fd6bb46d5a3f202436c37e08ffefe7b54c6dbace6dabd66d97f8295e0dd4b9de5d18d8fbabf0b3c4e5df6f88f7ce5d071a5dc7d416da1f196fff30c7cee37d950130049e3e41040fc7fda84ced1c938709feffd99cd5ea7a4f2b7fdf35409d6b41bfeb19f48bcaed3f1f03ee358dcc9687ce1dc49a857a1b843092ef2a5e9ef0b8dd108c5d8a1db7d7030f471fc6d4cef0f8bac16bd38608dda90ee6ea0d0ced8c3a7668fd06d80f6963b63c9b5c9958b3506f931046f25dc7cb131e5f9b82b14bb1e3eb06e0e1e87f98da191e5f377a6dda14a13bd5c15cbd91a19d51c70eaddf08fb216dcc9667b32b136b16ea6d16c248beeb79793ab3d0665a8a1d5f37020f47ffc3d4cef0f8bac96bd3e608dda90ee6ea4d0ced8c3a7668fd26d80fcaaccc51cc96877e6342ac59a8b7450823f96e60e5e9cc65a1cdb414ebc76e021e8e7e9e49f7b01fbbd96bd39608dda90ee6eacd0ced8c3a7668fde688d82d41b25adc320e2d6e89e0b96582b5a078a5325f9b4266d559758e63569d55e73866d559758e63569d55e73866d559758e63569d5567bba8ceaab3eaac3a27c1ac3aabce71ccaab3ea1cc7ac3aabce71ccaab3ea1cc7ac3aabce71ccaab3ea1cc7ac3aabce71ccaab3ea1cc7ac3aabce71ccaab3ea1cc7ac3aabce71ccaab3ea1cc72c4167cb43cf8821d62cd4db2a84917c37f2f284bf0bda1a8c5d32defa00946f019e9b18f4616a67780ff941af4d5b2374a73a787c1d646867d4b143eb07613f1c2c81f9e61432abcee5315b1e7a562cb166a1de36218ce4bb899727ecc7b605639762fdd841e0e1e8e799da19f663835e9bb645e84e75f0f81a646867d4b143eb144f9995398ed9f2d0ffb021d62cd4db2e84917cb7b0f2e4c3df376e0fc62ec5fab141e03998384fa11f63d03decc70e796dda1ea13bd5c15c3dc4d0cea86387d60fc17e2885f9e61432abceaa731cb3eaac3ac731abceaa731cb3eaac3ac731abceaa731cb3eaac3ac731abceaa731cb3eaac3ac731abceaa731cb3ea5c393a5b1efadf21c49a857a3b843092ef202b4f4738efb02318bb64bcf501281f029ec1c4790af30e0cba87f30e87bd36ed88d09deae0f17598a19d51c70ead1f86fd30d9996f4e21b3e6c6c4306b6e28731cb3e68632c7316b6e28731cb3e68632c7316b6e28731cb3e68632c7316b6e28731cb3e68632c7316b6e28731cb3e68632c7316b6e28731cb3e68632c7316b6e28731cb3e68632c7314bc80dcbb3d39589350bf5760a6124df202f4ff8dc839dc1d8a5d87d3b8781e710833e4ced0cefdb39e2b5696784ee54078faf230ced8c3a7668fd08ec076556e62866cbb3cb9589350bf576096124df215e9eb01fdb158c5d8af563478087a39f676a67d88f0d796dda15a13bd5c15c1d626867d4b143eb43b01f945999a3982dcf6e5726d62cd4db2d84917c877979c27e6c77307629d68f0d010f473fcfd4ceb01f3beab5697784ee540773f528433ba38e1d5a3f0afb419995398ad9f2ec716562cd42bd3d4218c9778497279f8536d352ac1f3b0a3c1cfd3c533bc37eec56af4d7b2274a73a98abb732b433ead8a1f55b613fa48dd9f2ec756562cd42bdbd4218c937c4cb131e5f7b83b14bb1e3eb56e0e1e87f98da191e5fc7bc36ed8dd09dea60ae1e636867d4b143ebc7603fa48dd9f2ec736562cd42bd7d4218c9779497273cbef605639762c7d731e0e1e87f98da191e5fc7bd36ed8bd09dea60ae1e676867d4b143ebc7613fa48dd9f2ec776562cd42bdfd4218c987e78bfd4c3cf51e4f7d8416933176a317bbb142623779b19b2a24b6e6b9e67925c4d63cd73caf84d89ae79ae79510bb52734d35af4ccd33e751f3cc79d43ca39a8bd4fc4fc9c5ee6a0846972a88758ca99db80c4019c7e768e915c6b344184f97309e79c278f2c278660ae399268c6785309e6a613c39613c4b85f1ac14c6335f18cf2c613cd385f1d408e359238ca75f18cf32613c7dc278ba85f12c10c6d3218c67b6309e55c278b2c278da84f1d40ae36915c6b35c18cf3a613c0b85f1340be3b940184fbd309e03c278ea84f1ac17c6d3238c6791309e4e613c7384f1ac16c6d3208ca75118cf14613c8b85f1cc15c63343184f93309ea9c278320278b2c1b9bf47c1df1354838feeefdf0fbe67b9f201f05545c4a0ed1c071f8d9fd2366c7fb3aef95c862af8cc6d115ccf8a8847716e8bf8ec44e88eb106609de2d503c76d4278a60ae36912c6334318cf5c613c8b85f14c11c6d3288ca74118cf6a613c7384f1740ae359248ca74718cf7a613c75c2780e08e3a917c67381309e66613c0b85f1ac13c6b35c184fab309e5a613c6dc278b2c2785609e3992d8ca74318cf02613cddc278fa84f12c13c6d32f8c678d309e1a613cd385f1cc12c6335f18cf4a613c4b85f1e484f1540be359218c679a309e99c278f2c278e609e3e912c6b344184faf309eaa089e034c3c71cf53382020b69dc7a173158d1966e1fd89f81de0018f91d68f0123f9f03ed41c134fdc33287202625b2dd640d92e59781f7fc7c59553398f91d6a3720aef4b5bc3c413f7dc8e3502625b2d68ec92ee01c8c2fbf8bb05ae9c5ae331d27a544e35f1f284ff5ba23518bb14bbd7088f398e7dc8d4ce1c1e7f093e4323f259d4ad9e560d506722ee938feb0f289e322b731cb3e5a1b90b62c5f3d944fcee6d3c8c51e757069eb07f6c0bc62ec5fac763c0c371fe606a67d88f9df0dad416a13bd5c15c3dc1d0cea86387d64f44c46e0992d5e2e438b43819c1737282b5a078a5321f4821b3049d2d0fdddb46ac59a8b75a0823f972bc3c61ffb83a18bb14eb1f4f020fc7f983a99d619f70ca6bd3ea08dda90e1e5fa718da1975ecd0fa29d80fa5309f4821b3ea5c1eb3e5a1316462cd42bdbc1046f21d63e5c9e7b2d0665a8af563a78087a39f67d23decc786bd36e52374a73a787c0d33b433ead8a1f561d80fcaaccccaaccccaaccccaaccccaaccccaaccccaaccccaaccccaaccccaacccca2c9bd9f2d06f1b89350bf53a843092ef242b4f61dea12318bb149b7718069e5389f314e61d18740fe71d4e7b6dea88d09dea60ae9e666867d4b143eba7613f28b3322bb3322bb3322bb3322bb3322bb3322bb3322bb3322bb3322bb3322bb36c66cb43cfdc26d62cd4eb14c248be53bc3ce1efb63a83b14bb17987d3c0c3312fc3d4ce70dee176af4d9d11ba531dccd5db19da1975ecd0faedb01f945999a3982d0f3ddb8a58b350af4b0823f98659790af3a75dc1d8a5583f763bf070f4f34cba87fdd819af4d5d11ba531dccd5330ced8c3a7668fd0cec8752984fa4905975569de3985567d5398e5975569de3985567d5398e5975569de3985567d5398e5975569de3985567d5398e5975569de39855e7cad1d9f2d0ff5c23d62cd4eb16c248bed3ac3c1de1bc437730762936ef70067838e66598740fe71dce7a6dea8ed09deae0f17596a19d51c70ead9f85fd30d9994fa4905973636298353794398e59734399e398353794398e59734399e398353794398e59734399e398353794398e59734399e398353794398e59734399e398353794398e59734399e398353794398e59734399e39825e486e5e9716562cd42bd1e218ce4bb9d97277cee414f30762976dfce59e039c3a00f533bc3fb7646bc36f544e84e75f0f81a616867d4b143eb23b01f945999a3982d4faf2b136b16eaf50a6124df195e9e7c16da4c4bb17e6c047838fa79a67686fdd81d5e9b7a2374a73a98ab7730b433ead8a1f53b603fa48dd9f2f4b932b166a15e9f1046f2e179b98f89a7dee3a98fd0e27cc5b65af4bbf205ee350beff70323577fd8e731d23ae638f9ea81a79f89a7d1e3698cd0e27cc5b65aac83b25db2f0fe3a60e4caa97e8f91d6a372aa1178d631f134793c4d115a9cafd8568bf5ae3cc3bd66e1fdf5c0c89553eb3c465a8fcaa926e059cfc413d727ad9f80d871c7d744c48ecb958988ad9aabe6aab96acea979e63c6a9e398f9a675473519a335c4785e3bd142300065c06a08cdf1538ae3d99da998bfa3eb6de6b137e1fc33187f3f57d439995398e9969dca233ebc5267d028f879611662d2672dcb4df6b531ac64d8b319f4821b3ea5c1eb38d7d67f2b13bb35e6cd227f07868b993590ba67686fdc15d41b4c614af01ea609edec5d0ce0cc4a56dd3fa5db01f4a613e914266d5b93c661bfbeec463179e278fb1499fc0e3a1e56e662d78da59e80fee09a235a6780d5007f3f41e867666202e6d9bd6ef81fda0cccaaccccaaccccaaccccaaccccaaccccaaccccaaccccaaccccaaccccaacccb2996dec67271ebb307e8fb1499fc0e3a1e5d9cc5af0b4b3307e7f6f10ad31c56b803ab8cfef65686706e2d2b669fd5ed80fcaaccccaaccccaaccccaaccccaaccccaaccccaaccccaaccccaaccccaacccca2c9bd9c67e4ef2b1c3dfe3606cd227f07868790eb3164ced0cc7efef0ba235a6780d5007f7f97d0cedcc405cda36addf07fb419995398ad9c67e6ee2b10bf379189bf4093c1e5a9ecbac054f3b0bfdc1fd41b4c614af01eae03ebf9fa19d19884bdba6f5fb613f94c27c2285ccaab3ea1cc7ac3aabce71ccaab3ea1cc7ac3aabce71ccaab3ea1cc7ac3aabce71ccaab3ea1cc7ac3aabce71ccaab3ea1cc7ac3a578ece36f60389c7ee08c7ef3136e913783cb43cc0ac054f3b0be3f70f06d11a53bc06a88379fa20433b331097b64deb14af12984fa4905973636298353794398e59734399e398353794398e59734399e398353794398e59734399e398353794398e59734399e398353794398e59734399e398353794398e59734399e398353794398e59734399e39825e4868dfdbce46387bf67c7d8a44fe0f1d0f23c662d98da19defff25010ad31c56b803a98a70f31b433037169dbb4fe10ec076556e628661bfbe1e463e7b35e6cd227f078687998590ba67686fdc12341b4c614af01eae03e7f84a19d19884bdba6f547603fa48d19f75f26b9d8e17d9b14a3cabd5adff35db91a7c2f70e51af0bdd0956bc1f72257ae03df8b5d790af85e026d23df4b5d7915f85ee6caebc1f772575e07be57b8723ff85ee9ca7de07b952b8f80efd5ae7c07f85ee3ca7782efb5ae7c17f85ee7ca7783eff5ae7c0ff8dee0cacf06df1b5df95ef0bdc9959f03be37bbf27de07b8b2b3f177c6f75e5fbc1f736577e007c6f77e507c1f70e575e06be47237cef74e5e781ef5daefc10f8deedca07c0f71e579e06bef7baf274f0fd1594e9f57dae7c01f81e73e57af0bddf951bc0f701576e04df075d7906f83ee4ca4de0fbb02bcf04df475c7916f83eeacab3c1f731576e06dfc75d790ef83ee1ca73c1f749579e07be4fb9f27cf07dda951780ef33aebc107c9f75e545e0fb9c2b2f06dfe75d7909f8bee0ca4bc1f74557c6fdfbd7aefc30f8a85f79047cd4af3c1f7cd4afbc007cd4afbc107cd4afbc087cd4afbc187cd4afbc047c94772f051fe5ddcbc04779f772f051debd027c9477af041fe5ddabc04779f76af051debd067c9477af051fe5ddebc04779f77af051debd017c94776f041fe5dd9bc04779f766f051debd057c94776f051fe5dddbc04779f776f051debd037c94778f828ff2ee9de0a3bc7b17f85a5cf9dde0bbd095df03be8b5cf9bde0bbd895b19fb9c495df07be4b5df931f0515ff87ef03dc3953f00bee5aefc41f0ad70e50f816fa52b7f187cab5cf923e05bedca1f055fab2b7f0c7c6daefc71f0ad71e54f802fe7ca9f045fbb2b7f0a7c7957fe34f83a5cf933e0eb74e5cf82afcb953f07be6e57fe3cf87a5cf90be0eb75e52f828fcee3d4cfd8e3d91e83a40369647dd4e6b688b6906f2ab4652048f69a8e62d1b669bd0318691fe4279e313f5ec6768fd1f27431688679454bb1ef4c5dc0d3c9c0c3d4cef03b53b7d7a60eaf4d0d50e719d0ce6e867666202e6d9bd6bb2136c73e472d6add76977b5ad4601d7742b3e7ce623ad2366cfee623dad2c7dc16da36f54b7d1310bbc78b9df362637f4c4bb1e3ab07987b1998ed76fb93df6e787cad75dba29ca2383968d33ad020a93661ec8c338a43fe1a282f681ead4bf5480f3a7f11bbcd65da97c8ee7faecbfb5c03d4e98b68ff40906cfbfb3d9e7e8fd9ee93c6e6510e86e321cc813e8f83d673a05d7f8c767da01dd5c1f35f2b9376bd1e0fadb7020f5de374838fae15881fafb3da2680dbeff7ba23b8c9d7038cad118cf9e419c36b9d568f91d6f3c048be5ee0e961d2ccdfd7cb3d7df0bc5ce7d5a1cfd6409d35706ecc46d4b5c7ddb2cc68bbe83bf89f8264fbf43a06bd707c20007d024fc300f4a276d632f04c0f46c708ce8e0c9f19bc75e88aa1c1231940abf130f13513d18c2af061b93ac2170463874270489686427048b6ca93058760a8befd2a659b45c30d43278f8f3cf3d4d0a9c367ee393d327464eff0ad485debd123695c0b90147db44c0d46076d0682642763eabc58c592672abc4e499ea79da99de1496f9ad7a63aaf4d0d50a716de9bc6d0ce0cc4a56dd3fab488d8097644a116d3c7a1c5f4089ee913ac050e7c930f8f547a1f274faabcb6e0118d6df2f33cd10651c065b0fd8c83b3efd983bdd635664a30bab3a9f7b423aaf6aad6ee083b426acf5c7604d476417684d38e68da939a1db1b423947644d28e40da11473bc2684714ed08a21d31b423842d416104d08ef8d9113e3ba27729b07d1578edb76a7b86b423727604ce8eb8d92b2b7b0560af46ecd5b7bd52b4a31ff60ac17eb3b4a30cf66c6baf64ec59da9e59ed95a2bd42b457f4f60ad7ce526d30b6d169bdc9d866635b8c6d35b6cdd876633b8ced34b6cbd86e637b8ced35b6cfd87e639719bb3c288cae5f61ec4a6357197ba6b1ab8d5d63ec5a63d719bbded80dc66e347693b19b8ddd62eca0b14163878c1d3676c4d890b1a3c66e3576ccd87163cf32765b50b843e7a4b153c6868d9d3676bbb133c6ce068519333b436667c4ec0c989df1b2335c7646cbce60d9192b3b436567a4ec0cd403416186c9ce14d999213b2b606701eca8bf1de57f615018c5b7a3f62f090aa3f27614de8ebadb51763baa6e47d1eda8b91d25b7a3e27614dc8e7adb516e3baa6d47b1eda8b51da5b6a3d27614da8e3adb51e64783c228b21d35b6a3c47654d88e02db515f3bcafb585018c5b5a3b67694d68ecada51583bea6a4759eda8aa1d45b5a3a67694d48e8ada51503bea694739eda8a61dc5b4a3967694d28e4a7ec9d8e3c6fec6d8df1afb3b637f6fec1f8cfda3b12f1bfb8ab17f32f6cfc6fe2528e4e5bf1afb37635f33f6efc6fec3d8d78dfda7b16f18fba6b1ff32f62d634f18fbb6b1ef18fbaeb1ef19fbbeb11f18fba1b11f19fb6f633f36f613633f35f633633f37f60b63bf34f62b63bf36f6a4b1a78cfdc6d86f8dfdced8ef8dfd21189dddc04ee48f6e8546da074746864e9e1e6919196e3979c78991e3a74fdcd372d7f191632dc3770e9d397a62f82efcf0fb5cb745d3089bce9c19bca7e5f8a9234377b70cdf31d2327cb4e5d0f01da78e9cc50f7dd97d68d1b911078f1c890ff6adaaa741fadd3283fed27d8e266876156fdb93e508f287723e34abbabc065de6ce3af4edfdcac2d56ecbd913c3232db99653e6efe009f399a1236d2df8de5923f2d99196b3238367465a8e9e193ed9d2de86dbbd6e5a198da8692ee3436dcde36f79f0bfd4e28b812d0a0400", + "packedBytecode": "0x000000028df71de500000047c51f8b08000000000000ffed9d779815c5b6f67b6040643b0398b3830915c56118e20c3098136614111186610405862866cc9283392341c95940401010c3c93979921e8f27dd7bcf39cffde37ef77ec1ef76ed5debce3b45f566f6d8b579f7eceae7a9d9d56baa7bfdeaedd5d5a9baab20484dff0c5381ceb70cd399c18193fcbf4aff967eb3a96b8ceb2a75c95990239c2d7284b3658e7016e60867ab1ce16c9d239c87e508679b1ce13c3c464ec5d6226838c5cddbd681ae713326724cd3237240d3a21cd3b43807346d17e4461bd53e47383be408e79139c279548e701e9d239cc7e408e7b139c2795c8e701e9f239c27e408e78939c279528e709e9c239ca7e408e7a939c2795a8e7096e40867c71ce13c3d4738cfc811ce337384f3ac1ce13c3b46cecec0d949ff9ea37fcfd5bfe7e95f297bbefebd40ff76d1752cd4f3172aae30a9873465c6ffba85a93c4cddc3d4c3f85fcf30f50a53ef30f5d1ff2bd1ffab08536598fa86a95f98fa6b0d0684e9a2305d1ca64bc27469982e0bd3e561ba224c5786e9aa305d1da66bc234304cd786e9ba305d1fa61bc27463986e0ad3cd611a14a65bc2746b980687e9b6300d31586e0fd3d030dd11a66161ba334cc3c334224cd5611a19a69a308d0a536d98ee0ad3e8308d09d3dd61ba274c63c3342e4ce3c35417a609619a18a649619a1ca629619a1aa67bc3342d4cf785e9fe303d6068f660981e0ad3c3617ac4e09c1ea647c3f458981e0fd313617a324c4f85e9e9303d13a619619a19a659619a1da639619a1ba679619a1fa605615a18a667c3f45c989e0fd30b617a314c2f85e9e530bd12a657c3f45a985e0fd31b617a53b3c88eb0284c6f8569719896846969989685e9ed30bd13a6e5615a11a695615a15a6d5615a13a6b5615a17a6f561da10a68d61da14a6cd617a374c5bc2b4354cdbc2f45e98b6876947987686e9fd30ed0ad3ee307d10a63d61da1ba67d61fa304cfbc3f451983e0ed32761fa344cdf0ad3b7c3f49d307d374cdf0bd3f70dcd7f10a61f86e94761fab1b6fd44fffe549795fb773f0bd3cf75fe17faf797faf757faf73363995f87e93786edb761fa9d61fb7d983ed7f92ff4ef1ff4ef97faf78ffaf72bfdfb27fdfb67fdfb17fdfb57fdfb37fdfb2ffaf75ff5efbfe9dfbfebdf7fe8df7f866973c754be4d503f550531b551e5b5c9673f227ea7a0e1a4b468a9ff27bf25da5ea8e7e557b46ba5e75b19f6d67abeb5b19e367abe8d61efa0e73b18f6a3f4fc5186fd183d7f8c613f4ecf1f67d8cfd4f367823d11c0bd616d57b696da54003689d716606ba56d2dc1d65a5607b6c3b4ad15d864fbb606dbe1da7618d8da6a5b1bb025b4ed70d1324c47685b551057ac948e50eb2d8a7bbdfa795971fcbc23d57adb39e26d1f3fef28b5de0e0e78557c1ca9d7d51ee2e6286deb00b6a3b5ed48b01da36d4781ed586d3b1a6cc769db31603b5edb8e05db09da761cd84ed4b6e3c17692b69d00b693b5ed44b09da26d2781ed546d3b196ca769db29602bd1b653c1a69bdce034b09dae6d25603b43db3a82ed4c6d3b1d6c6769db19603b5bdbce049bb4bf67814dce17cfd636d5761c5e00cb68bbb45bc965a4cd06dbb9d25e83ed3c69abc1d659da69b09d0fbec57601b43562eba26dd26ea9fff5d1f9aa20aefda4ac56adb722eef5866b56ebed1bff7a93cf1cfb05f55a57819f0ad0aabfcec7d8afa92bfa2ed049fc88bd10f257415929277ac8b147d8d5b1a052e7fba759ae8fb15c3194a9b4d4bf2a88b7fe7d0d9ebe06732bc8bb89d96edd7ccc367aca386607435933f6e43ca839c6ec40e07010b33d7dcc367aca38666ba1ac197b722edc1c63f676e07010b3d56e62b6acd4c76ceabe5910d8634fae879a63cc8e018ef863b6bb8fd9c64f19c7ece350d68c3db9266e8e313b0d38e28fd99ed5fedca0d153c631bb00ca9ab127f7679a63cc3e051c0e62b6d6b7b38d9e328ed937a1ac197b72afb039c6ec73c0117fccf67614b3dd7ccc06a967a041608f3db96fdd1c63763170c41fb323fdfdd9c64f19c7ec0e286bc69e3c43698e31bb5ee7d573869fe8e70c2783eda7da760af0c61fdb35dd1dc576998fed54df9020b0c7a83ccf6b8eb1fd81ceab38fe05f44710db2fb5ad23d87ea56da783ed336d3b03eae5601fa8f6fb40a3a78cf781df40593396e5d97273dc077e041c0e62b6c6c76ca3a78c63f66f50d68c3de9e7d01c63f6f7c0e120666b7dcc367aca3866ff13ca9ab1778ece37c79895bea6ea7ce10b7dbe701ed8fea06d9dc1f6a5b69d0fb63f6adb0560fb4adbba80ed4fda7621d8feac6da560fb8bb67505db5fb5ad0c6c7fd3b66e60fb176d2b07dbbf6a5b77b0fd9bb6f500dbdfb5ad27d8fea16dbdc0f64f6debad6daa9f9ef4bd92f3d636c05f15c4bb6da5dfa5ac5be6bb66c1773bc377bb2cfaee60f8ee60f15de6c077027cc85460cc5741becc2d4f6931f0a0aff2f87d755375ef1634beeee5c0d3dd41dd13e0a3313cdd81a747fc3cc9febf3de35f6f721b7733344d80af6e50af5e0eea5500be64dd322ffe8ac1866d6b2f0b63eff819cb0ac097ac5be67b03a3d8b0ad9777ae64ff51c7c34e05f5bc0ef6a5e43991f893ef96094739d8a5cc951debd93a6bb622f83f1ef77a18364771998c0bf125eb9679f15704f5e9917dc6b2c6327637185db51105e04bd6ed7dd76f07c9e371dcc1b58eb54d13df1559f0dddbf05d6ef8c6b653a674c7b6dec01cfb35a73eb655c6bfde52bc3e916b43f183e70f780d17579dd0b75c1b8a1fb11742feda82fab2524ef4907658d8552ccbb6447673b95ec672c550a6c252ffaa20defa571a3c9506b3da2617c3b1d0c1fe908c810a8343e6cb41bbca08ed2a403b29730e68e7aa3deb63f0c87c0fe09176ac27f0b8ba268ae2c9c6f5d8c17ce3392c5e3fcbfff13cc0d5f6ea6a30cabc6d7bf50646dbb98a83eb99b4e72add81516c7d80a79b23cda2b66b3712df0e6225d91e890f393797fdb707d8a54c6ffd429d6a2bef86b6d2458c603ccad4d86bdef8b75359f21abc7b063cb8ed1c5c577575148fa578ffe6eb20de5833dba5ee865651f7785cb5e5dd0c1e99177f9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec99f999f17912f6db92723d4818cdfe6faeeef327bf7fa8d725eb57cf75fe8fd3fe6065a5d83f46fa419c67d4b910ca14b5a82ffbffa13f98f99c0afb48f670ab5d725b627fcc2a98177fd8d70ab725437fa792d87c978d74f5bcad5dd0b0af9cb99fa2a62efa3fa3a60586a6d81fff7c8347c56965cb7a3617cffe327d16895a493ece677bc5813dd6e3df2e650d9e59b7081ab61f789c71d57f47da6a795e5e61f82e843227b5a8df36d2b74ac618ee662c87fd7e64ddb2cc7960af34d6dd5e2f2b1cad8cf5f78465a5cca9d0a6ee6d51af9983b6b22cd3beebf8dc3cfee370ea397eb70c78ba028f8b76c6d1f94629ee03713fc737fba7d9ce63a40cf6ed73d0af326d7f27f1e7993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367f6cc9e999f59f198cf5af1fdda7212c62cf57d483ecf906f95c9fa93df0b6e51efd7f5733879e6d4d9a833be3bfacf16f56537eb7c5170607f87a86de9eafb1451db52fce1b767f059908be7ba05e04bd65d66d142f225b1f94e3dc7773136843cc7ef66e85a6ed1d4d5fe8acf585153dc5fbb1b3cf86c34eadb3e6586cdd13e9e362ec41fee4b6560933cbe1fed623be3b1c4ecd723fef0f9f577b4b6ed0357dbbeacd465bb81df4da90a0e8c6ffc9eca0fa1edfbb1ce631f0eec3bf285e5ff32a57b4e2dfaa93a3bf8be666901ac4bb6afeddb9e03803526df5d715d053a0d30342884fce72deacb4a39292b5a0bbbda47e41b30c86e2ed7dd58ae18caf4b3d4bf2a88b7fee6b756fb1bcc6a9bfc0ce2ec0b38febb6a93fa4568741e6824651c7fb3d1dabfd2ec5788ed686ba38c2c8bdfa2fb2bb45151fd476dc700d7c73159b7ed38661e171ad3cf33dffb69fd17b41771f7d3fa2f8821eca71518ebef0ceb17aed641f4b145cafc3f63fde639b92c83fdc0fe673f81efb994e97c26e7e487eafaca764e8ecb45d55d31e377d0aa6264c69840163c4f90326db5d6b2cd2a23b87b5b962d8a5856b432bf1556141ca89f9befaca5f6f9fe465d24aef11be452e628a88b9bf396d439a0ab6fca55419d54becc525729733cec6b27ea7c02b613eeb7e75afe2f53ba73401cc3fda2f8eb9cdcbe17036715f841df97006b4cbebba26f3907143f622f84fc392debcb4a39d143b41676b58fc87914b29bcb5518cb1543990196fa5705f1d6ff2283e72283596d935320cece857ee8aedaea01111a75068da40cde53b47d07d476afc3d5fb1b51e752f8fe92797e85c74937e74df6f358f3be9aed1ca1b3c18fe7083da19d4d58ca9af70be5781967bf617c57a227f8c577255c7dbbb90fe85605f3785e70287dbbf88eadf2173566429f2cf88e1a33211bbe3b18be3b64d1b7d7dc6bcea4b983310892ef9fe1374bd594eebc14c72590e55a00a38bb11c1241c36f8f1f8c11c77790e55a02a38be343a6df3eef098cb25c2130ba78b714c7df680c237e63188ff3c2e8e05bb15d9bfaad58bca7d71a1899ded9c467538701a38bf3e2a6beab87e7f36de0d7d5b844dd32602c034659ee706074716f1caf651ac388d745b25c5b6074f10c2bd3f19df0dbf3786fd92563ba63bbe3be286599de7ba974cb93f65c037d3b18d730a905de673c98167dddf2a43df741df0eeefb25b5c071060fa6053e1b7431ee612268f81cee603cf8fc52963b1218ab1c31f6cf80b10a18ffe75e31300e70c4589501e3006014fbd1c0e8e0fe6b927140068c789f52963b06182f76c47851068c1703a32c772c30bab8979a00bf8d61bc041865b9e380f152478c9764c0782930ca72c703e3658e182fcd80f1326094e54e00c6cb1d315e9601e3e5c028cb9d088c573862bc3c03c62b8051963b0918af74c47845068c5702a32c7732305ee588f1ca0c18af024659ee1460bcda11e35519305e0d8cb2dca9c0788d23c6ab3360bc061865b9d38071a023c66b32601c088cb25c09305eeb887160068cd702a32cd71118af73c4786d068cd701a32c773a305eef88f1ba0c18af074659ee0c60bcc111e3f51930de008cb2dc99c078a323c61b3260bc111865b9b380f126478c3766c0781330ca726703e3cd8e186fca80f16660bcc9c238c811e3cd19300e024659ee7c60bc257ec6e4b5f4a00c186f019e5be3e7496a764b063cb7bae5497e57ef168bafdbe2f795dc168383c6d7fd36e019123f4f725bdc96018f3014c372a8d9edf13326351b9201e3edc033347e9ea466b767c0331434bbdda2d91df13326351b9a01e31dc0332c7e9ea4667764c0330c34bbc3a2d99df13326351b9601e39dc0333c7e9ea4667766c0333ca8d7ec4e8b6623e2674c6a363c03c611c0531d3f4f52b31119f0548366232c9a8d8c9f31a95975068c2381a7267e9ea4662333e0a901cd465a341b153f6352b39a0c1847014f6dfc3c49cd4665c0530b9a8db2687657fc8c49cd6a3360bc0b7846c7cf93d4ecae0c784683667759341b133f6352b3d119308e019ebbe3e7496a3626039ebb41b33116cdee71c47877068cf75878e2fe4ef6dd165fe31cd57d6cd0f8ba0b43312c87fd24c63b621c9701e3786094e5b09f449d23c6f11930d601a32c9770cc98ae9f441df89e10bfef64bb5417345e9f096e79d2f69340df131d69312168bc1613ddf2a4ed2781be2739d26262d0782d2601cf64075a24c047637884a11896c37e12531c314ece80710a30ca72d84f62aa23c62919304e0546590efb49dceb88716a068cf702a32c87fd24a63962bc3703c669c028cb613f89fb1c314ecb80f13e6094e5b09fc4fd8e18efcb80f17e6094e5b09fc4038e18efcf80f1016094e5b09fc4838e181fc880f1416094e5b09fc4438e181fcc80f1216094e5b09fc4c38e181fca80f1616094e5b09fc4238e181fce80f1116094e5b09fc474478c8f64c0381d186539ec27f1a823c6e919303e0a8cb21cf69378cc11e3a319303e068cb2dc3d8e19d35dbf3cd6cc7d475dab3477df51d725cdddb78f731fe7f9e0dbc7b98ff37cf0ede3dcc7793ef8f671eee33c1f7cfb38f7719e0fbe7d9cfb38cf07df3ece7d9c33f97edc81ef04f890a9c098af82bc3014c372f778c666cd883c25f1f19462ddd1d71304757fc2c253e0a8eee8eb4982ba0b43ae313e9e038cf7e400a3d731d507b1298c8ae729473c4f66c0f314f03ced88e7a90c789e069e67e2e749c6d4d319f00843312c774f0e303e9e038c5e47af2313a3d7317f74f48c9ed1337ac643c1980b6db867cc89782c6b2aa3e299113f4f52b36732e099019ac972b7ba652c6b2aa3e299193f4f52b31919f0cc04cd66583473c058d65446c5332b7e9ea4663333e099059acdb468e680b1aca98c8a6776fc3c49cd6665c0331b349b65d1cc016359531915cf9cf879929acdce80670e6836dba29903c6b2a6322a9eb9f1f324359b9301cf5cd06c8e4533078c654d65543cf3e2e7496a3637039e79a0d95c8b660e18cb9acaa878e6c7cf93d46c5e063cf341b37916cd1c3096359551f12c889f27a9d9fc0c78168066f32d9ab132de93038c8fe700a3631dcb9acaa878163ae2599001cf42e079d611cfc20c789e059ee7e2e749c6d4b319f00843312c774f0e303e9e038c5e47af2313a3d7317f74f48c9ed13366c6f8440e30fa6ded1959191d5c5fa57d87e6d966ee3bea1d9ae6ee3bea1d9ae6eedbc7b98ff37cf0ede3dcc7793ef8f671eee33c1f7cfb38f7719e0fbe7d9cfb38cf07df3ece7d9ce7836f1fe73ecef3c1b78f731fe7f9e0dbc7b98ff37cf0ede3dcc7793ef8f671eee33c1f7cfb38f7719e0fbe7d9cfb38cf07df3ece7d9ce7836f1fe73ecef3c1b78f731fe7f9e0dbc7b98ff37cf0ede3dcc7793ef8f671eee33c1f7cfb38f7719e0fbe7d9cfb38cf07df3ece7d9ce7836f1fe73ece997c3f1fbfefb24cbf31f33cf0b8f8e68da37a96aaf5bea0d7f5758cfa29ad5e34b47ad6d0aa18cabc00fabde840bf02f02beb9679f197297327026647becbda050df76bf1f1b8a1872af392a3ba47b5f52f3573df516d7d73f71dd5d63777df3ece7d9ce7836f1fe73ecef3c1b78f731fe72cbe31df2aa83f6f97ef9faa75bcacf3857a5eca3f01762933f9b0d46ffbc0ef432e7cfb7dc81f2bf2c1b78f731fe7f9e0dbc7b98ff37cf0ede3dcc7793ef8f671eee33c1f7cfb38f7719e0fbe7d9cfb38cf07df3ecef9e2bc18fe5f99059ec0e009d2f02c20e3994ac6339b8c673419cf50329eebc8782e26e379888ca79c8c670219cf48329e5bc878ae22e3b9908ca71f19cf34329ede643c73c878ee26e3799a8c671819cf0d643c9792f13c42c65346c633898c671419cf6d643cd790f15491f1dc4fc6d3938ce75c329e71643c73c978ce21e3194ec6f30c19cf4d643cc5643cedc8782e27e379928ce702329e0a329e47c978e693f14c21e3b98b8ce776329e52329e6bc978ba90f15c44c6f320194f77329e79643c75643c33c878aac9780691f19c47c67325194f4b329ebe643c0bc978ee25e3e943c633868ca73319cf1d643cd793f15c42c6f330194f37329e89643c33c9786ac8780693f15c4dc6d39f8ce73e329e5e643c63c9783a91f1dc49c67323194f36be679a09cf11643c45643c9791f13c46c6339d8ca72b19cf64329e59643cb5643c43c8780692f10c20e379808ca70719cf78329e11643c3793f13c45c6d39e8ca70319cf15643c05043c89e0c0314c12f0ffe7c1d6c258567df6754ec7faffbfa2ed2d60995775bea565ddaf804dbe25fbaa6559d4e915a84b95ce977eb329a913faaa8279f157041caf92f05c41c6d3818ca73d19cf53643c3793f18c20e3194fc6d3838ce701329e01643c03c9788690f1d492f1cc22e3994cc6d3958c673a19cf63643c9791f11491f11c41c6f33c19cf8d643c7792f17422e3194bc6d38b8ce73e329efe643c5793f10c26e3a921e39949c633918ca71b19cfc3643c9790f15c4fc67307194f67329e31643c7dc878ee25e35948c6d3978ca72519cf95643ce791f10c22e3a926e39941c65347c6338f8ca73b19cf83643c1791f17421e3b9968ca7948ce776329ebbc878a690f1cc27e379948ca7828ce702329e27c9782e27e36947c6534cc6731319cf33643cc3c978ce21e3994bc6338e8ce75c329e9e643cf793f15491f15c43c6731b19cf28329e49643c65643c8f90f15c4ac6730319cf30329ea7c978ee26e39943c6d39b8c671a194f3f329e0bc978ae22e3b9858c672419cf04329e72329e87c8782e26e3b98e8c672819cf68329ed9643c53c9781690f1545a789e77c423efbbcbba65fe7912df0eb643a95aef6b8eeaf4ba5e572bbd5ee1177f8550667adbd4af7a3f1c97152ef3fb04f86eceeba0d1eb8eea22dba3c0d83ee8fb6547bee51d2d59b7ccbfdccc7db7337cb7cb13df1d0cdf1df2c4b78f731fe7f9e0dbc7b98ff37cf0ede3dcc739936f07d70665f89d34990a8cf92ac8e3f5828befcb39aa6783ebc4af63d44f69f586a195796d550c655e03fdde70a09fedda53e6c55fa6cc9d0898312e4a8278e3e2cdf8eb54d62e68d85ebc69e88bf55ae448d3a863c8a266ee3bea18d2dc7d471d439abb6f1fe73ecef3c1b78f731fe7f9e0dbc7b98f7326df6fe97c8cd78da5e8433d5f94eb81b7c0ef129d2f88d1af5ad762bdae42bd6ee158027629f3bfe1b9a6dfe7fd3e1f976f7f6cf3719e0fbe7d9cfb38cf07df3ece7d9ce7836f1fe73ecef3c1b78f731fe7f9e09b39cecdbcf4173f07d85cf5e78f8ac56cbc4b70287d47c56273f71d158bcdddb78f731fe74cbe973af09d001f32a5ebe3b71478163be07154cfe4b38d65469d9e37ea540c65f018bfcc413d0bc0afac5be697018f4c95c0e3220e1ab3cd91670119cf54329ed9643ca3c9788692f15c47c6733119cf43643ce5643c13c8784692f1dc42c6731519cf85643cfdc878a691f1f426e39943c6733719cfd3643cc3c8786e20e3b9948ce711329e32329e49643ca3c8786e23e3b9868ca78a8ce77e329e9e643ce792f18c23e3994bc6339c8ce719329e9bc8788ac978da91f15c4ec6f32419cf05643c15643c8f92f1cc27e39942c6731719cfed643ca5643c8bc878ae25e3e942c6731119cf83643cddc978e691f1d491f1cc20e3a926e31944c6731e19cf95643c2dc978fa92f12c24e3b9978ca70f19cf18329ece643c7790f15c4fc6730919cfc3643cddc8782692f1cc24e3a921e3194cc6f30619cfd5643cfdc978ee23e3e945c633968ca71319cf9d643c3792f11c41c65344c6731919cf63643cd3c978ba92f14c26e39945c6534bc633848c672019cf00329e07c8787a90f18c27e31941c6733319cf53643cedc9783a90f15c41c65340c093080e7cf73f01ff7f036cf28efaf3607b5be71783ad85c5474b9d5f06b6429d97751c16a6973a1eb86ed4c9d57bf9e8ab0ae6c55f1170bc4dc27305194f07329ef6643c4f91f1dc4cc633828c673c194f0f329e07c8780690f10c24e31942c6534bc6338b8c6732194f57329ee9643c8f91f15c46c65344c6730419cf8d643c7792f17422e3194bc6d38b8ce73e329efe643c5793f1bc41c633988ca7868c672619cf44329e6e643c0f93f15c42c6733d19cf1d643c9dc978c690f1f421e3b9978c6721194f5f329e96643c5792f19c47c633888ca79a8c6706194f1d19cf3c329eee643c0f92f15c44c6d3858ce75a329e45643ca5643cb793f1dc45c633858c673e19cfa3643c15643c1790f13c49c67339194f3b329e62329e9bc8789e21e3194ec633978c671c19cfb9643c3dc978ee27e3a922e3b9868ce736329e51643c93c878cac8781e21e3b9948ce706329e61643c4f93f1dc4dc633878ca73719cf34329e7e643c1792f15c45c6730b19cf48329e09643ce5643c0f91f15c4cc6731d19cf50329ed1643cb3c978a692f12c20e3a9cc0e4f997ab75dfa5a07c0855315e49701cf2207fa38aa67297ed7e0eb18d7abb47ac7d0ea0d43ab6228b314f47bc7817e05e057d62df3e22f179915cf633a6ffb0ec463248c625be49627b9df3e16349cd2edb7ef008f8b76cd513d93fbd772a34e8f5974973218abcb1dd4d3b6efc8fc72d80eb9c6ac789ed479614d40b9274918c5b6cc2d4f72ff7a326838a5dbbf96038f8bf6c7513d93fbd70aa34e4f5a74973218ab2b1cd4d3b6efc8fc0ad80eb9c6ac789ed279614d40b9a74818c5f68e5b9ef204d459a674fbd70ae071d1fe38aa6772ff5a69d4e9298bee52066375a5837adaf61d995f09dbc1337b661bb3e291673bc29a80724f93308a6db9539ef2d204d459a674edd84ae071d1ce3bd23dd98ead32eaf4b445772983b1baca413d6dfb8eccafb2f82e09e2d5627523b4586de1599d652dc45fa6cc4b7390d9ebec758e62f63a7b9da398bdce5ee72866afb3d7398ad9ebec758e62f63a7b9da398bdce5ee72866afb3d7398ad9ebec758e62f63a7b9da398bdce5ee72866afb3d7398ad9ebec758e62f63a7b9da398bdce5ee72866afb3d7594d5e67afb3d7d9eb1c07b3d7d9eb1cc5ec75f63a473133e8ac78e4db95c29a8072cf90308a6d855b9ee47b41cf040da70263be0af2ab8167a5037d1cd533d9877c8d51a7672cba4b19dcbfd638a8a76ddf91f935b01d32615e9583cc5ee7a6312b9e193a2fac0928378384516c2bddf224dbb11941c3295d3bb606785cb4f38eea996cc7d61a759a61d15dcae0feb5d6413d6dfb8eccaf85ede0993db38d59f1ccd479614d40b999248c625bed94a72cf97ee3cca0e194ae1d5b0b3c2eda7947ba27dbb175469d665a74973218abeb1cd4d3b6efc8fc3ad80e9930afca4166afb3d7398ad9ebec758e62f63a7b9da398bdce5ee72866afb3d7398ad9ebec758e62f63a7b9da398bdce5ee72866afb3d7398ad9eb9c3f3a2b9e593a2fac0928378b84516c6b9cf2744b3e779815349cd23d7758073c2e9ecb38d23df9dc61bd51a75916dda50cee5feb1dd4d3b6efc8fc7ad80ecd9d79550e32fbd8c80eb38f0dcf1cc5ec63c3334731fbd8f0cc51cc3e363c7314b38f0dcf1cc5ec63c3334731fbd8f0cc51cc3e363c7314b38f0dcf1cc5ec63c3334731fbd8f0cc51cc3e363c7314b38f0dcf1cc5ec63c333473133c486e299adf3c29a8072b34918c5b6d62d4ff2bb07b3838653ba7e3beb81679d037d1cd533d96f678351a7d916dda50cee5f1b1cd4d3b6efc8fc06d80e9ed933db9815cf1c9d17d604949b43c228b6756e7992edd89ca0e194ae1ddb003c2eda7947f54cb6631b8d3acdb1e82e653056373aa8a76ddf91f98db01d3cb367b6312b9eb93a2fac0928379784516cebddf224dbb1b941c3295d3bb611785cb4f38eea996cc73619759a6bd15dca60ac6e72504fdbbe23f39b603b7866cf6c63563cf3745e5813506e1e09a3d836b8e5294b409d654ad78e6d021e17edbca37a26dbb1cd469de65974973218ab9b1dd4d3b6efc8fc66d80eb9c6ac78e6ebbcb026a0dc7c1246b16d74cb93dcbfe6070da774fbd766e071d1fe38aa6772ff7ad7a8d37c8bee520663f55d07f5b4ed3b32ff2e6c875c63563c0b745e5813506e0109a3d836b9e549ee5f0b828653bafdeb5de071d1fe38aa6772ffda62d4698145772983b1bac5413d6dfb8ecc6f81ed906bcc8a67a1ce0b6b02ca2d2461141b1e2f163ae22932788a2c5a1c2adf4a8b0a9d3f42ff26e0ff15c0e8aa3d5c6830ca3cc6b8d88ab2a0593b83a79da1d9a1f4adb4a884bc9a707b550223c3f66a9705cd3a183c1d0ccd0ea56fa5455f9d6faf7f717bf5054686edd501781cb4cfe50983474de9ce37b638d6c7513d93e71b5b03bbee781c923278ecdeeaa09eb6730999df0adbc1337b661bb3e219a4f3c29a8072834818c586d729dbe2e7294f183c6a4ad78e6d73ac8fa37a26dbb1f702bbeedb40772983b1fa9e837a16805f59b7ccbf07db2113e65539c8ec756e1ab3e219acf3c29a8072834918c5b61578b6c7cf539e3078d494ae1ddbee581f47f54cb6633b02bbeedb41772983fbd70e07f52c00bfb26e99df01db2113e65539c8ec756e1ab3e219a2f3c29a8072434818c5f61ef0ec8c9d27351e10f2a8295d3bb6d3b13e6eea996ac7de0fecbaef04dda50cee5fef3ba86701f89575cbfcfbb01d3cb367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367f6cc9ed93373332b9ea13a2fac0928379484516c3b806757ec3ca9e70ec8a3a674cf1d7639d6c74d3d53cf1d760776dd7781ee52066375b7837a16805f59b7ccef86ede0993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367f6cc9e999b59f10cd379614d40b961248c627b1f783e889fa73c61f0a829dd73870f1cebe3a89ec9e70e7b02bbee1f80ee520663758f837a16805f59b7ccef81edb0c7337b660bb3e219aef3c29a8072c34918c5b61b78f6c6ce937a7e8a3c6a4ad78eed75ac8f9b7aa6dab17d815df7bda0bb94c158dde7a09e05e057d62df3fb603b64c2bc2a0799bdce5ee72866afb3d7398ad9ebec758e62f63a7b9da398bdce5ee72866afb3d7398ad9ebec758e62f63a7b9da398bdce5ee72866af73fee8ac78aa755e581350ae9a84516c7b80e7c3d879ba95260c1e351518f35590ffd0b13e6eea997aeeb03fb0ebfe21e82e6570ffdaefa09e05e057d62df3fb613b3477e65539c8ec63233bcc3e363c7314b38f0dcf1cc5ec63c3334731fbd8f0cc51cc3e363c7314b38f0dcf1cc5ec63c3334731fbd8f0cc51cc3e363c7314b38f0dcf1cc5ec63c3334731fbd8f0cc51cc3e363c7314b38f0dcf1cc5cc101b8aa746e7853501e56a4818c5b60f783e8a9fa73c61f0a8a9c098af82fc478ef57154cf64bf9d8f03bbee1f81ee5206f7af8f1dd4b300fccaba65fe63d80e9ed933db98154fadce0b6b02cad592308a6d3ff07c123f4f59c2e05153ba76ec13c7fa38aa67b21dfb34b0ebfe09e82e6530563f7550cf02f02beb96f94f613be41ab3e219adf3c29a8072a34918c5f631f03888bb244f91c123f39f10f8565ad4e9fc11fa17b7571d30326cafa22c68d6cee069676876287d2b2d26405e4db8bd260023c3f66a9705cd3a183c1d0ccd0ea56fa5c5449d6faf7f717b4d044686edd5210b9a1dcaf6f050eedb87324ebde6874ef38243a879c121d4bcc06b4ea5b983e34b191ecb0260c0a90af29f02cfb7e3e749de97fb34039e6f03cfb7e2e7e9eaa89ea56abddf01f6b8d6abb4faaea1d5a78656c5500619beeb40bf02f02beb9679f1e7993d7314339edb0a6b02ca7d42c228b66f018f8b7643d5fd02bd2e597fab307d7674bd5f17cf4bf05e712bbd5ee1107f85506662497dd9df69b622f8bf6c37559ffd86cdd13bcc5d6dcfed645efc150559bb779bf65e326ae1e27953a6c7fdfd169eafe3e329c5fd1c7ded7354f74c9efdedb3f0c458f7ae51cf3df7c65ff764fbd145af4bd6aff6d17f3fdaa9e6e5b8ef49fbd1c5a87321941958525ff63fa0fdb0b515aef74d392737f7cd16417d7b265c25da6e3e13fa5adba5dc47501edb9c0afd8bfb6705d4d555bb18758f09db45b3ed76a9bdf95cd2f45d0cba7c44aa99ed3905ea5869e1ae24e0c678cce67e26ebb63d23ab347464d30cb7f547161dfb5ab8fb127033eed77d0d1dd9343bd87e3dc8c23d88809b71bf1e64e8c8a6d9c1f6ebc116eec104dc8cfbf560434736cd0eb65f0fb1700f21e066dcaf87183ab26976b0fd7aa8857b280137e37e3dd4d0914db383edd7c32cdcc308b819f7eb61868e6c9a1d6cbf1e6ee11e4ec0cdb85f0f0f1aeac8a6d9c1f6eb6a0b77350137e37e5d6de8c8a6d9c1f6eb1a0b770d0137e37e5d63e8c8a6d9c1f6eb5a0b772d0137e37e5d6be8c8a6d9c1f6ebd116eed104dc8cfb7563fbedb3eed77516ee3a026ec6fdbaced0914db383edd7132cdc1308b819f7eb09868e6c9a1d6cbf9e68e19e48c0cdb85f4f347464d3ccb65f3b7a9730e3771b3f76aa4f6a8ce98f33e0f910785cc494a3382875d4cf25d93775afa1d5c786563876c73ed0cf415f98b4df24107f9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec99f999f1bb8cf87c45ca7d44c228367c26e5e23ebfaafb857a5db2fe56611a786cbddf7db1fb2d2b2d30fc550187f82b8432279e565ff606cd56141cb8dd702c6edc967b62af436a5b9af12ff3e2af08eab317781cbc9f9fe4d967f0ecb36881ef9dc6e3bb6ca41b8dcb4adb050d637f8f511fd4f483d8fd37d4b4c0d0f403c7be1341c3ed290c3855411e795c3c1b7654cf645bb0dba893a9713194e904f5dceda09e05e057d62df3bb8147a616c0e32a06038327b0e823532519cf54329ed1643c6792f10c25e3399e8ce73a329ec3c9782e26e379888ca79c8c670219cf48329ed3c8786e21e3398a8ce72a329e0bc9780ac978fa91f14c23e3e94dc6733719cfd9643cc3c878ce27e339918ce706329e0419cfa5643c8f90f19491f14c22e31945c6d3918ce736329e63c878ae21e3694dc65345c6733f194f4f329e73c978c691f19c43c6339c8ce764329e9bc8788ac978da91f15c4ec6f328194f0519cf05643c53c878ee22e339838ce776329e52329ee3c878ae25e3e942c67311194f1b329e07c978ba93f1d491f15493f19c4ac633888ce73c329e23c978ae24e36949c6d3978ce75e329e3e643c63c8783a93f19c45c6730719cf09643cd793f1b425e3b9848c672f19cfc3643cddc8782692f1d490f1ec27e32921e3194cc6733419cfd5643cadc878fa93f1dc47c6d38b8c672c194f27329e3bc9784e22e3b9918ce708329e22329ecbc878a693f17425e3994cc6534bc6733a19cf10329e63c9780692f11c46c633808ce701329e1e643ce3c9784690f19c42c67333194f7b329e0e643c5790f11410f0248203bfc59480ffef039b7c33e843b0b5b0ac4f9e534b79755c5cdcf1c075b7b0acfb030b03eab40bea52a5f3a5df6c4aea84beaa605efc1501c707243c5790f17420e3694fc6733319cf29643c23c878c693f1f420e379808c670019cf61643c03c9788e25e31942c6733a194f2d19cf64329eae643cd3c9782e23e32922e339828ce746329e93c878ee24e3e944c633968ca71719cf7d643cfdc9785a91f15c4dc6733419cf60329e12329efd643c35643c13c978ba91f13c4cc6b3978ce712329eb6643cd793f19c40c6730719cf59643c9dc978c690f1f421e3b9978ca72f194f4b329e2bc9788e24e3398f8c671019cfa9643cd5643c75643cddc9781e24e36943c67311194f17329e6bc9788e23e32925e3b99d8ce70c329ebbc878a690f15c40c65341c6f32819cfe5643cedc8788ac9786e22e339998c673819cf39643ce3c878ce25e3e949c6733f194f15194f6b329e6bc8788e21e3b98d8ca72319cf28329e49643c65643c8f90f15c4ac69320e3b9818ce744329ef3c9788691f19c4dc67337194f6f329e69643cfdc8780ac9782e24e3b98a8ce728329e5bc8784e23e31949c633818ca79c8ce721329e8bc9780e27e3b98e8ce778329ea1643c6792f18c26e3994ac65349c6d3c2e0c1ffab77c3f6eabc7c3ba810fe3f49772e6fafd72565e419b1ba57f1be6153f5dde9a8beef07f55315ccef84fa0afbfbc0f3be239e5d068fe9bb08f295a0d90ec3a618b73b62dc6130cafc766014fd7600cf0e473c3b0d1ed37711e4fb8266ef1936c5b8cd11e37b06a3cc6f0346d1ef3de079cf11cf7683c7f45d04f941a0d956c3a618b73862dc6a30cafc166014fdb602cf56473cdb0c1ed37711e4078366ef1a36c5b8d911e3bb06a3cc6f0646d1ef5de079d711cf1683c7f45d04f921a0d926c3a618373a62dc6430cafc466014fd3601cf26473c9b0d1ed37711e48782661b0c9b625cef887183c128f3eb8151f4db003c1b1cf16c34784cdf45901f069aad336c8a71ad23c67506a3ccaf0546d16f1df0ac73c4b3dee0317d17417e3868b6c6b029c6d58e18d7188c32bf1a1845bf35c0b3c611cf5a83c7f45d04f96ad06c9561538c2b1d31ae3218657e25308a7eab806795239ed5068fe9bb08f235a0d90ac3a618973b625c6130cafc726014fd5600cf0a473c2b0d1ed37711e46b41b3770c9b627cdb11e33b06a3ccbf0d8ca2df3bc0f38e239ee5068fe9bb08f2a341b365864d312e75c4b8cc6094f9a5c028fa2d039e658e78de36784cdf4590af03cd961836c5b8d811e3128351e61703a3e8b704789638e2596af098be8b203f01347bcbb029c6458e18df3218657e11308a7e6f01cf5b8e78161b3ca6ef22c84f04cdde346c8af10d478c6f1a8c32ff06308a7e6f02cf9b8e7816193ca6ef22c8df0436e1ed03b6d775be37d85ed3f95e607b55e77b82ed159def01b69775be3bd85ed2f972b0bda8f3ddc0f682ce9781ed799def0ab6e774be1fd89ed5f9fe605ba8f355605ba0f303c0365fe72f02db3c9dbf186c7375fe12b0cdd1f94bc1365be72f03db2c9dbf1c6c3375fe0ab0cdd0f92bc1f68cce5f05b6a775fe6ab03da5f3d780ed499d1f08b62774fe5ab03daef3d781ed319dbf1e6cf7e8fc0d60bb55e76f04dbc73a7f33d83ed1f95bc0f6a9cedf06b66fe9fced60fbb6cedf01b6efe8fc9d60fbaece8f00dbf7747e24d8beaff3a3c0f6039dbf0b6c3fd4f93160fb91cedf0db61febfc58b0fd44e7c781eda73a3f1e6c3fd3f94960fbb9ce4f06db2f747e0ad87ea9f353c1f62b9dbf176c9fe9fc34b0fd5ae7ef03db6f74fe7eb0fd56e71f00dbef74fe41b0fd5ee71f02dbe73aff30d8bed0f947c0f6079d9f0eb62f75fe51b0fd51e7a55d53edec9f74be2488b79dfd2aa89f4ac0b7f85365feacf3ad8d32b26c2194395b772854cf38d4bb4bd20e4bbbac6cd20ebf0e3669875f039bb4c3af824ddae157c026edf0cb609376f825b0493bfc22d8a41d7e016cd20e3f0f3669879f039bb4c3cf82ad4ae717824ddae105609376783ed8a41d9e07366987e7824ddae1396093767836d8a41d9e0536698767824ddae119609376f819b0493bfc34d8a41d7e0a6cd20e3f093669879f009bb4c38f834ddae1c7c026edf03d609376f856b0c9fef215d8a46dfe186cd2367f0236699b3f059bb4cddf029bb4cddf069bb4cddf019bb4cddf059bb4cddf039bb4cddf079bb4cd3f009bb4cd3f049bb4cd3f029bb4cd3f069bb4cd3f01db789dff29d8a46dfe19d8a46dfe39d8a46dfe05d8a46dfe25d8a46dfe15d8a46dfe0c6cd236ff1a6cd236ff066cd236ff166cd236ff0e6cd236ff1e6cd2367f0e36699bbf009bb4cd7f00dba33a2f6d751bb0c9b36235957ec309c7e16901be84a52a88b7edc7a90af25877992ac978e690f18c26e379998ce74c329ea1643cc793f11c4ec6f32619cf04329e85643ccbc8789692f1bc41c6731a19cf06329ef5643c4791f1bc4fc6b3938ce742329e42329e59643c2f92f19c4dc6338c8ce77c329e13c97812643cf3c9789690f12c26e3798d8ca72319cf3a329eb5643cc790f1ec20e3d94ec6d39a8ce72b329e19643ce792f13c4fc6730e19cf70329e93c9788ac978da91f15490f15c40c633978ce72d329e45643caf90f19c41c6b3868c6735194f2919cf71643cef91f16c23e3e942c6d3868ce769329e3a329e67c978aac9784e25e31944c6731e19cf91643c2dc978fa92f1dc4ac6339b8ce725329ece643c6791f1ac22e35949c6f32519cf09643c5bc978b690f1b425e3d94bc633918c6701194f0d19cfeb643cfbc9784ac8780693f11c4dc6d38a8ce763329e99643c2f90f1ac20e3594ec6731219cfbb643c9bc9788e20e32922e39947c6534bc6f32a19cfe9643c43c8788e25e3398c8ce719329ee7c878de21e3799b8ce714329e4d643c1bc978da93f17420e3d94dc6b38b8ca7808027011c01d8e4ff2dc126dfe1d90fb62f747e2fd8e41b3e6f82ed739d7f146c0f5b6c2d2c7cc2301d6cf2aeec176093fb338f804dde99f81c6c72de20fed5fcca8e07f2b78065c44f4b0b3ffafbdcc22579dcdeb24c5510eff6465f5581fd9b770506e3a1e6d945c6b39b8ca703194f7b329e8d643c9bc8784e21e3799b8ce71d329ee7c8789e21e3398c8ce758329e21643ca793f1bc4ac6534bc6338f8ca7888ce708329ecd643cef92f19c44c6b39c8c670519cf0b643c33c9783e26e36945c6733419cf60329e12329efd643caf93f1d490f12c20e39948c6b3978ca72d19cf16329ead643c2790f17c49c6b3928c671519cf59643c9dc9785e22e3994dc6732b194f5f329e96643c4792f19c47c633888ce754329e6a329e67c978eac8789e26e36943c6d3858c671b19cf7b643cc791f19492f1ac26e35943c6730619cf2b643c8bc878de22e3994bc67301194f05194f3b329e62329e93c9788693f19c43c6f33c19cfb9643c33c878be22e3694dc6b39d8c670719cf31643c6bc978d691f17424e3798d8c673119cf12329ef9643c09329e13c978ce27e31946c6733619cf8b643cb3c8780ac9782e24e3d949c6f33e19cf51643cebc9783690f19c46c6f30619cf52329e65643c0bc9782690f1bc49c6733819cff1643c43c978ce24e379998c673419cf1c329e4a329e16169efd8e78e45b31b26e99dfdfcc7def347cefcc13dfdb0ddfdbf3c4f736c3f7b63cf1bdc5f0bd254f7c6f367c6fce13df1b0ddf1bf3c4f77ac3f7fa3cf1bdd6f0bd364f7caf367cafce13df2b0ddf2bf3c4f772c3f7f23cf1fdb6e1fbed3cf1bdd4f0bd344f7c2f367c2fce13df8b0cdf8bf2c437f3f5b7ea872b7d9577ebdf04fcbf0218df74c4b8df6094f93781516cf83dea0a473c51d7ee1504be9516722f4b9e7926e0ff95c0e82aa62a0c4699b7c5d44ee0a974c41375cfa192c0b7d242dec5963e9509f83f8ebfec2aa62a0d4699b7c5d476e0e9eb8827ea5e495f02df4a0b79f759def94bc0ff71bc755731d5d76094795b4c6d039e418e78a2eef10c22f0adb4906f85c9376912f07f1c9fd1554c0d321865de1653387eee60473c51f7a60613f8565ac8b776e59b9709f83f8edfe42aa6061b8c326f8b291c3f6e88239ea87b6a43087c2b2de459b07ca33d01ff1f0a8cae626a88c128f3b698c2f16e863ae289ba173894c0b7d26298ce4b1fab04fc7f1830ba8aa9a106a3ccdb626a3df00c73c413750f7318816fa5c5709d97773812f0ffe1c0e82aa686198c326f8ba9b5c033dc114fd4bdd7e104be9516d53a2feff427e0ffd5c0e82aa6861b8c326f8ba9d5c053ed8827ea9e7135816fa5458dcecb37e712f07f1cff7db823c66a8351e68703a3d856024f8d239ea87bdd3504be9516f26dff15fa3701ffc7f1585dc5548dc128f3b698c2f1a06b1df144dda3af25f0adb418adf332264c02fe3f1a185dc554adc128f3b698c2f12b473be2897ab6309ac0b7d242becdb54cff26e0ff75c0e82aa6461b8c326f8ba9a5c053e78867b1c1b3d8a2c5a1f2adb490bedc4bf46f02fe3f01185dc5549dc128f3b6985a0c3c131cf1443dcb9940e05b6921dfd67e4bff26e0ff1381d1554c4d301865de16538b8067a2239ea8675013b3e03bea794a367c473d1bc886efa8fbdcd9f01d75cf361bbea3ee3f66c377d4bdb46cf88eba2f940ddf51f738b2e13bea7a3d1bbea3ae3db3e13bea3a2a1bbea3ae09b2e13beafc361bbea3ced5b2e13beabcc3b7e7be3d8fdbf7a13c77c8d7f6fc501e430fe5b1c45f1bf86b836cf9f6c7127f6d902ddff97a6de0dbf3ecb7e772fd5510445f8fbdedc8f752c3b7cce37396a58e7c2f367ccb3c3e3358ecc8f722c3b7cce3fdef458e7c1719be657e51167cb7337cb7cba2ef0e86ef0e16df0eb67759226878fd2d0c3855411e63e02d075a38aa67a95aef12bdaeaf635cafedbe8db9bf14439925a09febb643d66db61db9c88c7151109fefd204f890ef92299b3c3f7e1d6cd2eebf0636e917f02ad8e4d8f40ad8e499d4cb609367562f816db4ce7f0c3679768c7df6e5f9ff36b055eb3cf6151faef35bc0267da9b08fb2f487db0c36e9d3887d63a55fea46b049df62ec9329fdc3d7834dfaf8635f40794f632dd8e45d1bec8326ef4bad06db5e9dc7be4ff21d9a95609baef32bc0f6079d5f0eb68774fe56b0fd5ee7bf02dbef747e11d81ed4f9b7c0f65b9d5f02b60774fe45b0fd46e75f00dbfd3aff3cd8eed3797c97edd73abf0b6c9fe93cbe43354de77782ed573a8fefeedcabf3dbc1f64b9d7f0e6c5375fe59b04dd1f98560fb85ce2f00dbcf757e3ed826ebfc3cb0fd4ce7e7826d92cecf01db4f757e36d8c6ebfc2cb0fd44e767826d9ccecf00db589d7f066c3fd6f9a7c1f6239dff126c77ebfc62b0b5d0f9a560933123b19f4aa1cebf0db6563a8ffd8fe4fbfe13c17698ce4f005b1b9daf039b7c1b6e34d8643ce85ab02574be066c47e87c35d8e4fc6c38d864fc9361609373a9a1606baff343c026e73d83c126e3590e029b7c83b42fd88ed6f94ab0c9b7f52bc076acceef079b8c39f626d8e4bb757bc12663313f0236f95ef574b09da4f37f009b8cc3f210d84ed1f9df83ed549dff1dd8e41b9e0f82ad44e77f0bb68e3aff00d84ed7f9df804dc6c8ba1f6c67eafc7d6093b1837f0d36f9def36760eba4f3d3c0768eceff0a6c3296c8bd6093f1417f09b6ce3a3f156cf21dee2960bb40e77f013619efefe760936f0c4f069b8cebf633b075d5f949602bd3f99f82ad9bce8f075bb9ceff046cdd757e1cd87ae8fc58b0f5d4f91f83ad97ceff086cbd755eda19b53fabfd7c9f9eaf0ae23b2f53fe3e0c1a4ee9ae0d840179e23cd72e061ef4b527f6ba9725cfeb65bf6fa1d72b31b4077cef8edd77ea9ae203bdae42bddedd86ef4228738e6e1cd47272cc6fa997db6b2c87f7b164ddb2cc8560df65acbbbdaeef078eeabbdb60126ed441ca9caf99d4b1f1073adf069689912d797d2cb11680863855415e18dc6855568ae7bd8de1f90078f6c4ce93ba5e771113b86fc57dbd6edec73563ad18caec06fd7639d00ff77559b7cc8b3fcfec993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367f6ccfccc8a679fcee3736529b78f84516c7b80c7c57d7e7c0e2beb57cf75769d56ef774fec7e1b3edf6ba5d75b6ad4b910ca7c0dcf9cf6ea7c11fc5fb65bd4b674f09c30edb6147f45501f7c16b4cf11cf1e83678f450bc997c4e6bb6ca41b8dcb4adb050d9f2dee36ea839abada5ff7e87515189ae2fefaa1c183cf468b80f723fd9b80f57c047570b08fa78d0bf187fbd21eb049fe436074b19df15822ed813c0fc767d352e657c673f1f8b77d59a9cb76e37da8535570607c174299df41dbf7b9ce63df907da0db3f2cff9729dd736ad14fd57947fc754e6edfedc059057ed0f77bc01a93ef06efd014e8247ec45e08f9bf437f0e29277a88d6c28ee39523bbb9dc87c672c55066a7a5fe5541bcf5df61f0ec3098d536f912e2ec1f70fc77d526ed8cd0e842d048caec018df63ae2d963f00887f8536564fbb736cac8b28550e67f411ba5ea22edbcd413fbb6e031c0d5714c7cc9ba65de766efc01309a7554f131f0d87ade3db1f3e656ffafc34a52bfd8aec7d5ff4bd6dd5e2f2b1c81b1fe5258bf70b50ea28f2dffb37d4bead7efb27fd95ea3cec2823a4b997625a95f156797e97c26e7fa87eaba2dea5c7fa7039e44d0f0da5b4de98eef788c79df018fa37a96da8e5dbb8c3a1543994e504f07e73169df05de01be5d6c73d442cea1761b5a1442998e25a95f693ba274c46bd50fb2529732ebf960a9a52e52a653497d5dda803d4e2697dbed3da8935aef1e4b5da5ccf925f5ba74d1f9046c27bc6fd2d7f27f99d2b5073816cfd6f8eb9cdcbe5b80b30afca0ef77813526df0dbe0522e7fbe247ec8590af2ca92f2be5440fd15ad8d53e22effc21bbb9dc6e63b96228b3cd52ffaa20defa6f3578b61acc6a9b742da9cf4b1cb96c37b74568540a1a4919bc7f2cc7767cefce76dcdfe3883beab8bf0718cd7613cf5d5cb2ed35d8cc7ba8b6f3412983e76452e6ea92d4af6a671396b2e6bd6117f731f11dd400ea111875950963c0c1b561395e3b493b257eba807d8fce8bce5d0ced0aa1cca092d4afc3f36eebbd4bf3fa0eaf2984dbdcb7f0dd8f2125f5dc3876e21efd5b04b64ff4afa3ebb472db3d43e1b0dd331c5e52cf8ecb0ad7c796ba98d7c82d8203efa97f6d94c5fb6ee99633f3e638944adf4f8c72363f78cd13dbbb1a5d4b4b91a94560bf5ff0a1c15e101c38e6a6ec071873e67d942ec67af03e4a5d49ea57da24b3acdaf6ff7e74bd3eb21d453b6c4f30263f04c62a9d2ffd6653575bfd655efc29c68f8c3ab869bb52ef2b65721f782ff0b868db1db5d1a5788c6d13db7a7b57db8eff1f1a5a65f179adf5986f3e736f63e4e3f15d5663bbff64d362b785c7d57394282d765b7cc7a7458f91b6e3874d8b5d169e5d59d66297c5778c5ad4e27dcf745abc6fe171712f2a9d16ef5b7cc7a745cfd274cf35508b9d161e57f71ea2b4107f9932ef22606e63e4e3f15d5e6dbb4f66d3628785c7d5757394163b2cbee3d3a26b0fbc47974e8bed169ef8efcfa5d762bbc5777c5af4ea8df7f0d269f19e85c7d533dd282ddeb3f88e312e46d9eee5d8b4d866e1d996652db6597cc7787ed8c376afcda6c5560b8f83fbae69b5d86af11da31623f0be6b3a2db65878b664598b2d16dff16951dddd764fd8a6c5bb161e57f784a3b478d7e23b3e2d46f452be3737428bcd169ecd59d662b3c5778cd750c9b8d8d4082d3659783665598b4d16dff16951933cd7dad8082d365a783666598b8d16dff169519a3ca66e6884161b2c3c1bb2acc5068bef18e322793db9be115aacb7f0accfb216eb2dbe633c8e24e3625d23b45867e15997652dd6597cc7a7456df2fed3da4668b1d6c2b336cb5aacb5f88ef19e4b322ed634428b35169e3559d6628dc5777c5a744b1e535737428bd5169ed559d662b5c5777c5a8c4a3e135bd5082d5659785665598b5516df319e7726db8b958dd062a585676596b55869f11de37967f2fec58a4668b1c2c2b322cb5aacb0f88eb1ed4c9e772e6f8416cb2d3ccbb3acc5728bef18cf3b935abcd3082ddeb1f0bc93652ddeb1f88ef1bc33791c79bb115abc6de17135064a94166f5b7cc71817c9b6735923b45866e15996652d96597cc7785f2bd9762e6d84164b2d3caec66b88d262a9c5778cd723c97b7c4b1aa1c5120bcf922c6bb1c4e23bc66745c973f0c58dd062b185677196b5580cbef7c6ee3bd59f5b7c485fac0b0c2d0aa1cca91d53bfd2172b4a475907f62bc3babc157b5d52fdca1645d4e52da88b943913ead22670324651b9a3ba2663e64da8935aef4796ba4a99733bd6ebd259e713b04d3e06ddfa58fe2f5381315f0579d14fd5f9f5f8eb9c8cd5d780b30afca0ef57813526df5dd177814ee247ec8590efddb1beac94133d446b6157fbc81b3a8fece6728b8de58aa1cc1b96fa5705f1d6ff7583e7758339f9de03c499c4919bb62bc5f44684461780465206fbec7de488c7ec43281ce24f9591eddfda28837d28a5cc45d04661bf52a9672238b0dfa4a3b6ac2bb2cbba655efc15836d2f309a7554f1f119f4fd94b122641c0965937121bac17a7a1a3655d75e8eea2abe64dd32df0b18659c8a9ed9672c6b2c630f8351f1f471a0198ebd2153bae3451fe0e9ed80c7513d93c7a10aa34ebd8c3a1543197cb7b1c2413d0bc0afac5be62bc0b78b6d8e5ac831f95c438b422833dc387f8cd251d6a1e2b7a7a52efd1cd745d62ded52bf2cf8ae347c77377c278286db3908d2ef5f95c0dcd701b35a6ffff8d75b8ae76d1253e2a73bd469006810579d705d729e37c0d0b610f253e13c4fca4959397e09bb8a65d996c86e2ed7c758ae18caf4b3d4bf2a88b7fefd0d9efe06b3da2677c3b99d83fd211903fd0c0e99ef0edaf58fd0ae1f682765f0f8d7c391767d0d1e99ef013c728e530136395710fe04fcbf5b16b8cd76afc2c22d361c27ae8785b17bfc8cc9739d1e06a3cc770746b1f5059e4a479a99dbfa5c431f3c2eb736cac8b2855066161c1b1396b26abfeb54505faf96da1edbbb63ba4d6fed402f1ca731007d0243c300f4927ab672c0d336a81fab71f294ba4923ee1a75e3a8d4a347412b3430f1b7c0528d1660c37c4b8b2d081a0e495908361992b215d85a18b2e05098525e86b4732117ea21eb2e3438db004b9cbe71384f99d285ce61c0e3229455e8c8909e3a746e9d3466ca288c8f560667536247fdaf659a7251eb72b51dcc7da20ae6cd182c74e4bf25d4b70ae6c59fda3632b4ea841123ef1930e9aea9e3468d9f32198532776ccc17040d3780f91b25b8ab9d0e03002b8c8d432ba35ed860c8ff64c3b48d9fb31cc7cc35b509c09f4c6d41b7c31de8a6d62f63df8e1c3176ecf553abc78e1979d9d4f123a78ca91b8f5bb38da15cd49696ffb7069bad89c7b26ac2660b973dcc62b34d38ca701bb0c991eb70b0094f5bb0b584bc9437b78c9370ed04eb975d4afd4f89d34a57fcb0a03e04e470acda55b5ffaa5339f50959752aa48636569b530d5dacee18aaa189d557ecd4d0c36aa86135b4f089416ae8603554f029416a2860f5b58b922035b4efe9416ae8de3383d4d0bc6703dfb781f99c2075daa586d6ed1ca486ce55b72ebb04a9cfbca977ebd5e9bbba2da04e79d5259e3afd54a79deaf242ddbe50b7b2d4299d3a5d56a782eaf44d5d8ef4d75a0f08d34561ba384c9784e9d2305d16a6cbc3744598ae0cd35561ba3a4cd784696098ae0dd37561ba3e4c3784e9c630dd14a69b83d4f0ceb704a9e1d7d5f0cfb705a9a1a16f0f52c346df11a48694be33480d373d22480d453d32480d533d2a480d617d57901ade7a4c901a26f79e2035d4ae1a82777c901a0e5b0d93ad86cf56c3fcaa2181d590c26aa861352cb11ac2580d81ac86467e20480db9ac866c7e38480dfb3c3d4c8f86e9b1303d1ea627c2f464989e0a52c383ab61c36704a961c6d5f0e3b383d470e57383d4f0e66ad873351cba1a265d0d9fae865557c3bcabe1dfd5b0f02f85e9e530bd12a41e49a84731ea1185bafdaf1e83a95bd46f05a95be74b82d4236ef5c85f7581505d425417991541aa0b95ea52a6bad8a92e87aa0ba6ea92aabae8aa2ecbaa0bb7ead2aebaf8ab571ed42b20ea9518f58a907a654abd42a65ea953af18aad744d56b97ea3562f55af59e20755b7c5f907a54aa6e87ab4703ea96b9ba7dff6998be15a462f23b61fa6e98be17a6ef87e90761fa61901ad6580d77ac864b56432bab6198d590cd6a28673514b41a36fab32035f4b41abafab7416a48ecdf87e9f3307d11a486d7fe324c7f0cd35761fa5398fe1ca6bf84e9af61fa5b98fe254cff1aa67f0bd3dfc3f48f30fd33a81f661b1b921375eba3af60821153a68c1a37614ac994ba927153c74e193361ecfd25d3c64c195d5277efa849b563eba6e1c2dfd60bcb18e103264d1a717fc998f135a3ee2ba99b3aa5a4aeb6a4ba6eeaf89a0607f1bfe8854e3ed0e3889a9a6867fff94d48ff6f139d1eaedb45197dfdcaf4753ba265130439b2290bf568d9b40a4dd24730b9d4bd29751e5c32796cdd9492d292f1e1dff0c05b376d544d9712fcdfe450e4c9534a264f1931694a49eda4ba71255dbbe07a1f69db844afc575b3730679dd834713ae9ef2c3529c47e795a1314f88fd39a46dabae41b90b62d699ad3929226d4f0eca62c745513096f2e899465f2d4ea2993468c9c12bdf06ddf64e13b9b52cdf14dace6291d9be0ec8ca62c34a063d308ef6c8ab39919380bfe1bf7f9a6538c5506009b2d6c6f000000284b1f8b08000000000000ffed9d77745cc5f5c7dfaab92c5a59b6e55e4473dc24af565d6e72ef0603a117cbb68c1d6ccbd8a2851020407aef95900a2940422a29a4f7de08a457082481df3fbf93dff9fdcee1fc66dece8dbe1acfdb689737f27ddafbceb9da797767dffdccf7dd997d3bf376950af2dbd3ca52a65ca9ecf4e0c48d9eef358fd967b7b5c478acac4fce5442382b12c2599910ceaa8470562784b326219ce312c2393e219c1362e4d46c15c1f02d6ede891e748d9b319d304d4f4980a6b509d33493004deb82648c519312c2599f10cec909e19c9210cea909e16c4808e7b484704e4f08e78c8470ce4c08e7ac8470ce4e08e79c8470ce4d08e7bc8470ce4f08676342384f4d08e76909e13c3d219c672484f3cc18399700e702f3f81cf3b8d03c2e328f8bcd23bd66a9796c326dac32fbcdca966936652dd6733965adcada94b55bcf7528eb54d6a5acdb3cd7689eeb51b65cd90a652b95ad52b6dae8b046d95a65eb94ad57b641d946659b946d56b645d95665db946d57b643d94e6567293b5bd92e65e7283b57d979ca9eabec7c651728bb50d94516cbc5ca2e5176a9b2cb945daeec0a65bb95f529dba36cafb27dcafa95ed5776a5b203ca0e2a7b9eb2ab941d527658d9116503ca8e2abb5ad93165c7950d2abb46d9b5caae5376bdb21b2ccd9eafec46652f507693c5f94265372bbb45d9adca5ea4ec3665b72bbb43d98b95bd44d94b95bd4cd9cb95bd42d92b95bd4ad9ab95bd46d96b95bd4ed9eb95bd41d91b95bd49d99b95bd45d95b95bd4dd9db95bd43d93b95bdcbb05047b853d9bb95dda5ec3dcadeabec7dcadeafec03ca3ea8ec6e65f728fb90b20f2bfb88b28f2abb57d97dcaee57f631651f57f680b24f28fba4b24f29fbb4b2cf28fbacb207957d4ed9e7957d41d917953da4ec4bcabeacec2bcabeaaec6bcabeaeec1bcabea9ec5bcabeadec3bcabeabec7bcabeafec0796e63f54f623653f56f613e3fba979fc99a94bf3623f57f60b537ed83cfed23c3e621e1fb55ef32b65bfb67cbf51f65bcbf73b65bf37e53f98c73f9ac73f99c73f9bc7bf98c7bf9ac7c7cce3e3e6f16fe6f109f3f8a479fcbb79fc8779fca7797cca3cea35d5b31bf2e5f1c1d0d61bc43446b5edcfea3515127f41307cd35a549ae7e8b1d1f8abcc3e3d9276d566bfdaf2d798fd1aeb38e3cdfe78cb5f6ff6eb2dff14b33fc5f23798fd06cb3fddec4fb7fc6798fd33c09f0e60ced5f8b5afd2b852e0a37cad005fb5f15582af860e07be71c6570d3e3abf35e09b607ce3c037d1f8c6832f6d7c13484b65a7185f6f1057ae64fbf4716be33eae5987cac4cfbb571fb7ce13efa4f879fbf571eb3df0eafc986c8e3509f2668af1d5836faaf14d069f1982fedde7b46f9af14d05df74e36b00df0ce39b06be99c6371d7cb38c6f06f8661bdf4cf0cd31be59e09b6b7cb3c137cff8e6806fbef1cd055fa3f1cd03dfa9c6371f7ca7195f23f8e81e9753c17786f19d06be338def74f0d1587b06f8e8daf04ce3d3e3c4f814bcc6f8698c0a5f43e333f816d2d80cbe45342e836f318dc9e05b02b1c9b714c615f235191f8d51fab91e53ee0de2ea13b9b04f2c8ffbb8eac8fab82be33f6eb86eb72a18d2ba17e22c07ad569b728cf706b560ec94318a43fe2a286f81ba548ff4a0f71962d7e3fe0a535e5de0753dd6eb32506785a3fdbd41bced5f69f1acb498aba1fd7e72b63527393be2ade89cbd00eadab947d73c633167b70387879ced909c1df15674cef6435d3bf7e8ba772ce6ecc5c0e12167fbfce46c2e2b399b9f230b0277eed1679fb198b3078023fe9c6d979c1df95674cede0a75eddca3cfbf633167af058ef873b6b34fae0d46bc159db3af81ba76eed15ccc58ccd9db81c343cef6cb383be2ade89c7d17d4b5738fe605c762cebe1e38e2cfd96e4f39db2a391be4d73b83c09d7b34473d1673f62ee0883f67f7cafcecc8b7a273f641a86be71ead978cc59cbdcf94f53ac34fcd3ac31cf0fdccf8e6026ffcb9bdafcd536ee724b7f3f78104813b4769ed6e2ce6f643a6acf3f861b8f7807cbf34be53c1f788f19d06be478def746897873ed0277d60c45bd17de0d750d7ce655a471e8b7de0c7c0e12167f74ace8e782b3a679f80ba76eed13d0d6331677f071c1e72b65f7276c45bd139fb2fa86be7de42531e8b394bf795eaeb853f98eb85c5e0fba3f12d01df9f8c6f29f8fe6c7c4de0fb8bf13583efafc6b70c7c8f195f167c8f1b5f0bf8fe667c39f03d617cade07bd2f8dac0f777e36b07df3f8caf037cff34be4ef03d657c5de07bdaf8ba8d4fdf9347f75e7dd7f8f4b9258d7a8378cf2ddd6349c7a6fda5a310bbce8a5d378ab1ebadd8f58ed84d1e62a721066d296bbf17ca4d7e79b29960f8f73f28d6b2f863b5eab63707236ffb32e0c97a687b1a628c84270b3c2df1f384f7fae6e23f6e788e9b2d4dd310ab19dad5eaa15d298845c7a67d8a97011f8edfad0ec6b6f81973298845c7a6fd3660241fbe9fd0fb3af51ffd7eb82035c4eba12f85d744148f7efb8b3896819fea3c3575886db161ab85e7f1bdb5c5f279cacb302f28161d9bf6295e2db4a765f419732365cc5a8cbec68814c4a263dbb1b1bf378dbe66233aaf19f09d84312957ea98540b6ca3719d1275aeb9c4f6f17e95821834b691e639f0539d69e60b097a6cdb04e3ae87fe972bf6fa0dc783f8f33897c57e3d129e56e0f1d1f73df5d72cbeef3f13c49b6bed96562d965619a8d306fab57bd0afd07508c51366611666611666611666611666611666611666611666611666611666611666fecc78ff05ae6f52bda54c18c997031e1ff3fce1ef479963d1f1f5bace23b0ae13ffba452e8b6b96748fe122abcd5550e7c9d450dddfc07ababd36886b9a4bfd6a37a2fb2c6a8313d7627dae2146ad03bbd62f1b638b9ddbeb6bbdadce30375bba2e7568eae13e95619aa62c4df13ec525168fced39995436c3ed6fe8a5d8b44ada81ce7da1ede63e0f7bce4c70fca858a60f8f881ef331db1c71ebe8649ebe51d56ec2aa8f33fa9a17343f7a2d2ff39b4ef79d2753aad63d36b1681bfd33af624f35ae2a8b68edf0cafa53aff0763ea9d15c1bf35f371ff078ecb01b415b75e28e3ba79fcefc3f975fcd62278da81c7c738e3e97a238b7d20ee75fc4e4b2bd7750cd5e900fd3a3de8e7ba16a57d8a27ccc22cccc22cccc22cccc22cccc22cccc22cccc22cccc22cccc22cccc22cccfc99f1bba2c49a867a39268ca374ef43b89e41bfff42c7d7eb3aafac188aeb7b1d8ed69c165b6dae823a3fa818aafb5a53ae0d4ebcdf21ea5c7a58cf2b782e295e2db407d7827c7d9fbbcde269736841e5c6d862e7d7f1e3d778681dbfd5d235e7d0d4577fc53556d414fb6b8bc5836ba3b5c189f796a4e138a371ef50545e503cec4b6de0a3327e3fdac779c6f712fbbe1e8a87ebd7f7186d2705bece7d2eeb73dce88236f50627e67715d4b917c6befb4d19efe1c07b471e723c4f5ba1756ad24fb739f6dfb2cbe6d77d9703672fc4c1d82b8035a6d82d183b658ce290bf0aca5fac18aa4bf5480fd29ad8751fa1df044376fb752dd6eb3250a7dbd1fede20def6f7583c3d16b33e270f409e3d04efffbec6a4ee088d1681465407af837cdd93678f91f6fd8d78df5e8d5507af59a8ce37618c8aba7fd475cfa1aff7b1a87b0e5dd7c6edc068b7d1becfb3dcefd37a18c68bb8efd37a187208efd30aace32f86e313574d10fdde42757e651ddfbe26a7d7e07d6054e7b7305ed4997b166b8313afbff19ea9d1f87c15759f34c5c3eb1aecdbffa9ed9ab90beaf7c6c88c39812c789d40751eb7ce596704f732c76b9f8c782d6945bf43859f5f6cfdb40eddf09ade5874c8f7f91eab2d94d7ddd016aaf35fd63560fcd72df96bc0f8db3afc9a84c68136475ba9ce7f435ffb175ce3d179c2cf1d3595273e4f5ba16b40d24fb779b47f1f186373f87de0eacaa1baf6effc92d6c5fe3e7087f53a8ebf0ffcbf906735701fbaafb17a4584468b4123aa83df0da2f711fc2d5fd77b8caf7bfba3de635cbf4189e3735de5e8b3d9f36aae6b04aa43afc56b84a9867992d1d9ae6bcf17d2fb659cf70de377259a212e7e57a2d9939e59d0ad17f6f1bae064c6ce7a8a1df59bd3d951881df59bd3a311bbde8a5d3f8ab14573d19c93e61e7e1339fcfe19fe66a9de0a5d971243065e579100c6ca0430562580b13a018c3509601c9700c6f109609c9000c68909604c03e3c97c6ff7a04fae547d7c9daf42d71a18dbc3ff2ec915fbff3b3cff2f9582d73e18dbc367ba508ba660e45ae0e73c1fbffd50ecff7a2106fcdf059313c03825018c5313c0d89000c66909609c9e00c61909609c9900c65909609c9d00c63909609c9b00c67909609c9f00c6c604309e9a00c6d312c0787a0218cf4800e39909605c208cb1302ef1cb982b9551f3f8f89f7fcfe67f8e79e0c9baee39f5f4dd93a2ffdf9ae7df276d29f577e3f0de12bfff13eed9fdb69d8f7b478afd6dbb42ff6fd51363ae54465ff7b1e3f77846c283df8b747db7c60363ae54465fdf7fc1efe88d84a703346b7768e68131572aa3af7be58abd9713efe9ef7068e68131572a23de571d234fa85967113c5da059a743330f8cb952197ddd979c861823e1e906cdba1c9a7960cc95cae8e9bb6da166dd45f0e077c0ba1d9a7960cc95caa879967bd2aca7089ee5a0598f43334e8cc813f7ef64f73862f9f8ce60b16d2706649c9000c6890960c4fb247c8c5f85ee93e8f1ab4fae547d7c9daf42f749606c0fdf8f09b5c0ef43fc272d56fae529789f04c65ee5490bfcbeca7fd26215f0f8f8fe4c1a628c84871832f0bac909609c9200c6a909606c4800e3b404304e4f00e38c0430ce4c00e3ac0430ce4e00e39c0430ce4d00e3bc0430ce4f00237e56f570ad58f0f3cbaa311e3beab3ca588f1df5b964acc7963c973c2f87d892e792e7e5105bf25cf2bc1c624b9e4b9e97436cc973c9f372882d792e795e0eb125cf25cf39c54ec21cbf308e3d46e4698c8f278b6dc758bd0cdadeebe049796a3bc65ac3a0edc49034c6d509605c9e0046d1317f0f62298c9a67ad279e3545f0ac059e759e78d616c1b30e78d6c7cf13e6d4ba2278882103af5b9e00c6d50960141d45476d7acb3ebb4d7464c498041d8551188551184f066312c670614c443ee64a65d43c1be2e709355b5f04cf06d08c5ed7e29731572aa3e6d9183f4fa8d98622783682661b1c9a7960cc95caa87936c5cf136ab6b1089e4da0d94687661e1873a5326a9ecdf1f3849a6d2a82673368b6c9a19907c65ca98c9a674bfc3ca1669b8be0d9029a6d7668e68131572aa3e6d91a3f4fa8d9962278b682665b1c9a7960cc95caa879b6c5cf136ab6b5089e6da0d95687661e1873a5326a9eedf1f3849a6d2b82673b68b6cda19907c65ca98c9a6747fc3ca166db8be0d9019a6d7768c69571790218572780d1b38eb9521935cf4e4f3c3b8ae0d9093c6779e2d95904cf59c07376fc3c614e9d55040f3164e075cb13c0b83a018ca2a3e8c88951742c1f1d85511885b138c6de0430cab91646ae8c1e3e5f15fc0ecd59633c769d15bbae4c62477d8766acc7963c973c2f87d892e792e7e5105bf25cf2bc1c624b9e4b9e97436cc973c9f372882d792e795e0eb125cf25cfcb21b6e4b9e47939c4963c973c2f87d892e792e7e5105bf25cf2bc1c624b9e4b9e97436cc973c9f372882d792e795e0eb125cf25cfcb21b6e4b9e47939c4963c973c2f87d892e792e7e5105bf25cf2bc1c624b9e4b9e97436cc973c9f372882d792e795e0eb125cf25cf39c5de157fec5cb1bf31b30b787cfce68da77666f571cf31c77a2646fdb456e75a5a9d656995813ae7807ee77ad02f0571e9d8b44ff18a657e0e03664fb17375c1f07e4d31565b7ae83ae7796a7bd4587fde188f1d35d68ff5d85163fd588f2d792e795e0eb125cf25cfcb21b6e4b9e43997d858ae0e86aedbe9f74ff5319e6bca55661f59c94f75ce1e977f9c14481ff2115bfa90bc5794436cc973c9f372882d792e795e0eb125cf25cfcb21b6e4b9e47939c4963c973c2f87d892e792e7e5105bf29c5f9e67e0f98a51e0092c9ea000cf2a663c5b99f16c62c6d3c58c671e339e76663c3398f1e498f14c66c6b39e19cf04663c8b98f15432e359c38c27cb8c673b339ef9cc781633e399c98c670a339e89cc78aa98f1ac65c6b38c19cf0e663cdb98f1f430e359c08ca79b19cf06663c1dcc786631e36965c6339519cf12663c69663ccdcc78aa99f16c66c6d3c48c6721339e9dcc785630e399cd8ca78119cf29cc786a99f1d430e359c98c670b339e8dcc783a99f1cc61c6d3c68c671a339ea5cc7832cc78ea98f1ac63c6338e19cf5c663cd399f14c62c653cf8c673c339ed1f8bda16278520c78d2c189bf499686e77781afc27aad1eaf5a1a869e3fdff82be035179872a5e3d8e7838fbe1b7e81e3b5a8d3f9d0965e53ce3ebb2dd40963f5c23ec5ab058e0b98f0ec62c6339e194f3d339e49cc78a633e399cb8c671c339e75cc78ea98f16498f12c65c6338d194f1b339e39cc783a99f16c64c6b38519cf4a663c35cc786a99f19cc28ca78119cf6c663c2b98f1ec64c6b390194f13339ecdcc78aa99f13433e34933e359c28c672a339e56663cb398f17430e3d9c08ca79b19cf02663c3dcc78b631e3d9c18c6719339eb5cc78aa98f14c64c6338519cf4c663c8b99f1cc67c6b39d194f9619cf1a663c95cc781631e399c08c673d339ec9cc7872cc786630e36967c6338f194f17339e4dcc78b632e359c58ca7c2c1e3e1ff5f863c74ff1a1d9bf6773189ede13c84fff7f3424f6dbac81cabda1c97f8295e15d4b9d85c18e8fbabf0b5c465df6f88f7ce5d041a5de4a92d743e52d6f9f11c3b87f75506c01058fa040e1e1ff7a37a6ae7b03c8cf1ffcf66b556175b5ad9e72e03752e04fd2ef6a09f2bb7ffdd07cc631299350fbd77106b1aeaad62c248bef3fcf284fd7655307c2bd46f2f061e1f6398a77686fdeb12ab4dab1cba531dccd54b3cb4d3d57768ff12380f4963d63c6b4c9958d3506f0d1346f25de49727ec5f6b82e15ba1fe7509f0f8187f3cb533ec5f975a6d5ae3d09dea60ae5eeaa19daebe43fb97c279481ab3e6596bcac49a867a6b993092ef62bf3c6d6968336d85fad7a5c0e363fcf1d4ceb07f5d66b569ad4377aa83b97a998776bafa0eed5f06e7419885d9c5ac79e83b26c49a867aeb983092ef12af3c6dd934b499b642e3d865c0e3639cf7a47b388e5d6eb5699d4377aa83b97ab98776bafa0eed5fee88dd18c4abc51523d0e20a07cf15a3ac05c52b96f9c204328bcea27314b3e82c3a47318bcea27314b3e82c3a47318bcea27314b3e82c3aeb4d74169d4567d1390e66d159748e62169d45e72866d159748e62169d45e72866d159748e62169d45e72866d159748e62169d45e72866d159748e62169d45e72866d159748e62169d45e728660e3a6b1efa8d18624d43bdf54c18c977a95f9ef07b41eb83e15bcadaef85f215c07399077d3cb533bc877cb7d5a6f50edda90ef6afdd1edae9ea3bb4bf1bcec3ee22982f4f20b3e85c1ab3e6a1df8a25d634d4dbc084917c97f9e509c7b10dc1f0add038b61b787c8cf39eda198e637d569b363874a73ad8bffa3cb4d3d577689fe209b33047316b1efa1f36c49a867a1b993092ef0aaf3cb9f0fb8d1b83e15ba171ac0f7876c7ce931fc73ce81e8e637bac366d74e84e753057f77868a7abefd0fe1e380fc5305f9e4066d159748e62169d45e72866d159748e62169d45e72866d159748e62169d45e72866d159748e62169d45e72866d159748e62169dcb4767cd43ff3b8458d3506f131346f2edf6cad31aae3b6c0a866f296bbf17ca7b80a72f769efcba8307ddc37587bd569b363974a73ad8bff67a68a7abefd0fe5e380f639df9f204324b6e8c0eb3e4863047314b6e087314b3e4863047314b6e087314b3e4863047314b6e087314b3e4863047314b6e087314b3e4863047314b6e087314b3e4863047314b6e087314b3e4863047314b6e0873143387dcd03c9b4d9958d3506f331346f2f5f9e5097ff76073307c2b74dfce5ee0d9e3411f4fed0cefdbd967b569b34377aa83fd6b9f8776bafa0eedef83f320ccc2ec62d63c5b4c9958d3506f0b1346f2edf1cb138e635b82e15ba1716c1ff0f818e73db5331cc7faad366d71e84e753057fb3db4d3d57768bf1fce83300bb38b59f36c3565624d43bdad4c18c9b7d72f4f388e6d0d866f85c6b17ee0f131ce7b6a67388eedb7dab4d5a13bd5c15cddefa19daebe43fbfbe13c08b330bb9835cf365326d634d4dbc684917cfbfcf2e4d2d066da0a8d63fb81c7c738efa99de13876a5d5a66d0edda90ee6ea951edae9ea3bb47f259c87a4316b9eeda64cac69a8b79d0923f9fafdf284fd6b7b307c2bd4bfae041e1fe38fa77686fdeb80d5a6ed0edda90ee6ea010fed74f51dda3f00e72169cc9a678729136b1aeaed60c248befd7e79c2feb52318be15ea5f0780c7c7f8e3a99d61ff3a68b569874377aa83b97ad0433b5d7d87f60fc279481ab3e6d969cac49a867a3b9930920fdf2f767ae2a9b5786a1d5a8cc5d87556ecba32895d6fc5ae2f93d892e792e7e5105bf25cf2bc1c624b9e4b9e9743ec72cd35d1bc3c354f9d44cd532751f39468ce52f367e28bdd9e0986b60a8875c0533b71eb8532cecfd1d6c58c671e339e76663c3398f1e498f14c66c6338119cf22663c95cc78b2cc78e633e359cc8c6726339e29cc782632e3a962c6b38c194f0f339e05cc78ba99f17430e399c58ca79519cf54663c4b98f1a499f13433e3a966c6d3c48c6721339e15cc786633e36960c6730a339e5a663cbb98f1d430e359c98ca79319cf1c663c6dcc78a631e359ca8c27c38ca78e19cf38663c7399f14c67c63389194f3d339ef1cc78520c78d2c189df47c1ef1354828feeefdf09bee799f22ef0553862d0710e828fe64fe9187abc59d170224305bce62a07d7f31cf128ce558ed78e86ee18ab17f6295e2d705cc584673c339e7a663c9398f14c67c6339719cf38663c75cc7832cc789632e399c68ca78d19cf1c663c9dcc785632e3a961c6b38b194f2d339e5398f13430e399cd8c6705339e85cc789a98f15433e36966c69366c6b38419cf54663cadcc786631e3e960c6d3cd8c6701339e1e663ccb98f15431e399c88c670a339e99cc781633e399cf8c27cb8ca79219cf22663c1398f14c66c69363c63383194f3b339e79cc78ba98f15438787679e289fa3d855d0c62eb751c7aafa239c3343c3f1adf03dc6531d2fe0160241fde879af5c413f51b145906b1b516cba0acb7343c8fdfe3f29553598b91f65d3985f7a52df3c413f5bb1dcb18c4d65ad0dc25dd039086e7f17b0bbe726a99c548fbae9caaf7cb13fe6f89a660f856e85e23ec733ecea1a77666b1ffc5f81b1acedfa26eb2b4ca409dd1b84f3e6a3ca078c22ccc51cc9a87d62e8815dfcf46e37b6f236174bdbf7ae009c7c7e660f856687c3c003c3ede3f3cb5331cc70e596d6a76e84e7530570f7968a7abefd0fe2147ecc6205e2d0e8f408bc30e9ec3a3ac05c52b967957029939e8ac79e8de36624d43bda54c18c997f5cb138e8f4b83e15ba1f1f130f0f878fff0d4ce704c3862b569a94377aa83fdeb888776bafa0eed1f81f3500cf3a104328bcea5316b1e9a4326d634d4cb316124df01af3cb96c1ada4c5ba171ec08f0f818e73de91e8e6303569b720edda90ef6af010fed74f51dda1f80f320ccc22cccc22cccc22cccc22cccc22cccc22cccc22cccc22cccc22cccc22cccbc99350f7db79158d350af950923f90e7be5c9af3bb406c3b742eb0e03c07324769efcba8307ddc37587a3569b5a1dba531dccd5a31edae9ea3bb47f14ce83300bb3300bb3300bb3300bb3300bb3300bb3300bb3300bb3300bb3300bb330f366d63cf49bdbc49a867a6d4c18c977c42f4ff8bdadb660f85668dde128f0f85897f1d4ce70dde16aab4d6d0edda90ee6ead51edae9ea3bb47f359c0761166617b3e6a1dfb622d634d46b67c248be01af3cf9f5d3f660f856681cbb1a787c8cf39e740fc7b163569bda1dba531dccd5631edae9ea3bb47f0cce4331cc8712c82c3a8bce51cca2b3e81cc52c3a8bce51cca2b3e81cc52c3a8bce51cca2b3e81cc52c3a8bce51cca2b3e81cc52c3a8bce51cca273f9e8ac79e87fae116b1aea75306124df51af3cade1ba4347307c2bb4ee700c787caccb78d23d5c77386eb5a9c3a13bd5c1fe75dc433b5d7d87f68fc37918ebcc8712c82cb9313acc921bc21cc52cb921cc51cc921bc21cc52cb921cc51cc921bc21cc52cb921cc51cc921bc21cc52cb921cc51cc921bc21cc52cb921cc51cc921bc21cc52cb921cc51cc921bc21cc52cb921cc51cc1c7243f3749a32b1a6a15e271346f25ded9727fcdd83ce60f856e8be9de3c073cc833e9eda19deb73368b5a9d3a13bd5c1fe35e8a19daebe43fb83701e8459985dcc9aa7cb9489350df5ba983092ef985f9e5c1ada4c5ba1716c10787c8cf39eda198e63d7586dea72e84e753057aff1d04e57dfa1fd6be03c248d59f3749b32b1a6a15e371346f2e1fb72b7279e5a8ba7d6a1c5c98aadb5e831e553cc631a9eef01465fe361b7c548fb98e3e4ab059e1e4f3c75164f9d438b93155b6bb102ca7a4bc3f32b80d1574ef5588cb4efcaa93ae059e189a7dee2a9776871b2626b2d569af224f39886e75702a3af9c5a6131d2be2ba7ea8167a5279ea83169e528c48eea5fa3113b2a574623b6682e9a8be6a2b94fcd532751f3d449d43c259ab3d2dcc3755438df4b310260c0ad17caf859c1c7b5a7a776665d9fc7565a6dc2cf6338e770b23e6f08b33047317b9ab7684b5bb1499fc0e2a16dd0b316a3396fda63b52909f3a685980f259059742e8d59c7be36fed86d692b36e913583cb45deb590b4fed0cc783eb02b7c6142f0375304faff3d0ce14c4a563d3fe75701e8a613e944066d1b934661dfbfad863e77f4f1e63933e81c543dbf59eb5f0d3cefc787043e0d698e265a00ee6e90d1eda9982b8746cdabf01ce83300bb3300bb3300bb3300bb3300bb3300bb3300bb3300bb3300bb3300bb330f366d6b19f1f7becfcfc3dc6267d028b87b6e77bd6c24f3bf3f3f737066e8d295e06eae039bfd1433b5310978e4dfb37c2791066611666611666611666611666611666611666611666611666611666611666decc3af60be28f1d7e1f0763933e81c543db0b3c6be1a99de1fcfd4d815b638a97813a78ce6ff2d0ce14c4a563d3fe4d701e8459985dcc3af60b638f9d5fcfc3d8a44f60f1d0f642cf5af869677e3cb839706b4cf1325007cff9cd1eda9982b8746cdabf19ce4331cc8712c82c3a8bce51cca2b3e81cc52c3a8bce51cca2b3e81cc52c3a8bce51cca2b3e81cc52c3a8bce51cca2b3e81cc52c3a8bce51cca273f9e8ac63df127becd670fe1e63933e81c543db2d9eb5f0d3cefcfcfdad815b638a97813a98a7b77a68670ae2d2b1699fe29503f3a104324b6e8c0eb3e4863047314b6e087314b3e4863047314b6e087314b3e4863047314b6e087314b3e4863047314b6e087314b3e4863047314b6e087314b3e4863047314b6e087314b3e4863047314b6e0873143387dcd0b15f147fecf0fbec189bf4092c1eda5ee4590b4fed0cef7fb92d706b4cf1325007f3f4360fed4c415c3a36eddf06e7419885d9c5ac63df1e7fec5cda8a4dfa04160f6db77bd6c2533bc3f1e08ec0ad31c5cb401d3ce7777868670ae2d2b169ff0e380f4963c6f3978a2f7678df26c5a8308fdaf76253ae04df4b4cb90a7c2f35e56af0bdcc946bc0f772531e07be5740dbc8f74a535e02be5799f24af0bdda945780ef35a6dc03bed79a7237f85e67ca83e07bbd295f03be3798f2b5e07ba3295f07be3799f2f5e07bb329df00beb798f2f3c1f75653be117c6f33e51780efeda67c13f8de61ca2f04df3b4df966f0bdcb946f01df9da67c2bf8de6dca0bc07797c3f71e537e11f8de6bcab781ef7da6bc0b7cef37e509e0fb80294f04df07a14c8f779bf229e0bbc7946bc1f72153ce80efc3a65c07be8f98f224f07dd494ebc177af294f06df7da63c057cf79bf254f07dcc941bc0f771539e06be074c793af83e61ca33c0f749539e09be4f99f22cf07dda946783ef33a63c077c9f35e5b9e07bd094e781ef73a63c1f7c9f37653cbf5f30e5dbc147e3ca1de0a371e5c5e0a371e525e0a371e5a5e0a371e565e0a371e5e5e0a371e515e0a3bc7b25f828ef5e053ecabb57838ff2ee35e0a3bc7b2df828ef5e073ecabbd7838ff2ee0de0a3bc7b23f828efde043ecabb37838ff2ee2de0a3bc7b2bf828efde063ecabbb7838ff2ee1de0a3bc7b27f828efde053ecabb3bc14779f76ef051dedd053ecabbf7808ff2eebde06b34e5f781ef54537e3ff84e33e50f80ef7453c671e60c53be1b7c679af23de0a3b1f043e07b8e297f187c0b4df923e05b64ca1f05df6253be177c4b4cf93ef02d35e5fbc1d764ca1f035fb3297f1c7ccb4cf901f0654df913e06b31e54f822f67ca9f025fab297f1a7c6da6fc19f0b59bf267c1d761ca0f82afd3943f07be2e53fe3cf8e87d9cc619dd9f751f241d4823eda336373bda42bef1d096de20de6b3a8a45c7a6fd5660a473901b7dc6dc48195b2c46cdd3ee4133cc2bda0a7d666a079e360f3c9eda197e66eab0dad46ab52903759e03edecf0d0ce14c4a563d37e07c4f671ce518b6a73dc8596165558c7bca1e9f7ce423ad23174fee61c6de9f6dc163a368d4bdda310bbd38a9db562e3784c5ba1fed509cc5d1e98f5717be23f6ed8bf969b63514e519c2cb469056810579b3076ca18c5217f159467350cd5a57aa407bd7f11bbce653a97c86ebfaedd7a5d06ea743bdadf1bc4dbfe1e8ba7c762d6e7a4ae6188c3437f0873a0dbe2a0fd2c68d713a15d37684775f0fdafc993765d160fed37010f5de374808fae15881fafb39a4781db1ef73a1cdce4eb04c62607632e7ec6f05aa7c962a4fd1c3092af0b783a3d69669feb85963ef8be5c63d5a1d756419d65f0de9876d4d5fd6e416aa85df419fc9920de31bdc6835e383f10803e81a561007a513bab3df04c0c86e6088e0f0e1cebbbb2ff9cfebe7d2940abb230f131e5684605f8b05ce9f005c1f0a9109c92a5a9109c92adb064c12918aaaf3f4ae966d17443ffe18383cf3dd27f64efb11b8e0ef6efdb3e702552575bf4481ad50224451f6de383a1499bde20dec5981a2b56a1e4190f8fe3e2e769f1d4cef04d6f82d5a61aab4d19a8530dcf4df0d0ce14c4a563d3fe0447ec1807a2508b8923d062a28367e2286b8113dfe4c39e4acfe3e24985d516ecd1d8263bcf636d10055c00c74f1938fd9ceeecd5a631e382a1934da3a79e51d557b5fa44e81952fdcea56740f510a46738f58ca67e53d333967a8652cf48ea19483de3a86718f58ca29e41d433867a86b031c8cf00ea193f3dc3a767f4ce04b6ef02affe54addf21f58c9c9e81d3336efaca4a5f01e8ab117df5adaf14f5ec87be42d09f2cf52c837eb7d55732fa5d5abfb3ea2b457d85a8afe8f515ae5ea55aa56cb5d17a8db2b5cad6295baf6c83b28dca3629dbac6c8bb2adcab629dbae6c87b29dcace527676909f5d3f47d9b9cace53f65c65e72bbb40d985ca2e5276b1b24b945daaec3265972bbb42d96e657dcaf628dbab6c9fb27e65fb955da9ec80b283ca9ea7ecaa207f87ce616547940d283baaec6a65c7941d0ff22b667a854caf88e91530bde2a557b8f48a965ec1d22b567a854aaf48e915a85b82fc0a935e29d22b437a5540af02e8597f3dcbffd2203f8baf67ed5f11e467e5f52cbc9e75d7b3ec7a565dcfa2eb59733d4bae67c5f52cb89ef5d6b3dc7a565bcf62eb596b3d4bad67a5f52cb49e75d6b3cc7705f959643d6bac6789f5acb09e05d6b3be7a96f79e203f8bab676df52cad9e95d5b3b07ad655cfb2ea59553d8baa674df52ca99e15d5b3a07ad653cf72ea594d3d8ba9672df52ca59e95fca2b287947d49d997957d45d957957d4dd9d7957d43d937957d4bd9b7957d27c8e7e5f7947d5fd90f94fd50d98f94fd58d94f94fd54d9cf94fd5cd92f943dacec97ca1e51f6a8b25f29fbb5b2df28fbadb2df29fbbdb23f28fba3b23f29fbb3b2bf28fbabb2c7943daeec6fca9e50f6a4b2bf2bfb87b27f2a7b4ad9d3c1d0ea060e22ff323b34d3de3738d87ff8e860e3e040e3e16b0e0d1e3c7ae886c6eb0e0e1e681cb8b6ffd8fe4303d7e18bef36c3162d23ac3976acef86c68347f6f55fdf3870cd60e3c0fec63d03d71cd9771c5ff40df3a2392746ecdbb72f3ad82f2a9e05e9a325067dccbc8e1668b6146edb13a508f274292f9a52595a83ce32ef3af4e9fddcfcd56ee3f14303838dd9c623ea6fdf21f59afe7dcd8df8dc7125f2f1c1c6e3837dc7061bf71f1b38dcd8d28cc7bd6842098da86a28e145cd0d236f79f0ff6aa10d5f2d0a0400", "privateFunctions": [ { "selector": { @@ -37,8 +37,8 @@ exports[`ContractClass creates a contract class from a contract compilation arti "isInternal": false } ], - "id": "0x0d5471508a654520290ccddd230e9932f649fcd6a848e33437e91fa5d7b1c8a1", + "id": "0x10088b254547ee05a7cb19d5056d1152bc7f040bc9b3459c342685791c7f4264", "privateFunctionsRoot": "0x2dc1f38d7be98a8e72227d6f8aec393c60db813a1819c9c86b02a00cc18f6687", - "publicBytecodeCommitment": "0x25588413d594c7c368a2c7b5f1b6141f4d40d6e1ea912e59182f89982e0734e5" + "publicBytecodeCommitment": "0x210e403ab011cfa2c7222578e0b3fd67a512a9e93327da19499f335e071bb9b3" }" `; diff --git a/yarn-project/protocol-contracts/src/gas-token/__snapshots__/index.test.ts.snap b/yarn-project/protocol-contracts/src/gas-token/__snapshots__/index.test.ts.snap index 5c351a8e56a..0a074c6197e 100644 --- a/yarn-project/protocol-contracts/src/gas-token/__snapshots__/index.test.ts.snap +++ b/yarn-project/protocol-contracts/src/gas-token/__snapshots__/index.test.ts.snap @@ -2,10 +2,10 @@ exports[`GasToken returns canonical protocol contract 1`] = ` { - "address": AztecAddress<0x1fc44c2d7ba8a41eceda17b28f1f6e07c92b2998c04070d29f42c5e2b62d57c1>, + "address": AztecAddress<0x147f855c55b7a36796595ef3952b4874ad910d03041b9b5caaf887af1e001a53>, "instance": { - "address": AztecAddress<0x1fc44c2d7ba8a41eceda17b28f1f6e07c92b2998c04070d29f42c5e2b62d57c1>, - "contractClassId": Fr<0x2de5b9f575648d9c59866db2d6433498be5977ec509f0cc4a22beee66e9969ca>, + "address": AztecAddress<0x147f855c55b7a36796595ef3952b4874ad910d03041b9b5caaf887af1e001a53>, + "contractClassId": Fr<0x1d6ddd847261cf7c455e6c8d65e441ba51439d77a5ecbed3a8d2289d7af5ff1b>, "deployer": AztecAddress<0x0000000000000000000000000000000000000000000000000000000000000000>, "initializationHash": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, "portalContractAddress": EthAddress<0x0000000000000000000000000000000000000000>, @@ -19,10 +19,10 @@ exports[`GasToken returns canonical protocol contract 1`] = ` exports[`GasToken returns canonical protocol contract 2`] = ` { "artifactHash": Fr<0x18af4bb0ca6fe07d0ae6da493b2c7b1af038ee904721dbba9b6e571e6d495726>, - "id": Fr<0x2de5b9f575648d9c59866db2d6433498be5977ec509f0cc4a22beee66e9969ca>, + "id": Fr<0x1d6ddd847261cf7c455e6c8d65e441ba51439d77a5ecbed3a8d2289d7af5ff1b>, "privateFunctions": [], "privateFunctionsRoot": Fr<0x15d28cad4c0736decea8997cb324cf0a0e0602f4d74472cd977bce2c8dd9923f>, - "publicBytecodeCommitment": Fr<0x098dabd738e3d4e0d3eb369ec05f14d94974dec87919679d0234c44210daf6db>, + "publicBytecodeCommitment": Fr<0x15ac65b32c98928e3b835828e871e49dfc82c36eabbbc5b68bf092e8d9c97527>, "version": 1, } `; From f1b1bc472ff969cd71e022e1534dcd162c322ed8 Mon Sep 17 00:00:00 2001 From: guipublic Date: Wed, 20 Mar 2024 15:31:44 +0000 Subject: [PATCH 15/98] fix dsl unit test --- .../src/barretenberg/dsl/acir_format/bigint_constraint.test.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/bigint_constraint.test.cpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/bigint_constraint.test.cpp index 302b016b991..10f264a265a 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/bigint_constraint.test.cpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/bigint_constraint.test.cpp @@ -424,7 +424,6 @@ TEST_F(BigIntTests, TestBigIntDIV) .public_inputs = {}, .logic_constraints = {}, .range_constraints = {}, - .sha256_constraints = {}, .sha256_compression = {}, .schnorr_constraints = {}, .ecdsa_k1_constraints = {}, From 6519d3b18a8097ba3a8fe9fe432ff7b908942b72 Mon Sep 17 00:00:00 2001 From: guipublic Date: Thu, 21 Mar 2024 11:58:00 +0000 Subject: [PATCH 16/98] add sha_256_compression in acvm_js blackbox --- .../acvm_js/test/browser/black_box_solvers.test.ts | 11 +++++++++++ .../acvm_js/test/node/black_box_solvers.test.ts | 10 +++++----- .../acvm_js/test/shared/black_box_solvers.ts | 12 ++++-------- 3 files changed, 20 insertions(+), 13 deletions(-) diff --git a/noir/noir-repo/acvm-repo/acvm_js/test/browser/black_box_solvers.test.ts b/noir/noir-repo/acvm-repo/acvm_js/test/browser/black_box_solvers.test.ts index 6490ab959e1..07382fbcf3d 100644 --- a/noir/noir-repo/acvm-repo/acvm_js/test/browser/black_box_solvers.test.ts +++ b/noir/noir-repo/acvm-repo/acvm_js/test/browser/black_box_solvers.test.ts @@ -6,6 +6,7 @@ import initACVM, { ecdsa_secp256r1_verify, initLogLevel, keccak256, + sha256_compression, xor, } from '@noir-lang/acvm_js'; @@ -33,6 +34,16 @@ it('successfully calculates the bitwise XOR of two fields', async () => { } }); +it('successfully calculates the sha256 hash', async () => { + const { sha256_compression_test_cases } = await import('../shared/black_box_solvers'); + + for (const testCase of sha256_compression_test_cases) { + const [message, state, expectedResult] = testCase; + const hash = sha256_compression(message, state); + hash.forEach((value, index) => expect(value).to.be.eq(expectedResult.at(index))); + } +}); + it('successfully calculates the blake2s256 hash', async () => { const { blake2s256_test_cases } = await import('../shared/black_box_solvers'); diff --git a/noir/noir-repo/acvm-repo/acvm_js/test/node/black_box_solvers.test.ts b/noir/noir-repo/acvm-repo/acvm_js/test/node/black_box_solvers.test.ts index cedadba2c1a..fc998ced5a5 100644 --- a/noir/noir-repo/acvm-repo/acvm_js/test/node/black_box_solvers.test.ts +++ b/noir/noir-repo/acvm-repo/acvm_js/test/node/black_box_solvers.test.ts @@ -5,7 +5,7 @@ import { ecdsa_secp256k1_verify, ecdsa_secp256r1_verify, keccak256, - sha256, + sha256_compression, xor, } from '@noir-lang/acvm_js'; @@ -28,11 +28,11 @@ it('successfully calculates the bitwise XOR of two fields', async () => { }); it('successfully calculates the sha256 hash', async () => { - const { sha256_test_cases } = await import('../shared/black_box_solvers'); + const { sha256_compression_test_cases } = await import('../shared/black_box_solvers'); - for (const testCase of sha256_test_cases) { - const [preimage, expectedResult] = testCase; - const hash = sha256(preimage); + for (const testCase of sha256_compression_test_cases) { + const [message, state, expectedResult] = testCase; + const hash = sha256_compression(message, state); hash.forEach((value, index) => expect(value).to.be.eq(expectedResult.at(index))); } }); diff --git a/noir/noir-repo/acvm-repo/acvm_js/test/shared/black_box_solvers.ts b/noir/noir-repo/acvm-repo/acvm_js/test/shared/black_box_solvers.ts index 0ab3fc12b72..397bf65ff94 100644 --- a/noir/noir-repo/acvm-repo/acvm_js/test/shared/black_box_solvers.ts +++ b/noir/noir-repo/acvm-repo/acvm_js/test/shared/black_box_solvers.ts @@ -32,15 +32,11 @@ export const xor_test_cases: [[string, string], string][] = [ ], ]; -// https://www.di-mgt.com.au/sha_testvectors.html -export const sha256_test_cases: [Uint8Array, Uint8Array][] = [ +export const sha256_compression_test_cases: [Uint32Array, Uint8Array, Uint8Array][] = [ [ - // "abc" - Uint8Array.from([0x61, 0x62, 0x63]), - Uint8Array.from([ - 0xba, 0x78, 0x16, 0xbf, 0x8f, 0x01, 0xcf, 0xea, 0x41, 0x41, 0x40, 0xde, 0x5d, 0xae, 0x22, 0x23, 0xb0, 0x03, 0x61, - 0xa3, 0x96, 0x17, 0x7a, 0x9c, 0xb4, 0x10, 0xff, 0x61, 0xf2, 0x00, 0x15, 0xad, - ]), + Uint32Array.from([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]), + Uint8Array.from([1, 2, 3, 4, 5, 6, 7, 8]), + Uint8Array.from([1862536192, 526086805, 2067405084, 593147560, 726610467, 813867028, 4091010797, 3974542186]), ], ]; From 11c99575f38e783712a78ddd7079d31c29d9d324 Mon Sep 17 00:00:00 2001 From: guipublic Date: Thu, 21 Mar 2024 14:48:26 +0000 Subject: [PATCH 17/98] update test snapshot --- .../contract/__snapshots__/contract_class.test.ts.snap | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/yarn-project/circuits.js/src/contract/__snapshots__/contract_class.test.ts.snap b/yarn-project/circuits.js/src/contract/__snapshots__/contract_class.test.ts.snap index 37bb4cec567..574ebd6bb88 100644 --- a/yarn-project/circuits.js/src/contract/__snapshots__/contract_class.test.ts.snap +++ b/yarn-project/circuits.js/src/contract/__snapshots__/contract_class.test.ts.snap @@ -9,18 +9,18 @@ exports[`ContractClass creates a contract class from a contract compilation arti "selector": { "value": 2381782501 }, - "bytecode": "0x1f8b08000000000000ffed9d779815c5b6f67b6040643b0398b3830915c56118e20cb03127cc2822220cc3080a0c51cc98250773468292b380802020869373f2243d1e4fbaf79e739efbc7fdeefd82dfeddabbd69d778aea61f6d8b579f7eceae7a9d9d56baa7bfdeaedd5d5a9baab20484fff0c5381ceb70cd399c18193fc3fa97f4bbfd9d435c67595bae42cc811ce1639c2d93247380b7384b3558e70b6ce11cec37284b34d8e701e1e23a7626b11d49fe2e66deb40d7b8191339a6e91139a069518e695a9c039ab60b72a38d6a9f239c1d7284f3c81ce13c2a47388fce11ce637284f3d81ce13c2e47388fcf11ce137284f3c41ce13c2947384fce11ce537284f3d41ce13c2d47384b7284b3638e709e9e239c67e408e79939c279568e709e1d236767e0eca47fcfd1bfe7eadff3f4af943d5fff5ea07fbbe83a16eaf90b155798d4439a32e37fddc2541ea6ee61ea61fcaf67987a85a97798fae8ff95e8ff5584a9324c7dc3d42f4cfdb50603c27451982e0ed32561ba344c9785e9f2305d11a62bc3745598ae0ed335611a18a66bc3745d98ae0fd30d61ba314c3785e9e6300d0ad32d61ba354c83c3745b9886182cb787696898ee08d3b030dd19a6e1611a11a6aa308d0c5375984685a9264c7785697498c684e9ee30dd13a6b1611a17a6f161aa0dd384304d0cd3a4304d0ed394304d0dd3bd619a16a6fbc2747f981e30347b304c0f85e9e1303d62704e0fd3a3617a2c4c8f87e989303d19a6a7c2f474989e09d38c30cd0cd3ac30cd0ed39c30cd0dd3bc30cd0fd382302d0cd3b3617a2e4ccf87e98530bd18a697c2f472985e09d3ab617a2d4caf87e98d30bda95964475814a6b7c2b4384c4bc2b4344ccbc2f47698de09d3f230ad08d3ca30ad0ad3ea30ad09d3da30ad0bd3fa306d08d3c6306d0ad3e630bd1ba62d61da1aa66d617a2f4cdbc3b4234c3bc3f47e9876856977983e08d39e30ed0dd3be307d18a6fd61fa284c1f87e993307d1aa66f85e9db61fa4e98be1ba6ef85e9fb86e63f08d30fc3f4a330fd58db7ea27f7faacbcafdbb9f85e9e73aff0bfdfb4bfdfb2bfdfb99b1ccafc3f41bc3f6db30fdceb0fd3e4c9febfc17faf70ffaf74bfdfb47fdfb95fefd93fefdb3fefd8bfefdabfefd9bfefd17fdfbaffaf7dff4efdff5ef3ff4ef3fc3b4b9633adf26a89b92414c6d54794dead98f88df29a83f292d5aeaffc96f89b617ea79f915ed5ae9f95686bdb59e6f6daca78d9e6f63d83be8f90e86fd283d7f94613f46cf1f63d88fd3f3c719f633f5fc99604f04706f58db95ada53615804de2b505d85a695b4bb0b596d581ed306d6b0536d9beadc176b8b61d06b6b6dad6066c096d3b5cb40cd311da960ce28a95d2116abd4571af573f2f2b8e9f77a45a6f3b47bcede3e71da5d6dbc101af8a8f23f5bada43dc1ca56d1dc076b4b61d09b663b4ed28b01dab6d4783ed386d3b066cc76bdbb1603b41db8e03db89da763cd84ed2b613c076b2b69d08b653b4ed24b09daa6d2783ed346d3b056c25da762ad874931b9c06b6d3b5ad046c67685b47b09da96da783ed2c6d3b036c676bdb996093f6f72cb0c9f9e2d9daa6da8ec30b60196d97762bb58cb4d9603b57da6bb09d276d35d83a4b3b0db6f3c1b7d82e80b6466c5db44dda2df5bf3e3a9f0ce2da4fca6ad47a2be25e6fb866b5debef1af37f5ccb15f50a77512fc548056fd753ec67e4d5dd177814ee247ec8590bf0aca4a39d1438e3dc2ae8e05953adfbf81e5fa18cb1543994a4bfd9341bcf5ef6bf0f435985b41de4dcc76ebe663b6d153c6313b18ca9ab127e741cd31660702878398ede963b6d153c6315b0365cdd89373e1e618b3b703878398ad7213b365a53e66d3f7cd82c01e7b723dd41c63760c70c41fb3dd7dcc367eca38661f87b266ecc93571738cd969c0117fccf6acf2e7068d9e328ed90550d68c3db93fd31c63f629e07010b335be9d6df49471ccbe0965cdd8937b85cd31669f038ef863b6b7a398ede66336483f030d027becc97debe618b38b8123fe981de9efcf367eca386677405933f6e4194a738cd9f53aaf9e33fc443f6738196c3fd5b6538037fed8aeeeee28b6cb7c6ca7fb8604813d46e5795e738ced0f745ec5f12fa03f82d87ea96d1dc1f62b6d3b1d6c9f69db19502f07fb4095df071a3d65bc0ffc06ca9ab12ccf969be33ef023e07010b3d53e661b3d651cb37f83b266ec493f87e618b3bf070e07315be363b6d153c631fb9f50d68cbd7374be39c6acf43555e70b5fe8f385f3c0f6076deb0cb62fb5ed7cb0fd51db2e00db57dad6056c7fd2b60bc1f6676d2b05db5fb4ad2bd8feaa6d6560fb9bb67503dbbf685b39d8fe55dbba83eddfb4ad07d8feae6d3dc1f60f6deb05b67f6a5b6f6d53fdf4a4ef959cb7b601fe6410efb6957e97b26e99ef9a05dfed0cdfedb2e8bb83e1bb83c5779903df09f0215381319f847c995b9ed262e0415fe5f1fbeaa6eade2d687cddcb81a7bb83ba27c0476378ba034f8ff87952fd7f7bc6bfded436ee66689a005fdda05ebd1cd4ab007cc9ba655efc15830ddbd65e16c6def1339615802f59b7ccf70646b1615b2fef5cc9fea38e879d0aea781dec4ba97322f127df2d138e72b04b992b3bd6b175d66c45f07f3ceef5306c8ee2321517e24bd62df3e2af08ead323fb8c658d65ec6e30ba6a230ac097acdbfbaedb0e92c7e3b8836b1d6b9b26be2bb2e0bbb7e1bbdcf08d6da74c0d1ddb7a0373ecd79cfad85619ff7a4bf1fa44ae0dc50f9e3fe0355c5c7542df726d287ec45e08f96b0beaca4a39d143da616157b12cdb12d9cde57a19cb1543990a4bfd9341bcf5af34782a0d66b54d2e8663a183fd211503150687cc9783769511da55807652e61cd0ce557bd6c7e091f91ec023ed584fe071754d14c5938debb183f9c67358bc7e96ffe37980abedd5d5609479dbf6ea0d8cb6731507d7330d9eab740746b1f5019e6e8e348bdaaedd487c3b8895547b243ee4dc5cf6df1e609732bdf50b75aaadbc1bda4a173182f1285363af79e3df4e65a96bf0ee19f0e0b673705dd5d5513c96e2fd9baf837863cd6c97ba1b5a45dde371d596773378645efc7966cfec993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367e667c6e749d86f4bcaf5206134fbbfb9bacf9ffafea15e97ac5f3dd7f93f4efb83959562ff18e907719e51e7422853d4a2aeecff87fe60e6732aec23d9c3ad76a96d89fd3193302ffeb0af156e4b86fe4e25b1f92e1be9ea799bea63adbea369f6fdec61d1d445ff67d4b4c0d014fbe39f6ff0a838ad6c59c7e6e2d95fa6cf22512bc9c7f96caf38b0c77afcdba5acde33eb1641fdf6038f33aefaef485b2dcfcb2b0cdf8550e6a41675db46fa56c918c3dd8ce5b0df8fac5b96390fec95c6badbeb6585a395b1fe9eb0ac943915dad4bd2dea3473d0569665da771d9f9bc77f1c4e3fc7ef96014f57e071d1ce383adf28c57d20eee7f866ff34db798c94c1be7d0efa5536d8df49fc7966cfec993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367e667563ce6b3567cbfb69c84314b7d1f52cf33e45b65b2fed4f7825bd4f975fd1c4e9e397536ea8cef8efeb3455dd9cd3a5f141cd8df216a5bbafa3e45d4b6147ff8ed197c16e4e2b96e01f892759759b4907c496cbed3cff15d8c0d21cff1bb19ba965b3475b5bfe23356d414f7d7ee060f3e1b8dfab64f996173d977282a2ec41fee4b6560933cbe1fed623be3b1c4ecd723fef0f9f577b4b6ed0357dbbeacd465bb81df4d490607c6377e4fe587d0f6fd58e7b10f07f61df9c2f27f991a7a4e2dfaa93a3bf8be666901ac4bb6afeddb9e03803526df5d715d053a0d30342884fce72deaca4a39292b5a0bbbda47e41b30c86e2ed7dd58ae18caf4b3d43f19c45b7ff35babfd0d66b54d7e0671f6051cff5db549fd22343a0f3492328ebfd968ed5f69f62bc476b4b5514696c56fd1fd15daa8a8fea3b66380ebe398acdb761c338f0b8de9e799effdb4fe0bda8bb8fb69fd17c410f6d30a8cf57786f50b57eb20fad82265fe9fb17ef39c5c96c17e60ffb39fc0f75cca743e9373f243757d653b27c7e5a2eaae98f13b68c9189931269005cf13a44c5badb56cb3ca08eede96658b229615adcc6f85150507eae7e63b6be97dbebf5117896bfc06b994390aeae2e6bc257d0ee8ea9b7249a893ca9759ea2a658e877ded449d4fc076c2fdf65ccbff656ae81c10c770bf28fe3aa7b6efc5c099043fe8fb12608dc97757f42de780e247ec85903fa7655d5929277a88d6c2aef611398f427673b90a63b9622833c052ff64106ffd2f32782e3298d5363905e2ec5ce887eeaaad1e10a15167d048cae03d45db77406df73a5cbdbf11752e85ef2f99e757789c7473de643f8f35efabd9ce113a1bfc788ed013dad984a5ac79bf508e9771f61bc677257a825f7c57c2d5b79bfb806e4998c7f38243e9dbc5776c95bfa83113fa64c177d49809d9f0ddc1f0dd218bbebde65e7326cd1d8c41907aff0cbf59aaa686ce4b715c0259ae0530ba18cb2111d4fff6f8c118717c0759ae2530ba383e64faedf39ec028cb1502a38b774b71fc8dc630e23786f1382f8c0ebe15dbb5a9df8ac57b7aad8191e99d4d7c36751830ba382f6eeabb7a783edf067e5d8d4bd42d03c6326094e50e074617f7c6f15aa6318c785d24cbb5054617cfb0321ddf09bf3d8ff7965d3236746c77dc17a52cd37b2f956e791a3cd740df0ec6354c6981f7190fa6455fb73c0d9efba06f07f7fd525ae0388307d3029f0dba18f73011d47f0e77301e7c7e29cb1d098c49478cfd33604c02e3ffdc2b06c6018e189319300e0046b11f0d8c0eeebfa6180764c088f72965b96380f162478c1765c0783130ca72c702a38b7ba909f0db18c64b8051963b0e182f75c47849068c9702a32c773c305ee688f1d20c182f034659ee0460bcdc11e36519305e0e8cb2dc89c0788523c6cb3360bc021865b99380f14a478c5764c0782530ca722703e3558e18afcc80f12a6094e54e01c6ab1d315e9501e3d5c028cb9d0a8cd73862bc3a03c66b8051963b0d18073a62bc2603c681c028cb9500e3b58e180766c0782d30ca721d81f13a478cd766c0781d30ca72a703e3f58e18afcb80f17a6094e5ce00c61b1c315e9f01e30dc028cb9d098c373a62bc2103c61b8151963b0b186f72c47863068c3701a32c773630deec88f1a60c186f06c69b2c8c831c31de9c01e3206094e5ce07c65be2674c5d4b0fca80f116e0b9357e9e9466b764c073ab5b9ed477f56eb1f8ba2d7e5fa96d3138687cdd6f039e21f1f3a4b6c56d19f00843312c879add1e3f634ab3211930de0e3c43e3e74969767b063c4341b3db2d9add113f634ab3a11930de013cc3e2e749697647063cc340b33b2c9add193f634ab3611930de093cc3e3e749697667063cc3833acdeeb46836227ec69466c333601c013c55f1f3a4341b91014f156836c2a2d9c8f819539a5565c0381278aae3e749693632039e6ad06ca445b351f133a634abce807114f0d4c4cf93d26c54063c35a0d9288b6677c5cf98d2ac2603c6bb806774fc3c29cdeeca80673468769745b331f133a6341b9d01e318e0b93b7e9e94666332e0b91b341b63d1ec1e478c7767c0788f8527eeef64df6df135ce51ddc7068dafbb3014c372d84f62bc23c67119308e0746590efb49d43a621c9f01632d30ca7209c78c0df593a805df13e2f79d6a976a83c6eb33c12d4f83fd24d0f744475a4c081aafc544b73c0df69340df931c69313168bc16938067b2032d12e0a3313cc2500ccb613f89298e182767c03805186539ec2731d511e3940c18a702a32c87fd24ee75c4383503c67b815196c37e12d31c31de9b01e3346094e5b09fc47d8e18a765c0781f30ca72d84fe27e478cf765c0783f30ca72d84fe201478cf767c0f80030ca72d84fe241478c0f64c0f82030ca72d84fe221478c0f66c0f81030ca72d84fe261478c0f65c0f83030ca72d84fe211478c0f67c0f80830ca72d84f62ba23c64732609c0e8cb21cf69378d411e3f40c181f0546590efb493ce688f1d10c181f034659ee1ec78c0d5dbf3cd6cc7d475dab3477df51d725cdddb78f731fe7f9e0dbc7b98ff37cf0ede3dcc7793ef8f671eee33c1f7cfb38f7719e0fbe7d9cfb38cf07df3ece7d9c33f97edc81ef04f890a9c0984f425e188a61b97b3c63b366449e92f8784ab1eee8eb0982ba3f61e129705477f4f52441dd8521d7181fcf01c67b7280d1eb98ee83d81446c5f394239e2733e0790a789e76c4f354063c4f03cf33f1f3a462eae90c7884a11896bb2707181fcf0146afa3d79189d1eb983f3a7a46cfe8193de3a160cc8536dc33e6443c96359551f1cc889f27a5d93319f0cc00cd64b95bdd3296359551f1cc8c9f27a5d98c0c78668266332c9a39602c6b2aa3e299153f4f4ab39919f0cc02cd665a3473c058d65446c5333b7e9e9466b332e0990d9acdb268e680b1aca98c8a674efc3c29cd6667c03307349b6dd1cc016359531915cfdcf879529acdc980672e6836c7a29903c6b2a6322a9e79f1f3a4349b9b01cf3cd06cae4533078c654d65543cf3e3e74969362f039ef9a0d93c8b660e18cb9acaa87816c4cf93d26c7e063c0b40b3f916cd5819efc901c6c77380d1b18e654d65543c0b1df12cc8806721f03ceb886761063ccf02cf73f1f3a462ead90c7884a11896bb2707181fcf0146afa3d79189d1eb983f3a7a46cfe81933637c220718fdb6f68cac8c0eaeaf1a7c87e6d966ee3bea1d9ae6ee3bea1d9ae6eedbc7b98ff37cf0ede3dcc7793ef8f671eee33c1f7cfb38f7719e0fbe7d9cfb38cf07df3ece7d9ce7836f1fe73ecef3c1b78f731fe7f9e0dbc7b98ff37cf0ede3dcc7793ef8f671eee33c1f7cfb38f7719e0fbe7d9cfb38cf07df3ece7d9ce7836f1fe73ecef3c1b78f731fe7f9e0dbc7b98ff37cf0ede3dcc7793ef8f671eee33c1f7cfb38f7719e0fbe7d9cfb38cf07df3ece7d9ce7836f1fe73ece997c3f1fbfefb24cbf31f33cf0b8f8e68da37a96aaf5bea0d7f5758cfa29ad5e34b47ad6d0aa18cabc00fabde840bf02f02beb9679f197297327026647becb54fb7238d45f7c3c6ee8a1fcbfe4a8ee516dfd4bcddc77545bdfdc7d47b5f5cdddb78f731fe7f9e0dbc7b98ff37cf0ede3dcc7398b6fccb70aeacedbe5fba76a1d2feb7ca19e97f24f805dca4c3e2cfddb3ef0fb900bdf7e1ff2c78a7cf0ede3dcc7793ef8f671eee33c1f7cfb38f7719e0fbe7d9cfb38cf07df3ece7d9ce7836f1fe73ecef3c1b78f73be382f86ff5766812730788206781690f14c25e3994dc6339a8c672819cf75643c1793f13c44c6534ec633818c672419cf2d643c5791f15c48c6d38f8c671a194f6f329e39643c7793f13c4dc6338c8ce706329e4bc9781e21e32923e39944c6338a8ce736329e6bc87892643cf793f1f424e339978c671c19cf5c329e73c8788693f13c43c67313194f31194f3b329ecbc9789e24e3b9808ca7828ce751329ef9643c53c878ee22e3b99d8ca7948ce75a329e2e643c1791f13c48c6d39d8c671e194f2d19cf0c329e2a329e41643ce791f15c49c6d3928ca72f19cf42329e7bc978fa90f18c21e3e94cc6730719cff5643c9790f13c4cc6d38d8c672219cf4c329e6a329ec1643c5793f1f427e3b98f8ca71719cf58329e4e643c7792f1dc48c6938def9966c27304194f1119cf65643c8f91f14c27e3e94ac633998c6716194f0d19cf10329e81643c03c8781e20e3e941c6339e8c670419cfcd643c4f91f1b427e3e940c67305194f01014f2238700c9304fcff79b0b53096559f7d9dd3b1eeffaf687b0b58e6559d6f6959f72b60936fc9be6a5916757a05ea92d4f9d26f36a574425f4998177f45c0f12a09cf15643c1dc878da93f13c45c6733319cf08329ef1643c3dc8781e20e31940c633908c6708194f0d19cf2c329ec9643c5dc978a693f13c46c67319194f1119cf11643ccf93f1dc48c67327194f27329eb1643cbdc878ee23e3e94fc6733519cf60329e6a329e99643c13c978ba91f13c4cc6730919cff5643c7790f17426e31943c6d3878ce75e329e85643c7dc9785a92f15c49c6731e19cf20329e2a329e19643cb5643cf3c878ba93f13c48c67311194f17329e6bc9784ac9786e27e3b98b8c670a19cf7c329e47c9782ac8782e20e379928ce772329e76643cc5643c3791f13c43c6339c8ce71c329eb9643ce3c878ce25e3e949c6733f194f928ce71a329edbc8784691f14c22e32923e379848ce752329e1bc8788691f13c4dc6733719cf1c329ede643cd3c878fa91f15c48c6731519cf2d643c23c9782690f19493f13c44c6733119cf75643c43c9784693f1cc26e3994ac6b3808ca7d2c2f3bc231e79df5dd62df3cf93f876b01d4ad57a5f7354a7d7f5ba5ae9f50abff82b8432d3dba67fd5fbe1b8ac7099df27c077735e078d5e775417d91e05c6f641df2f3bf22def68c9ba65fee566eebb9de1bb5d9ef8ee60f8ee9027be7d9cfb38cf07df3ece7d9ce7836f1fe73ece997c3bb83628c3efa4c95460cc27218fd70b2ebe2fe7a89ef5ae13bf8e513fa5d51b8656e6b5553194790df47bc3817eb66b4f99177f9932772260c6b82809e28d8b37e3af53996ab70e075ddf34f4c57a2d72a469d431645133f71d750c69eebea38e21cdddb78f731fe7f9e0dbc7b98ff37cf0ede3dcc73993efb7743ec6ebc652f4a19e2fcaf5c05be07789ce17c4e857ad6bb15e57a15eb7702c01bb94f9dff05cd3eff37e9f8fcbb73fb6f938cf07df3ece7d9ce7836f1fe73ecef3c1b78f731fe7f9e0dbc7b98ff37cf0cd1ce7665efa8b9f036caefaf347c56236de253894bea362b1b9fb8e8ac5e6eedbc7b98f7326df4b1df84e800f991aeae3b71478163be07154cfd4b38d65469d9e37ea540c65f018bfcc413d0bc0afac5be697018f4c95c0e3220e1ab3cd91670119cf54329ed9643ca3c9788692f15c47c6733119cf43643ce5643c13c8784692f1dc42c6731519cf85643cfdc878a691f1f426e39943c6733719cfd3643cc3c8786e20e3b9948ce711329e32329e49643ca3c8786e23e3b9868c2749c6733f194f4f329e73c978c691f1cc25e3194ec6f30c19cf4d643cc5643cedc8782e27e379928ce702329e0a329e47c978e693f14c21e3b98b8ce776329e52329e45643cd792f17421e3b9888ce741329eee643cf3c8786ac9786690f15491f10c22e3398f8ce74a329e96643c7dc9781692f1dc4bc6d3878c670c194f67329e3bc878ae27e3b9848ce761329e6e643c13c9786692f15493f10c26e379838ce76a329efe643cf791f1f422e3194bc6d3898ce74e329e1bc9788e20e32922e3b98c8ce731329ee9643c5dc9782693f1cc22e3a921e31942c633908c670019cf03643c3dc878c693f18c20e3b9998ce729329ef6643c1dc878ae20e32920e0490407befb9f80ffbf01367947fd79b0bdadf38bc1d6c2e2a3a5ce2f035ba1cecb3a0e0bd34b1d0f5c37eae4eabd7cf4958479f157041c6f93f05c41c6d3818ca73d19cf53643c3793f18c20e3194fc6d3838ce701329e01643c03c9788690f1d490f1cc22e3994cc6d3958c673a19cf63643c9791f11491f11c41c6732319cf9d643c9dc878c692f1f422e3b98f8ca73f19cfd5643c6f90f10c26e3a926e39949c633918ca71b19cfc3643c9790f15c4fc67307194f67329e31643c7dc878ee25e35948c6d3978ca72519cf95643ce791f10c22e3a922e39941c6534bc6338f8ca73b19cf83643c1791f17421e3b9968c6711194f2919cfed643c7791f14c21e3994fc6f328194f0519cf05643c4f92f15c4ec6d38e8ca7988ce726329e67c8788693f1cc25e31947c6732e194f4f329efbc97892643cd790f1dc46c6338a8c6712194f1919cf23643c9792f1dc40c6338c8ce769329ebbc978e690f1f426e39946c6d38f8ce742329eabc8786e21e31949c633818ca79c8ce721329e8bc978ae23e3194ac6339a8c673619cf54329e05643c95d9e12953efb64b5feb00b8704a427e19f02c72a08fa37a96e2770dbe8e71bd4aab770cadde30b42a86324b41bf771ce857007e65dd322ffe729159f13ca6f3b6ef403c46c228b6456e7952fbed6341fda9a1fdf61de071d1ae39aa676aff5a6ed4e9318bee52066375b9837adaf61d995f0edb21d79815cf933a2fac0928f72409a3d896b9e549ed5f4f06f5a786f6afe5c0e3a2fd7154cfd4feb5c2a8d39316dda50cc6ea0a07f5b4ed3b32bf02b643ae312b9ea7745e581350ee291246b1bde396a73c017596a9a1fd6b05f0b8687f1cd533b57fad34eaf49445772983b1bad2413d6dfb8eccaf84ede0993db38d59f1c8b31d614d40b9a74918c5b6dc294f796902ea2c5343edd84ae071d1ce3bd23dd58ead32eaf4b445772983b1baca413d6dfb8eccafb2f82e09e2d5627523b4586de1599d652dc45fa6cc4b7390d9ebec758e62f63a7b9da398bdce5ee72866afb3d7398ad9ebec758e62f63a7b9da398bdce5ee72866afb3d7398ad9ebec758e62f63a7b9da398bdce5ee72866afb3d7398ad9ebec758e62f63a7b9da398bdce5ee72866afb3d7594d5e67afb3d7d9eb1c07b3d7d9eb1cc5ec75f63a473133e8ac78e4db95c29a8072cf90308a6d855b9ed47b41cf04f5a702633e09f9d5c0b3d2813e8eea99ea43bec6a8d33316dda50cee5f6b1cd4d3b6efc8fc1ad80e9930afca4166af73d39815cf0c9d17d604949b41c228b6956e7952edd88ca0fed4503bb606785cb4f38eea996ac7d61a759a61d15dcae0feb5d6413d6dfb8eccaf85ede0993db38d59f1ccd479614d40b999248c625bed94a72cf57ee3cca0fed4503bb616785cb4f38e744fb563eb8c3acdb4e82e653056d739a8a76ddf91f975b01d32615e9583cc5e67af7314b3d7d9eb1cc5ec75f63a47317b9dbdce51cc5e67af7314b3d7d9eb1cc5ec75f63a47317b9dbdce51cc5e67af7314b3d7397f74563cb3745e5813506e1609a3d8d638e5e9967aee302ba83f35f4dc611df0b8782ee348f7d47387f5469d6659749732b87fad77504fdbbe23f3eb613b3477e65539c8ec63233bcc3e363c7314b38f0dcf1cc5ec63c3334731fbd8f0cc51cc3e363c7314b38f0dcf1cc5ec63c3334731fbd8f0cc51cc3e363c7314b38f0dcf1cc5ec63c3334731fbd8f0cc51cc3e363c7314b38f0dcf1cc5cc101b8a67b6ce0b6b02cacd266114db5ab73ca9ef1ecc0eea4f0df5db590f3ceb1ce8e3a89ea97e3b1b8c3acdb6e82e6570ffdae0a09eb67d47e637c076f0cc9ed9c6ac78e6e8bcb026a0dc1c1246b1ad73cb936ac7e604f5a786dab10dc0e3a29d7754cf543bb6d1a8d31c8bee52066375a3837adaf61d99df08dbc1337b661bb3e299abf3c29a8072734918c5b6de2d4faa1d9b1bd49f1a6ac736028f8b76de513d53edd826a34e732dba4b198cd54d0eea69db77647e136c07cfec996dcc8a679ece0b6b02cacd236114db06b73c6509a8b34c0db5639b80c7453befa89ea9766cb351a77916dda50cc6ea6607f5b4ed3b32bf19b643ae312b9ef93a2fac0928379f84516c1bddf2a4f6aff941fda9a1fd6b33f0b8687f1cd533b57fbd6bd469be45772983b1faae837adaf61d997f17b643ae312b9e053a2fac0928b78084516c9bdcf2a4f6af0541fda9a1fdeb5de071d1fe38aa676affda62d4698145772983b1bac5413d6dfb8ecc6f81ed906bcc8a67a1ce0b6b02ca2d2461141b1e2f163ae22932788a2c5a1c2adf4a8b0a9d3f42ff26e0ff15c0e8aa3d5c6830ca3cc6b8d88ab2a0593b83a79da1d9a1f4adb4a884bc9a707b550223c3f66a9705cd3a183c1d0ccd0ea56fa5455f9d6faf7f717bf5054686edd501781cb4cfe50983474d0d9d6f6c71ac8fa37aa6ce37b60676ddf1382465f0d8bdd5413d6de71232bf15b68367f6cc3666c53348e7853501e50691308a0daf53b6c5cf539e3078d4d4503bb6cdb13e8eea996ac7de0becba6f03dda50cc6ea7b0eea59007e65dd32ff1e6c874c9857e520b3d7b969cc8a67b0ce0b6b02ca0d266114db56e0d91e3f4f79c2e0515343edd876c7fa38aa67aa1ddb11d875df0eba4b19dcbf7638a86701f89575cbfc0ed80e9930afca4166af73d39815cf109d17d604941b42c228b6f7806767ec3ce9f18090474d0db5633b1debe3a69ee976ecfdc0aefb4ed05dcae0fef5be837a16805f59b7ccbf0fdbc1337b66cfec993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993d3337b3e219aaf3c29a8072434918c5b6037876c5ce937eee803c6a6ae8b9c32ec7fab8a967fab9c3eec0aefb2ed05dca60acee7650cf02f02beb96f9ddb01d3cb367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367f6cc9ed93373332b9e613a2fac0928378c84516cef03cf07f1f394270c1e3535f4dce103c7fa38aa67eab9c39ec0aefb07a0bb94c158dde3a09e05e057d62df37b603becf1cc9ed9c2ac7886ebbcb026a0dc701246b1ed069ebdb1f3a49f9f228f9a1a6ac7f63ad6c74d3dd3edd8bec0aefb5ed05dca60acee7350cf02f02beb96f97db01d32615e9583cc5e67af7314b3d7d9eb1cc5ec75f63a47317b9dbdce51cc5e67af7314b3d7d9eb1cc5ec75f63a47317b9dbdce51cc5e67af7314b3d7397f74563c553a2fac09285745c228b63dc0f361ec3cdd4a13068f9a0a8cf924e43f74ac8f9b7aa69f3bec0fecba7f08ba4b19dcbff63ba86701f89575cbfc7ed80ecd9d79550e32fbd8c80eb38f0dcf1cc5ec63c3334731fbd8f0cc51cc3e363c7314b38f0dcf1cc5ec63c3334731fbd8f0cc51cc3e363c7314b38f0dcf1cc5ec63c3334731fbd8f0cc51cc3e363c7314b38f0dcf1cc5ec63c333473133c486e2a9d679614d40b96a1246b1ed039e8fe2e7294f183c6a2a30e69390ffc8b13e8eea99eab7f37160d7fd23d05dcae0fef5b1837a16805f59b7cc7f0cdbc1337b661bb3e2a9d179614d40b91a1246b1ed079e4fe2e7294b183c6a6aa81dfbc4b13e8eea996ac73e0decba7f02ba4b198cd54f1dd4b300fccaba65fe53d80eb9c6ac7846ebbcb026a0dc681246b17d0c3c0ee22ec55364f0c8fc2704be9516b53a7f84fec5ed550b8c0cdbab280b9ab53378da199a1d4adf4a8b099057136eaf09c0c8b0bdda6541b30e064f0743b343e95b693151e7dbeb5fdc5e138191617b75c8826687b23d3c94fbf6a18c53aff9a1d3bce0106a5e7008352ff09a5369eee0f85286c7b20018704a42fe53e0f976fc3ca9fb729f66c0f36de0f956fc3c5d1dd5b354adf73bc01ed77a9556df35b4fad4d0aa18ca20c3771de857007e65dd322ffe3cb3678e62c6735b614d40b94f4818c5f62de071d16ea8ba5fa0d725eb6f15a6cf8eaef3ebe27909de2b6ea5d72b1ce2af10ca4c2ca92bfb3bcd5604ff97eda6eab3dfb0397a87b9abedb99dcc8bbfa2206bf76e1bbc978c5ab878de94e9717fbf85e7ebf8784a713f475ffb1cd53d93677ffb2c3c31d6bd6bd473cfbdf1d73dd57e74d1eb92f5ab7df4df8f76aa7939ee7bd27e7431ea5c08650696d495fd0f683f6c6d85eb7d53cec9cd7db34550d79e095789b69bcf84bed67629f71194c736a742ffe2fe59017575d52e46dd63c276d16cbb5d6a6f3e97347d17832e1f916a667b4e813a565ab82b09b8311eb3b99fc9ba6dcfc82a0d1dd934c36dfd9145c7be16eebe04dc8cfb755f434736cd0eb65f0fb2700f22e066dcaf07193ab26976b0fd7ab0857b300137e37e3dd8d0914db383edd7432cdc4308b819f7eb21868e6c9a1d6cbf1e6ae11e4ac0cdb85f0f357464d3ec60fbf5300bf730026ec6fd7a98a1239b6607dbaf875bb887137033eed7c383fa3ab26976b0fdbacac25d45c0cdb85f57193ab26976b0fdbadac25d4dc0cdb85f571b3ab26976b0fdbac6c25d43c0cdb85fd7183ab26976b0fd7ab4857b340137e37eddd87efbacfb75ad85bb96809b71bfae357464d3ec60fbf5040bf704026ec6fd7a82a1239b6607dbaf275ab827127033eed7130d1dd934b3edd78ede25ccf8ddc68f9dea931e63fae30c783e041e1731e5280e4a1df57349f54ddd6b68f5b1a1158eddb10ff473d017a6c16f12883fcfec993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367f6ccfcccf85d467cbe22e53e2261141b3e9372719f5fd5fd42bd2e597fab300d3cb6ceefbed8fd96951618fe92c021fe0aa1cc89a7d595bd41b31505076e371c8b1bb7e59ed8eb90de9666fccbbcf82b82faec051e07efe7a778f6193cfb2c5ae07ba7f1f82e1be946e3b252f5fd9dc383baedbcc7a80f6afa41ecfeeb6b5a6068fa8163df89a0fef614069c9290471e17cf861dd533d516ec36ea646a5c0c653a413d773ba86701f89575cbfc6ee091a905f0b88ac1c0e0092cfac85449c633958c673419cf99643c43c9788e27e3b98e8ce770329e8bc9781e22e32927e39940c633928ce734329e5bc8788e22e3b98a8ce742329e42329e7e643cd3c8787a93f1dc4dc6733619cf30329ef3c9784e24e3b9818c2741c6732919cf23643c65643c93c8784691f17424e3b98d8ce718329e6bc8785a93f124c978ee27e3e949c6732e19cf38329e73c8788693f19c4cc67313194f31194f3b329ecbc9781e25e3a920e3b9808c670a19cf5d643c6790f1dc4ec6534ac6731c19cfb5643c5dc8782e22e36943c6f320194f77329e5a329e2a329e53c9780691f19c47c6732419cf95643c2dc978fa92f1dc4bc6d3878c670c194f67329eb3c878ee20e339818ce77a329eb6643c9790f1ec25e379988ca71b19cf44329e6a329efd643c25643c83c9788e26e3b99a8ca715194f7f329efbc8787a91f18c25e3e944c6732719cf49643c3792f11c41c65344c6731919cf74329eae643c93c9786ac8784e27e31942c6732c19cf40329ec3c8780690f13c40c6d3838c673c19cf08329e53c8786e26e3694fc6d3818ce70a329e02029e4470e0b79812f0ff7d60936f067d08b61696f5c9736a29af8e8b8b3b1eb8ee1696757f6061409d76415d923a5ffacda6944ee82b09f3e2af08383e20e1b9828ca703194f7b329e9bc9784e21e31941c6339e8ca70719cf03643c03c8780e23e31948c6732c19cf10329ed3c9786ac8782693f17425e3994ec67319194f1119cf11643c3792f19c44c67327194f27329eb1643cbdc878ee23e3e94fc6d38a8ce76a329ea3c9780693f19490f1ec27e3a926e39948c6d38d8ce761329ebd643c9790f1b425e3b99e8ce704329e3bc878ce22e3e94cc633868ca70f19cfbd643c7dc9785a92f15c49c6732419cf79643c83c8784e25e3a922e3a925e3e94ec6f320194f1b329e8bc878ba90f15c4bc6731c194f2919cfed643c6790f1dc45c633858ce702329e0a329e47c9782e27e36947c6534cc6731319cfc9643cc3c978ce21e31947c6732e194f4f329efbc97892643cadc978ae21e339868ce736329e8e643ca3c8782691f19491f13c42c67329194f828ce706329e13c978ce27e31946c6733619cfdd643cbdc978a691f1f423e32924e3b9908ce72a329ea3c8786e21e3398d8c672419cf04329e72329e87c8782e26e3399c8ce73a329ee3c9788692f19c49c6339a8c672a194f25194f0b8307ffafde0ddbabf3f2eda042f8ff24ddb9bcbd5e97949167c4ea5ec5fb864dd577a7a3fabe1fd44d4998df09f515f6f781e77d473cbb0c1ed37711e42b41b31d864d316e77c4b8c36094f9edc028faed009e1d8e78761a3ca6ef22c8f705cdde336c8a719b23c6f70c4699df068ca2df7bc0f39e239eed068fe9bb08f28340b3ad864d316e71c4b8d56094f92dc028fa6d059ead8e78b6193ca6ef22c80f06cdde356c8a71b323c6770d4699df0c8ca2dfbbc0f3ae239e2d068fe9bb08f24340b34d864d316e74c4b8c96094f98dc028fa6d029e4d8e78361b3ca6ef22c80f05cd361836c5b8de11e3068351e6d703a3e8b701783638e2d968f098be8b203f0c345b67d814e35a478ceb0c46995f0b8ca2df3ae059e78867bdc163fa2e82fc70d06c8d61538cab1d31ae3118657e35308a7e6b80678d239eb5068fe9bb08f255a0d92ac3a618573a625c6530cafc4a6014fd5601cf2a473cab0d1ed37711e4ab41b315864d312e77c4b8c26094f9e5c028faad009e158e78561a3ca6ef22c8d78066ef1836c5f8b623c6770c46997f1b1845bf7780e71d473ccb0d1ed37711e4478366cb0c9b625cea887199c128f34b8151f45b063ccb1cf1bc6df098be8b205f0b9a2d316c8a71b123c62506a3cc2f0646d16f09f02c71c4b3d4e0317d17417e0268f69661538c8b1c31be6530cafc226014fdde029eb71cf12c36784cdf45909f089abd69d814e31b8e18df341865fe0d6014fdde049e371df12c32784cdf4590bf096cc2db076cafeb7c6fb0bda6f3bdc0f6aacef704db2b3adf036c2feb7c77b0bda4f3e5607b51e7bb81ed059d2f03dbf33adf156ccfe97c3fb03dabf3fdc1b650e793605ba0f303c0365fe72f02db3c9dbf186c7375fe12b0cdd1f94bc1365be72f03db2c9dbf1c6c3375fe0ab0cdd0f92bc1f68cce5f05b6a775fe6ab03da5f3d780ed499d1f08b62774fe5ab03daef3d781ed319dbf1e6cf7e8fc0d60bb55e76f04dbc73a7f33d83ed1f95bc0f6a9cedf06b66fe9fced60fbb6cedf01b6efe8fc9d60fbaece8f00dbf7747e24d8beaff3a3c0f6039dbf0b6c3fd4f93160fb91cedf0db61febfc58b0fd44e7c781eda73a3f1e6c3fd3f94960fbb9ce4f06db2f747e0ad87ea9f353c1f62b9dbf176c9fe9fc34b0fd5ae7ef03db6f74fe7eb0fd56e71f00dbef74fe41b0fd5ee71f02dbe73aff30d8bed0f947c0f6079d9f0eb62f75fe51b0fd51e7a55d53edec9f74be2488b79dfd2aa89b4ac0b7f85365feacf3ad8d32b26c2194395b772854cf38d4bb4bd20e4bbbac6cd20ebf0e3669875f039bb4c3af824ddae157c026edf0cb609376f825b0493bfc22d8a41d7e016cd20e3f0f3669879f039bb4c3cf822da9f30bc126edf002b0493b3c1f6cd20ecf039bb4c373c126edf01cb0493b3c1b6cd20ecf029bb4c333c126edf00cb0493bfc0cd8a41d7e1a6cd20e3f053669879f049bb4c34f804ddae1c7c126edf063609376f81eb0493b7c2bd8647ff90a6cd2367f0c36699b3f019bb4cd9f824ddae66f814ddae66f834ddae6ef804ddae6ef824ddae6ef814ddae6ef834ddae61f804ddae61f824ddae61f814ddae61f834ddae69f806dbcceff146cd236ff0c6cd236ff1c6cd236ff026cd236ff126cd236ff0a6cd2367f0636699b7f0d36699b7f0336699b7f0b36699b7f0736699b7f0f36699b3f079bb4cd5f804ddae63f80ed519d97b6ba0dd8e459b19a4abfe184e3f0b4005fc2920ce26dfb714a421eeb2e532519cf1c329ed1643c2f93f19c49c633948ce778329ec3c978de24e39940c6b3908c671919cf52329e37c8784e23e3d940c6b39e8ce728329ef7c9787692f15c48c65348c6338b8ce745329eb3c9788691f19c4fc67322194f828c673e19cf12329ec5643caf91f17424e35947c6b3968ce718329e1d643cdbc9785a93f17c45c633838ce75c329ee7c978ce21e3194ec67332194f31194f3b329e0a329e0bc878e692f1bc45c6b3888ce715329e33c878d690f1ac26e32925e3398e8ce73d329e6d643c5dc878da90f13c4dc6534bc6f32c194f1519cfa9643c83c878ce23e339928ca725194f5f329e5bc9786693f1bc44c6d3998ce72c329e55643c2bc978be24e339818c672b19cf16329eb6643c7bc9782692f12c20e3a926e3799d8c673f194f0919cf60329ea3c9785a91f17c4cc633938ce705329e15643ccbc9784e22e379978c673319cf11643c45643cf3c8786ac8785e25e3399d8c670819cfb1643c8791f13c43c6f31c19cf3b643c6f93f19c42c6b3898c6723194f7b329e0e643cbbc9787691f11410f0248023009bfcbf25d8e43b3cfbc1f685ceef059b7cc3e74db07daef38f82ed618bad85854f18a6834dde95fd026c727fe611b0c93b139f834dce1bc4bf9a5fd9f140fe16b08cf86969e1477f9f5bb8248fdb5b964906f16e6ff4950cecdfbc2b30180f35cf2e329edd643c1dc878da93f16c24e3d944c6730a19cfdb643cef90f13c47c6f30c19cf61643cc792f10c21e3399d8ce755329e1a329e79643c45643c4790f16c26e379978ce724329ee5643c2bc8785e20e39949c6f331194f2b329ea3c9780693f19490f1ec27e3799d8ca79a8c670119cf44329ebd643c6dc978b690f16c25e339818ce74b329e95643cabc878ce22e3e94cc6f31219cf6c329e5bc978fa92f1b424e339928ce73c329e41643ca792f15491f13c4bc6534bc6f334194f1b329e2e643cdbc878de23e3398e8ca7948c673519cf1a329e33c8785e21e35944c6f31619cf5c329e0bc8782ac878da91f11493f19c4cc6339c8ce71c329ee7c978ce25e39941c6f315194f6b329eed643c3bc8788e21e3594bc6b38e8ca72319cf6b643c8bc9789690f1cc27e34990f19c48c6733e19cf30329eb3c9785e24e39945c65348c6732119cf4e329ef7c9788e22e3594fc6b3818ce734329e37c8789692f12c23e35948c633818ce74d329ec3c9788e27e3194ac6732619cfcb643ca3c978e690f15492f1b4b0f0ec77c423df8a9175cbfcfe66ee7ba7e17b679ef8de6ef8de9e27beb719beb7e589ef2d86ef2d79e27bb3e17b739ef8de68f8de9827bed71bbed7e789efb586efb579e27bb5e17b759ef85e69f85e9927be971bbe97e789efb70ddf6fe789efa586efa579e27bb1e17b719ef85e64f85e9427be99afbf553f5ce9abbc5bff26e0ff15c0f8a623c6fd06a3ccbf098c62c3ef515738e289ba76af20f0adb4907b59f2cc3301ffaf04465731556130cabc2da676024fa5239ea87b0e9504be9516f22eb6f4a94cc0ff71fc655731556930cabc2da6b6034f5f473c51f74afa12f8565ac8bbcff2ce5f02fe8fe3adbb8aa9be06a3ccdb626a1bf00c72c413758f6710816fa5857c2b4cbe499380ffe3f88cae626a90c128f3b698c2f173073be289ba373598c0b7d242beb52bdfbc4cc0ff71fc26573135d86094795b4ce1f871431cf144dd531b42e05b6921cf82e51bed09f8ff5060741553430c4699b7c5148e7733d4114fd4bdc0a104be9516c3745efa5825e0ffc380d1554c0d351865de1653eb816798239ea87b98c3087c2b2d86ebbcbcc39180ff0f0746573135cc6094795b4cad059ee18e78a2eebd0e27f0adb4a8d27979a73f01ffaf0246573135dc6094795b4cad069e2a473c51f78cab087c2b2daa755ebe399780ffe3f8efc31d3156198c323f1c18c5b61278aa1df144ddebae26f0adb4906ffbafd0bf09f83f8ec7ea2aa6aa0d4699b7c5148e075de38827ea1e7d0d816fa5c5689d97316112f0ffd1c0e82aa66a0c4699b7c5148e5f39da114fd4b385d104be9516f26dae65fa3701ffaf0546573135da6094795b4c2d059e5a473c8b0d9ec5162d0e956fa585f4e55ea27f13f0ff09c0e82aa66a0d4699b7c5d462e099e08827ea59ce0402df4a0bf9b6f65bfa3701ff9f088cae626a82c128f3b6985a043c131df1443d839a9805df51cf53b2e13bead940367c47dde7ce86efa87bb6d9f01d75ff311bbea3eea565c377d47da16cf88ebac7910ddf51d7ebd9f01d75ed990ddf51d751d9f01d754d900ddf51e7b7d9f01d75ae960ddf51e71dbe3df7ed79dcbe0fe5b943beb6e787f2187a288f25fedac05f1b64cbb73f96f86b836cf9ced76b03df9e67bf3d97ebaf8220fa7aec6d47be971abe651e9fb32c75e47bb1e15be6f199c16247be1719be651eef7f2f72e4bbc8f02df38bb2e0bb9de1bb5d167d77307c77b0f876b0bdcb1241fdeb6f61c02909798c81b71c68e1a89ea56abd4bf4babe8e71bdb6fb36e6fe520c6596807eaedb0e59b7d976e42233c6459bf87c9726c0877c974cd9e4f9f1eb609376ff35b049bf8057c126c7a657c026cfa45e069b3cb37a096ca375fe63b0c9b363ecb32fcfffb781ad4ae7b1aff8709ddf0236e94b857d94a53fdc66b0499f46ec1b2bfd5237824dfa16639f4ce91fbe1e6cd2c71ffb02ca7b1a6bc126efda601f34795f6a35d8f6ea3cf67d92efd0ac04db749d5f01b63fe8fc72b03da4f3b782edf73aff15d87ea7f38bc0f6a0cebf05b6dfeafc12b03da0f32f82ed373aff02d8eed7f9e7c1769fcee3bb6cbfd6f95d60fb4ce7f11daa693abf136cbfd2797c77e75e9ddf0eb65feafc73609baaf3cf826d8ace2f04db2f747e01d87eaef3f3c13659e7e781ed673a3f176c93747e0ed87eaaf3b3c1365ee76781ed273a3f136ce3747e06d8c6eafc3360fbb1ce3f0db61fe9fc9760bb5be71783ad85ce2f059b8c1989fd540a75fe6db0b5d279ec7f24dff79f08b6c3747e02d8dae87c2dd8e4db70a3c126e341d7802da1f3d5603b42e7abc026e767c3c126e39f0c039b9c4b0d055b7b9d1f023639ef190c3619cf7210d8e41ba47dc176b4ce57824dbead5f01b663757e3fd864ccb137c126dfaddb0b36198bf911b0c9f7aaa783ed249dff03d8641c9687c0768aceff1e6ca7eafcefc026dff07c106c253aff5bb075d4f907c076baceff066c3246d6fd603b53e7ef039b8c1dfc6bb0c9f79e3f035b279d9f06b67374fe576093b144ee059b8c0ffa4bb075d6f9a96093ef704f01db053aff0bb0c9787f3f079b7c637832d8645cb79f81adabce4f025b99ceff146cdd747e3cd8ca75fe2760ebaef3e3c0d643e7c782ada7ceff186cbd74fe4760ebadf3d2cea8fd59ede7fbf47c3288efbc4cf9fb30a83f35746d200cc813e7b97631f0a0af3db1d7bd2c755e2ffb7d0bbd5e89a13de07b77ecbed3d7141fe87515eaf5ee367c1742997374e3a09693637e4bbddc5e6339bc8f25eb96652e04fb2e63dded757d3f7054dfdd069370a30e52e67ccda48e8d3fd0f936b04c8c6ca9eb6389b50034c42909796170a35559299ef73686e703e0d9133b4ffa7add454ce0be15f7f5ba791fd78cb56228b31bf4dbe5403fdcd765dd322ffe3cb367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367f6cc9ed933f3332b9e7d3a8fcf95a5dc3e1246b1ed011e17f7f9f139acac5f3dd7d9755a9ddf3db1fbadff7caf955e6fa951e74228f3353c73daabf345f07fd96e51dbd2c173c206b7a5f82b82fae0b3a07d8e78f6183c7b2c5a48be2436df6523dd685c56aafaada867ec7b0d5df7593475b5bfeed1eb2a3034c5fdf54383079f8d1601ef47fa3701ebf908eae0601f6f302ec41fee4b7bc026f90f81d1c576c66389b407f23c1c9f4d4b995f19cfc5e3dff665a52edb8df7a14ec9e0c0f82e8432bf83b6ef739dc7be21fb40b77f58fe2f5343cfa9453f55e71df1d739b57db7036712fca0eff7803526dff5dea129d049fc88bd10f27f87fe1c524ef410ad851dc72b477673b90f8de58aa1cc4e4bfd9341bcf5df61f0ec3098d536f912e2ec1f70fc77d526ed8cd0e842d048caec018df63ae2d963f00887f8536564fbb736cac8b28550e67f411ba5ea22edbcd413fbb6e031c0d5714c7cc9ba65de766efc01309a7554f131f0d83ade3db1f3e656ffafc34ad2bfd8aec7d5ff4bd6dd5e2f2b1c81b1fe5258bf70b50ea28f2dffb37d4bead6efb27fd95ea3cec2823a4b997625e95f156797e97c26e7fa87eaba2dea5c7fa7039e4450ffda5b4d0d1ddff118f3be031e47f52cb51dbb7619752a86329da09e0ece631a7c177807f876b1cd510b3987da6d685108653a96a47fa5ed88d211af553fc84a5dcaace783a596ba48994e2575756903f638995c6eb7f7a04e6abd7b2c759532e797d4e9d245e713b09df0be495fcbff656aa83dc0b178b6c65fe7d4f6dd029c49f083bedf05d6987cd7fb16889cef8b1fb11742beb2a4aeac94133d446b6157fb88bcf387ece672bb8de58aa1cc364bfd9341bcf5df6af06c3598d536e95a5297973872d96e6e8bd0a81434923278ff588eedf8de9dedb8bfc71177d4717f0f309aed269ebbb864db6bb099f7506de7835206cfc9a4ccd525e95fd5ce262c65cd7bc32eee63e23ba801d42330ea2a13c680836bc372bc7692764afc7401fb1e9d179dbb18da1542994125e95f87e7ddd67b97e6f51d5e5308b7b96fe1bb1f434aeab871ecc43dfab7086c9fe85f47d769e5b67b86c261bb6738bca48e1d9715ae8f2d7531af915b0407de53ffda288bf7dd1a5acecc9be3502a7d3f31cad9fce0354f6cef6a742d2d45a61681fd7ec187067b4170e0989bb21f60cc99f751ba18ebc1fb28b525e95f6993ccb26adbfffbd175fac87614edb03dc198fc1018933a5ffacda6aeb6facbbcf8538c1f197570d376a5df57cae43ef05ee071d1b63b6aa34bf1181bdff7297a57d98eff1f1a5a65f179adf5986f3e736f63e4e3f15d566dbbff64d362b785c7d57394282d765b7cc7a7458f91b6e3874d8b5d169e5d59d66297c5778c5ad4e07dcf86b478dfc2e3e25e54435abc6ff11d9f163d4b1b7aae815aecb4f0b8baf710a585f8cb94791701731b231f8feff22adb7d329b163b2c3caeae9ba3b4d861f11d9f165d7be03dba86b4d86ee189fffe5cc35a6cb7f88e4f8b5ebdf11e5e435abc67e171f54c374a8bf72cbe638c8b51b67b39362db65978b665598b6d16df319e1ff6b0dd6bb369b1d5c2e3e0be6b835a6cb5f88e518b1178dfb5212db65878b664598b2d16dff16951d5dd764fd8a6c5bb161e57f784a3b478d7e23b3e2d46f452be3737428bcd169ecd59d662b3c5778cd750a9b8d8d4082d3659783665598b4d16dff169519d3ad7dad8082d365a783666598b8d16dff169519a3aa66e6884161b2c3c1bb2acc5068bef18e322753db9be115aacb7f0accfb216eb2dbe633c8ea4e2625d23b45867e15997652dd6597cc7a7454deafed3da4668b1d6c2b336cb5aacb5f88ef19e4b2a2ed634428b35169e3559d6628dc5777c5a744b1d535737428bd5169ed559d662b5c5777c5a8c4a3d135bd5082d5659785665598b5516df319e77a6da8b958dd062a585676596b55869f11de37967eafec58a4668b1c2c2b322cb5aacb0f88eb1ed4c9d772e6f8416cb2d3ccbb3acc5728bef18cf3b535abcd3082ddeb1f0bc93652ddeb1f88ef1bc33751c79bb115abc6de17135064a94166f5b7cc71817a9b6735923b45866e15996652d96597cc7785f2bd5762e6d84164b2d3caec66b88d262a9c5778cd723a97b7c4b1aa1c5120bcf922c6bb1c4e23bc66745a973f0c58dd062b185677196b5580cbef7c6ee3bdd9f5b7c485fac0b0c2d0aa1cca91dd3bfd2172b4a475907f62bc3babc157b5dd2fdca1645d4e52da88b943913ead22670324651b9a3baa662e64da8935aef4796ba4a99733bd6e9d259e713b04d3e06ddfa58fe2f5381319f84bce8a7eafc7afc754ec5ea6bc099043fe8fb55608dc97757f45da093f8117b21e47b77ac2b2be5440fd15ad8d53ef286ce23bbb9dc6263b96228f386a5fec920defabf6ef0bc6e30a7de7b8038933872d376a599de88d0e802d048ca609fbd8f1cf1987d088543fca932b2fd5b1b65b00fa594b908da28ec572af54c0407f69b74d49675457659b7cc8bbf62b0ed0546b38e2a3e3e83be9f3256848c23a16c322e4437584f4fc3a6eadacb515dc597ac5be67b01a38c53d133fb8c658d65ec61302a9e3e0e34c3b137646ae878d107787a3be07154cfd471a8c2a8532fa34ec55006df6dac7050cf02f02beb96f90af0ed629ba316724c3ed7d0a210ca0c37ce1fa3749475a8f8ed69a94b3fc77591754bbbd42f0bbe2b0ddfdd0ddf89a0fe760e8286f7af4a60eeeb8059adb77ffceb2dc5f3368929f1d31dea34003488ab4eb82e39cf1b60685b08f9a9709e27e5a4ac1cbf845dc5b26c4b643797eb632c570c65fa59ea9f0ce2ad7f7f83a7bfc1acb6c9dd706ee7607f48c5403f8343e6bb8376fd23b4eb07da49193cfef570a45d5f8347e67b008f9ce354804dce15843f01ffef96056eb3ddabb0708b0dc789eb6161ec1e3f63ea5ca787c128f3dd81516c7d81a7d29166e6b63ed7d0078fcbad8d32b26c21949905c7c684a5acdaef3a15d4d5aba5b6c7f6ee986ed35b3bd00bc7690c409fc0d03000bda49ead1cf0b40deac66a9c3ca576d288bb46dd382afde851d00a0d4cfc2db054a305d830dfd2620b82fa435216824d86a46c05b616862c3814a6949721ed5cc8857ac8ba0b0dce36c012a76f1cce53a68642e730e07111ca2a7464484f1d3ab74e1a336514c6472b83b329b1a3fed7b2817251eb72b51dcc7d2209f3660c163af2df12ea9b8479f1a7b68d0cad3a61c4c87b064cba6beab851e3a74c46a1cc1d1bf30541fd0d60fe4609ee6aa7c300c00a63e3d0caa8173618f23fd9306de3e72cc731734d6d02f027535bd0ed7007baa9f5cbd8b723478c1d7bfdd4aab163465e3675fcc829636ac7e3d66c632817b5a5e5ffadc1666be2b1ac9ab0d9c2650fb3d86c138e32dc066c72e43a1c6cc2d3166c2d212fe5cd2de3245c3bc1fa659752ff53e2b4d2153f2ca80b01391cab7655edbfea544e7d42569d0aa9a18dd5e6544317ab3b866a6862f5153b35f4b01a6a580d2d7c62901e3a580d157c4a901e0a587deda224480fed7b7a901ebaf7cc203d34efd9c0f76d603e27489f76a9a1753b07e9a173d5adcb2e41fa336feadd7a75faae6e0ba8535e7589a74e3fd569a7babc50b72fd4ad2c754aa74e97d5a9a03a7d539723fdb5d603c27451982e0ed32561ba344c9785e9f2305d11a62bc3745598ae0ed335611a18a66bc3745d98ae0fd30d61ba314c3785e9e6203dbcf32d417af87535fcf36d417a68e8db83f4b0d17704e921a5ef0cd2c34d8f08d243518f0cd2c3548f0ad24358df15a487b71e13a487c9bd27480fb5ab86e01d1fa487c356c364abe1b3d530bf6a486035a4b01a6a580d4bac8630564320aba1911f08d2432eab219b1f0ed2c33e4f0fd3a3617a2c4c8f87e989303d19a6a782f4f0e06ad8f019417a987135fcf8ec203d5cf9dc203dbcb91af65c0d87ae864957c3a7ab61d5d530ef6af877352cfc4b617a394caf04e94712ea518c7a44a16effabc760ea16f55b41fad6f99220fd885b3df2575d20549710d545664590ee42a5ba94a92e76aacba1ea82a9baa4aa2ebaaacbb2eac2adbab4ab2efeea9507f50a887a2546bd22a45e9952af90a957ead42b86ea3551f5daa57a8d58bd56bd2748df16df17a41f95aadbe1ead180ba65ae6edf7f1aa66f05e998fc4e98be1ba6ef85e9fb61fa41987e18a4873556c31dabe192d5d0ca6a18663564b31aca590d05ad868dfe2c480f3dad86aefe6d901e12fbf761fa3c4c5f04e9e1b5bf0cd31fc3f45598fe14a63f87e92f61fa6b98fe16a67f09d3bf86e9dfc2f4f730fd234cff0cea86d9c686e444ddfae82b9860c49429a3c64d985232a5b664dcd4b153c64c187b7fc9b431534697d4de3b6a52cdd8da69b8f0b7f5c23246f880499346dc5f32667cf5a8fb4a6aa74e29a9ad29a9aa9d3abebade41fc2f7aa1930ff438a2ba3adad97f7e13d2ffdb44a787eb7651465fbfb2e1ba1dd1b209821cd994857ab46c5a8526e923985ceade943e0f2e993cb6764a4969c9f8f06f78e0ad9d36aaba4b09fe6f7228f2e4292593a78c9834a5a46652edb892ae5d70bd8fb46d4225feabad1b98b34e6c9a389df477969a1462bf3cad090afcc7694d236d5df20d48db9634cd694949136a78765316baaa8984379744ca32796ad5944923464e895ef8b66fb2f09d4da9e6f82656f3948e4d70764653161ad0b169847736c5d9cc0c9c05ff0dcac800708c550600", + "bytecode": "0x1f8b08000000000000ffed9d779815c5b6f67b6040643b0398b3830915c56118e20c3098136614111186610405862866cc9283392341c95940401010c3c93979921e8f27dd7bcf39cffde37ef77ec1ef76ed5debce3b45f566f6d8b579f7eceae7a9d9d56baa7bfdeaedd5d5a9baab20484dff0c5381ceb70cd399c18193fcbf4aff967eb3a96b8ceb2a75c95990239c2d7284b3658e7016e60867ab1ce16c9d239c87e508679b1ce13c3c464ec5d6226838c5cddbd681ae713326724cd3237240d3a21cd3b43807346d17e4461bd53e47383be408e79139c279548e701e9d239cc7e408e7b139c2795c8e701e9f239c27e408e78939c279528e709e9c239ca7e408e7a939c2795a8e7096e40867c71ce13c3d4738cfc811ce337384f3ac1ce13c3b46cecec0d949ff9ea37fcfd5bfe7e95f297bbefebd40ff76d1752cd4f3172aae30a9873465c6ffba85a93c4cddc3d4c3f85fcf30f50a53ef30f5d1ff2bd1ffab08536598fa86a95f98fa6b0d0684e9a2305d1ca64bc27469982e0bd3e561ba224c5786e9aa305d1da66bc234304cd786e9ba305d1fa61bc27463986e0ad3cd611a14a65bc2746b980687e9b6300d31586e0fd3d030dd11a66161ba334cc3c334224cd5611a19a69a308d0a536d98ee0ad3e8308d09d3dd61ba274c63c3342e4ce3c35417a609619a18a649619a1ca629619a1aa67bc3342d4cf785e9fe303d6068f660981e0ad3c3617ac4e09c1ea647c3f458981e0fd313617a324c4f85e9e9303d13a619619a19a659619a1da639619a1ba679619a1fa605615a18a667c3f45c989e0fd30b617a314c2f85e9e530bd12a657c3f45a985e0fd31b617a53b3c88eb0284c6f8569719896846969989685e9ed30bd13a6e5615a11a695615a15a6d5615a13a6b5615a17a6f561da10a68d61da14a6cd617a374c5bc2b4354cdbc2f45e98b6876947987686e9fd30ed0ad3ee307d10a63d61da1ba67d61fa304cfbc3f451983e0ed32761fa344cdf0ad3b7c3f49d307d374cdf0bd3f70dcd7f10a61f86e94761fab1b6fd44fffe549795fb773f0bd3cf75fe17faf797faf757faf73363995f87e93786edb761fa9d61fb7d983ed7f92ff4ef1ff4ef97faf78ffaf72bfdfb27fdfb67fdfb17fdfb57fdfb37fdfb2ffaf75ff5efbfe9dfbfebdf7fe8df7f866973c754be4d503f550531b551e5b5c9673f227ea7a0e1a4b468a9ff27bf25da5ea8e7e557b46ba5e75b19f6d67abeb5b19e367abe8d61efa0e73b18f6a3f4fc5186fd183d7f8c613f4ecf1f67d8cfd4f367823d11c0bd616d57b696da54003689d716606ba56d2dc1d65a5607b6c3b4ad15d864fbb606dbe1da7618d8da6a5b1bb025b4ed70d1324c47685b551057ac948e50eb2d8a7bbdfa795971fcbc23d57adb39e26d1f3fef28b5de0e0e78557c1ca9d7d51ee2e6286deb00b6a3b5ed48b01da36d4781ed586d3b1a6cc769db31603b5edb8e05db09da761cd84ed4b6e3c17692b69d00b693b5ed44b09da26d2781ed546d3b196ca769db29602bd1b653c1a69bdce034b09dae6d25603b43db3a82ed4c6d3b1d6c6769db19603b5bdbce049bb4bf67814dce17cfd636d5761c5e00cb68bbb45bc965a4cd06dbb9d25e83ed3c69abc1d659da69b09d0fbec57601b43562eba26dd26ea9fff5d1f9aa20aefda4ac56adb722eef5866b56ebed1bff7a93cf1cfb05f55a57819f0ad0aabfcec7d8afa92bfa2ed049fc88bd10f257415929277ac8b147d8d5b1a052e7fba759ae8fb15c3194a9b4d4bf2a88b7fe7d0d9ebe06732bc8bb89d96edd7ccc367aca386607435933f6e43ca839c6ec40e07010b33d7dcc367aca38666ba1ac197b722edc1c63f676e07010b3d56e62b6acd4c76ceabe5910d8634fae879a63cc8e018ef863b6bb8fd9c64f19c7ece350d68c3db9266e8e313b0d38e28fd99ed5fedca0d153c631bb00ca9ab127f7679a63cc3e051c0e62b6d6b7b38d9e328ed937a1ac197b72afb039c6ec73c0117fccf67614b3dd7ccc06a967a041608f3db96fdd1c63763170c41fb323fdfdd9c64f19c7ec0e286bc69e3c43698e31bb5ee7d573869fe8e70c2783eda7da760af0c61fdb35dd1dc576998fed54df9020b0c7a83ccf6b8eb1fd81ceab38fe05f44710db2fb5ad23d87ea56da783ed336d3b03eae5601fa8f6fb40a3a78cf781df40593396e5d97273dc077e041c0e62b6c6c76ca3a78c63f66f50d68c3de9e7d01c63f6f7c0e120666b7dcc367aca3866ff13ca9ab1778ece37c79895bea6ea7ce10b7dbe701ed8fea06d9dc1f6a5b69d0fb63f6adb0560fb4adbba80ed4fda7621d8feac6da560fb8bb67505db5fb5ad0c6c7fd3b66e60fb176d2b07dbbf6a5b77b0fd9bb6f500dbdfb5ad27d8fea16dbdc0f64f6debad6daa9f9ef4bd92f3d636c05f15c4bb6da5dfa5ac5be6bb66c1773bc377bb2cfaee60f8ee60f15de6c077027cc85460cc5741becc2d4f6931f0a0aff2f87d755375ef1634beeee5c0d3dd41dd13e0a3313cdd81a747fc3cc9febf3de35f6f721b7733344d80af6e50af5e0eea5500be64dd322ffe8ac1866d6b2f0b63eff819cb0ac097ac5be67b03a3d8b0ad9777ae64ff51c7c34e05f5bc0ef6a5e43991f893ef96094739d8a5cc951debd93a6bb622f83f1ef77a18364771998c0bf125eb9679f15704f5e9917dc6b2c6327637185db51105e04bd6ed7dd76f07c9e371dcc1b58eb54d13df1559f0dddbf05d6ef8c6b653a674c7b6dec01cfb35a73eb655c6bfde52bc3e916b43f183e70f780d17579dd0b75c1b8a1fb11742feda82fab2524ef4907658d8552ccbb6447673b95ec672c550a6c252ffaa20defa571a3c9506b3da2617c3b1d0c1fe908c810a8343e6cb41bbca08ed2a403b29730e68e7aa3deb63f0c87c0fe09176ac27f0b8ba268ae2c9c6f5d8c17ce3392c5e3fcbfff13cc0d5f6ea6a30cabc6d7bf50646dbb98a83eb99b4e72add81516c7d80a79b23cda2b66b3712df0e6225d91e890f393797fdb707d8a54c6ffd429d6a2bef86b6d2458c603ccad4d86bdef8b75359f21abc7b063cb8ed1c5c577575148fa578ffe6eb20de5833dba5ee865651f7785cb5e5dd0c1e99177f9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec99f999f17912f6db92723d4818cdfe6faeeef327bf7fa8d725eb57cf75fe8fd3fe6065a5d83f46fa419c67d4b910ca14b5a82ffbffa13f98f99c0afb48f670ab5d725b627fcc2a98177fd8d70ab725437fa792d87c978d74f5bcad5dd0b0af9cb99fa2a62efa3fa3a60586a6d81fff7c8347c56965cb7a3617cffe327d16895a493ece677bc5813dd6e3df2e650d9e59b7081ab61f789c71d57f47da6a795e5e61f82e843227b5a8df36d2b74ac618ee662c87fd7e64ddb2cc7960af34d6dd5e2f2b1cad8cf5f78465a5cca9d0a6ee6d51af9983b6b22cd3beebf8dc3cfee370ea397eb70c78ba028f8b76c6d1f94629ee03713fc737fba7d9ce63a40cf6ed73d0af326d7f27f1e7993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367f6cc9e999f59f198cf5af1fdda7212c62cf57d483ecf906f95c9fa93df0b6e51efd7f5733879e6d4d9a833be3bfacf16f56537eb7c5170607f87a86de9eafb1451db52fce1b767f059908be7ba05e04bd65d66d142f225b1f94e3dc7773136843cc7ef66e85a6ed1d4d5fe8acf585153dc5fbb1b3cf86c34eadb3e6586cdd13e9e362ec41fee4b6560933cbe1fed623be3b1c4ecd723fef0f9f577b4b6ed0357dbbeacd465bb81df4da90a0e8c6ffc9eca0fa1edfbb1ce631f0eec3bf285e5ff32a57b4e2dfaa93a3bf8be666901ac4bb6afeddb9e03803526df5d715d053a0d30342884fce72deacb4a39292b5a0bbbda47e41b30c86e2ed7dd58ae18caf4b3d4bf2a88b7fee6b756fb1bcc6a9bfc0ce2ec0b38febb6a93fa4568741e6824651c7fb3d1dabfd2ec5788ed686ba38c2c8bdfa2fb2bb45151fd476dc700d7c73159b7ed38661e171ad3cf33dffb69fd17b41771f7d3fa2f8821eca71518ebef0ceb17aed641f4b145cafc3f63fde639b92c83fdc0fe673f81efb994e97c26e7e487eafaca764e8ecb45d55d31e377d0aa6264c69840163c4f90326db5d6b2cd2a23b87b5b962d8a5856b432bf1556141ca89f9befaca5f6f9fe465d24aef11be452e628a88b9bf396d439a0ab6fca55419d54becc525729733cec6b27ea7c02b613eeb7e75afe2f53ba73401cc3fda2f8eb9cdcbe17036715f841df97006b4cbebba26f3907143f622f84fc392debcb4a39d143b41676b58fc87914b29bcb5518cb1543990196fa5705f1d6ff2283e72283596d935320cece857ee8aedaea01111a75068da40cde53b47d07d476afc3d5fb1b51e752f8fe92797e85c74937e74df6f358f3be9aed1ca1b3c18fe7083da19d4d58ca9af70be5781967bf617c57a227f8c577255c7dbbb90fe85605f3785e70287dbbf88eadf2173566429f2cf88e1a33211bbe3b18be3b64d1b7d7dc6bcea4b983310892ef9fe1374bd594eebc14c72590e55a00a38bb11c1241c36f8f1f8c11c77790e55a02a38be343a6df3eef098cb25c2130ba78b714c7df680c237e63188ff3c2e8e05bb15d9bfaad58bca7d71a1899ded9c467538701a38bf3e2a6beab87e7f36de0d7d5b844dd32602c034659ee706074716f1caf651ac388d745b25c5b6074f10c2bd3f19df0dbf3786fd92563ba63bbe3be286599de7ba974cb93f65c037d3b18d730a905de673c98167dddf2a43df741df0eeefb25b5c071060fa6053e1b7431ee612268f81cee603cf8fc52963b1218ab1c31f6cf80b10a18ffe75e31300e70c4589501e3006014fbd1c0e8e0fe6b927140068c789f52963b06182f76c47851068c1703a32c772c30bab8979a00bf8d61bc041865b9e380f152478c9764c0782930ca72c703e3658e182fcd80f1326094e54e00c6cb1d315e9601e3e5c028cb9d088c573862bc3c03c62b8051963b0918af74c47845068c5702a32c7732305ee588f1ca0c18af024659ee1460bcda11e35519305e0d8cb2dca9c0788d23c6ab3360bc061865b9d38071a023c66b32601c088cb25c09305eeb887160068cd702a32cd71118af73c4786d068cd701a32c773a305eef88f1ba0c18af074659ee0c60bcc111e3f51930de008cb2dc99c078a323c61b3260bc111865b9b380f126478c3766c0781330ca726703e3cd8e186fca80f16660bcc9c238c811e3cd19300e024659ee7c60bc257ec6e4b5f4a00c186f019e5be3e7496a764b063cb7bae5497e57ef168bafdbe2f795dc168383c6d7fd36e019123f4f725bdc96018f3014c372a8d9edf13326351b9201e3edc033347e9ea466b767c0331434bbdda2d91df13326351b9a01e31dc0332c7e9ea4667764c0330c34bbc3a2d99df13326351b9601e39dc0333c7e9ea4667766c0333ca8d7ec4e8b6623e2674c6a363c03c611c0531d3f4f52b31119f0548366232c9a8d8c9f31a95975068c2381a7267e9ea4662333e0a901cd465a341b153f6352b39a0c1847014f6dfc3c49cd4665c0530b9a8db2687657fc8c49cd6a3360bc0b7846c7cf93d4ecae0c784683667759341b133f6352b3d119308e019ebbe3e7496a3626039ebb41b33116cdee71c47877068cf75878e2fe4ef6dd165fe31cd57d6cd0f8ba0b43312c87fd24c63b621c9701e3786094e5b09f449d23c6f11930d601a32c9770cc98ae9f441df89e10bfef64bb5417345e9f096e79d2f69340df131d69312168bc1613ddf2a4ed2781be2739d26262d0782d2601cf64075a24c047637884a11896c37e12531c314ece80710a30ca72d84f62aa23c62919304e0546590efb49dceb88716a068cf702a32c87fd24a63962bc3703c669c028cb613f89fb1c314ecb80f13e6094e5b09fc4fd8e18efcb80f17e6094e5b09fc4038e18efcf80f1016094e5b09fc4838e181fc880f1416094e5b09fc4438e181fcc80f1216094e5b09fc4c38e181fca80f1616094e5b09fc4238e181fce80f1116094e5b09fc474478c8f64c0381d186539ec27f1a823c6e919303e0a8cb21cf69378cc11e3a319303e068cb2dc3d8e19d35dbf3cd6cc7d475dab3477df51d725cdddb78f731fe7f9e0dbc7b98ff37cf0ede3dcc7793ef8f671eee33c1f7cfb38f7719e0fbe7d9cfb38cf07df3ece7d9c33f97edc81ef04f890a9c098af82bc3014c372f778c666cd883c25f1f19462ddd1d71304757fc2c253e0a8eee8eb4982ba0b43ae313e9e038cf7e400a3d731d507b1298c8ae729473c4f66c0f314f03ced88e7a90c789e069e67e2e749c6d4d319f00843312c774f0e303e9e038c5e47af2313a3d7317f74f48c9ed1337ac643c1980b6db867cc89782c6b2aa3e299113f4f52b36732e099019ac972b7ba652c6b2aa3e299193f4f52b31919f0cc04cd66583473c058d65446c5332b7e9ea4663333e099059acdb468e680b1aca98c8a6776fc3c49cd6665c0331b349b65d1cc016359531915cf9cf879929acdce80670e6836dba29903c6b2a6322a9eb9f1f324359b9301cf5cd06c8e4533078c654d65543cf3e2e7496a3637039e79a0d95c8b660e18cb9acaa878e6c7cf93d46c5e063cf341b37916cd1c3096359551f12c889f27a9d9fc0c78168066f32d9ab132de93038c8fe700a3631dcb9acaa878163ae2599001cf42e079d611cfc20c789e059ee7e2e749c6d4b319f00843312c774f0e303e9e038c5e47af2313a3d7317f74f48c9ed13366c6f8440e30fa6ded1959191d5c5fa57d87e6d966ee3bea1d9ae6ee3bea1d9ae6eedbc7b98ff37cf0ede3dcc7793ef8f671eee33c1f7cfb38f7719e0fbe7d9cfb38cf07df3ece7d9ce7836f1fe73ecef3c1b78f731fe7f9e0dbc7b98ff37cf0ede3dcc7793ef8f671eee33c1f7cfb38f7719e0fbe7d9cfb38cf07df3ece7d9ce7836f1fe73ecef3c1b78f731fe7f9e0dbc7b98ff37cf0ede3dcc7793ef8f671eee33c1f7cfb38f7719e0fbe7d9cfb38cf07df3ece7d9ce7836f1fe73ece997c3f1fbfefb24cbf31f33cf0b8f8e68da37a96aaf5bea0d7f5758cfa29ad5e34b47ad6d0aa18cabc00fabde840bf02f02beb9679f197297327026647becbda050df76bf1f1b8a1872af392a3ba47b5f52f3573df516d7d73f71dd5d63777df3ece7d9ce7836f1fe73ecef3c1b78f731fe72cbe31df2aa83f6f97ef9faa75bcacf3857a5eca3f01762933f9b0d46ffbc0ef432e7cfb7dc81f2bf2c1b78f731fe7f9e0dbc7b98ff37cf0ede3dcc7793ef8f671eee33c1f7cfb38f7719e0fbe7d9cfb38cf07df3ecef9e2bc18fe5f99059ec0e009d2f02c20e3994ac6339b8c673419cf50329eebc8782e26e379888ca79c8c670219cf48329e5bc878ae22e3b9908ca71f19cf34329ede643c73c878ee26e3799a8c671819cf0d643c9792f13c42c65346c633898c671419cf6d643cd790f15491f1dc4fc6d3938ce75c329e71643c73c978ce21e3194ec6f30c19cf4d643cc5643cedc8782e27e379928ce702329e0a329e47c978e693f14c21e3b98b8ce776329e52329e6bc978ba90f15c44c6f320194f77329e79643c75643c33c878aac9780691f19c47c67325194f4b329ebe643c0bc978ee25e3e943c633868ca73319cf1d643cd793f15c42c6f330194f37329e89643c33c9786ac8780693f15c4dc6d39f8ce73e329e5e643c63c9783a91f1dc49c67323194f36be679a09cf11643c45643c9791f13c46c6339d8ca72b19cf64329e59643cb5643c43c8780692f10c20e379808ca70719cf78329e11643c3793f13c45c6d39e8ca70319cf15643c05043c89e0c0314c12f0ffe7c1d6c258567df6754ec7faffbfa2ed2d60995775bea565ddaf804dbe25fbaa6559d4e915a84b95ce977eb329a913faaa8279f157041caf92f05c41c6d3818ca73d19cf53643c3793f18c20e3194fc6d3838ce701329e01643c03c9788690f1d492f1cc22e3994cc6d3958c673a19cf63643c9791f11491f11c41c6f33c19cf8d643c7792f17422e3194bc6d38b8ce73e329efe643c5793f10c26e3a921e39949c633918ca71b19cfc3643c9790f15c4fc67307194f67329e31643c7dc878ee25e35948c6d3978ca72519cf95643ce791f10c22e3a926e39941c65347c6338f8ca73b19cf83643c1791f17421e3b9968ca7948ce776329ebbc878a690f1cc27e379948ca7828ce702329e27c9782e27e36947c6534cc6731319cf33643cc3c978ce21e3994bc6338e8ce75c329e9e643cf793f15491f15c43c6731b19cf28329e49643c65643c8f90f15c4ac6730319cf30329ea7c978ee26e39943c6d39b8c671a194f3f329e0bc978ae22e3b9858c672419cf04329e72329e87c8782e26e3b98e8c672819cf68329ed9643c53c9781690f1545a789e77c423efbbcbba65fe7912df0eb643a95aef6b8eeaf4ba5e572bbd5ee1177f8550667adbd4af7a3f1c97152ef3fb04f86eceeba0d1eb8eea22dba3c0d83ee8fb6547bee51d2d59b7ccbfdccc7db7337cb7cb13df1d0cdf1df2c4b78f731fe7f9e0dbc7b98ff37cf0ede3dcc739936f07d70665f89d34990a8cf92ac8e3f5828befcb39aa6783ebc4af63d44f69f586a195796d550c655e03fdde70a09fedda53e6c55fa6cc9d0898312e4a8278e3e2cdf8eb54d62e68d85ebc69e88bf55ae448d3a863c8a266ee3bea18d2dc7d471d439abb6f1fe73ecef3c1b78f731fe7f9e0dbc7b98f7326df6fe97c8cd78da5e8433d5f94eb81b7c0ef129d2f88d1af5ad762bdae42bd6ee158027629f3bfe1b9a6dfe7fd3e1f976f7f6cf3719e0fbe7d9cfb38cf07df3ece7d9ce7836f1fe73ecef3c1b78f731fe7f9e09b39cecdbcf4173f07d85cf5e78f8ac56cbc4b70287d47c56273f71d158bcdddb78f731fe74cbe973af09d001f32a5ebe3b71478163be07154cfe4b38d65469d9e37ea540c65f018bfcc413d0bc0afac5be697018f4c95c0e3220e1ab3cd91670119cf54329ed9643ca3c9788692f15c47c6733119cf43643ce5643c13c8784692f1dc42c6731519cf85643cfdc878a691f1f426e39943c6733719cfd3643cc3c8786e20e3b9948ce711329e32329e49643ca3c8786e23e3b9868ca78a8ce77e329e9e643ce792f18c23e3994bc6339c8ce719329e9bc8788ac978da91f15c4ec6f32419cf05643c15643c8f92f1cc27e39942c6731719cfed643ca5643c8bc878ae25e3e942c6731119cf83643cddc978e691f1d491f1cc20e3a926e31944c6731e19cf95643c2dc978fa92f12c24e3b9978ca70f19cf18329ece643c7790f15c4fc6730919cfc3643cddc8782692f1cc24e3a921e3194cc6f30619cfd5643cfdc978ee23e3e945c633968ca71319cf9d643c3792f11c41c65344c6731919cf63643cd3c978ba92f14c26e39945c6534bc633848c672019cf00329e07c8787a90f18c27e31941c6733319cf53643cedc9783a90f15c41c65340c093080e7cf73f01ff7f036cf28efaf3607b5be71783ad85c5474b9d5f06b6429d97751c16a6973a1eb86ed4c9d57bf9e8ab0ae6c55f1170bc4dc27305194f07329ef6643c4f91f1dc4cc633828c673c194f0f329e07c8780690f10c24e31942c6534bc6338b8c6732194f57329ee9643c8f91f15c46c65344c6730419cf8d643c7792f17422e3194bc6d38b8ce73e329efe643c5793f1bc41c633988ca7868c672619cf44329e6e643c0f93f15c42c6733d19cf1d643c9dc978c690f1f421e3b9978c6721194f5f329e96643c5792f19c47c633888ca79a8c6706194f1d19cf3c329eee643c0f92f15c44c6d3858ce75a329e45643ca5643cb793f1dc45c633858c673e19cfa3643c15643c1790f13c49c67339194f3b329e62329e9bc8789e21e3194ec633978c671c19cfb9643c3dc978ee27e3a922e3b9868ce736329e51643c93c878cac8781e21e3b9948ce706329e61643c4f93f1dc4dc633878ca73719cf34329e7e643c1792f15c45c6730b19cf48329e09643ce5643c0f91f15c4cc6731d19cf50329ed1643cb3c978a692f12c20e3a9cc0e4f997ab75dfa5a07c0855315e49701cf2207fa38aa67297ed7e0eb18d7abb47ac7d0ea0d43ab6228b314f47bc7817e05e057d62df3e22f179915cf633a6ffb0ec463248c625be49627b9df3e16349cd2edb7ef008f8b76cd513d93fbd772a34e8f5974973218abcb1dd4d3b6efc8fc72d80eb9c6ac789ed479614d40b9274918c5b6cc2d4f72ff7a326838a5dbbf96038f8bf6c7513d93fbd70aa34e4f5a74973218ab2b1cd4d3b6efc8fc0ad80eb9c6ac789ed279614d40b9a74818c5f68e5b9ef204d459a674fbd70ae071d1fe38aa6772ff5a69d4e9298bee52066375a5837adaf61d995f09dbc1337b661bb3e291673bc29a80724f93308a6db9539ef2d204d459a674edd84ae071d1ce3bd23dd98ead32eaf4b445772983b1baca413d6dfb8eccafb2f82e09e2d5627523b4586de1599d652dc45fa6cc4b7390d9ebec758e62f63a7b9da398bdce5ee72866afb3d7398ad9ebec758e62f63a7b9da398bdce5ee72866afb3d7398ad9ebec758e62f63a7b9da398bdce5ee72866afb3d7398ad9ebec758e62f63a7b9da398bdce5ee72866afb3d7594d5e67afb3d7d9eb1c07b3d7d9eb1cc5ec75f63a473133e8ac78e4db95c29a8072cf90308a6d855b9ee47b41cf040da70263be0af2ab8167a5037d1cd533d9877c8d51a7672cba4b19dcbfd638a8a76ddf91f935b01d32615e9583cc5ee7a6312b9e193a2fac0928378384516c2bddf224dbb11941c3295d3bb606785cb4f38eea996cc7d61a759a61d15dcae0feb5d6413d6dfb8eccaf85ede0993db38d59f1ccd479614d40b999248c625bed94a72cf97ee3cca0e194ae1d5b0b3c2eda7947ba27dbb175469d665a74973218abeb1cd4d3b6efc8fc3ad80e9930afca4166afb3d7398ad9ebec758e62f63a7b9da398bdce5ee72866afb3d7398ad9ebec758e62f63a7b9da398bdce5ee72866afb3d7398ad9eb9c3f3a2b9e593a2fac0928378b84516c6b9cf2744b3e779815349cd23d7758073c2e9ecb38d23df9dc61bd51a75916dda50cee5feb1dd4d3b6efc8fc7ad80ecd9d79550e32fbd8c80eb38f0dcf1cc5ec63c3334731fbd8f0cc51cc3e363c7314b38f0dcf1cc5ec63c3334731fbd8f0cc51cc3e363c7314b38f0dcf1cc5ec63c3334731fbd8f0cc51cc3e363c7314b38f0dcf1cc5ec63c333473133c486e299adf3c29a8072b34918c5b6d62d4ff2bb07b3838653ba7e3beb81679d037d1cd533d96f678351a7d916dda50cee5f1b1cd4d3b6efc8fc06d80e9ed933db9815cf1c9d17d604949b43c228b6756e7992edd89ca0e194ae1ddb003c2eda7947f54cb6631b8d3acdb1e82e653056373aa8a76ddf91f98db01d3cb367b6312b9eb93a2fac0928379784516cebddf224dbb1b941c3295d3bb611785cb4f38eea996cc73619759a6bd15dca60ac6e72504fdbbe23f39b603b7866cf6c63563cf3745e5813506e1e09a3d836b8e5294b409d654ad78e6d021e17edbca37a26dbb1cd469de65974973218ab9b1dd4d3b6efc8fc66d80eb9c6ac78e6ebbcb026a0dc7c1246b16d74cb93dcbfe6070da774fbd766e071d1fe38aa6772ff7ad7a8d37c8bee520663f55d07f5b4ed3b32ff2e6c875c63563c0b745e5813506e0109a3d836b9e549ee5f0b828653bafdeb5de071d1fe38aa6772ffda62d4698145772983b1bac5413d6dfb8ecc6f81ed906bcc8a67a1ce0b6b02ca2d2461141b1e2f163ae22932788a2c5a1c2adf4a8b0a9d3f42ff26e0ff15c0e8aa3d5c6830ca3cc6b8d88ab2a0593b83a79da1d9a1f4adb4a884bc9a707b550223c3f66a9705cd3a183c1d0ccd0ea56fa5455f9d6faf7f717bf5054686edd501781cb4cfe50983474de9ce37b638d6c7513d93e71b5b03bbee781c923278ecdeeaa09eb6730999df0adbc1337b661bb3e219a4f3c29a8072834818c586d729dbe2e7294f183c6a4ad78e6d73ac8fa37a26dbb1f702bbeedb40772983b1fa9e837a16805f59b7ccbf07db2113e65539c8ec756e1ab3e219acf3c29a8072834918c5b61578b6c7cf539e3078d494ae1ddbee581f47f54cb6633b02bbeedb41772983fbd70e07f52c00bfb26e99df01db2113e65539c8ec756e1ab3e219a2f3c29a8072434818c5f61ef0ec8c9d27351e10f2a8295d3bb6d3b13e6eea996ac7de0fecbaef04dda50cee5fef3ba86701f89575cbfcfbb01d3cb367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367f6cc9ed93373332b9ea13a2fac0928379484516c3b806757ec3ca9e70ec8a3a674cf1d7639d6c74d3d53cf1d760776dd7781ee52066375b7837a16805f59b7ccef86ede0993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367f6cc9e999b59f10cd379614d40b961248c627b1f783e889fa73c61f0a829dd73870f1cebe3a89ec9e70e7b02bbee1f80ee520663758f837a16805f59b7ccef81edb0c7337b660bb3e219aef3c29a8072c34918c5b61b78f6c6ce937a7e8a3c6a4ad78eed75ac8f9b7aa6dab17d815df7bda0bb94c158dde7a09e05e057d62df3fb603b64c2bc2a0799bdce5ee72866afb3d7398ad9ebec758e62f63a7b9da398bdce5ee72866afb3d7398ad9ebec758e62f63a7b9da398bdce5ee72866af73fee8ac78aa755e581350ae9a84516c7b80e7c3d879ba95260c1e351518f35590ffd0b13e6eea997aeeb03fb0ebfe21e82e6570ffdaefa09e05e057d62df3fb613b3477e65539c8ec63233bcc3e363c7314b38f0dcf1cc5ec63c3334731fbd8f0cc51cc3e363c7314b38f0dcf1cc5ec63c3334731fbd8f0cc51cc3e363c7314b38f0dcf1cc5ec63c3334731fbd8f0cc51cc3e363c7314b38f0dcf1cc5cc101b8aa746e7853501e56a4818c5b60f783e8a9fa73c61f0a8a9c098af82fc478ef57154cf64bf9d8f03bbee1f81ee5206f7af8f1dd4b300fccaba65fe63d80e9ed933db98154fadce0b6b02cad592308a6d3ff07c123f4f59c2e05153ba76ec13c7fa38aa67b21dfb34b0ebfe09e82e6530563f7550cf02f02beb96f94f613be41ab3e219adf3c29a8072a34918c5f631f03888bb244f91c123f39f10f8565ad4e9fc11fa17b7571d30326cafa22c68d6cee069676876287d2b2d26405e4db8bd260023c3f66a9705cd3a183c1d0ccd0ea56fa5c5449d6faf7f717b4d044686edd5210b9a1dcaf6f050eedb87324ebde6874ef38243a879c121d4bcc06b4ea5b983e34b191ecb0260c0a90af29f02cfb7e3e749de97fb34039e6f03cfb7e2e7e9eaa89ea56abddf01f6b8d6abb4faaea1d5a78656c5500619beeb40bf02f02beb9679f1e7993d7314339edb0a6b02ca7d42c228b66f018f8b7643d5fd02bd2e597fab307d7674bd5f17cf4bf05e712bbd5ee1107f85506662497dd9df69b622f8bf6c37559ffd86cdd13bcc5d6dcfed645efc150559bb779bf65e326ae1e27953a6c7fdfd169eafe3e329c5fd1c7ded7354f74c9efdedb3f0c458f7ae51cf3df7c65ff764fbd145af4bd6aff6d17f3fdaa9e6e5b8ef49fbd1c5a87321941958525ff63fa0fdb0b515aef74d392737f7cd16417d7b265c25da6e3e13fa5adba5dc47501edb9c0afd8bfb6705d4d555bb18758f09db45b3ed76a9bdf95cd2f45d0cba7c44aa99ed3905ea5869e1ae24e0c678cce67e26ebb63d23ab347464d30cb7f547161dfb5ab8fb127033eed77d0d1dd9343bd87e3dc8c23d88809b71bf1e64e8c8a6d9c1f6ebc116eec104dc8cfbf560434736cd0eb65f0fb1700f21e066dcaf87183ab26976b0fd7aa8857b280137e37e3dd4d0914db383edd7c32cdcc308b819f7eb61868e6c9a1d6cbf1e6ee11e4ec0cdb85f0f0f1aeac8a6d9c1f6eb6a0b77350137e37e5d6de8c8a6d9c1f6eb1a0b770d0137e37e5d63e8c8a6d9c1f6eb5a0b772d0137e37e5d6be8c8a6d9c1f6ebd116eed104dc8cfb7563fbedb3eed77516ee3a026ec6fdbaced0914db383edd7132cdc1308b819f7eb09868e6c9a1d6cbf9e68e19e48c0cdb85f4f347464d3ccb65f3b7a9730e3771b3f76aa4f6a8ce98f33e0f910785cc494a3382875d4cf25d93775afa1d5c786563876c73ed0cf415f98b4df24107f9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec99f999f1bb8cf87c45ca7d44c228367c26e5e23ebfaafb857a5db2fe56611a786cbddf7db1fb2d2b2d30fc550187f82b8432279e565ff606cd56141cb8dd702c6edc967b62af436a5b9af12ff3e2af08eab317781cbc9f9fe4d967f0ecb36881ef9dc6e3bb6ca41b8dcb4adb050d637f8f511fd4f483d8fd37d4b4c0d0f403c7be1341c3ed290c3855411e795c3c1b7654cf645bb0dba893a9713194e904f5dceda09e05e057d62df3bb8147a616c0e32a06038327b0e823532519cf54329ed1643c6792f10c25e3399e8ce73a329ec3c9782e26e379888ca79c8c670219cf48329ed3c8786e21e3398a8ce72a329e0bc9780ac978fa91f14c23e3e94dc6733719cfd9643cc3c878ce27e339918ce706329e0419cfa5643c8f90f19491f14c22e31945c6d3918ce736329e63c878ae21e3694dc65345c6733f194f4f329e73c978c691f19c43c6339c8ce764329e9bc8788ac978da91f15c4ec6f328194f0519cf05643c53c878ee22e339838ce776329e52329ee3c878ae25e3e942c67311194f1b329e07c978ba93f1d491f15493f19c4ac633888ce73c329e23c978ae24e36949c6d3978ce75e329e3e643c63c8783a93f19c45c6730719cf09643cd793f1b425e3b9848c672f19cfc3643cddc8782692f1d490f1ec27e32921e3194cc6733419cfd5643cadc878fa93f1dc47c6d38b8c672c194f27329e3bc9784e22e3b9918ce708329e22329ecbc878a693f17425e3994cc6534bc6733a19cf10329e63c9780692f11c46c633808ce701329e1e643ce3c9784690f19c42c67333194f7b329e0e643c5790f11410f0248203bfc59480ffef039b7c33e843b0b5b0ac4f9e534b79755c5cdcf1c075b7b0acfb030b03eab40bea52a5f3a5df6c4aea84beaa605efc1501c707243c5790f17420e3694fc6733319cf29643c23c878c693f1f420e379808c670019cf61643c03c9788e25e31942c6733a194f2d19cf64329eae643cd3c9782e23e32922e339828ce746329e93c878ee24e3e944c633968ca71719cf7d643cfdc9785a91f15c4dc6733419cf60329e12329efd643c35643c13c978ba91f13c4cc6b3978ce712329eb6643cd793f19c40c6730719cf59643c9dc978c690f1f421e3b9978ca72f194f4b329e2bc9788e24e3398f8c671019cfa9643cd5643c75643cddc9781e24e36943c67311194f17329e6bc9788e23e32925e3b99d8ce70c329ebbc878a690f15c40c65341c6f32819cfe5643cedc8788ac9786e22e339998c673819cf39643ce3c878ce25e3e949c6733f194f15194f6b329e6bc8788e21e3b98d8ca72319cf28329e49643c65643c8f90f15c4ac69320e3b9818ce744329ef3c9788691f19c4dc67337194f6f329e69643cfdc8780ac9782e24e3b98a8ce728329e5bc8784e23e31949c633818ca79c8ce721329e8bc9780e27e3b98e8ce778329ea1643c6792f18c26e3994ac65349c6d3c2e0c1ffab77c3f6eabc7c3ba810fe3f49772e6fafd72565e419b1ba57f1be6153f5dde9a8beef07f55315ccef84fa0afbfbc0f3be239e5d068fe9bb08f295a0d90ec3a618b73b62dc6130cafc766014fd7600cf0e473c3b0d1ed37711e4fb8266ef1936c5b8cd11e37b06a3cc6f0346d1ef3de079cf11cf7683c7f45d04f941a0d956c3a618b73862dc6a30cafc166014fdb602cf56473cdb0c1ed37711e4078366ef1a36c5b8d911e3bb06a3cc6f0646d1ef5de079d711cf1683c7f45d04f921a0d926c3a618373a62dc6430cafc466014fd3601cf26473c9b0d1ed37711e48782661b0c9b625cef887183c128f3eb8151f4db003c1b1cf16c34784cdf45901f069aad336c8a71ad23c67506a3ccaf0546d16f1df0ac73c4b3dee0317d17417e3868b6c6b029c6d58e18d7188c32bf1a1845bf35c0b3c611cf5a83c7f45d04f96ad06c9561538c2b1d31ae3218657e25308a7eab806795239ed5068fe9bb08f235a0d90ac3a618973b625c6130cafc726014fd5600cf0a473c2b0d1ed37711e46b41b3770c9b627cdb11e33b06a3ccbf0d8ca2df3bc0f38e239ee5068fe9bb08f2a341b365864d312e75c4b8cc6094f9a5c028fa2d039e658e78de36784cdf4590af03cd961836c5b8d811e3128351e61703a3e8b704789638e2596af098be8b203f01347bcbb029c6458e18df3218657e11308a7e6f01cf5b8e78161b3ca6ef22c84f04cdde346c8af10d478c6f1a8c32ff06308a7e6f02cf9b8e7816193ca6ef22c8df0436e1ed03b6d775be37d85ed3f95e607b55e77b82ed159def01b69775be3bd85ed2f972b0bda8f3ddc0f682ce9781ed799def0ab6e774be1fd89ed5f9fe605ba8f355605ba0f303c0365fe72f02db3c9dbf186c7375fe12b0cdd1f94bc1365be72f03db2c9dbf1c6c3375fe0ab0cdd0f92bc1f68cce5f05b6a775fe6ab03da5f3d780ed499d1f08b62774fe5ab03daef3d781ed319dbf1e6cf7e8fc0d60bb55e76f04dbc73a7f33d83ed1f95bc0f6a9cedf06b66fe9fced60fbb6cedf01b6efe8fc9d60fbaece8f00dbf7747e24d8beaff3a3c0f6039dbf0b6c3fd4f93160fb91cedf0db61febfc58b0fd44e7c781eda73a3f1e6c3fd3f94960fbb9ce4f06db2f747e0ad87ea9f353c1f62b9dbf176c9fe9fc34b0fd5ae7ef03db6f74fe7eb0fd56e71f00dbef74fe41b0fd5ee71f02dbe73aff30d8bed0f947c0f6079d9f0eb62f75fe51b0fd51e7a55d53edec9f74be2488b79dfd2aa89f4ac0b7f85365feacf3ad8d32b26c2194395b772854cf38d4bb4bd20e4bbbac6cd20ebf0e3669875f039bb4c3af824ddae157c026edf0cb609376f825b0493bfc22d8a41d7e016cd20e3f0f3669879f039bb4c3cf82ad4ae717824ddae105609376783ed8a41d9e07366987e7824ddae1396093767836d8a41d9e0536698767824ddae119609376f819b0493bfc34d8a41d7e0a6cd20e3f093669879f009bb4c38f834ddae1c7c026edf03d609376f856b0c9fef215d8a46dfe186cd2367f0236699b3f059bb4cddf029bb4cddf069bb4cddf019bb4cddf059bb4cddf039bb4cddf079bb4cd3f009bb4cd3f049bb4cd3f029bb4cd3f069bb4cd3f01db789dff29d8a46dfe19d8a46dfe39d8a46dfe05d8a46dfe25d8a46dfe15d8a46dfe0c6cd236ff1a6cd236ff066cd236ff166cd236ff0e6cd236ff1e6cd2367f0e36699bbf009bb4cd7f00dba33a2f6d751bb0c9b36235957ec309c7e16901be84a52a88b7edc7a90af25877992ac978e690f18c26e379998ce74c329ea1643cc793f11c4ec6f32619cf04329e85643ccbc8789692f1bc41c6731a19cf06329ef5643c4791f1bc4fc6b3938ce742329e42329e59643c2f92f19c4dc6338c8ce77c329e13c97812643cf3c9789690f12c26e3798d8ca72319cf3a329eb5643cc790f1ec20e3d94ec6d39a8ce72b329e19643ce792f13c4fc6730e19cf70329e93c9788ac978da91f15490f15c40c633978ce72d329e45643caf90f19c41c6b3868c6735194f2919cf71643cef91f16c23e3e942c6d3868ce769329e3a329e67c978aac9784e25e31944c6731e19cf91643c2dc978fa92f1dc4ac6339b8ce725329ece643c6791f1ac22e35949c6f32519cf09643c5bc978b690f1b425e3d94bc633918c6701194f0d19cfeb643cfbc9784ac8780693f11c4dc6d38a8ce763329e99643c2f90f1ac20e3594ec6731219cfbb643c9bc9788e20e32922e39947c6534bc6f32a19cfe9643c43c8788e25e3398c8ce719329ee7c878de21e3799b8ce714329e4d643c1bc978da93f17420e3d94dc6b38b8ca7808027011c01d8e4ff2dc126dfe1d90fb62f747e2fd8e41b3e6f82ed739d7f146c0f5b6c2d2c7cc2301d6cf2aeec176093fb338f804dde99f81c6c72de20fed5fcca8e07f2b78065c44f4b0b3ffafbdcc22579dcdeb24c5510eff6465f5581fd9b770506e3a1e6d945c6b39b8ca703194f7b329e8d643c9bc8784e21e3799b8ce71d329ee7c8789e21e3398c8ce758329e21643ca793f1bc4ac6534bc6338f8ca7888ce708329ecd643cef92f19c44c6b39c8c670519cf0b643c33c9783e26e36945c6733419cf60329e12329efd643caf93f1d490f12c20e39948c6b3978ca72d19cf16329ead643c2790f17c49c6b3928c671519cf59643c9dc9785e22e3994dc6732b194f5f329e96643c4792f19c47c633888ce754329e6a329e67c978eac8789e26e36943c6d3858c671b19cf7b643cc791f19492f1ac26e35943c6730619cf2b643c8bc878de22e3994bc67301194f05194f3b329e62329e93c9788693f19c43c6f33c19cfb9643c33c878be22e3694dc6b39d8c670719cf31643c6bc978d691f17424e3798d8c673119cf12329ef9643c09329e13c978ce27e31946c6733619cf8b643cb3c8780ac9782e24e3d949c6f33e19cf51643cebc9783690f19c46c6f30619cf52329e65643c0bc9782690f1bc49c6733819cff1643c43c978ce24e379998c673419cf1c329e4a329e16169efd8e78e45b31b26e99dfdfcc7def347cefcc13dfdb0ddfdbf3c4f736c3f7b63cf1bdc5f0bd254f7c6f367c6fce13df1b0ddf1bf3c4f77ac3f7fa3cf1bdd6f0bd364f7caf367cafce13df2b0ddf2bf3c4f772c3f7f23cf1fdb6e1fbed3cf1bdd4f0bd344f7c2f367c2fce13df8b0cdf8bf2c437f3f5b7ea872b7d9577ebdf04fcbf0218df74c4b8df6094f93781516cf83dea0a473c51d7ee1504be9516722f4b9e7926e0ff95c0e82aa62a0c4699b7c5d44ee0a974c41375cfa192c0b7d242dec5963e9509f83f8ebfec2aa62a0d4699b7c5d476e0e9eb8827ea5e495f02df4a0b79f759def94bc0ff71bc755731d5d76094795b4c6d039e418e78a2eef10c22f0adb4906f85c9376912f07f1c9fd1554c0d321865de1653387eee60473c51f7a60613f8565ac8b776e59b9709f83f8edfe42aa6061b8c326f8b291c3f6e88239ea87b6a43087c2b2de459b07ca33d01ff1f0a8cae626a88c128f3b698c2f16e863ae289ba173894c0b7d26298ce4b1fab04fc7f1830ba8aa9a106a3ccdb626a3df00c73c413750f7318816fa5c5709d97773812f0ffe1c0e82aa686198c326f8ba9b5c033dc114fd4bdd7e104be9516d53a2feff427e0ffd5c0e82aa6861b8c326f8ba9d5c053ed8827ea9e7135816fa5458dcecb37e712f07f1cff7db823c66a8351e68703a3d856024f8d239ea87bdd3504be9516f26dff15fa3701ffc7f1585dc5548dc128f3b698c2f1a06b1df144dda3af25f0adb418adf332264c02fe3f1a185dc554adc128f3b698c2f12b473be2897ab6309ac0b7d242becdb54cff26e0ff75c0e82aa6461b8c326f8ba9a5c053e78867b1c1b3d8a2c5a1f2adb490bedc4bf46f02fe3f01185dc5549dc128f3b6985a0c3c131cf1443dcb9940e05b6921dfd67e4bff26e0ff1381d1554c4d301865de16538b8067a2239ea8675013b3e03bea794a367c473d1bc886efa8fbdcd9f01d75cf361bbea3ee3f66c377d4bdb46cf88eba2f940ddf51f738b2e13bea7a3d1bbea3ae3db3e13bea3a2a1bbea3ae09b2e13beafc361bbea3ced5b2e13beabcc3b7e7be3d8fdbf7a13c77c8d7f6fc501e430fe5b1c45f1bf86b836cf9f6c7127f6d902ddff97a6de0dbf3ecb7e772fd5510445f8fbdedc8f752c3b7cce37396a58e7c2f367ccb3c3e3358ecc8f722c3b7cce3fdef458e7c1719be657e51167cb7337cb7cba2ef0e86ef0e16df0eb67759226878fd2d0c3855411e63e02d075a38aa67a95aef12bdaeaf635cafedbe8db9bf14439925a09febb643d66db61db9c88c71d1263edfa509f021df255336797efc3ad8a4dd7f0d6cd22fe055b0c9b1e915b0c933a997c126cfac5e02db689dff186cf2ec18fbeccbf3ff6d60abd679ec2b3e5ce7b7804dfa52611f65e90fb7196cd2a711fbc64abfd48d6093bec5d82753fa87af079bf4f1c7be80f29ec65ab0c9bb36d8074dde975a0db6bd3a8f7d9fe43b342bc1365de75780ed0f3abf1c6c0fe9fcad60fbbdce7f05b6dfe9fc22b03da8f36f81edb73abf046c0fe8fc8b60fb8dcebf00b6fb75fe79b0dda7f3f82edbaf757e17d83ed3797c876a9aceef04dbaf741edfddb957e7b783ed973aff1cd8a6eafcb3609ba2f30bc1f60b9d5f00b69febfc7cb04dd6f97960fb99cecf05db249d9f03b69feafc6cb08dd7f95960fb89cecf04db389d9f01b6b13aff0cd87eacf34f83ed473aff25d8eed6f9c5606ba1f34bc1266346623f95429d7f1b6cad741efb1fc9f7fd2782ed309d9f00b6363a5f0736f936dc68b0c978d0b5604be87c0dd88ed0f96ab0c9f9d970b0c9f827c3c026e75243c1d65ee787804dce7b06834dc6b31c0436f906695fb01dadf39560936feb5780ed589ddf0f361973ec4db0c977ebf6824dc6627e046cf2bdeae9603b49e7ff00361987e521b09da2f3bf07dba93aff3bb0c9373c1f045b89ceff166c1d75fe01b09daef3bf019b8c91753fd8ced4f9fbc0266307ff1a6cf2bde7cfc0d649e7a781ed1c9dff15d8642c917bc126e383fe126c9d757e2ad8e43bdc53c07681ceff026c32dedfcfc126df189e0c3619d7ed6760ebaaf393c056a6f33f055b379d1f0fb6729dff09d8baebfc38b0f5d0f9b160eba9f33f065b2f9dff11d87aebbcb4336a7f56fbf93e3d5f15c4775ea6fc7d18349cd25d1b0803f2c479ae5d0c3ce86b4fec752f4b9ed7cb7edf42af5762680ff8de1dbbefd435c5077a5d857abdbb0ddf8550e61cdd38a8e5e498df522fb7d7580eef63c9ba65990bc1becb58777b5ddf0f1cd577b7c124dca88394395f33a963e30f74be0d2c13235bf2fa58622d000d71aa82bc30b8d1aaac14cf7b1bc3f301f0ec899d2775bdee222670df8afb7addbc8f6bc65a3194d90dfaed72a01feeebb26e99177f9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec99f99915cf3e9dc7e7ca526e1f09a3d8f6008f8bfbfcf81c56d6af9eebec3aaddeef9ed8fd367cbed74aafb7d4a8732194f91a9e39edd5f922f8bf6cb7a86de9e03961da6d29fe8aa03ef82c689f239e3d06cf1e8b16922f89cd77d948371a9795b60b1a3e5bdc6dd4073575b5bfeed1eb2a3034c5fdf54383079f8d1601ef47fa3701ebf908eae0601f4f1b17e20ff7a53d6093fc87c0e8623be3b144da03791e8ecfa6a5ccaf8ce7e2f16ffbb25297edc6fb50a7aae0c0f82e8432bf83b6ef739dc7be21fb40b77f58fe2f53bae7d4a29faaf38ef8eb9cdcbedb81b30afca0eff7803526df0ddea129d049fc88bd10f27f87fe1c524ef410ad851dc72b477673b90f8de58aa1cc4e4bfdab8278ebbfc3e0d96130ab6df225c4d93fe0f8efaa4dda19a1d185a09194d9031aed75c4b3c7e0110ef1a7cac8f66f6d9491650ba1ccff82364ad545da79a927f66dc16380abe398f89275cbbceddcf8036034eba8e263e0b1f5bc7b62e7cdadfe5f8795a47eb15d8fabff97acbbbd5e56380263fda5b07ee16a1d441f5bfe67fb96d4afdf65ffb2bd469d8505759632ed4a52bf2ace2ed3f94ccef50fd5755bd4b9fe4e073c89a0e1b5b79ad21ddff118f3be031e47f52cb51dbb7619752a86329da09e0ece63d2be0bbc037cbbd8e6a8859c43ed36b42884321d4b52bfd27644e988d7aa1f64a52e65d6f3c1524b5da44ca792fabab4017b9c4c2eb7db7b5027b5de3d96ba4a99f34bea75e9a2f309d84e78dfa4afe5ff32a56b0f702c9eadf1d739b97db7006715f841dfef026b4cbe1b7c0b44cef7c58fd80b215f59525f56ca891ea2b5b0ab7d44def9437673b9ddc672c550669ba5fe5541bcf5df6af06c3598d536e95a529f973872d96e6e8bd0a81434923278ff588eedf8de9dedb8bfc71177d4717f0f309aed269ebbb864db6bb099f7506de7835206cfc9a4ccd525a95fd5ce262c65cd7bc32eee63e23ba801d42330ea2a13c680836bc372bc7692764afc7401fb1e9d179dbb18da1542994125a95f87e7ddd67b97e6f51d5e5308b7b96fe1bb1f434aeab971ecc43dfab7086c9fe85f47d769e5b67b86c261bb6738bca49e1d9715ae8f2d7531af915b0407de53ffda288bf7ddd22d67e6cd712895be9f18e56c7ef09a27b67735ba969622538bc07ebfe04383bd203870cc4dd90f30e6ccfb285d8cf5e07d94ba92d4afb4496659b5edfffde87a7d643b8a76d89e604c7e088c553a5ffacda6aeb6facbbcf8538c1f197570d376a5de57cae43ef05ee071d1b63b6aa34bf1181bdff7297a57db8eff1f1a5a65f179adf5986f3e736f63e4e3f15d5663bbff64d362b785c7d57394282d765b7cc7a7458f91b6e3874d8b5d169e5d59d66297c5778c5ad4e27dcf745abc6fe171712f2a9d16ef5b7cc7a745cfd274cf35508b9d161e57f71ea2b4107f9932ef22606e63e4e3f15d5e6dbb4f66d3628785c7d5757394163b2cbee3d3a26b0fbc47974e8bed169ef8efcfa5d762bbc5777c5af4ea8df7f0d269f19e85c7d533dd282ddeb3f88e312e46d9eee5d8b4d866e1d996652db6597cc7787ed8c376afcda6c5560b8f83fbae69b5d86af11da31623f0be6b3a2db65878b664598b2d16dff16951dddd764fd8a6c5bb161e57f784a3b478d7e23b3e2d46f452be3737428bcd169ecd59d662b3c5778cd750c9b8d8d4082d3659783665598b4d16dff16951933cd7dad8082d365a783666598b8d16dff169519a3ca66e6884161b2c3c1bb2acc5068bef18e322793db9be115aacb7f0accfb216eb2dbe633c8e24e3625d23b45867e15997652dd6597cc7a7456df2fed3da4668b1d6c2b336cb5aacb5f88ef19e4b322ed634428b35169e3559d6628dc5777c5a744b1e535737428bd5169ed559d662b5c5777c5a8c4a3e135bd5082d5659785665598b5516df319e7726db8b958dd062a585676596b55869f11de37967f2fec58a4668b1c2c2b322cb5aacb0f88eb1ed4c9e772e6f8416cb2d3ccbb3acc5728bef18cf3b935abcd3082ddeb1f0bc93652ddeb1f88ef1bc33791c79bb115abc6de17135064a94166f5b7cc71817c9b6735923b45866e15996652d96597cc7785f2bd9762e6d84164b2d3caec66b88d262a9c5778cd723c97b7c4b1aa1c5120bcf922c6bb1c4e23bc66745c973f0c58dd062b185677196b5580cbef7c6ee3bd59f5b7c485fac0b0c2d0aa1cca91d53bfd2172b4a475907f62bc3babc157b5d52fdca1645d4e52da88b943913ead22670324651b9a3ba2663e64da8935aef4796ba4a99733bd6ebd259e713b04d3e06ddfa58fe2f5381315f0579d14fd5f9f5f8eb9c8cd5d780b30afca0ef57813526df5dd177814ee247ec8590efddb1beac94133d446b6157fbc81b3a8fece6728b8de58aa1cc1b96fa5705f1d6ff7583e7758339f9de03c499c4919bb62bc5f44684461780465206fbec7de488c7ec43281ce24f9591eddfda28837d28a5cc45d04661bf52a9672238b0dfa4a3b6ac2bb2cbba655efc15836d2f309a7554f1f119f4fd94b122641c0965937121bac17a7a1a3655d75e8eea2abe64dd32df0b18659c8a9ed9672c6b2c630f8351f1f471a0198ebd2153bae3451fe0e9ed80c7513d93c7a10aa34ebd8c3a1543197cb7b1c2413d0bc0afac5be62bc0b78b6d8e5ac831f95c438b422833dc387f8cd251d6a1e2b7a7a52efd1cd745d62ded52bf2cf8ae347c77377c278286db3908d2ef5f95c0dcd701b35a6ffff8d75b8ae76d1253e2a73bd469006810579d705d729e37c0d0b610f253e13c4fca4959397e09bb8a65d996c86e2ed7c758ae18caf4b3d4bf2a88b7fefd0d9efe06b3da2677c3b99d83fd211903fd0c0e99ef0edaf58fd0ae1f682765f0f8d7c391767d0d1e99ef013c728e530136395710fe04fcbf5b16b8cd76afc2c22d361c27ae8785b17bfc8cc9739d1e06a3cc770746b1f5059e4a479a99dbfa5c431f3c2eb736cac8b2855066161c1b1396b26abfeb54505faf96da1edbbb63ba4d6fed402f1ca731007d0243c300f4927ab672c0d336a81fab71f294ba4923ee1a75e3a8d4a347412b3430f1b7c0528d1660c37c4b8b2d081a0e495908361992b215d85a18b2e05098525e86b4732117ea21eb2e3438db004b9cbe71384f99d285ce61c0e3229455e8c8909e3a746e9d3466ca288c8f560667536247fdaf659a7251eb72b51dcc7da20ae6cd182c74e4bf25d4b70ae6c59fda3632b4ea841123ef1930e9aea9e3468d9f32198532776ccc17040d3780f91b25b8ab9d0e03002b8c8d432ba35ed860c8ff64c3b48d9fb31cc7cc35b509c09f4c6d41b7c31de8a6d62f63df8e1c3176ecf553abc78e1979d9d4f123a78ca91b8f5bb38da15cd49696ffb7069bad89c7b26ac2660b973dcc62b34d38ca701bb0c991eb70b0094f5bb0b584bc9437b78c9370ed04eb975d4afd4f89d34a57fcb0a03e04e470acda55b5ffaa5339f50959752aa48636569b530d5dacee18aaa189d557ecd4d0c36aa86135b4f089416ae8603554f029416a2860f5b58b922035b4efe9416ae8de3383d4d0bc6703dfb781f99c2075daa586d6ed1ca486ce55b72ebb04a9cfbca977ebd5e9bbba2da04e79d5259e3afd54a79deaf242ddbe50b7b2d4299d3a5d56a782eaf44d5d8ef4d75a0f08d34561ba384c9784e9d2305d16a6cbc3744598ae0cd35561ba3a4cd784696098ae0dd37561ba3e4c3784e9c630dd14a69b83d4f0ceb704a9e1d7d5f0cfb705a9a1a16f0f52c346df11a48694be33480d373d22480d453d32480d533d2a480d617d57901ade7a4c901a26f79e2035d4ae1a82777c901a0e5b0d93ad86cf56c3fcaa2181d590c26aa861352cb11ac2580d81ac86467e20480db9ac866c7e38480dfb3c3d4c8f86e9b1303d1ea627c2f464989e0a52c383ab61c36704a961c6d5f0e3b383d470e57383d4f0e66ad873351cba1a265d0d9fae865557c3bcabe1dfd5b0f02f85e9e530bd12a41e49a84731ea1185bafdaf1e83a95bd46f05a95be74b82d4236ef5c85f7581505d425417991541aa0b95ea52a6bad8a92e87aa0ba6ea92aabae8aa2ecbaa0bb7ead2aebaf8ab571ed42b20ea9518f58a907a654abd42a65ea953af18aad744d56b97ea3562f55af59e20755b7c5f907a54aa6e87ab4703ea96b9ba7dff6998be15a462f23b61fa6e98be17a6ef87e90761fa61901ad6580d77ac864b56432bab6198d590cd6a28673514b41a36fab32035f4b41abafab7416a48ecdf87e9f3307d11a486d7fe324c7f0cd35761fa5398fe1ca6bf84e9af61fa5b98fe254cff1aa67f0bd3dfc3f48f30fd33a81f661b1b921375eba3af60821153a68c1a37614ac994ba927153c74e193361ecfd25d3c64c195d5277efa849b563eba6e1c2dfd60bcb18e103264d1a717fc998f135a3ee2ba99b3aa5a4aeb6a4ba6eeaf89a0607f1bfe8854e3ed0e3889a9a6867fff94d48ff6f139d1eaedb45197dfdcaf4753ba265130439b2290bf568d9b40a4dd24730b9d4bd29751e5c32796cdd9492d292f1e1dff0c05b376d544d9712fcdfe450e4c9534a264f1931694a49eda4ba71255dbbe07a1f69db844afc575b3730679dd834713ae9ef2c3529c47e795a1314f88fd39a46dabae41b90b62d699ad3929226d4f0eca62c745513096f2e899465f2d4ea2993468c9c12bdf06ddf64e13b9b52cdf14dace6291d9be0ec8ca62c34a063d308ef6c8ab39919380bfe1ba14b957d8c550600", "isInternal": false }, { "selector": { "value": 2603445359 }, - "bytecode": "0x1f8b08000000000000ffed9d77741cc791c667911856000892600e50a219c1c5228309cc99122559391024419116495024942ccb922cc939e76c399de59cf35917edbbf3390739e72839dd3ff77cefee3dbfeb9eed323e3467d6d8d5145883ad79afb03db5bd53bffea6ba77b67b7691090adb9f8c655cb9dad885c1d91b3ddfef1e734f6e6b4bf058394ece4c4a38ab52c2599d12ce9a9470d6a684b32e259c9352c23939259c5312e4b46c55c1e82d69dea90cba26cd984d99a6e7a540d3fa9469da90024d1b83748c51d352c2d99412cee929e19c9112ce9929e16c4e09e7ac9470ce4e09e79c9470ce4d09e7bc9470ce4f09e78294702e4c09e7a294702e4e09674b4a38cf4f09e70529e1bc30259c17a584f3e204395700e712f7f814f7b8d43d2e738fcbdd23bd66a57b5ce5da58e3f65b8dadb66cc6dabce7f2c6da8d7518ebf49eeb32d66dacc758af7baec53dd7676c8db1b5c6d6195b6f6c83d361a3b14dc6361bdb626cabb16dc6b61bdb616ca7b15dc6761bdb636cafb17dc62e3176a9b1fdc62e3376b9b12b8c3dd5d895c6ae3276b5b16b3c966b8d5d67ec7a633718bbd1d84dc60e181b3076d0d82163878d0d1a3b62ec6663478d1d33f63463b7183b6eec84b193c6868c9d3276abb1d3c6ce181b36769bb1db8ddd61ec4e6377799a3dddd8ddc69e61ec1e8ff399c6ee35769fb1fb8d3dcbd803c61e34f690b1671b7b8eb1e71a7b9eb1e71b7b81b1171a7b91b1171b7b89b1971a7b99b1971b7b85b1571a7b95b1571b7b8db1d71a7b9db1d71b7b83b1371a7b9363a18ef066636f31f6b0b1b71a7b9bb1b71b7b87b1771afb3b63ef32f688b1771b7b8fb1f71a7b9fb1f71bfb80b10f1afb90b10f1bfb88b18f1afb98b18f1bfb84b14f1afb94b14f1bfb8cb1cf1afb7b639f33f6a8b17f30f68fc6fec9d83f1bfb1763ff6aecf3c6be60ecdf8cfdbbb1ff30f64563ff69ec4bc6beec69fe15635f35f635635f77be6fb8c76fbaba342ff62d63df76e5c7dce377dce377dde3f7bcd77cdfd80f3cdf0f8dfdc8f3fdd8d84f5cf9a7eef167eef1e7eef117eef197eef157eef1d7eef137eef1b7eef171f7f8847bfc9d7bfcbd7bfc837bfca37bb46baa973617ca938391ad3f48688cea3892b36b2a24fe9260f466b5a876cfd1638bf3d7b87d7a24ed6add7eade7af73fb75de7126bbfdc99ebfc9ed3779fe196e7f86e76f76fbcd9e7fb6db9fedf92f72fb17813f1bc09cabf35b5fb57365c047f95a05be5ae7ab065f1d1d0e7c939caf167c747eebc037c5f926816faaf34d065fd6f9a69096c6ce73befe20a95cc90dd8e3d6277d5cb70ed5903cef217bdc4626de69c9f30edae33631f0dafc98ee8e350df26686f335816fa6f34d079f1b82fedae7ac6f96f3cd04df6ce76b06df1ce79b05beb9ce371b7cf39c6f0ef8e63bdf5cf02d70be79e05be87cf3c1b7c8f916806fb1f32d045f8bf32d02dff9ceb7187c17385f0bf8e81e97f3c17791f35d00be8b9def42f0d1587b11f8e8daf062e7b3e3c4e40cbcc6f9698c0a5f43e333f896d2d80cbe65342e836f398dc9e05b01b1c9b712c615f2ad723e1aa3ec737daedc1f24d527f2619f5893f471cd91ed71d7257fdc70dd6e7d30a2753fc459035a6d70e504ef0d6ac3d819671487fc3550de0975a91ee941ef33c46ec7fdb5aebca1c8ebfabcd735409db511edef0f926dff3a8f679dc75c0bede7c9d9f6bce6ec98b79273f62aa8ebe71e5df34cc49cdd031c0c39dba5393be6ade49c1d84ba7eeed175ef44ccd96b81832167077872369fd39c2dcc91054174eed1679f8998b3478123f99cedd49c1dfb5672cede0f75fddca3cfbf1331676f078ee473b67b40af0dc6bc959cb32f81ba7eeed15ccc44ccd9078183216707759c1df35672cebe09eafab947f3821331675f0e1cc9e76c2f53ceb66bce0685f5ce2088ce3d9aa39e8839fb3070249fb387747e76ec5bc939fb69a8ebe71ead974cc49cfd802bdb75866fb8758605e0fba6f32d04dee473fb7007536ee735b70bf7810441748ed2dadd44cced475dd9e6f16370ef01f9bee37ce783efbbce7701f8bee77c1742bb18fac080f681316f25f7811f405d3f97691d7922f681af010743ce1ed29c1df35672ce3e0e75fddca37b1a2662cefe1838187276507376cc5bc939fb67a8ebe7de52579e88394bf795daeb859fbaeb85e5e0fb99f3ad00dfcf9d6f25f87ee17cabc0f74be76b05dfaf9c6f35f87eed7c39f0fdc6f9dac0f75be7cb83ef71e76b07df13ced701bedf395f27f87eef7c5de0fb83f37583ef8fced703be3f395faff3d97bf2e8deab2f3a9f3db7a4517f90ecb9a57b2ce9d8b4bf721c62377ab11bc731769317bb2922f62a86d85988415bc6dbef87f22a5e9e5c4330fafb1f146b75f2b1da6ddb5b83b1b77d35f0e418da9e851863e1c9014f5bf23ce1bdbef9e48f1b9ee3564fd32cc46a8576b533b42b03b1e8d8b44ff11ac087e3777b046347f28cf90cc4a263d37e0730920fdf4fe87d9dfa8f7d3f5c9219e165e84be13511c5a3dffe228ed5e0a73a7f9c39c2b6dcb1d5c3f3f8dedae6f998f232cc0b8a45c7a67d8a570fed691b7fc6fc5819731e23d718918158746c3f36f6f755e3afd998ce6b03f8cec198942f774caa07b6f1b84e893bd7526273bc5f6520068d6da4791efc546796fb42821ddbb6c3b8cbd0fff2a55ebfe178907c1ee773d8afc7c2d30e3c1c7d9fa9bfe6f07dff2f41b2b9d6e969d5e669d500753a40bf4e06fd8a5d87503c6556666556666556666556666556666556666556666556666556666556666596cf8cf75fe0fa26d55b2984917c79e0e198e70f7f3fca1d8b8e6fd775be0beb3ac9af5be473b86649f7182ef3da5c03759ec88cd4fd21aca7fb6b83b8a6b99257bb31dd67511f9cbd16cbb98618b70e1cb57ed99258ecfc21aef5367b8f9afd1db2564fd795119a32dca7324ad38ca729dea7b8c2e3b1793ab77a848d63edafd4b548d48aca49aeede13d06bce7a5307e502e5405a3c70f7c9fe94a3cf6e8354c5a2feff262d7409dffc98c9c1bba1795fecfa17fcf93add3ed1d9b5eb30cfcdddeb1a7b9d71247ad77fc56782dd5f93f1853df5c15fc55338efb3f705c0ea0adb8f54319d7cd937f1f2eace3b797c0d3093c1ce30cd3f5460efb40d2ebf8dd9e5651d73154a70bf4eb66d02fea5a94f6299e322bb3322bb3322bb3322bb3322bb3322bb3322bb3322bb3322bb3322bb332cb67c6ef8a126b16eae585308ed3bd0fe17a06fdfe0b1ddfaeebbcb06a242ef73a1cad392df7da5c0375be5c3552f7a5ae5c1f9c7dbf43dcb96458cf2b7a2e295e3db407d782b8becfdde1f174446841e596c46217d6f193d778641dbfddd3351fa129577fc53556d414fb6b9bc7836ba3f5c1d9f79664e138e371ef505c5e503cec4b1de0a3327e3f9ae33ce37b897f5f0fc5c3f5eb479cb6d302ae739fcf718e1b3dd0a6fee0ecfcae813aef87b1ef83ae8cf770e0bd238f463c4f5bb1756ad28fe5b7ec728575df35c0d90f7130f65a604d28761bc6ce38a338e4af81f2e7aa46ea523dd283b42676db47e837c190dd7f5d9bf7ba06a8d31bd1fefe20d9f6f7793c7d1eb33d271f813c7b14deffb9c6a4de188d9681465407af83b8eec9f3c748fffe46bc6fafceab83d72c54e70b3046c5dd3f1a75cf21d7fb58dc3d8751d7c69dc0e8b7d1bfcfb3d2efd37a0cc68ba4efd37a0c7208efd30abce32f87e313575d10ffde4275beef1ddfbf26a7d7e07d6054e747305e34ba7b16eb83b3afbff19ea9f1f87c15779f34c5c3eb1aecdb7fabed96b907eaf727c88c39812c789d40757ee39db3ee18eed511af7d22e6b5a415fd0e157e7ef1f5b33af4c26bfa13d1a1d0e7fbbcb6505ef7425ba8ce7f79d780c95fb714ae01936febe86b121a073a22da4a75fe1bfada9fe11a8fce137eeea8ab3efb79da8a5d03927eb6cde3fdfbc0185bc2ef03d7568fd4f57fe797b42ef5f781bbbcd749fc7de0ff853cab83fbd0b9c6eab5311a2d078da80e7e3788de47f0b77ca3de63b8eeed8f7b8f89fa0d4a1c9f1babc79fcd9f578bba46a03af45abc4698e998a7399dfdbafe7c21bd5f2679df307e57a215e2e277255a99f4cc816efdb08fd705e732768e2976dc6f4ee7c62176dc6f4e8f47ec262f76d338c656cd5573499a33fc2672f8fd33fccd52bb15bb2e258606785d550a18ab53c0589302c6da1430d6a58071520a1827a780714a0a18a7a680310b8ce7f2bd9d419f7cb9fa709daf62d71a189be17f97e44bfdff1dccff4ba5e8b50fc666f84c176ab12a18bb16f8398fe3b71f4afd5f2fc480ffbb607a0a1867a48071660a189b53c0382b058cb353c03827058c7353c0382f058cf353c0b820058c0b53c0b828058c8b53c0d89202c6f353c078410a182f4c01e3452960bc38058c4b943111c615bc8cf972192d0fc7fffc7b32ff738c81271775cf29d3774f4afe7f6bccbf4fda56eeefc6e1bd25bcff13eec9fdb61dc7bd23a5feb65db1ffb7cac4982f9791eb3e76fc1ecf5878f07b9151dfad6160cc97cbc8f5fd17fc8ede5878ba40b3ce08cd1818f3e53272dd2b57eabd9c784f7f5784660c8cf97219f1beea047942cdba4be0e901cdba23346360cc97cbc8755f7216628c85a71734eb89d08c81315f2e23d377db42cd7a4be0c1ef80f54668c6c0982f97d1f2ac61d2acaf049e35a0595f846692189127e9dfc9ee8b88c5f19dc152db4e0cc83825058c5353c088f749708c5fc5ee93e8e3d5275fae3e5ce7abd87d12189be1fb31a116f87d88bfa5c53a5e9ea2f74960ecf54c5ae0f755fe9616eb8187e3fb33598831161e626880d74d4f01e38c1430ce4c0163730a1867a58071760a18e7a480716e0a18e7a580717e0a1817a48071610a1817a58071710a18f1b32ac3b562d1cf2feb2778ecb8cf2a133d76dce792891e5bf35cf3bc12626b9e6b9e57426ccd73cdf34a88ad79ae795e09b135cf35cf2b21b6e6b9e67925c4d63cd73c97143b0d73fcca38f11891a725399e1cb61d63f50b687b7f044f86a9ed186ba380b61343da1837a480714d0a1855c7c23d88e5305a9e4d4c3c1b4be0d9043c9b99783695c0b31978b624cf13e6d4e6127888a1015eb726058c1b52c0a83aaa8ed6ec967b729bea2888310d3a2aa3322aa3329e0bc6348ce1ca988a7ccc97cb6879b626cf136ab6a5049eada019bdae8d97315f2ea3e5d9963c4fa8d9d61278b681665b23346360cc97cb6879b627cf136ab6ad049eeda0d9b608cd1818f3e5325a9e1dc9f3849a6d2f81670768b63d423306c67cb98c966767f23ca1663b4ae0d9099aed88d08c81315f2ea3e5d9953c4fa8d9ce12787681663b23346360cc97cb68797627cf136ab6ab049edda0d9ae08cd1818f3e5325a9e3dc9f3849aed2e81670f68b63b423306c67cb98c96676ff23ca1667b4ae0d90b9aed89d04c2ae39a14306e480123b38ef972192dcf3e269ebd25f0ec039e4b9878f695c07309f05c9a3c4f98539794c0430c0df0ba352960dc900246d5517594c4a83a568e8ecaa88cca581a637f0a18f55c2ba3544686cf5745bf4373c9048fdde8c56eac90d871dfa199e8b135cf35cf2b21b6e6b9e67925c4d63cd73caf84d89ae79ae795105bf35cf3bc12626b9e6b9e57426ccd73cdf34a88ad79ae795e09b135cf35cf2b21b6e6b9e67925c4d63cd73caf84d89ae79ae795105bf35cf3bc12626b9e6b9e57426ccd73cdf34a88ad79ae795e09b135cf35cf2b21b6e6b9e67925c4d63cd73caf84d89ae79ae795105bf35cf3bc12626b9e6b9e57426ccd73cd7349b1f7271f3b5fea6fccec071e8edfbc616a67ce1ef73277acbf24a89fd5ea724fab4b3cad1aa0ce65a0dfe50cfa65202e1d9bf6295ea9cc4f11c0cc143b6fc79729d07e8ab1c1d3c3c6bf82a9ed7163fd15133c76dc583fd163c78df5133db6e6b9e67925c4d63cd73caf84d89ae79ae7526263b93618b96ea7df3fb5c778aa2bd7b87d64253fd5b97452e1715aa07d8823b6f6217dafa884d89ae79ae795105bf35cf3bc12626b9e6b9e57426ccd73cdf34a88ad79ae795e09b135cf35cf2b21b6e6b9bc3c6f80e7abc68127f07882223c8b84f1cc11c6335d18cf14613ccb84f1540be3592f8c673ceee72b856797309eedc2787a84f12c16c6b35c18cf5c613c79613c3384f1740ae3992a8c678b309e1a613c1b85f1e484f1ec11c6b34418cf3c613c3385f1ac10c69315c6532b8c6793309ed5c278960ae3d92b8c67b7309e3e613c3b84f1f40ae3e912c6335f184fbb309e66613cadc278ce13c6532f8c67ab309e3a613cab84f1ec13c6b35618cf02613cb384f13408e36914c6334918cf3a613c3b85f16c13c6d32d8c67a1309e0e613cb385f1ac14c6334d184f93309ecdc278260be3c908e0c90667ff2659169edf0fbe2aefb5f67aa0ad79e4f92b9dbf0a5e73952b57471cfb4af0d177c3af8a782dea7425b4a5df95734f6e0b75c258fdb04ff1ea81e32a213c9385f16c16c6d3248c679a309e95c278660be3e910c6b350184fb7309e6dc278760ae359278c6792309e46613c0dc2786609e359208c67ad309e7dc2785609e3a913c6b355184fbd309ef384f1b40ae36916c6d32e8c67be309e2e613cbdc2787608e3e913c6b35b18cf5e613c4b85f1ac16c6b349184fad309eac309e15c278660ae399278c6789309e3dc27872c278360ae3a911c6b34518cf54613c9dc2786608e3c90be3992b8c67b9309ec5c2787a84f16c17c6b34b18cf7e613ceb85f1540be359268c678a309ee9c278e608e359248ca72a8287e1ff5f863c74ff1a1d9bf6f70b89cd701ec2fffb7935539bae71c7aa75c7257e8a570375ae750385bdbf0a5f4b5cfefd86f8de740d68740d535be87c64bcf3c31c3b8ff75506c01078fa04113c1cf7a332b573541e26f8ff677356ab6b3dadfc73d70075ae06fdae65d02f2ab7ffda07dc631a992d0f5d9b116b16eaad17c248be2b7879c27ebb3e18bd15ebb7d7020fc718c6d4ceb07f5de7b5697d84ee540773f53a867646f51ddabf0ece43da982dcf465726d62cd4db2884917cd7f0f284fd6b63307a2bd6bfae031e8ef187a99d61ffbade6bd3c608dda90ee6eaf50ced8cea3bb47f3d9c87b4315b9e4dae4cac59a8b7490823f9aee5e5e9c8429b692bd6bfae071e8ef187a99d61ffbac16bd3a608dda90ee6ea0d0ced8cea3bb47f039c076556e62866cb43dfe122d62cd4db2c84917cd7b1f274e4b2d066da8a8d6337000fc738cfa47b388edde8b5697384ee540773f546867646f51ddabf3122764b90ac16378d418b9b22786e1a672d285ea9cc57a7905975569de3985567d5398e5975569de3985567d5398e5975569de3985567d5d96eaab3eaac3aabce4930abceaa731cb3eaac3ac731abceaa731cb3eaac3ac731abceaa731cb3eaac3ac731abceaa731cb3eaac3ac731abceaa731cb3eaac3ac731abceaa731cb3eaac3ac7314bd0d9f2d06f66116b16ea6d11c248beeb7979c2ef056d09466f196fbf1fca3701cf0d0cfa30b533bc87fc80d7a62d11ba531dec5f0718da19d57768ff009c87032530df984266d5b93c66cb43bf4d4fac59a8b7550823f96ee0e509c7b1adc1e8add83876007838c679a67686e3d880d7a6ad11ba531dec5f030ced8cea3bb44ff1945999e3982d0ffd8f2862cd42bd6d4218c977132b4f3efc7ee3b660f4566c1c1b009e0389f314c63106ddc371eca0d7a66d11ba531dccd5830ced8cea3bb47f10ce4329cc37a6905975569de3985567d5398e5975569de3985567d5398e5975569de3985567d5398e5975569de3985567d5398e5975569de39855e7cad1d9f2d0ff0a22d62cd4db2e84917c075879dac37587edc1e82de3edf743f920f00c24ce53587760d03d5c7738e4b5697b84ee5407fbd721867646f51dda3f04e761a233df984266cd8df161d6dc50e63866cd0d658e63d6dc50e63866cd0d658e63d6dc50e63866cd0d658e63d6dc50e63866cd0d658e63d6dc50e63866cd0d658e63d6dc50e63866cd0d658e63d6dc50e63866cd0d658e6396901b9667872b136b16eaed10c248be015e9ef0770f7604a3b762f7ed1c029e830cfa30b533bc6fe7b0d7a61d11ba531dec5f8719da19d57768ff309c076556e62866cbb3d39589350bf5760a6124df415e9e701cdb198cde8a8d63878187639c676a67388e0d7a6dda19a13bd5c15c1d64686754dfa1fd41380fcaaccc51cc9667972b136b16eaed12c248be43bc3ce138b62b18bd151bc7068187639c676a67388e1df1dab42b4277aa83b97a84a19d517d87f68fc0795066658e62b63cbb5d9958b3506fb71046f21de6e5c967a1cdb4151bc78e000fc738cfd4ce701cbbd96bd3ee08dda90ee6eacd0ced8cea3bb47f339c87b4315b9e3dae4cac59a8b7470823f9067979c2feb52718bd15eb5f37030fc7f8c3d4ceb07f1df5dab4274277aa83b97a94a19d517d87f68fc279481bb3e5d9ebcac49a857a7b853092ef082f4fd8bff606a3b762fdeb28f0708c3f4ced0cfbd731af4d7b2374a73a98abc718da19d57768ff189c87b4315b9e7dae4cac59a8b74f0823f9f0fd621f134fbdc7531fa1c5448cdde8c56eac90d84d5eeca60a89ad79ae795e09b135cf35cf2b21b6e6b9e67925c4aed45c53cd2b53f3cc39d43c730e35cfa8e62235ff4b72b13b1b8291ad0a621d656a276efd50c6f939da1609e399238c67ba309e29c2789609e3a916c6d3238c67b1309ee5c278e60ae3c90be399218ca75318cf54613c35c27872c2789608e399278c67a6309e15c278b2c2786a85f1ac16c6b354184f9f309e5e613c5dc278e60be36917c6d32c8ca75518cf79c278ea85f1d409e359258c67ad309e05c2786609e36910c6d3288c67bf309e49c278d609e3e916c6b350184f87309ed9c278560ae399268ca74918cf64613c19013cd9e0ecefa3e0f709aac147f7f7ef03dfd35c793ff8aa2262d0718e818fe673e918f6fd6a6df3d90c55f09a5b22b89e16118fe2dc12f1daf1d01d63f5c33ec5ab078e5b84f04c16c6d3248c679a309e95c278660be3e910c6b350184fb7309e75c2782609e3d92f8ca751184f83309e59c2781608e3592b8c6795309e3a613cf5c278ce13c6d32a8ca759184fbb309ef9c278ba84f1f40ae3e913c6b35418cf6a613cb5c278b2c2785608e399298c679e309e25c27872c2786a84f14c15c6d3298c6786309ebc309eb9c278960be3592c8ca747184fb5309e65c278a608e3992e8c678e309e45c278aa2278f633f1c4fd9ec27e01b1edbc375d0bd29c58169e1f8fef29edf71869ff2830920fefd3cd31f1c4fd06454e406cabc56a28db2d0bcfe3f74cb8722ae731d27e544ee17d96ab9978e27eb763b580d8560b5a1ba07b00b2f03cde57cd9553ab3d46da8fcaa9265e9ef07f4bac0a466fc5ee35c23ec7710e99da99c3fe97e06f6844fe16f52a4fab06a8331ef715c78d07144f9995398ed9f2d0da17b1e2fbd9787c6f692c8c51efaf0c3ce1f8d81a8cde8a8d8f478187e3fd83a99de13876dc6b536b84ee540773f538433ba3fa0eed1f8f88dd1224abc5893168712282e7c4386b41f14a65de9f4266093a5b1eba579358b3506fa51046f2e57879c2f17165307a2b363e9e001e8ef70fa6768663c249af4d2b2374a73ad8bf4e32b433aaefd0fe49380fa5301f4f21b3ea5c1eb3e5a1351a62cd42bdbc1046f21d65e5c9e7b2d066da8a8d63278187639c67d23d1cc786bc36e52374a73ad8bf8618da19d577687f08ce83322bb3322bb3322bb3322bb3322bb3322bb3322bb3322bb3322bb3322bb332cb66b63cf4dd6162cd42bd76218ce43bc1ca535877680f466fc5d61d8680e764e23c85750706ddc37587535e9bda2374a73a98aba718da19d57768ff149c076556666556666556666556666556666556666556666556666556666556666596cd6c79e837e489350bf53a843092ef242f4ff8bdad8e60f4566cdde114f070accb30b5335c77b8d56b534784ee540773f556867646f51ddabf15ce83322b7314b3e5a1df1e24d62cd4eb14c248be21569ec2fa6967307a2b368edd0a3c1ce33c93eee13876da6b536784ee540773f534433ba3fa0eed9f86f3500af3f11432abceaa731cb3eaac3ac731abceaa731cb3eaac3ac731abceaa731cb3eaac3ac731abceaa731cb3eaac3ac731abceaa731cb3ea5c393a5b1efa9f86c49a857a5d4218c9778a95a73d5c77e80a466fc5d61d4e030fc7ba0c93eee1bac319af4d5d11ba531dec5f6718da19d57768ff0c9c8789ce7c3c85cc9a1be3c3acb9a1cc71cc9a1bca1cc7acb9a1cc71cc9a1bca1cc7acb9a1cc71cc9a1bca1cc7acb9a1cc71cc9a1bca1cc7acb9a1cc71cc9a1bca1cc7acb9a1cc71cc9a1bca1cc7acb9a1cc71cc9a1bca1cc72c21372c4fb72b136b16ea750b6124dfadbc3ce1ef1e7407a3b762f7ed9c019ed30cfa30b533bc6f67d86b537784ee5407fbd730433ba3fa0eed0fc3795066658e62b63c3dae4cac59a8d72384917ca77979f25968336dc5c6b161e0e118e799da198e63b7796dea89d09dea60aedec6d0cea8be43fbb7c179481bb3e5e9756562cd42bd5e218ce4c3f7e55e269e7a8fa73e428b7315db6ad1e7cae7b9c72c3cdf078c5ce361afc748fb98e3e4ab079e3e269e468fa731428b7315db6ab116ca76cbc2f36b81912ba7fa3c46da8fcaa946e059cbc4d3e4f134456871ae625b2dd6b9f234f79885e7d70123574eadf518693f2aa79a80671d134fdc98b46e1c62c7f5aff1881d972be3115b3557cd5573d59c53f3cc39d43c730e35cfa8e6a23467b88e0ae77b2946000cb8f543193f2b705c7b32b53317f5796c9dd726fc3c86730ee7eaf386322b731c33d3bc4547d68b4dfa041e0f6dc3cc5a8ce7bc699fd7a634cc9b16633e9e4266d5b93c661bfbf6e4637764bdd8a44fe0f1d0763bb3164ced0cc7833b82688d295e03d4c13cbd83a19d19884bc7a6fd3be03c94c27c3c85ccaa7379cc36f69d89c72efc9e3cc6267d028f87b63b99b5e06967613cb82b88d698e235401dccd3bb18da9981b8746cdabf0bce83322bb3322bb3322bb3322bb3322bb3322bb3322bb3322bb3322bb3322bb332cb66b6b19f9e78ecc2fc3dc6267d028f87b6a7336bc1d3cec2fcfddd41b4c614af01eae039bf9ba19d19884bc7a6fdbbe13c28b3322bb3322bb3322bb3322bb3322bb3322bb3322bb3322bb3322bb3322bb36c661bfb19c9c70ebf8f83b1499fc0e3a1ed19cc5a30b5339cbfbf2788d698e235401d3ce7f730b4330371e9d8b47f0f9c076556e628661bfb9989c72eace7616cd227f078687b26b3163ced2c8c07f706d11a53bc06a883e7fc5e867666202e1d9bf6ef85f3500af3f11432abceaa731cb3eaac3ac731abceaa731cb3eaac3ac731abceaa731cb3eaac3ac731abceaa731cb3eaac3ac731abceaa731cb3ea5c393adbd8f7251ebb3d9cbfc7d8a44fe0f1d0761fb3163ced2cccdfdf1f446b4cf11aa00ee6e9fd0cedcc405c3a36ed53bc4a603e9e4266cd8df161d6dc50e63866cd0d658e63d6dc50e63866cd0d658e63d6dc50e63866cd0d658e63d6dc50e63866cd0d658e63d6dc50e63866cd0d658e63d6dc50e63866cd0d658e63d6dc50e63866cd0d658e6396901b36f6b3928f1d7e9f1d63933e81c743dbb398b5606a6778ffcb0341b4c614af01ea609e3ec0d0ce0cc4a563d3fe03701e945999a3986dec07938f9dcf7ab1499fc0e3a1ed41662d98da198e070f05d11a53bc06a883e7fc21867666202e1d9bf61f82f39036663c7f93938b1ddeb74931aadca3f53ddb95abc1f71c57ae01df735db9167ccf73e53af03ddf952781ef05d01ef2bdd0955780ef45aebc0e7c2f76e5b5e07b892bf781efa5aedc0bbe97b9f230f85eeecab781ef15ae7c3bf85ee9ca7780ef55ae7c27f85eedca7781ef35aefc74f0bdd695ef06dfeb5cf919e07bbd2bdf03be37b8f233c1f74657be177c6f72e5fbc0f76657be1f7c6f71e525e07b38c2f756577e16f8dee6ca0f80efedaebc1f7cef70e529e07ba72b4f05dfdf41991edfe5cae781ef1157ae07dfbb5db9017cef71e546f0bdd795a781ef7daedc04bef7bbf274f07dc0956780ef83ae3c137c1f72e566f07dd8956781ef23ae3c1b7c1f75e539e0fb982bcf05dfc75d791ef83ee1caf3c1f749575e00be4fb9f242f07dda951781ef33aebc187c9f75653cbf7fefca0f828fc69587c047e3cab3c147e3ca73c047e3ca73c147e3caf3c047e3caf3c147e3ca0bc04779f742f051debd087c94772f061fe5dd4bc04779f752f051debd0c7c94772f071fe5dd2bc04779f74af051debd0a7c9477af061fe5dd6bc04779f75af051debd0e7c9477af071fe5dd1bc04779f746f051debd097c94776f061fe5dd5bc04779f730f828efde0a3ecabbb781afc595df0ebef35df91de0bbc095df09be0b5d19c7998b5cf95de0bbd8951f011f8d85ef06df535cf93de05beacaef05df32577e1ff896bbf2fbc1b7c2953f00be95aefc41f0ad72e50f81afd5953f0cbed5aefc11f0e55cf9a3e06b73e58f812fefca1f075fbb2b7f027c1daefc49f075baf2a7c0d7e5ca9f065fb72b7f067c3daefc59f0d1fb388d33b63fdb3e483a9046d6476d6e8d680bf926435bfa8364afe928161d9bf6db8191ce417efc19f363656cf3182d4f2783669857b415fbccd4093c1d0c3c4ced0c3f3375796d6af7dad400759e02edec62686706e2d2b169bf0b62739c73d4a2d61d77a9a7450dd6716f68f6bdb3988e740c9bbff988b6f432b7858e4de352ef38c4eef662e7bcd8381ed356ac7f7503730f03b33d6e5ff2c70dfbd71a772cca298a938336ad050d926a13c6ce38a338e4af81f2bce691ba548ff4a0f72f62b7b94ce712d9fdd7757aaf6b803abd11edef0f926d7f9fc7d3e731db73d2d83cc2c1d01fc21ce8f538683f07daf5c568d70bda511d7cffcb3369d7e3f1f478b12d0f5de374818fae15881fafb35ac781db1ff7ba22b8c9d70d8c51d73a6dc93316bdd6690346f2f5004f379366feb95eeae983efcb755e1d7a6d0dd4590def8dd988bab6df2dc98cb48b3e83ff2548764caf63d00be70702d027f0340c402f6a672d03cfd460648ee0ccf0d0e9819b072f1b1c389c01b41a0f131f3311cda8021f96ab237c41307a2a04a764692a04a764ab3c59700a86eadb8f52b65934dd3078e2d8f0534f0e9e3c74faae53c38387f70cdd8cd4b51e3d92c6b50049d147dbe46064d2a63f487631a6ce8b552c7926c3e3a4e479da98da19bee94df1da54e7b5a901ead4c2735318da9981b8746cda9f12113bc18128d462ea18b4981ac133759cb5c0896ff2614fa5e771f1a4ca6b0bf6686c939fe7893688022e81e3671c9c7dce76f65ad79849c1c8c9a6d1d3cea8daab5a7b22ec0ca97de7b233a07608b2339c7646d3bea9d9194b3b43696724ed0ca49d71b4338c7646d1ce20da19433b43d812146600ed8c9f9de1b3337a1703db1781d77eaab6ef907646cecec0d919377b65653fb1d9ab117bf56daf14edd581bd2ab09f2ced2c837db7b55732f65ddabeb3da2b457b8568afe8ed15ae5da55a6f6c83d37aa3b14dc6361bdb626cabb16dc6b61bdb616ca7b15dc6761bdb636cafb17dc62e31766950985dbfccd8e5c6ae30f65463571abbcad8d5c6ae3176adb1eb8c5d6fec0663371abbc9d8016303c60e1a3b64ecb0b14163478cdd6ceca8b163c69e66ec96a07087ce0963278d0d193b65ec5663a78d9d090a2b667685ccae88d91530bbe26557b8ec8a965dc1b22b567685caae48d915a8fb82c20a935d29b22b437655c0ae02d8597f3bcbffdca0308b6f67ed5f101466e5ed2cbc9d75b7b3ec7656ddcea2db59733b4b6e67c5ed2cb89df5b6b3dc7656dbce62db596b3b4b6d67a5ed2cb49d75b6b3cc0f078559643b6b6c6789edacb09d05b6b3be7696f791a0308b6b676ded2cad9d95b5b3b076d6d5ceb2da59553b8b6a674ded2ca99d15b5b3a076d6d3ce72da594d3b8b69672ded2ca59d95fc9cb1478dfd83b17f34f64fc6fed9d8bf18fb57639f37f60563ff66ecdf8dfd4750c8cbff34f625635f36f615635f35f635635f37f60d63df34f62d63df36f698b1ef18fbaeb1ef19fbbeb11f18fba1b11f19fbb1b19f18fba9b19f19fbb9b15f18fba5b15f19fbb5b1df18fbadb1c78d3d61ec77c67e6fec0fc6fe68ec4fc1c8ea060e227f763b34d33e303c3c78e2d470cbf050cb89db8e0f1f3b75fcae963b8e0d1f6d19ba7df0f491e34377e08bdfe5862d5a46d878faf4c05d2dc74e1e1ebcb365e8b6e196a1232d07876e3b79f80cbee8f3ee450bce8e3870f8707cb06f573d09d2ef9519f4d7ee75b440b3b378db1e2f47903f95f3a219d5e535e812f7ae439fde2f2f5cedb69c393e34dc926b3969fe0e1c37af193cdcda82cf9d31229f196e39333c707ab8e5c8e9a1132d6dad78dc6ba694d1889ae6325ed4da3cf69607ff0f1d686fac2d0a0400", + "bytecode": "0x1f8b08000000000000ffed9d77745cc5f5c7dfaab92c5a59b6e55e44735ce5d5aacb4deedd6020f462d996b1836d195bb4100204484f20a41708a9900224a492427aef8d407a854012f8fdf33bf99ddfef1cce6fe6eddce8abf1bc8d767923dfa7bdef9cab9d7777f6ddcf7cdf9dd9b7336f57a920bf3dab2c65ca95ca4e0d8edfe8f91ef3987d7e5b738cc7cafae44c2584b322219c9509e1ac4a08677542386b12c23926219c6313c2392e464ecd56110cdde2e61def41d7b819d309d3f4a404685a9b304d3309d0b42e48c6183521219cf509e19c9810ce4909e19c9c10ce8684704e4908e7d484704e4b08e7f48470ce4808e7cc8470ce4a08e7ec8470ce4908e7dc8470362684f3e484709e9210ce5313c2795a42384f8f91731170ce338f2f308ff3cde302f3b8d03cd26b169bc725a68d5566bf49d952cda6acd97a2ea7ac4559abb236ebb976651dca3a957599e71acd73ddca96295bae6c85b295ca56191d562b5ba36cadb275cad62bdba06ca3b24dca362bdba26cabb26dcab62bdba1ec0c65672adba9ec2c65672b3b47d90b959dabec3c65e72bbbc062b950d945ca2e567689b24b955da66c97b25e65bb95ed51b657599fb27dca2e57b65fd901652f527685b283ca0e293bacac5fd91165572a3baaec98b201655729bb5ad935caae55769da5d98b955dafec25ca6eb0385faaec46653729bb59d9cb94dda2ec5665b7297bb9b257287ba5b257297bb5b2d7287badb2d7297bbdb2db95dda1ec0dcaee54f646656f52f666656f51f656656f53f67665ef50f64e65ef52769761a18e70b7b2772bbb47d97b94bd57d9fb94bd5fd907947d50d9bdcaee53f621651f56f611651f5576bfb207943da8ec63ca3eaeec21659f50f649659f52f669659f51f659650f2bfb9cb2cf2bfb82b22f2a7b44d997947d59d957947d55d9d7947d5dd937947d53d9b7947d5bd977947d57d9f7947d5fd90f2ccd7fa8ec47ca7eacec27c6f753f3f8335397e6c57eaeec17a6fca879fca5797ccc3c3e6ebde657ca7e6df97ea3ecb796ef77ca7e6fca7f308f7f348f7f328f7f368f7f318f7f358f4f98c727cde3dfcce353e6f169f3f877f3f80ff3f84ff3f88c79d46baa6736e4cb6383c1ad2788698c6add97d56b2a24febc60e8a6b5a834cfd163a3f157997d7a24edaacd7eb5e5af31fb35d671c69afdb196bfdeecd75bfe49667f92e56f30fb0d967faad99f6af94f33fba7813f1dc09cabf16b5fa571a5c047f95a01be6ae3ab045f0d1d0e7c638caf1a7c747e6bc037cef8c6806fbcf18d055fdaf8c69196ca4e32be9e20ae5cc9f6eae3d6c67d5cb30e95899f778f3e6e9d27de09f1f3f6e9e3d67be0d5f931d11c6b02e4cd24e3ab07df64e39b083e3304fdbbcf69df14e39b0cbea9c6d700be69c637057cd38d6f2af86618df34f0cd34bee9e09b657c33c037dbf866826f8ef1cd02df5ce39b0dbe46e39b03be938d6f2ef84e31be46f0d13d2e2783ef34e33b057ca71bdfa9e0a3b1f634f0d1b5e1e9c6a7c789b129788df1d31815be86c667f0cda7b1197c0b685c06df421a93c1b70862936f318c2be45b627c3446e9e7ba4db92788ab4fe4c23eb12ceee3aa23ebe3ae88ffb8e1baddca6050eb1e88b30cb45a65ca31de1bd48cb153c6280ef9aba0bc19ea523dd283de67885d8ffbcb4d795581d7755bafcb409de58ef6f704f1b67f85c5b3c262ae86f6fbc9d9969ce4ecb0b7a273f63ca86be71e5df38cc69cdd061c1e72b65d7276d85bd139db0775eddca3ebded198b3170287879cedf593b3b9ace46c7e8e2c08dcb9479f7d4663ceee078ef873b64d7276f85bd1397b33d4b5738f3eff8ec69cbd1a38e2cfd98e5eb93618f65674cede0e75eddca3b998d198b3b70287879ced937176d85bd1397b17d4b5738fe6054763cede091cf1e76c97a79c6d919c0df2eb9d41e0ce3d9aa31e8d397b0f70c49fb37b647e76f85bd139fb30d4b5738fd64b4663ce3e60ca7a9de1a7669d6116f87e667cb38137fedcdedbea29b77392dbf9fb4082c09da3b476371a73fb1153d679fc28dc7b40be5f1adfc9e07bccf84e01dfe3c6772ab4cb431fe8953e30ecade83ef06ba86be732ad238fc63ef063e0f090b37b246787bd159db34f415d3bf7e89e86d198b3bf030e0f39db27393becade89cfd17d4b5736fbe298fc69ca5fb4af5f5c21fccf5c242f0fdd1f81681ef4fc6b7187c7f36be25e0fb8bf13581efafc6b7147c4f185f167c4f1a5f33f8fe667c39f03d657c2de07bdaf85ac1f777e36b03df3f8caf1d7cff34be0ef03d637c9de07bd6f8ba8c4fdf9347f75e7dd7f8f4b9258d7a8278cf2ddd6349c7a6fdc52310bbce8a5d3782b1ebadd8f58ed84b3cc44e430cda52d67e0f9497f8e5c96682a1dfffa0584be38fd5a2dbde140cbfed4b8127eba1ed6988311c9e2cf034c7cf13deeb9b8bffb8e1396eb2344d43ac2668578b8776a520161d9bf6295e067c387eb738185be367cca520161d9bf65b81917cf87e42efebd47ff4fbe1bcd420af87be145e13513cfaed2fe2580a7eaaf3cce441b68586ad169ec7f7d666cbe7292fc3bca058746cdaa778b5d09ee69167cc0d97316b31fa1a2352108b8e6dc7c6febe64e4351bd679cd80ef048c49b952c7a45a601b89eb94a873cd25b68ff7ab14c4a0b18d34cf819fea4c315f48d063db4618773df4bf5cb1d76f381ec49fc7b92cf6ebe1f0b4008f8fbeefa9bf66f17dffb920de5c6bb3b46ab6b4ca409d56d0afcd837e85ae43289e300bb3300bb3300bb3300bb3300bb3300bb3300bb3300bb3300bb3300bb330f367c6fb2f707d93ea2d66c248be1cf0f898e70f7f3fca1c8b8eafd7751e83759df8d72d72595cb3a47b0c17586dae823a4fa706ebfe06d6d3edb5415cd35cec57bb61dd67511b1cbf16eb730d316a1dd8b57ed9185becdc1e5feb6d7586b9c9d275b143530ff7a90cd13465698af7292eb278749e4eaf1c64f3b1f657ec5a246a45e538d7f6f01e03bfe7253f7e502e540443c70f7c9f698f3df6d0354c5a2f6fb76257419dff490d9e1bba1795fecfa17dcf93aed3611d9b5eb300fc1dd6b12798d71247b575fc26782dd5f93f1853efae08fead998ffb3f705c0ea0adb8f54019d7cde37f1fceafe3b714c1d3063c3ec6194fd71b59ec0371afe377585ab9ae63a84e3be8d7e1413fd7b528ed533c61166661166661166661166661166661166661166661166661166661166661e6cf8cdf1525d634d4cb31611ca17b1fc2f50cfafd173abe5ed7796dc5605cdfeb70b4e6b4d06a7315d4f941c560dd3b4cb93638fe7e87a873e9613dafe0b9a478b5d01e5c0bf2f57dee568ba7d5a105951b638b9d5fc78f5fe3c175fc164bd79c43535ffd15d7585153ecafcd160fae8dd606c7df5b9286e38cc4bd43517941f1b02fb5828fcaf8fd681fe719df4becfb7a281eae5fdf67b49d10f83af7b9accf71a313dad4131c9fdf5550e77e18fb1e3465bc8703ef1d79c4f13c6d85d6a9493fdde6d87fcb2e9b5ff75d069c3d1007632f07d698623763ec94318a43fe2a287fb162b02ed5233d486b62d77d847e130cd9edd7355bafcb409d2e47fb7b8278dbdf6df1745bccfa9c3c0479f608bcfffb1a93ba22345a001a511dbc0ef2754f9e3d46daf737e27d7b35561dbc66a13adf84312aeafe51d73d87bedec7a2ee39745d1bb701a3dd46fb3ecf72bf4feb51182fe2be4feb51c821bc4f2bb08ebf108e4f5c3541f47b0bd5f995757cfb9a9c5e83f781519ddfc2785167ee59ac0d8ebffec67ba646e2f355d47dd2140faf6bb06fffa7b66be64ea8df132333e604b2e07502d579d23a671d11dc4b1daf7d3ae2b5a415fd0e157e7eb1f5d33a74c16b7a62d121dfe7bbadb6505e77415ba8ce7f59d780f15fb7e4af01e36febd06b121a075a1d6da53aff0d7ded5f708d47e7093f77d4541eff3c6d85ae01493fdde691fe7d608ccde1f781ab2b07ebdabff34b5a17fbfbc0edd6eb38fe3ef0ff429ed5c07de8bec6eae5111a2d048da80e7e3788de47f0b77c5def31beeeed8f7a8f71fd06258ecf759523cf66cfabb9ae11a80ebd16af11261be6094667bbae3d5f48ef9771de378cdf956882b8f85d89264f7a6641b71ed8c7eb8213193beb2976d46f4e67472076d46f4e8f44ec7a2b76fd08c616cd45734e9a7bf84de4f0fb67f89ba57a2b745d4a0c19785d4502182b13c0589500c6ea0430d62480714c0218c72680715c0218c72780310d8c27f2bddd833eb952f5f175be0a5d6b606c0fffbb2457ecffeff0fcbf540a5efb606c0f9fe9422d9604c3d7023fe7f9f8ed8762ffd70b31e0ff2e989800c64909609c9c00c68604304e4900e3d404304e4b00e3f40430ce4800e3cc0430ce4a00e3ec0430ce4900e3dc0430362680f1e404309e9200c65313c0785a02184f4f00e33c618c8571915fc65ca98c9ac7c7fffc7b3eff73cc034fd675cfa9a7ef9e14fdffd63cff3e6973a9bf1b87f796f8fd9f70cfefb7ed7cdc3b52ec6fdb15fa7fab9e1873a532faba8f1dbfc7331c1efc5ea4ebbb351e1873a532fafafe0b7e476f383ceda0599b43330f8cb952197ddd2b57ecbd9c784f7fbb43330f8cb95219f1beea187942cd3a8ae0e904cd3a1c9a7960cc95cae8ebbee434c4180e4f1768d6e9d0cc0363ae54464fdf6d0b35eb2a8207bf03d6e5d0cc0363ae5446cdb3cc9366dd45f02c03cdba1d9a7162449eb87f27bbdb11cbc777068b6d3b3120e3b804308e4f0023de27e163fc2a749f44b75f7d72a5eae3eb7c15ba4f02637bf87e4ca8057e1fe23f69b1c22f4fc1fb2430f64a4f5ae0f755fe93162b81c7c7f767d21063383cc49081d74d4c00e3a404304e4e0063430218a72480716a0218a72580717a02186724807166021867258071760218e72480716e0218f1b3aa876bc5829f5f568ef2d8519f55467beca8cf25a33db6e4b9e47939c4963c973c2f87d892e792e7e5105bf25cf2bc1c624b9e4b9e97436cc973c9f372882d792e79ce297612e6f88571f431224f637c3c596c3bc6ea61d0f61e074fca53db31d66a066d2786a431ae4a00e3b204308a8ef97b104b61d43c6b3cf1ac2e82670df0acf5c4b3a6089eb5c0b32e7e9e30a7d616c1430c1978ddb20430ae4a00a3e8283a6ad35bf6f96da22323c624e8288cc2288cc27822189330860b6322f231572aa3e6591f3f4fa8d9ba2278d68366f4ba66bf8cb9521935cf86f87942cdd617c1b301345befd0cc0363ae5446cdb3317e9e50b30d45f06c04cd363834f3c0982b9551f36c8a9f27d46c63113c9b40b38d0ecd3c30e64a65d43c9be3e70935db5404cf66d06c9343330f8cb9521935cf96f87942cd3617c1b30534dbecd0cc0363ae5446cdb3357e9e50b32d45f06c05cdb63834f3c0982b9551f36c8b9f27d46c6b113cdb40b3ad0ecd3c30e64a65d43cdbe3e70935db5604cf76d06c9b4333ae8ccb12c0b82a018c9e75cc95caa8797678e2d95e04cf0ee039c313cf8e2278ce009e33e3e70973ea8c2278882103af5b9600c6550960141d45474e8ca263f9e8288cc2288cc531f6248051ceb5307265f4f0f9aae07768ce18e5b1ebacd87565123bea3b34a33db6e4b9e47939c4963c973c2f87d892e792e7e5105bf25cf2bc1c624b9e4b9e97436cc973c9f372882d792e795e0eb125cf25cfcb21b6e4b9e47939c4963c973c2f87d892e792e7e5105bf25cf2bc1c624b9e4b9e97436cc973c9f372882d792e795e0eb125cf25cfcb21b6e4b9e47939c4963c973c2f87d892e792e7e5105bf25cf2bc1c624b9e4b9e97436cc973c9f372882d792e79ce29f6cef863e78afd8d999dc0e3e3376f3cb533ab8f7b9639d67331eaa7b53adbd2ea0c4bab0cd4390bf43bdb837e29884bc7a67d8a572cf30b18307b8a9dab0b86f66b8ab1cad243d739c753dba3c6fa734679eca8b17eb4c78e1aeb477b6cc973c9f372882d792e795e0eb125cf25cfb9c4c672753078dd4ebf7faa8ff14253ae32fbc84a7eaa73e698fce38440fa908fd8d287e4bda21c624b9e4b9e97436cc973c9f372882d792e795e0eb125cf25cfcb21b6e4b9e47939c4963c973c2f87d892e7fcf23c03cf578c004f60f1040578e630e399c68c6722339e71cc781630e3a964c6b39219cf48dccf570ccf16663c1b99f17432e399cb8c6721339ee9cc7872cc782631e36963c6339e19cf3a663c55cc785633e3c932e3d9c68c671e339e19cc782633e359c48c27cd8ca79a19cf1a663c4b99f1cc67c6b39d19cf56663cddcc783631e3e962c6d3ce8c6726339e16663c0dcc789a98f19cc48ca79619cf7a663c35cc789630e3d9c18c6739339e59cc78a630e3c930e3a963c6338619cf0a663c9b99f16c60c6d3c18c6736339e56663c5399f12c66c63381194f3d339eb5cc78c632e34931e04907c7ff26591a9edf09be0aebb5fa7aa0b961f0f9738dbf025e739e29573a8e7d2ef8e8bbe1e7395e8b3a9d0b6de931e5ecf3db429d30560fec53bc5ae0388f09cf58663c6b99f1d433e399c08c6731339ea9cc785a99f1cc66c6d3c18c6703339ecdcc785630e319c38ca78e194f8619cf14663cb398f12c67c6b38319cf12663c35cc78d633e3a965c67312339e26663c0dcc785a98f1cc64c6d3ce8ca78b19cf26663cddcc78b632e3d9ce8c673e339ea5cc78d630e3a966c69366c6b38819cf64663c3398f1cc63c6b38d194f9619cf6a663c55cc78d631e319cf8ca78d19cf24663c39663cd399f12c64c63397194f27339e8dcc78b630e3d9c98c6725339e4a663c0b98f18c63c6339119cf34663c7398f15438783cfcffcb9087ee5fa363d3fe4e26b13d9c87f0ff7e9eefa94d179863559be3123fc5ab823a179a8142df5f85af252efb7e437c6fba0034bac0535be87ca4acf3e339760eefab0c8021b0f4091c3c3eee47f5d4ce217918e3ff9fcd6aad2eb4b4b2cf5d06ea9c0ffa5de8413f576effbb0f98c724326b1eba3623d634d45bc984917ce7f8e509fbedca60e856a8df5e083c3ec6304fed0cfbd745569b563a74a73a98ab177968a7abefd0fe45701e92c6ac79569b32b1a6a1de6a268ce4bbc02f4fd8bf560743b742fdeb22e0f131fe786a67d8bf2eb6dab4daa13bd5c15cbdd8433b5d7d87f62f86f3903466cdb3c69489350df5d6306124df857e795ad3d066da0af5af8b81c7c7f8e3a99d61ffbac46ad31a87ee540773f5120fed74f51ddabf04ce83300bb38b59f3d077b888350df5d6326124df455e795ab36968336d85c6b14b80c7c738ef49f7701cbbd46ad35a87ee540773f5520fed74f51ddabfd411bb3188578bcb86a1c5650e9ecb46580b8a572cf3f90964169d45e72866d159748e62169d45e72866d159748e62169d45e72866d15974d69be82c3a8bcea2731ccca2b3e81cc52c3a8bce51cca2b3e81cc52c3a8bce51cca2b3e81cc52c3a8bce51cca2b3e81cc52c3a8bce51cca2b3e81cc52c3a8bce51cca2b3e81cc52c3a8bce51cc1c74d63cf49b59c49a867aeb983092ef62bf3ce1f782d60543b794b5df03e5cb80e7120ffa786a67780ff92eab4deb1cba531dec5fbb3cb4d3d577687f179c875d45305f9a4066d1b93466cd43bf4d4fac69a8b79e0923f92ef1cb138e63eb83a15ba1716c17f0f818e73db5331cc77aad36ad77e84e75b07ff57a68a7abefd03ec51366618e62d63cf43fa288350df536306124df655e7972e1f71b370443b742e3582ff0ec8a9d273f8e79d03d1cc7765b6ddae0d09dea60aeeef6d04e57dfa1fddd701e8a61be3481cca2b3e81cc52c3a8bce51cca2b3e81cc52c3a8bce51cca2b3e81cc52c3a8bce51cca2b3e81cc52c3a8bce51cca2b3e81cc52c3a978fce9a87fe5710b1a6a1de46268ce4dbe595a7255c77d8180cdd52d67e0f9477034f6fec3cf975070fba87eb0e7bac366d74e84e75b07fedf1d04e57dfa1fd3d701e463bf3a5096496dc181966c90d618e6296dc10e62866c90d618e6296dc10e62866c90d618e6296dc10e62866c90d618e6296dc10e62866c90d618e6296dc10e62866c90d618e6296dc10e62866c90d618e6296dc10e628660eb9a179369932b1a6a1de26268ce4ebf5cb13feeec1a660e856e8be9d3dc0b3db833e9eda19deb7b3d76ad32687ee5407fbd75e0fed74f51ddadf0be7419885d9c5ac79369b32b1a6a1de66268ce4dbed97271cc7360743b742e3d85ee0f131ce7b6a67388ef5596ddaecd09dea60aef67968a7abefd07e1f9c0761166617b3e6d962cac49a867a5b9830926f8f5f9e701cdb120cdd0a8d637dc0e3639cf7d4ce701cdb67b5698b4377aa83b9bacf433b5d7d87f6f7c17910666176316b9eada64cac69a8b7950923f9f6fae5c9a5a1cdb4151ac7f6018f8f71de533bc371ec72ab4d5b1dba531dccd5cb3db4d3d57768ff72380f4963d63cdb4c9958d3506f1b1346f2f5f9e509fbd7b660e856a87f5d0e3c3ec61f4fed0cfbd77eab4ddb1cba531dccd5fd1edae9ea3bb4bf1fce43d29835cf765326d634d4dbce84917cfbfcf284fd6b7b30742bd4bff6038f8ff1c7533bc3fe75c06ad37687ee540773f5808776bafa0eed1f80f3903466cdb3c39489350df5763061241fbe5fecf0c4536bf1d43ab4188db1ebacd8756512bbde8a5d5f26b125cf25cfcb21b6e4b9e47939c4963c973c2f87d8e59a6ba279796a9e3a819aa74ea0e629d19ca5e6cfc517bb2d130c6e15106bbfa776e2d603659c9fa36d0e339e69cc782632e319c78c6701339e4a663c9dcc78e632e359c88c673a339e1c339e49cc78da98f18c67c653c58c27cb8c671e339e19cc782633e359c48c27cd8ca79a19cf52663cf399f17433e3e962c6d3ce8c6726339e16663c0dcc789a98f19cc48ca796194f0d339e25cc789633e399c58c670a339e0c339e3a663c3b99f18c61c6b382194f07339ed9cc785a99f14c65c6b39819cf04663cf5cc78c632e34931e04907c77f1f05bf4f50093ebabf7f07f85e64ca3bc157e18841c739003e9acfa563e8f7abe50dc73354c06bae7070bdc8118fe25ce178ed48e88eb17a609fe2d502c7154c78c632e3a967c6338119cf62663c5399f1b432e399cd8ca78319cf0a663c6398f1ec64c653c78c27c38c670a339e59cc789633e359c28ca786194f2d339e9398f13431e36960c6d3c28c6726339e76663c5dcc78ba99f1cc67c6b394194f35339e34339e45cc782633e399c18c671e339e2c339e2a663ce399f1b431e399c48c27c78c673a339e85cc78e632e3e964c653c98c6701339e71cc782632e399c68c670e339e0a07cf4e4f3c51bfa7b093416c3def4dd78234279686e747e27b4a3b2d46dadf0f8ce4c3fb74b39e78a27e8322cb20b6d6622994f59686e7f17b26be722a6b31d2be2ba7f03ecba59e78a27eb7632983d85a0b5a1ba07b00d2f03cde57ed2ba7965a8cb4efcaa97abf3ce1ff9658120cdd0add6b847dcec739f4d4ce2cf6bf187f43c3f95bd44b2cad32506724ee2b8e1a0f289e300b7314b3e6a1b52f62c5f7b391f8ded270185defaf1e78c2f1b12918ba151a1ff7038f8ff70f4fed0cc7b183569b9a1cba531dccd5831edae9ea3bb47fd011bb3188578b43c3d0e29083e7d0086b41f18a65de9940660e3a6b1eba579358d3506f311346f265fdf284e3e3e260e856687c3c043c3ede3f3cb5331c130e5b6d5aecd09dea60ff3aeca19daebe43fb87e13c14c37c3081cca27369cc9a87d66888350df5724c18c9b7df2b4f2e9b8636d356681c3b0c3c3ec6794fba87e358bfd5a69c4377aa83fdabdf433b5d7d87f6fbe13c08b3300bb3300bb3300bb3300bb3300bb3300bb3300bb3300bb3300bb3300b336f66cd43df1d26d634d46b61c248be435e79f2eb0e2dc1d0add0ba433ff01c8e9d27bfeee041f770dde188d5a61687ee540773f5888776bafa0eed1f81f320ccc22cccc22cccc22cccc22cccc22cccc22cccc22cccc22cccc22cccc22cccbc99350ffd863cb1a6a15e2b1346f21df6cb137e6fab3518ba155a7738023c3ed6653cb5335c77b8d26a53ab4377aa83b97aa58776bafa0eed5f09e7419885d9c5ac79e8b70789350df5da983092afdf2b4f7efdb42d18ba151ac7ae041e1fe3bc27ddc371eca8d5a63687ee540773f5a88776bafa0eed1f85f3500cf3c104328bcea27314b3e82c3a47318bcea27314b3e82c3a47318bcea27314b3e82c3a47318bcea27314b3e82c3a47318bcea27314b3e85c3e3a6b1efa9f86c49a867aed4c18c977c42b4f4bb8eed01e0cdd0aad3b1c051e1feb329e740fd71d8e596d6a77e84e75b07f1df3d04e57dfa1fd63701e463bf3c104324b6e8c0cb3e4863047314b6e087314b3e4863047314b6e087314b3e4863047314b6e087314b3e4863047314b6e087314b3e4863047314b6e087314b3e4863047314b6e087314b3e4863047314b6e0873143387dcd03c1da64cac69a8d7c184917c57fae5097ff7a02318ba15ba6fe718f01cf5a08fa77686f7ed0c586dea70e84e75b07f0d7868a7abefd0fe009c0761166617b3e6e93465624d43bd4e268ce43bea9727978636d356681c1b001e1fe3bca77686e3d855569b3a1dba531dccd5ab3cb4d3d57768ff2a380f4963d63c5da64cac69a8d7c584917cf8bedce589a7d6e2a9756871a2626b2dba4df924f39886e7bb81d1d778d86531d23ee638f96a81a7db134f9dc553e7d0e244c5d65a2c87b2ded2f0fc7260f49553dd1623edbb72aa0e78967be2a9b778ea1d5a9ca8d85a8b15a63cc13ca6e1f915c0e82ba7965b8cb4efcaa97ae059e189276a4c5a3102b1a3fad748c48eca9591882d9a8be6a2b968ee53f3d409d43c7502354f89e6ac34f7701d15cef7528c001870eb81327e56f071ede9a99d59d7e7b115569bf0f318ce399ca8cf1bc22ccc51cc9ee62d5ad3566cd227b078681bf0acc548ce9b765b6d4ac2bc6921e6830964169d4b63d6b1af8e3f766bda8a4dfa04160f6d577bd6c2533bc3f1e09ac0ad31c5cb401dccd36b3cb4330571e9d8b47f0d9c8762980f269059742e8d59c7be36f6d8f9df93c7d8a44f60f1d076ad672dfcb4333f1e5c17b835a67819a883797a9d8776a6202e1d9bf6af83f320ccc22cccc22cccc22cccc22cccc22cccc22cccc22cccc22cccc22cccc22cccbc9975ec17c71e3b3f7f8fb1499fc0e2a1edc59eb5f0d3cefcfcfdf5815b638a97813a78ceaff7d0ce14c4a563d3fef5701e845998855998855998855998855998855998855998855998855998855998859937b38efd92f86387dfc7c1d8a44f60f1d0f612cf5a786a67387f7f43e0d698e265a00e9ef31b3cb4330571e9d8b47f039c0761166617b38efdd2d863e7d7f33036e913583cb4bdd4b3167eda991f0f6e0cdc1a53bc0cd4c1737ea38776a6202e1d9bf66f84f3500cf3c104328bcea27314b3e82c3a47318bcea27314b3e82c3a47318bcea27314b3e82c3a47318bcea27314b3e82c3a47318bcea27314b3e85c3e3aebd837c51ebb259cbfc7d8a44f60f1d07693672dfcb4333f7f7f73e0d698e265a00ee6e9cd1eda9982b8746cdaa778e5c07c3081cc921b23c32cb921cc51cc921bc21cc52cb921cc51cc921bc21cc52cb921cc51cc921bc21cc52cb921cc51cc921bc21cc52cb921cc51cc921bc21cc52cb921cc51cc921bc21cc52cb921cc51cc921bc21cc5cc213774ec97c51f3bfc3e3bc6267d028b87b69779d6c2533bc3fb5f6e09dc1a53bc0cd4c13cbdc5433b5310978e4dfbb7c0791066617631ebd8b7c61f3b97b662933e81c543dbad9eb5f0d4ce703cb82d706b4cf1325007cff96d1eda9982b8746cdabf0dce43d298f1fc8d8d2f7678df26c5a8308fdaf77253ae04df2b4cb90a7caf34e56af0bdca946bc0f76a531e03bed7407bc8f75a535e04bed799f20af0bdde949783ef7653ee06df1da6dc05be3798f200f8ee34e5abc0f74653be1a7c6f32e56bc0f76653be167c6f31e5ebc0f756537e31f8de66cad783efeda6fc12f0bdc3946f00df3b4df9a5e07b9729df08bebb4cf926f0dd6dca3783efdda63c0f7cf7387cef31e59781efbda67c0bf8de67ca3bc1f77e531e07be0f98f278f07d10caf478af299f04befb4cb9167c1f32e50cf83e6cca75e0fb88294f00df474db91e7cf79bf244f03d60ca93c0f7a0294f06dfc74cb9017c1f37e529e07bc894a782ef13a63c0d7c9f34e5e9e0fb9429cf00dfa74d7926f83e63cab3c0f759539e0dbe874d790ef83e67ca73c1f77953c6f3fb0553be157c34aedc063e1a575e0e3e1a575e013e1a575e093e1a575e053e1a575e0d3e1a575e033ecabbd7828ff2ee75e0a3bc7b3df828ef6e071fe5dd1de0a3bc7b03f828efee041fe5dd1bc14779f726f051debd197c94776f011fe5dd5bc14779f736f051debd1d7c9477ef001fe5dd3bc14779f72ef051dedd053ecabbbbc14779f76ef051dedd033ecabbf7808ff2eebde06b34e5f781ef64537e3ff84e31e50f80ef5453c671e63453be177ca79bf27de0a3b1f043e07b81297f187cf34df923e05b60ca1f05df4253be1f7c8b4cf901f02d36e507c1b7c4943f06be2653fe38f8969af243e0cb9af227c0d76cca9f045fce943f05be1653fe34f85a4df933e06b33e5cf82afdd941f065f87297f0e7c9da6fc79f0d1fb388d33ba3feb3e483a9046da476d6e72b4857c63a12d3d41bcd774148b8e4dfb2dc048e72037f28cb9e132365b8c9aa7cd83669857b415faccd4063cad1e783cb533fcccd46eb5a9c56a5306eabc00dad9eea19d29884bc7a6fd7688ede39ca316d5e6b8f32d2daab08e7943d3ef9d8574a463e8fccd39dad2e5b92d746c1a97ba46207687153b6bc5c6f198b642fdab03983b3d30ebe376c77fdcb07f2d33c7a29ca2385968d372d020ae3661ec94318a43fe2a28cf6818ac4bf5480f7aff22769dcb742e91dd7e5d9bf5ba0cd4e972b4bf2788b7fddd164fb7c5accf495dc3208787fe10e64097c541fb59d0ae3b42bb2ed08eeae0fb5fce93769d164fa7155bf3d0354e3bf8e85a81f8f13aab6904b8ed71afddc14dbe0e60745deb34c7cf58f05aa71918c9d7093c1d9e34b3cff57c4b1f7c5faeb1ead06baba0ce52786f4c3beaea7e372f35d82efa0cfe5c10ef985ee3412f9c1f08409fc0d23000bda89dd51e78c607837304c706fa8ff65ede77565fefde14a0555998f8987234a3027c58ae74f88260e854084ec9d254084ec95658b2e0140cd5d71fa574b368baa1efd08181171eee3bbce7e8754706faf66eebbf1ca9ab2d7a248d6a0192a28fb6b1c1e0a44d4f10ef624c8d15ab50f28c85c731f1f3347b6a67f8a637ce6a538dd5a60cd4a986e7c67968670ae2d2b1697f9c23768c0351a8c5f8616831dec1337e84b5c0896ff2614fa5e771f1a4c26a0bf6686c939de7b1368802ce83e3a70c9c7e4e77f66ad39831c1e0c9a6d153cfa8eaab5a7d22f40ca97ee7d233a07a08d2339c7a4653bfa9e9194b3d43a96724f50ca49e71d4338c7a4651cf20ea19433d43d818e46700f58c9f9ee1d3337aa703db7781577faad6ef907a464ecfc0e919377d65a53fb1e9ab117df5adaf14f5d581be2ad09f2cf52c837eb7d55732fa5d5abfb3ea2b457d85a8afe8f515ae5ea55aa96c95d17ab5b235cad62a5ba76cbdb20dca362adba46cb3b22dcab62adba66cbbb21dcace507666909f5d3f4bd9d9cace51f64265e72a3b4fd9f9ca2e5076a1b28b945dacec1265972abb4cd92e65bdca762bdba36cafb23e65fb945dae6cbfb203ca5ea4ec8a207f87ce21658795f52b3ba2ec4a6547951d0bf22b667a854caf88e91530bde2a557b8f48a965ec1d22b567a854aaf48e915a89b82fc0a935e29d22b437a5540af02e8597f3dcbffca203f8baf67ed5f13e467e5f52cbc9e75d7b3ec7a565dcfa2eb59733d4bae67c5f52cb89ef5d6b3dc7a565bcf62eb596b3d4bad67a5f52cb49e75d6b3ccf704f959643d6bac6789f5acb09e05d6b3be7a96f7be203f8bab676df52cad9e95d5b3b07ad655cfb2ea59553d8baa674df52ca99e15d5b3a07ad653cf72ea594d3d8ba9672df52ca59e95fca2b247947d49d997957d45d957957d4dd9d7957d43d937957d4bd9b7957d27c8e7e5f7947d5fd90f94fd50d98f94fd58d94f94fd54d9cf94fd5cd92f943daaec97ca1e53f6b8b25f29fbb5b2df28fbadb2df29fbbdb23f28fba3b23f29fbb3b2bf28fbabb227943da9ec6fca9e52f6b4b2bf2bfb87b27f2a7b46d9b3c1e0ea060e22ff323b34d3de3b30d077e8c840e3407fe3a1ab0e0e1c3872f0bac66b0e0cec6fecbfbaefe8be83fdd7e08bef35c3162d23ac3e7ab4f7bac60387f7f65ddbd87fd54063ffbec6ddfd571dde7b0c5ff40df3a259c747ecddbb373ad82f2a9e07e9e325067dc2bc8e166836176edb53a508f26c292f9a54595a83ce30ef3af4e9fdecfcd56ee3b183fd038dd9c6c3ea6fef41f59abebd4d8df8dc3125f2b181c66303bd47071af71ded3fd4d8dc84c7bd605c098da86a28e1454d0dc36f79f0ffa32be9722d0a0400", "isInternal": false } ], - "packedBytecode": "0x000000028df71de500000047ce1f8b08000000000000ffed9d779815c5b6f67b6040643b0398b3830915c56118e20cb03127cc2822220cc3080a0c51cc98250773468292b380802020869373f2243d1e4fbaf79e739efbc7fdeefd82dfeddabbd69d778aea61f6d8b579f7eceae7a9d9d56baa7bfdeaedd5d5a9baab20484fff0c5381ceb70cd399c18193fc3fa97f4bbfd9d435c67595bae42cc811ce1639c2d93247380b7384b3558e70b6ce11cec37284b34d8e701e1e23a7626b11d49fe2e66deb40d7b8191339a6e91139a069518e695a9c039ab60b72a38d6a9f239c1d7284f3c81ce13c2a47388fce11ce637284f3d81ce13c2e47388fcf11ce137284f3c41ce13c2947384fce11ce537284f3d41ce13c2d47384b7284b3638e709e9e239c67e408e79939c279568e709e1d236767e0eca47fcfd1bfe7eadff3f4af943d5fff5ea07fbbe83a16eaf90b155798d4439a32e37fddc2541ea6ee61ea61fcaf67987a85a97798fae8ff95e8ff5584a9324c7dc3d42f4cfdb50603c27451982e0ed32561ba344c9785e9f2305d11a62bc3745598ae0ed335611a18a66bc3745d98ae0fd30d61ba314c3785e9e6300d0ad32d61ba354c83c3745b9886182cb787696898ee08d3b030dd19a6e1611a11a6aa308d0c5375984685a9264c7785697498c684e9ee30dd13a6b1611a17a6f161aa0dd384304d0cd3a4304d0ed394304d0dd3bd619a16a6fbc2747f981e30347b304c0f85e9e1303d62704e0fd3a3617a2c4c8f87e989303d19a6a7c2f474989e09d38c30cd0cd3ac30cd0ed39c30cd0dd3bc30cd0fd382302d0cd3b3617a2e4ccf87e98530bd18a697c2f472985e09d3ab617a2d4caf87e98d30bda95964475814a6b7c2b4384c4bc2b4344ccbc2f47698de09d3f230ad08d3ca30ad0ad3ea30ad09d3da30ad0bd3fa306d08d3c6306d0ad3e630bd1ba62d61da1aa66d617a2f4cdbc3b4234c3bc3f47e9876856977983e08d39e30ed0dd3be307d18a6fd61fa284c1f87e993307d1aa66f85e9db61fa4e98be1ba6ef85e9fb86e63f08d30fc3f4a330fd58db7ea27f7faacbcafdbb9f85e9e73aff0bfdfb4bfdfb2bfdfb99b1ccafc3f41bc3f6db30fdceb0fd3e4c9febfc17faf70ffaf74bfdfb47fdfb95fefd93fefdb3fefd8bfefdabfefd9bfefd17fdfbaffaf7dff4efdff5ef3ff4ef3fc3b4b9633adf26a89b92414c6d54794dead98f88df29a83f292d5aeaffc96f89b617ea79f915ed5ae9f95686bdb59e6f6daca78d9e6f63d83be8f90e86fd283d7f94613f46cf1f63d88fd3f3c719f633f5fc99604f04706f58db95ada53615804de2b505d85a695b4bb0b596d581ed306d6b0536d9beadc176b8b61d06b6b6dad6066c096d3b5cb40cd311da960ce28a95d2116abd4571af573f2f2b8e9f77a45a6f3b47bcede3e71da5d6dbc101af8a8f23f5bada43dc1ca56d1dc076b4b61d09b663b4ed28b01dab6d4783ed386d3b066cc76bdbb1603b41db8e03db89da763cd84ed2b613c076b2b69d08b653b4ed24b09daa6d2783ed346d3b056c25da762ad874931b9c06b6d3b5ad046c67685b47b09da96da783ed2c6d3b036c676bdb996093f6f72cb0c9f9e2d9daa6da8ec30b60196d97762bb58cb4d9603b57da6bb09d276d35d83a4b3b0db6f3c1b7d82e80b6466c5db44dda2df5bf3e3a9f0ce2da4fca6ad47a2be25e6fb866b5debef1af37f5ccb15f50a77512fc548056fd753ec67e4d5dd177814ee247ec8590bf0aca4a39d1438e3dc2ae8e05953adfbf81e5fa18cb1543994a4bfd9341bcf5ef6bf0f435985b41de4dcc76ebe663b6d153c6313b18ca9ab127e741cd31660702878398ede963b6d153c6315b0365cdd89373e1e618b3b703878398ad7213b365a53e66d3f7cd82c01e7b723dd41c63760c70c41fb3dd7dcc367eca38661f87b266ecc93571738cd969c0117fccf6acf2e7068d9e328ed90550d68c3db93fd31c63f629e07010b335be9d6df49471ccbe0965cdd8937b85cd31669f038ef863b6b7a398ede66336483f030d027becc97debe618b38b8123fe981de9efcf367eca386677405933f6e4194a738cd9f53aaf9e33fc443f6738196c3fd5b6538037fed8aeeeee28b6cb7c6ca7fb8604813d46e5795e738ced0f745ec5f12fa03f82d87ea96d1dc1f62b6d3b1d6c9f69db19502f07fb4095df071a3d65bc0ffc06ca9ab12ccf969be33ef023e07010b3d53e661b3d651cb37f83b266ec493f87e618b3bf070e07315be363b6d153c631fb9f50d68cbd7374be39c6acf43555e70b5fe8f385f3c0f6076deb0cb62fb5ed7cb0fd51db2e00db57dad6056c7fd2b60bc1f6676d2b05db5fb4ad2bd8feaa6d6560fb9bb67503dbbf685b39d8fe55dbba83eddfb4ad07d8feae6d3dc1f60f6deb05b67f6a5b6f6d53fdf4a4ef959cb7b601fe6410efb6957e97b26e99ef9a05dfed0cdfedb2e8bb83e1bb83c5779903df09f0215381319f847c995b9ed262e0415fe5f1fbeaa6eade2d687cddcb81a7bb83ba27c0476378ba034f8ff87952fd7f7bc6bfded436ee66689a005fdda05ebd1cd4ab007cc9ba655efc15830ddbd65e16c6def1339615802f59b7ccf70646b1615b2fef5cc9fea38e879d0aea781dec4ba97322f127df2d138e72b04b992b3bd6b175d66c45f07f3ceef5306c8ee2321517e24bd62df3e2af08ead323fb8c658d65ec6e30ba6a230ac097acdbfbaedb0e92c7e3b8836b1d6b9b26be2bb2e0bbb7e1bbdcf08d6da74c0d1ddb7a0373ecd79cfad85619ff7a4bf1fa44ae0dc50f9e3fe0355c5c7542df726d287ec45e08f96b0beaca4a39d143da616157b12cdb12d9cde57a19cb1543990a4bfd9341bcf5af34782a0d66b54d2e8663a183fd211503150687cc9783769511da55807652e61cd0ce557bd6c7e091f91ec023ed584fe071754d14c5938debb183f9c67358bc7e96ffe37980abedd5d5609479dbf6ea0d8cb6731507d7330d9eab740746b1f5019e6e8e348bdaaedd487c3b8895547b243ee4dc5cf6df1e609732bdf50b75aaadbc1bda4a173182f1285363af79e3df4e65a96bf0ee19f0e0b673705dd5d5513c96e2fd9baf837863cd6c97ba1b5a45dde371d596773378645efc7966cfec993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367e667c6e749d86f4bcaf5206134fbbfb9bacf9ffafea15e97ac5f3dd7f93f4efb83959562ff18e907719e51e7422853d4a2aeecff87fe60e6732aec23d9c3ad76a96d89fd3193302ffeb0af156e4b86fe4e25b1f92e1be9ea799bea63adbea369f6fdec61d1d445ff67d4b4c0d014fbe39f6ff0a838ad6c59c7e6e2d95fa6cf22512bc9c7f96caf38b0c77afcdba5acde33eb1641fdf6038f33aefaef485b2dcfcb2b0cdf8550e6a41675db46fa56c918c3dd8ce5b0df8fac5b96390fec95c6badbeb6585a395b1fe9eb0ac943915dad4bd2dea3473d0569665da771d9f9bc77f1c4e3fc7ef96014f57e071d1ce383adf28c57d20eee7f866ff34db798c94c1be7d0efa5536d8df49fc7966cfec993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367e667563ce6b3567cbfb69c84314b7d1f52cf33e45b65b2fed4f7825bd4f975fd1c4e9e397536ea8cef8efeb3455dd9cd3a5f141cd8df216a5bbafa3e45d4b6147ff8ed197c16e4e2b96e01f892759759b4907c496cbed3cff15d8c0d21cff1bb19ba965b3475b5bfe23356d414f7d7ee060f3e1b8dfab64f996173d977282a2ec41fee4b6560933cbe1fed623be3b1c4ecd723fef0f9f577b4b6ed0357dbbeacd465bb81df4d490607c6377e4fe587d0f6fd58e7b10f07f61df9c2f27f991a7a4e2dfaa93a3bf8be666901ac4bb6afeddb9e03803526df5d715d053a0d30342884fce72deaca4a39292b5a0bbbda47e41b30c86e2ed7dd58ae18caf4b3d43f19c45b7ff35babfd0d66b54d7e0671f6051cff5db549fd22343a0f3492328ebfd968ed5f69f62bc476b4b5514696c56fd1fd15daa8a8fea3b66380ebe398acdb761c338f0b8de9e799effdb4fe0bda8bb8fb69fd17c410f6d30a8cf57786f50b57eb20fad82265fe9fb17ef39c5c96c17e60ffb39fc0f75cca743e9373f243757d653b27c7e5a2eaae98f13b68c9189931269005cf13a44c5badb56cb3ca08eede96658b229615adcc6f85150507eae7e63b6be97dbebf5117896bfc06b994390aeae2e6bc257d0ee8ea9b7249a893ca9759ea2a658e877ded449d4fc076c2fdf65ccbff656ae81c10c770bf28fe3aa7b6efc5c099043fe8fb12608dc97757f42de780e247ec85903fa7655d5929277a88d6c2aef611398f427673b90a63b9622833c052ff64106ffd2f32782e3298d5363905e2ec5ce887eeaaad1e10a15167d048cae03d45db77406df73a5cbdbf11752e85ef2f99e757789c7473de643f8f35efabd9ce113a1bfc788ed013dad984a5ac79bf508e9771f61bc677257a825f7c57c2d5b79bfb806e4998c7f38243e9dbc5776c95bfa83113fa64c177d49809d9f0ddc1f0dd218bbebde65e7326cd1d8c41907aff0cbf59aaa686ce4b715c0259ae0530ba18cb2111d4fff6f8c118717c0759ae2530ba383e64faedf39ec028cb1502a38b774b71fc8dc630e23786f1382f8c0ebe15dbb5a9df8ac57b7aad8191e99d4d7c36751830ba382f6eeabb7a783edf067e5d8d4bd42d03c6326094e50e074617f7c6f15aa6318c785d24cbb5054617cfb0321ddf09bf3d8ff7965d3236746c77dc17a52cd37b2f956e791a3cd740df0ec6354c6981f7190fa6455fb73c0d9efba06f07f7fd525ae0388307d3029f0dba18f73011d47f0e77301e7c7e29cb1d098c49478cfd33604c02e3ffdc2b06c6018e189319300e0046b11f0d8c0eeebfa6180764c088f72965b96380f162478c1765c0783130ca72c702a38b7ba909f0db18c64b8051963b0e182f75c47849068c9702a32c773c305ee688f1d20c182f034659ee0460bcdc11e36519305e0e8cb2dc89c0788523c6cb3360bc021865b99380f14a478c5764c0782530ca722703e3558e18afcc80f12a6094e54e01c6ab1d315e9501e3d5c028cb9d0a8cd73862bc3a03c66b8051963b0d18073a62bc2603c681c028cb9500e3b58e180766c0782d30ca721d81f13a478cd766c0781d30ca72a703e3f58e18afcb80f17a6094e5ce00c61b1c315e9f01e30dc028cb9d098c373a62bc2103c61b8151963b0b186f72c47863068c3701a32c773630deec88f1a60c186f06c69b2c8c831c31de9c01e3206094e5ce07c65be2674c5d4b0fca80f116e0b9357e9e9466b764c073ab5b9ed477f56eb1f8ba2d7e5fa96d3138687cdd6f039e21f1f3a4b6c56d19f00843312c879add1e3f634ab3211930de0e3c43e3e74969767b063c4341b3db2d9add113f634ab3a11930de013cc3e2e749697647063cc340b33b2c9add193f634ab3611930de093cc3e3e749697667063cc3833acdeeb46836227ec69466c333601c013c55f1f3a4341b91014f156836c2a2d9c8f819539a5565c0381278aae3e749693632039e6ad06ca445b351f133a634abce807114f0d4c4cf93d26c54063c35a0d9288b6677c5cf98d2ac2603c6bb806774fc3c29cdeeca80673468769745b331f133a6341b9d01e318e0b93b7e9e94666332e0b91b341b63d1ec1e478c7767c0788f8527eeef64df6df135ce51ddc7068dafbb3014c372d84f62bc23c67119308e0746590efb49d43a621c9f01632d30ca7209c78c0df593a805df13e2f79d6a976a83c6eb33c12d4f83fd24d0f744475a4c081aafc544b73c0df69340df931c69313168bc16938067b2032d12e0a3313cc2500ccb613f89298e182767c03805186539ec2731d511e3940c18a702a32c87fd24ee75c4383503c67b815196c37e12d31c31de9b01e3346094e5b09fc47d8e18a765c0781f30ca72d84fe27e478cf765c0783f30ca72d84fe201478cf767c0f80030ca72d84fe241478c0f64c0f82030ca72d84fe221478c0f66c0f81030ca72d84fe261478c0f65c0f83030ca72d84fe211478c0f67c0f80830ca72d84f62ba23c64732609c0e8cb21cf69378d411e3f40c181f0546590efb493ce688f1d10c181f034659ee1ec78c0d5dbf3cd6cc7d475dab3477df51d725cdddb78f731fe7f9e0dbc7b98ff37cf0ede3dcc7793ef8f671eee33c1f7cfb38f7719e0fbe7d9cfb38cf07df3ece7d9c33f97edc81ef04f890a9c0984f425e188a61b97b3c63b366449e92f8784ab1eee8eb0982ba3f61e129705477f4f52441dd8521d7181fcf01c67b7280d1eb98ee83d81446c5f394239e2733e0790a789e76c4f354063c4f03cf33f1f3a462eae90c7884a11896bb2707181fcf0146afa3d79189d1eb983f3a7a46cfe8193de3a160cc8536dc33e6443c96359551f1cc889f27a5d93319f0cc00cd64b95bdd3296359551f1cc8c9f27a5d98c0c78668266332c9a39602c6b2aa3e299153f4f4ab39919f0cc02cd665a3473c058d65446c5333b7e9e9466b332e0990d9acdb268e680b1aca98c8a674efc3c29cd6667c03307349b6dd1cc016359531915cfdcf879529acdc980672e6836c7a29903c6b2a6322a9e79f1f3a4349b9b01cf3cd06cae4533078c654d65543cf3e3e74969362f039ef9a0d93c8b660e18cb9acaa87816c4cf93d26c7e063c0b40b3f916cd5819efc901c6c77380d1b18e654d65543c0b1df12cc8806721f03ceb886761063ccf02cf73f1f3a462ead90c7884a11896bb2707181fcf0146afa3d79189d1eb983f3a7a46cfe81933637c220718fdb6f68cac8c0eaeaf1a7c87e6d966ee3bea1d9ae6ee3bea1d9ae6eedbc7b98ff37cf0ede3dcc7793ef8f671eee33c1f7cfb38f7719e0fbe7d9cfb38cf07df3ece7d9ce7836f1fe73ecef3c1b78f731fe7f9e0dbc7b98ff37cf0ede3dcc7793ef8f671eee33c1f7cfb38f7719e0fbe7d9cfb38cf07df3ece7d9ce7836f1fe73ecef3c1b78f731fe7f9e0dbc7b98ff37cf0ede3dcc7793ef8f671eee33c1f7cfb38f7719e0fbe7d9cfb38cf07df3ece7d9ce7836f1fe73ece997c3f1fbfefb24cbf31f33cf0b8f8e68da37a96aaf5bea0d7f5758cfa29ad5e34b47ad6d0aa18cabc00fabde840bf02f02beb9679f197297327026647becb54fb7238d45f7c3c6ee8a1fcbfe4a8ee516dfd4bcddc77545bdfdc7d47b5f5cdddb78f731fe7f9e0dbc7b98ff37cf0ede3dcc7398b6fccb70aeacedbe5fba76a1d2feb7ca19e97f24f805dca4c3e2cfddb3ef0fb900bdf7e1ff2c78a7cf0ede3dcc7793ef8f671eee33c1f7cfb38f7719e0fbe7d9cfb38cf07df3ece7d9ce7836f1fe73ecef3c1b78f73be382f86ff5766812730788206781690f14c25e3994dc6339a8c672819cf75643c1793f13c44c6534ec633818c672419cf2d643c5791f15c48c6d38f8c671a194f6f329e39643c7793f13c4dc6338c8ce706329e4bc9781e21e32923e39944c6338a8ce736329e6bc87892643cf793f1f424e339978c671c19cf5c329e73c8788693f13c43c67313194f31194f3b329ecbc9789e24e3b9808ca7828ce751329ef9643c53c878ee22e3b99d8ca7948ce75a329e2e643c1791f13c48c6d39d8c671e194f2d19cf0c329e2a329e41643ce791f15c49c6d3928ca72f19cf42329e7bc978fa90f18c21e3e94cc6730719cff5643c9790f13c4cc6d38d8c672219cf4c329e6a329ec1643c5793f1f427e3b98f8ca71719cf58329e4e643c7792f1dc48c6938def9966c27304194f1119cf65643c8f91f14c27e3e94ac633998c6716194f0d19cf10329e81643c03c8781e20e3e941c6339e8c670419cfcd643c4f91f1b427e3e940c67305194f01014f2238700c9304fcff79b0b53096559f7d9dd3b1eeffaf687b0b58e6559d6f6959f72b60936fc9be6a5916757a05ea92d4f9d26f36a574425f4998177f45c0f12a09cf15643c1dc878da93f13c45c6733319cf08329ef1643c3dc8781e20e31940c633908c6708194f0d19cf2c329ec9643c5dc978a693f13c46c67319194f1119cf11643ccf93f1dc48c67327194f27329eb1643cbdc878ee23e3e94fc6733519cf60329e6a329e99643c13c978ba91f13c4cc6730919cff5643c7790f17426e31943c6d3878ce75e329e85643c7dc9785a92f15c49c6731e19cf20329e2a329e19643cb5643cf3c878ba93f13c48c67311194f17329e6bc9784ac9786e27e3b98b8c670a19cf7c329e47c9782ac8782e20e379928ce772329e76643cc5643c3791f13c43c6339c8ce71c329eb9643ce3c878ce25e3e949c6733f194f928ce71a329edbc8784691f14c22e32923e379848ce752329e1bc8788691f13c4dc6733719cf1c329ede643cd3c878fa91f15c48c6731519cf2d643c23c9782690f19493f13c44c6733119cf75643c43c9784693f1cc26e3994ac6b3808ca7d2c2f3bc231e79df5dd62df3cf93f876b01d4ad57a5f7354a7d7f5ba5ae9f50abff82b8432d3dba67fd5fbe1b8ac7099df27c077735e078d5e775417d91e05c6f641df2f3bf22def68c9ba65fee566eebb9de1bb5d9ef8ee60f8ee9027be7d9cfb38cf07df3ece7d9ce7836f1fe73ece997c3bb83628c3efa4c95460cc27218fd70b2ebe2fe7a89ef5ae13bf8e513fa5d51b8656e6b5553194790df47bc3817eb66b4f99177f9932772260c6b82809e28d8b37e3af53996ab70e075ddf34f4c57a2d72a469d431645133f71d750c69eebea38e21cdddb78f731fe7f9e0dbc7b98ff37cf0ede3dcc73993efb7743ec6ebc652f4a19e2fcaf5c05be07789ce17c4e857ad6bb15e57a15eb7702c01bb94f9dff05cd3eff37e9f8fcbb73fb6f938cf07df3ece7d9ce7836f1fe73ecef3c1b78f731fe7f9e0dbc7b98ff37cf0cd1ce7665efa8b9f036caefaf347c56236de253894bea362b1b9fb8e8ac5e6eedbc7b98f7326df4b1df84e800f991aeae3b71478163be07154cfd4b38d65469d9e37ea540c65f018bfcc413d0bc0afac5be697018f4c95c0e3220e1ab3cd91670119cf54329ed9643ca3c9788692f15c47c6733119cf43643ce5643c13c8784692f1dc42c6731519cf85643cfdc878a691f1f426e39943c6733719cfd3643cc3c8786e20e3b9948ce711329e32329e49643ca3c8786e23e3b9868c2749c6733f194f4f329e73c978c691f1cc25e3194ec6f30c19cf4d643cc5643cedc8782e27e379928ce702329e0a329e47c978e693f14c21e3b98b8ce776329e52329e45643cd792f17421e3b9888ce741329eee643cf3c8786ac9786690f15491f10c22e3398f8ce74a329e96643c7dc9781692f1dc4bc6d3878c670c194f67329e3bc878ae27e3b9848ce761329e6e643c13c9786692f15493f10c26e379838ce76a329efe643cf791f1f422e3194bc6d3898ce74e329e1bc9788e20e32922e3b98c8ce731329ee9643c5dc9782693f1cc22e3a921e31942c633908c670019cf03643c3dc878c693f18c20e3b9998ce729329ef6643c1dc878ae20e32920e0490407befb9f80ffbf01367947fd79b0bdadf38bc1d6c2e2a3a5ce2f035ba1cecb3a0e0bd34b1d0f5c37eae4eabd7cf4958479f157041c6f93f05c41c6d3818ca73d19cf53643c3793f18c20e3194fc6d3838ce701329e01643c03c9788690f1d490f1cc22e3994cc6d3958c673a19cf63643c9791f11491f11c41c6732319cf9d643c9dc878c692f1f422e3b98f8ca73f19cfd5643c6f90f10c26e3a926e39949c633918ca71b19cfc3643c9790f15c4fc67307194f67329e31643c7dc878ee25e35948c6d3978ca72519cf95643ce791f10c22e3a922e39941c6534bc6338f8ca73b19cf83643c1791f17421e3b9968c6711194f2919cfed643c7791f14c21e3994fc6f328194f0519cf05643c4f92f15c4ec6d38e8ca7988ce726329e67c8788693f1cc25e31947c6732e194f4f329efbc97892643cd790f1dc46c6338a8c6712194f1919cf23643c9792f1dc40c6338c8ce769329ebbc978e690f1f426e39946c6d38f8ce742329eabc8786e21e31949c633818ca79c8ce721329e8bc978ae23e3194ac6339a8c673619cf54329e05643c95d9e12953efb64b5feb00b8704a427e19f02c72a08fa37a96e2770dbe8e71bd4aab770cadde30b42a86324b41bf771ce857007e65dd322ffe729159f13ca6f3b6ef403c46c228b6456e7952fbed6341fda9a1fdf61de071d1ae39aa676aff5a6ed4e9318bee52066375b9837adaf61d995f0edb21d79815cf933a2fac0928f72409a3d896b9e549ed5f4f06f5a786f6afe5c0e3a2fd7154cfd4feb5c2a8d39316dda50cc6ea0a07f5b4ed3b32bf02b643ae312b9ea7745e581350ee291246b1bde396a73c017596a9a1fd6b05f0b8687f1cd533b57fad34eaf49445772983b1bad2413d6dfb8eccaf84ede0993db38d59f1c8b31d614d40b9a74918c5b6dc294f796902ea2c5343edd84ae071d1ce3bd23dd58ead32eaf4b445772983b1baca413d6dfb8eccafb2f82e09e2d5627523b4586de1599d652dc45fa6cc4b7390d9ebec758e62f63a7b9da398bdce5ee72866afb3d7398ad9ebec758e62f63a7b9da398bdce5ee72866afb3d7398ad9ebec758e62f63a7b9da398bdce5ee72866afb3d7398ad9ebec758e62f63a7b9da398bdce5ee72866afb3d7594d5e67afb3d7d9eb1c07b3d7d9eb1cc5ec75f63a473133e8ac78e4db95c29a8072cf90308a6d855b9ed47b41cf04f5a702633e09f9d5c0b3d2813e8eea99ea43bec6a8d33316dda50cee5f6b1cd4d3b6efc8fc1ad80e9930afca4166af73d39815cf0c9d17d604949b41c228b6956e7952edd88ca0fed4503bb606785cb4f38eea996ac7d61a759a61d15dcae0feb5d6413d6dfb8eccaf85ede0993db38d59f1ccd479614d40b999248c625bed94a72cf57ee3cca0fed4503bb616785cb4f38e744fb563eb8c3acdb4e82e653056d739a8a76ddf91f975b01d32615e9583cc5e67af7314b3d7d9eb1cc5ec75f63a47317b9dbdce51cc5e67af7314b3d7d9eb1cc5ec75f63a47317b9dbdce51cc5e67af7314b3d7397f74563cb3745e5813506e1609a3d8d638e5e9967aee302ba83f35f4dc611df0b8782ee348f7d47387f5469d6659749732b87fad77504fdbbe23f3eb613b3477e65539c8ec63233bcc3e363c7314b38f0dcf1cc5ec63c3334731fbd8f0cc51cc3e363c7314b38f0dcf1cc5ec63c3334731fbd8f0cc51cc3e363c7314b38f0dcf1cc5ec63c3334731fbd8f0cc51cc3e363c7314b38f0dcf1cc5cc101b8a67b6ce0b6b02cacd266114db5ab73ca9ef1ecc0eea4f0df5db590f3ceb1ce8e3a89ea97e3b1b8c3acdb6e82e6570ffdae0a09eb67d47e637c076f0cc9ed9c6ac78e6e8bcb026a0dc1c1246b1ad73cb936ac7e604f5a786dab10dc0e3a29d7754cf543bb6d1a8d31c8bee52066375a3837adaf61d99df08dbc1337b661bb3e299abf3c29a8072734918c5b6de2d4faa1d9b1bd49f1a6ac736028f8b76de513d53edd826a34e732dba4b198cd54d0eea69db77647e136c07cfec996dcc8a679ece0b6b02cacd236114db06b73c6509a8b34c0db5639b80c7453befa89ea9766cb351a77916dda50cc6ea6607f5b4ed3b32bf19b643ae312b9ef93a2fac0928379f84516c1bddf2a4f6aff941fda9a1fd6b33f0b8687f1cd533b57fbd6bd469be45772983b1faae837adaf61d997f17b643ae312b9e053a2fac0928b78084516c9bdcf2a4f6af0541fda9a1fdeb5de071d1fe38aa676affda62d4698145772983b1bac5413d6dfb8ecc6f81ed906bcc8a67a1ce0b6b02ca2d2461141b1e2f163ae22932788a2c5a1c2adf4a8b0a9d3f42ff26e0ff15c0e8aa3d5c6830ca3cc6b8d88ab2a0593b83a79da1d9a1f4adb4a884bc9a707b550223c3f66a9705cd3a183c1d0ccd0ea56fa5455f9d6faf7f717bf5054686edd501781cb4cfe50983474d0d9d6f6c71ac8fa37aa6ce37b60676ddf1382465f0d8bdd5413d6de71232bf15b68367f6cc3666c53348e7853501e50691308a0daf53b6c5cf539e3078d4d4503bb6cdb13e8eea996ac7de0becba6f03dda50cc6ea7b0eea59007e65dd32ff1e6c874c9857e520b3d7b969cc8a67b0ce0b6b02ca0d266114db56e0d91e3f4f79c2e0515343edd876c7fa38aa67aa1ddb11d875df0eba4b19dcbf7638a86701f89575cbfc0ed80e9930afca4166af73d39815cf109d17d604941b42c228b6f7806767ec3ce9f18090474d0db5633b1debe3a69ee976ecfdc0aefb4ed05dcae0fef5be837a16805f59b7ccbf0fdbc1337b66cfec993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993d3337b3e219aaf3c29a8072434918c5b6037876c5ce937eee803c6a6ae8b9c32ec7fab8a967fab9c3eec0aefb2ed05dca60acee7650cf02f02beb96f9ddb01d3cb367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367f6cc9ed93373332b9e613a2fac0928378c84516cef03cf07f1f394270c1e3535f4dce103c7fa38aa67eab9c39ec0aefb07a0bb94c158dde3a09e05e057d62df37b603becf1cc9ed9c2ac7886ebbcb026a0dc701246b1ed069ebdb1f3a49f9f228f9a1a6ac7f63ad6c74d3dd3edd8bec0aefb5ed05dca60acee7350cf02f02beb96f97db01d32615e9583cc5e67af7314b3d7d9eb1cc5ec75f63a47317b9dbdce51cc5e67af7314b3d7d9eb1cc5ec75f63a47317b9dbdce51cc5e67af7314b3d7397f74563c553a2fac09285745c228b63dc0f361ec3cdd4a13068f9a0a8cf924e43f74ac8f9b7aa69f3bec0fecba7f08ba4b19dcbff63ba86701f89575cbfc7ed80ecd9d79550e32fbd8c80eb38f0dcf1cc5ec63c3334731fbd8f0cc51cc3e363c7314b38f0dcf1cc5ec63c3334731fbd8f0cc51cc3e363c7314b38f0dcf1cc5ec63c3334731fbd8f0cc51cc3e363c7314b38f0dcf1cc5ec63c333473133c486e2a9d679614d40b96a1246b1ed039e8fe2e7294f183c6a2a30e69390ffc8b13e8eea99eab7f37160d7fd23d05dcae0fef5b1837a16805f59b7cc7f0cdbc1337b661bb3e2a9d179614d40b91a1246b1ed079e4fe2e7294b183c6a6aa81dfbc4b13e8eea996ac73e0decba7f02ba4b198cd54f1dd4b300fccaba65fe53d80eb9c6ac7846ebbcb026a0dc681246b17d0c3c0ee22ec55364f0c8fc2704be9516b53a7f84fec5ed550b8c0cdbab280b9ab53378da199a1d4adf4a8b099057136eaf09c0c8b0bdda6541b30e064f0743b343e95b693151e7dbeb5fdc5e138191617b75c8826687b23d3c94fbf6a18c53aff9a1d3bce0106a5e7008352ff09a5369eee0f85286c7b20018704a42fe53e0f976fc3ca9fb729f66c0f36de0f956fc3c5d1dd5b354adf73bc01ed77a9556df35b4fad4d0aa18ca20c3771de857007e65dd322ffe3cb3678e62c6735b614d40b94f4818c5f62de071d16ea8ba5fa0d725eb6f15a6cf8eaef3ebe27909de2b6ea5d72b1ce2af10ca4c2ca92bfb3bcd5604ff97eda6eab3dfb0397a87b9abedb99dcc8bbfa2206bf76e1bbc978c5ab878de94e9717fbf85e7ebf8784a713f475ffb1cd53d93677ffb2c3c31d6bd6bd473cfbdf1d73dd57e74d1eb92f5ab7df4df8f76aa7939ee7bd27e7431ea5c08650696d495fd0f683f6c6d85eb7d53cec9cd7db34550d79e095789b69bcf84bed67629f71194c736a742ffe2fe59017575d52e46dd63c276d16cbb5d6a6f3e97347d17832e1f916a667b4e813a565ab82b09b8311eb3b99fc9ba6dcfc82a0d1dd934c36dfd9145c7be16eebe04dc8cfb755f434736cd0eb65f0fb2700f22e066dcaf07193ab26976b0fd7ab0857b300137e37e3dd8d0914db383edd7432cdc4308b819f7eb21868e6c9a1d6cbf1e6ae11e4ac0cdb85f0f357464d3ec60fbf5300bf730026ec6fd7a98a1239b6607dbaf875bb887137033eed7c383fa3ab26976b0fdbacac25d45c0cdb85f57193ab26976b0fdbadac25d4dc0cdb85f571b3ab26976b0fdbac6c25d43c0cdb85fd7183ab26976b0fd7ab4857b340137e37eddd87efbacfb75ad85bb96809b71bfae357464d3ec60fbf5040bf704026ec6fd7a82a1239b6607dbaf275ab827127033eed7130d1dd934b3edd78ede25ccf8ddc68f9dea931e63fae30c783e041e1731e5280e4a1df57349f54ddd6b68f5b1a1158eddb10ff473d017a6c16f12883fcfec993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367f6ccfcccf85d467cbe22e53e2261141b3e9372719f5fd5fd42bd2e597fab300d3cb6ceefbed8fd96951618fe92c021fe0aa1cc89a7d595bd41b31505076e371c8b1bb7e59ed8eb90de9666fccbbcf82b82faec051e07efe7a778f6193cfb2c5ae07ba7f1f82e1be946e3b252f5fd9dc383baedbcc7a80f6afa41ecfeeb6b5a6068fa8163df89a0fef614069c9290471e17cf861dd533d516ec36ea646a5c0c653a413d773ba86701f89575cbfc6ee091a905f0b88ac1c0e0092cfac85449c633958c673419cf99643c43c9788e27e3b98e8ce770329e8bc9781e22e32927e39940c633928ce734329e5bc8788e22e3b98a8ce742329e42329e7e643cd3c8787a93f1dc4dc6733619cf30329ef3c9784e24e3b9818c2741c6732919cf23643c65643c93c8784691f17424e3b98d8ce718329e6bc8785a93f124c978ee27e3e949c6732e19cf38329e73c8788693f19c4cc67313194f31194f3b329ecbc9781e25e3a920e3b9808c670a19cf5d643c6790f1dc4ec6534ac6731c19cfb5643c5dc8782e22e36943c6f320194f77329e5a329e2a329e53c9780691f19c47c6732419cf95643c2dc978fa92f1dc4bc6d3878c670c194f67329eb3c878ee20e339818ce77a329eb6643c9790f1ec25e379988ca71b19cf44329e6a329efd643c25643c83c9788e26e3b99a8ca715194f7f329efbc8787a91f18c25e3e944c6732719cf49643c3792f11c41c65344c6731919cf74329eae643c93c9786ac8784e27e31942c6732c19cf40329ec3c8780690f13c40c6d3838c673c19cf08329e53c8786e26e3694fc6d3818ce70a329e02029e4470e0b79812f0ff7d60936f067d08b61696f5c9736a29af8e8b8b3b1eb8ee1696757f6061409d76415d923a5ffacda6944ee82b09f3e2af08383e20e1b9828ca703194f7b329e9bc9784e21e31941c6339e8ca70719cf03643c03c8780e23e31948c6732c19cf10329ed3c9786ac8782693f17425e3994ec67319194f1119cf11643c3792f19c44c67327194f27329eb1643cbdc878ee23e3e94fc6d38a8ce76a329ea3c9780693f19490f1ec27e3a926e39948c6d38d8ce761329ebd643c9790f1b425e3b99e8ce704329e3bc878ce22e3e94cc633868ca70f19cfbd643c7dc9785a92f15c49c6732419cf79643c83c8784e25e3a922e3a925e3e94ec6f320194f1b329e8bc878ba90f15c4bc6731c194f2919cfed643c6790f1dc45c633858ce702329e0a329e47c9782e27e36947c6534cc6731319cfc9643cc3c978ce21e31947c6732e194f4f329efbc97892643cadc978ae21e339868ce736329e8e643ca3c8782691f19491f13c42c67329194f828ce706329e13c978ce27e31946c6733619cfdd643cbdc978a691f1f423e32924e3b9908ce72a329ea3c8786e21e3398d8c672419cf04329e72329e87c8782e26e3399c8ce73a329ee3c9788692f19c49c6339a8c672a194f25194f0b8307ffafde0ddbabf3f2eda042f8ff24ddb9bcbd5e97949167c4ea5ec5fb864dd577a7a3fabe1fd44d4998df09f515f6f781e77d473cbb0c1ed37711e42b41b31d864d316e77c4b8c36094f9edc028faed009e1d8e78761a3ca6ef22c8f705cdde336c8a719b23c6f70c4699df068ca2df7bc0f39e239eed068fe9bb08f28340b3ad864d316e71c4b8d56094f92dc028fa6d059ead8e78b6193ca6ef22c80f06cdde356c8a71b323c6770d4699df0c8ca2dfbbc0f3ae239e2d068fe9bb08f24340b34d864d316e74c4b8c96094f98dc028fa6d029e4d8e78361b3ca6ef22c80f05cd361836c5b8de11e3068351e6d703a3e8b701783638e2d968f098be8b203f0c345b67d814e35a478ceb0c46995f0b8ca2df3ae059e78867bdc163fa2e82fc70d06c8d61538cab1d31ae3118657e35308a7e6b80678d239eb5068fe9bb08f255a0d92ac3a618573a625c6530cafc4a6014fd5601cf2a473cab0d1ed37711e4ab41b315864d312e77c4b8c26094f9e5c028faad009e158e78561a3ca6ef22c8d78066ef1836c5f8b623c6770c46997f1b1845bf7780e71d473ccb0d1ed37711e4478366cb0c9b625cea887199c128f34b8151f45b063ccb1cf1bc6df098be8b205f0b9a2d316c8a71b123c62506a3cc2f0646d16f09f02c71c4b3d4e0317d17417e0268f69661538c8b1c31be6530cafc226014fdde029eb71cf12c36784cdf45909f089abd69d814e31b8e18df341865fe0d6014fdde049e371df12c32784cdf4590bf096cc2db076cafeb7c6fb0bda6f3bdc0f6aacef704db2b3adf036c2feb7c77b0bda4f3e5607b51e7bb81ed059d2f03dbf33adf156ccfe97c3fb03dabf3fdc1b650e793605ba0f303c0365fe72f02db3c9dbf186c7375fe12b0cdd1f94bc1365be72f03db2c9dbf1c6c3375fe0ab0cdd0f92bc1f68cce5f05b6a775fe6ab03da5f3d780ed499d1f08b62774fe5ab03daef3d781ed319dbf1e6cf7e8fc0d60bb55e76f04dbc73a7f33d83ed1f95bc0f6a9cedf06b66fe9fced60fbb6cedf01b6efe8fc9d60fbaece8f00dbf7747e24d8beaff3a3c0f6039dbf0b6c3fd4f93160fb91cedf0db61febfc58b0fd44e7c781eda73a3f1e6c3fd3f94960fbb9ce4f06db2f747e0ad87ea9f353c1f62b9dbf176c9fe9fc34b0fd5ae7ef03db6f74fe7eb0fd56e71f00dbef74fe41b0fd5ee71f02dbe73aff30d8bed0f947c0f6079d9f0eb62f75fe51b0fd51e7a55d53edec9f74be2488b79dfd2aa89b4ac0b7f85365feacf3ad8d32b26c2194395b772854cf38d4bb4bd20e4bbbac6cd20ebf0e3669875f039bb4c3af824ddae157c026edf0cb609376f825b0493bfc22d8a41d7e016cd20e3f0f3669879f039bb4c3cf822da9f30bc126edf002b0493b3c1f6cd20ecf039bb4c373c126edf01cb0493b3c1b6cd20ecf029bb4c333c126edf00cb0493bfc0cd8a41d7e1a6cd20e3f053669879f049bb4c34f804ddae1c7c126edf063609376f81eb0493b7c2bd8647ff90a6cd2367f0c36699b3f019bb4cd9f824ddae66f814ddae66f834ddae6ef804ddae6ef824ddae6ef814ddae6ef834ddae61f804ddae61f824ddae61f814ddae61f834ddae69f806dbcceff146cd236ff0c6cd236ff1c6cd236ff026cd236ff126cd236ff0a6cd2367f0636699b7f0d36699b7f0336699b7f0b36699b7f0736699b7f0f36699b3f079bb4cd5f804ddae63f80ed519d97b6ba0dd8e459b19a4abfe184e3f0b4005fc2920ce26dfb714a421eeb2e532519cf1c329ed1643c2f93f19c49c633948ce778329ec3c978de24e39940c6b3908c671919cf52329e37c8784e23e3d940c6b39e8ce728329ef7c9787692f15c48c65348c6338b8ce745329eb3c9788691f19c4fc67322194f828c673e19cf12329ec5643caf91f17424e35947c6b3968ce718329e1d643cdbc9785a93f17c45c633838ce75c329ee7c978ce21e3194ec67332194f31194f3b329e0a329e0bc878e692f1bc45c6b3888ce715329e33c878d690f1ac26e32925e3398e8ce73d329e6d643c5dc878da90f13c4dc6534bc6f32c194f1519cfa9643c83c878ce23e339928ca725194f5f329e5bc9786693f1bc44c6d3998ce72c329e55643c2bc978be24e339818c672b19cf16329eb6643c7bc9782692f12c20e3a926e3799d8c673f194f0919cf60329ea3c9785a91f17c4cc633938ce705329e15643ccbc9784e22e379978c673319cf11643c45643cf3c8786ac8785e25e3399d8c670819cfb1643c8791f13c43c6f31c19cf3b643c6f93f19c42c6b3898c6723194f7b329e0e643cbbc9787691f11410f0248023009bfcbf25d8e43b3cfbc1f685ceef059b7cc3e74db07daef38f82ed618bad85854f18a6834dde95fd026c727fe611b0c93b139f834dce1bc4bf9a5fd9f140fe16b08cf86969e1477f9f5bb8248fdb5b964906f16e6ff4950cecdfbc2b30180f35cf2e329edd643c1dc878da93f16c24e3d944c6730a19cfdb643cef90f13c47c6f30c19cf61643cc792f10c21e3399d8ce755329e1a329e79643c45643c4790f16c26e379978ce724329ee5643c2bc8785e20e39949c6f331194f2b329ea3c9780693f19490f1ec27e3799d8ca79a8c670119cf44329ebd643c6dc978b690f16c25e339818ce74b329e95643cabc878ce22e3e94cc6f31219cf6c329e5bc978fa92f1b424e339928ce73c329e41643ca792f15491f13c4bc6534bc6f334194f1b329e2e643cdbc878de23e3398e8ca7948c673519cf1a329e33c8785e21e35944c6f31619cf5c329e0bc8782ac878da91f11493f19c4cc6339c8ce71c329ee7c978ce25e39941c6f315194f6b329eed643c3bc8788e21e3594bc6b38e8ca72319cf6b643c8bc9789690f1cc27e34990f19c48c6733e19cf30329eb3c9785e24e39945c65348c6732119cf4e329ef7c9788e22e3594fc6b3818ce734329e37c8789692f12c23e35948c633818ce74d329ec3c9788e27e3194ac6732619cfcb643ca3c978e690f15492f1b4b0f0ec77c423df8a9175cbfcfe66ee7ba7e17b679ef8de6ef8de9e27beb719beb7e589ef2d86ef2d79e27bb3e17b739ef8de68f8de9827bed71bbed7e789efb586efb579e27bb5e17b759ef85e69f85e9927be971bbe97e789efb70ddf6fe789efa586efa579e27bb1e17b719ef85e64f85e9427be99afbf553f5ce9abbc5bff26e0ff15c0f8a623c6fd06a3ccbf098c62c3ef515738e289ba76af20f0adb4907b59f2cc3301ffaf04465731556130cabc2da676024fa5239ea87b0e9504be9516f22eb6f4a94cc0ff71fc655731556930cabc2da6b6034f5f473c51f74afa12f8565ac8bbcff2ce5f02fe8fe3adbb8aa9be06a3ccdb626a1bf00c72c413758f6710816fa5857c2b4cbe499380ffe3f88cae626a90c128f3b698c2f173073be289ba373598c0b7d242beb52bdfbc4cc0ff71fc26573135d86094795b4ce1f871431cf144dd531b42e05b6921cf82e51bed09f8ff5060741553430c4699b7c5148e7733d4114fd4bdc0a104be9516c3745efa5825e0ffc380d1554c0d351865de1653eb816798239ea87b98c3087c2b2d86ebbcbcc39180ff0f0746573135cc6094795b4cad059ee18e78a2eebd0e27f0adb4a8d27979a73f01ffaf0246573135dc6094795b4cad069e2a473c51f78cab087c2b2daa755ebe399780ffe3f8efc31d3156198c323f1c18c5b61278aa1df144ddebae26f0adb4906ffbafd0bf09f83f8ec7ea2aa6aa0d4699b7c5148e075de38827ea1e7d0d816fa5c5689d97316112f0ffd1c0e82aa66a0c4699b7c5148e5f39da114fd4b385d104be9516f26dae65fa3701ffaf0546573135da6094795b4c2d059e5a473c8b0d9ec5162d0e956fa585f4e55ea27f13f0ff09c0e82aa66a0d4699b7c5d462e099e08827ea59ce0402df4a0bf9b6f65bfa3701ff9f088cae626a82c128f3b6985a043c131df1443d839a9805df51cf53b2e13bead940367c47dde7ce86efa87bb6d9f01d75ff311bbea3eea565c377d47da16cf88ebac7910ddf51d7ebd9f01d75ed990ddf51d751d9f01d754d900ddf51e7b7d9f01d75ae960ddf51e71dbe3df7ed79dcbe0fe5b943beb6e787f2187a288f25fedac05f1b64cbb73f96f86b836cf9ced76b03df9e67bf3d97ebaf8220fa7aec6d47be971abe651e9fb32c75e47bb1e15be6f199c16247be1719be651eef7f2f72e4bbc8f02df38bb2e0bb9de1bb5d167d77307c77b0f876b0bdcb1241fdeb6f61c02909798c81b71c68e1a89ea56abd4bf4babe8e71bdb6fb36e6fe520c6596807eaedb0e59b7d976e42233c6459bf87c9726c0877c974cd9e4f9f1eb609376ff35b049bf8057c126c7a657c026cfa45e069b3cb37a096ca375fe63b0c9b363ecb32fcfffb781ad4ae7b1aff8709ddf0236e94b857d94a53fdc66b0499f46ec1b2bfd5237824dfa16639f4ce91fbe1e6cd2c71ffb02ca7b1a6bc126efda601f34795f6a35d8f6ea3cf67d92efd0ac04db749d5f01b63fe8fc72b03da4f3b782edf73aff15d87ea7f38bc0f6a0cebf05b6dfeafc12b03da0f32f82ed373aff02d8eed7f9e7c1769fcee3bb6cbfd6f95d60fb4ce7f11daa693abf136cbfd2797c77e75e9ddf0eb65feafc73609baaf3cf826d8ace2f04db2f747e01d87eaef3f3c13659e7e781ed673a3f176c93747e0ed87eaaf3b3c1365ee76781ed273a3f136ce3747e06d8c6eafc3360fbb1ce3f0db61fe9fc9760bb5be71783ad85ce2f059b8c1989fd540a75fe6db0b5d279ec7f24dff79f08b6c3747e02d8dae87c2dd8e4db70a3c126e341d7802da1f3d5603b42e7abc026e767c3c126e39f0c039b9c4b0d055b7b9d1f023639ef190c3619cf7210d8e41ba47dc176b4ce57824dbead5f01b663757e3fd864ccb137c126dfaddb0b36198bf911b0c9f7aaa783ed249dff03d8641c9687c0768aceff1e6ca7eafcefc026dff07c106c253aff5bb075d4f907c076baceff066c3246d6fd603b53e7ef039b8c1dfc6bb0c9f79e3f035b279d9f06b67374fe576093b144ee059b8c0ffa4bb075d6f9a96093ef704f01db053aff0bb0c9787f3f079b7c637832d8645cb79f81adabce4f025b99ceff146cdd747e3cd8ca75fe2760ebaef3e3c0d643e7c782ada7ceff186cbd74fe4760ebadf3d2cea8fd59ede7fbf47c3288efbc4cf9fb30a83f35746d200cc813e7b97631f0a0af3db1d7bd2c755e2ffb7d0bbd5e89a13de07b77ecbed3d7141fe87515eaf5ee367c1742997374e3a09693637e4bbddc5e6339bc8f25eb96652e04fb2e63dded757d3f7054dfdd069370a30e52e67ccda48e8d3fd0f936b04c8c6ca9eb6389b50034c42909796170a35559299ef73686e703e0d9133b4ffa7add454ce0be15f7f5ba791fd78cb56228b31bf4dbe5403fdcd765dd322ffe3cb367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367f6cc9ed933f3332b9e7d3a8fcf95a5dc3e1246b1ed011e17f7f9f139acac5f3dd7d9755a9ddf3db1fbadff7caf955e6fa951e74228f3353c73daabf345f07fd96e51dbd2c173c206b7a5f82b82fae0b3a07d8e78f6183c7b2c5a48be2436df6523dd685c56aafaada867ec7b0d5df7593475b5bfeed1eb2a3034c5fdf54383079f8d1601ef47fa3701ebf908eae0601f6f302ec41fee4b7bc026f90f81d1c576c66389b407f23c1c9f4d4b995f19cfc5e3dff665a52edb8df7a14ec9e0c0f82e8432bf83b6ef739dc7be21fb40b77f58fe2f5343cfa9453f55e71df1d739b57db7036712fca0eff7803526dff5dea129d049fc88bd10f27f87fe1c524ef410ad851dc72b477673b90f8de58aa1cc4e4bfd9341bcf5df61f0ec3098d536f912e2ec1f70fc77d526ed8cd0e842d048caec018df63ae2d963f00887f8536564fbb736cac8b28550e67f411ba5ea22edbcd413fbb6e031c0d5714c7cc9ba65de766efc01309a7554f131f0d83ade3db1f3e656ffafc34ad2bfd8aec7d5ff4bd6dd5e2f2b1c81b1fe5258bf70b50ea28f2dffb37d4bead6efb27fd95ea3cec2823a4b997625e95f156797e97c26e7fa87eaba2dea5c7fa7039e4450ffda5b4d0d1ddff118f3be031e47f52cb51dbb7619752a86329da09e0ece631a7c177807f876b1cd510b3987da6d685108653a96a47fa5ed88d211af553fc84a5dcaace783a596ba48994e2575756903f638995c6eb7f7a04e6abd7b2c759532e797d4e9d245e713b09df0be495fcbff656aa83dc0b178b6c65fe7d4f6dd029c49f083bedf05d6987cd7fb16889cef8b1fb11742beb2a4aeac94133d446b6157fb88bcf387ece672bb8de58aa1cc364bfd9341bcf5df6af06c3598d536e95a5297973872d96e6e8bd0a81434923278ff588eedf8de9dedb8bfc71177d4717f0f309aed269ebbb864db6bb099f7506de7835206cfc9a4ccd525e95fd5ce262c65cd7bc32eee63e23ba801d42330ea2a13c680836bc372bc7692764afc7401fb1e9d179dbb18da1542994125e95f87e7ddd67b97e6f51d5e5308b7b96fe1bb1f434aeab871ecc43dfab7086c9fe85f47d769e5b67b86c261bb6738bca48e1d9715ae8f2d7531af915b0407de53ffda288bf7dd1a5acecc9be3502a7d3f31cad9fce0354f6cef6a742d2d45a61681fd7ec187067b4170e0989bb21f60cc99f751ba18ebc1fb28b525e95f6993ccb26adbfffbd175fac87614edb03dc198fc1018933a5ffacda6aeb6facbbcf8538c1f197570d376a5df57cae43ef05ee071d1b63b6aa34bf1181bdff7297a57d98eff1f1a5a65f179adf5986f3e736f63e4e3f15d566dbbff64d362b785c7d57394282d765b7cc7a7458f91b6e3874d8b5d169e5d59d66297c5778c5ad4e07dcf86b478dfc2e3e25e54435abc6ff11d9f163d4b1b7aae815aecb4f0b8baf710a585f8cb94791701731b231f8feff22adb7d329b163b2c3caeae9ba3b4d861f11d9f165d7be03dba86b4d86ee189fffe5cc35a6cb7f88e4f8b5ebdf11e5e435abc67e171f54c374a8bf72cbe638c8b51b67b39362db65978b665598b6d16df319e1ff6b0dd6bb369b1d5c2e3e0be6b835a6cb5f88e518b1178dfb5212db65878b664598b2d16dff16951d5dd764fd8a6c5bb161e57f784a3b478d7e23b3e2d46f452be3737428bcd169ecd59d662b3c5778cd750a9b8d8d4082d3659783665598b4d16dff169519d3ad7dad8082d365a783666598b8d16dff169519a3aa66e6884161b2c3c1bb2acc5068bef18e322753db9be115aacb7f0accfb216eb2dbe633c8ea4e2625d23b45867e15997652dd6597cc7a7454deafed3da4668b1d6c2b336cb5aacb5f88ef19e4b2a2ed634428b35169e3559d6628dc5777c5a744b1d535737428bd5169ed559d662b5c5777c5a8c4a3d135bd5082d5659785665598b5516df319e77a6da8b958dd062a585676596b55869f11de37967eafec58a4668b1c2c2b322cb5aacb0f88eb1ed4c9d772e6f8416cb2d3ccbb3acc5728bef18cf3b535abcd3082ddeb1f0bc93652ddeb1f88ef1bc33751c79bb115abc6de17135064a94166f5b7cc71817a9b6735923b45866e15996652d96597cc7785f2bd5762e6d84164b2d3caec66b88d262a9c5778cd723a97b7c4b1aa1c5120bcf922c6bb1c4e23bc66745a973f0c58dd062b185677196b5580cbef7c6ee3bdd9f5b7c485fac0b0c2d0aa1cca91dd3bfd2172b4a475907f62bc3babc157b5dd2fdca1645d4e52da88b943913ead22670324651b9a3baa662e64da8935aef4796ba4a99733bd6e9d259e713b04d3e06ddfa58fe2f5381319f84bce8a7eafc7afc754ec5ea6bc099043fe8fb55608dc97757f45da093f8117b21e47b77ac2b2be5440fd15ad8d53ef286ce23bbb9dc6263b96228f386a5fec920defabf6ef0bc6e30a7de7b8038933872d376a599de88d0e802d048ca609fbd8f1cf1987d088543fca932b2fd5b1b65b00fa594b908da28ec572af54c0407f69b74d49675457659b7cc8bbf62b0ed0546b38e2a3e3e83be9f3256848c23a16c322e4437584f4fc3a6eadacb515dc597ac5be67b01a38c53d133fb8c658d65ec61302a9e3e0e34c3b137646ae878d107787a3be07154cfd471a8c2a8532fa34ec55006df6dac7050cf02f02beb96f90af0ed629ba316724c3ed7d0a210ca0c37ce1fa3749475a8f8ed69a94b3fc77591754bbbd42f0bbe2b0ddfdd0ddf89a0fe760e8286f7af4a60eeeb8059adb77ffceb2dc5f3368929f1d31dea34003488ab4eb82e39cf1b60685b08f9a9709e27e5a4ac1cbf845dc5b26c4b643797eb632c570c65fa59ea9f0ce2ad7f7f83a7bfc1acb6c9dd706ee7607f48c5403f8343e6bb8376fd23b4eb07da49193cfef570a45d5f8347e67b008f9ce354804dce15843f01ffef96056eb3ddabb0708b0dc789eb6161ec1e3f63ea5ca787c128f3dd81516c7d81a7d29166e6b63ed7d0078fcbad8d32b26c21949905c7c684a5acdaef3a15d4d5aba5b6c7f6ee986ed35b3bd00bc7690c409fc0d03000bda49ead1cf0b40deac66a9c3ca576d288bb46dd382afde851d00a0d4cfc2db054a305d830dfd2620b82fa435216824d86a46c05b616862c3814a6949721ed5cc8857ac8ba0b0dce36c012a76f1cce53a68642e730e07111ca2a7464484f1d3ab74e1a336514c6472b83b329b1a3fed7b2817251eb72b51dcc7d2209f3660c163af2df12ea9b8479f1a7b68d0cad3a61c4c87b064cba6beab851e3a74c46a1cc1d1bf30541fd0d60fe4609ee6aa7c300c00a63e3d0caa8173618f23fd9306de3e72cc731734d6d02f027535bd0ed7007baa9f5cbd8b723478c1d7bfdd4aab163465e3675fcc829636ac7e3d66c632817b5a5e5ffadc1666be2b1ac9ab0d9c2650fb3d86c138e32dc066c72e43a1c6cc2d3166c2d212fe5cd2de3245c3bc1fa659752ff53e2b4d2153f2ca80b01391cab7655edbfea544e7d42569d0aa9a18dd5e6544317ab3b866a6862f5153b35f4b01a6a580d2d7c62901e3a580d157c4a901e0a587deda224480fed7b7a901ebaf7cc203d34efd9c0f76d603e27489f76a9a1753b07e9a173d5adcb2e41fa336feadd7a75faae6e0ba8535e7589a74e3fd569a7babc50b72fd4ad2c754aa74e97d5a9a03a7d539723fdb5d603c27451982e0ed32561ba344c9785e9f2305d11a62bc3745598ae0ed335611a18a66bc3745d98ae0fd30d61ba314c3785e9e6203dbcf32d417af87535fcf36d417a68e8db83f4b0d17704e921a5ef0cd2c34d8f08d243518f0cd2c3548f0ad24358df15a487b71e13a487c9bd27480fb5ab86e01d1fa487c356c364abe1b3d530bf6a486035a4b01a6a580d4bac8630564320aba1911f08d2432eab219b1f0ed2c33e4f0fd3a3617a2c4c8f87e989303d19a6a782f4f0e06ad8f019417a987135fcf8ec203d5cf9dc203dbcb91af65c0d87ae864957c3a7ab61d5d530ef6af877352cfc4b617a394caf04e94712ea518c7a44a16effabc760ea16f55b41fad6f99220fd885b3df2575d20549710d545664590ee42a5ba94a92e76aacba1ea82a9baa4aa2ebaaacbb2eac2adbab4ab2efeea9507f50a887a2546bd22a45e9952af90a957ead42b86ea3551f5daa57a8d58bd56bd2748df16df17a41f95aadbe1ead180ba65ae6edf7f1aa66f05e998fc4e98be1ba6ef85e9fb61fa41987e18a4873556c31dabe192d5d0ca6a18663564b31aca590d05ad868dfe2c480f3dad86aefe6d901e12fbf761fa3c4c5f04e9e1b5bf0cd31fc3f45598fe14a63f87e92f61fa6b98fe16a67f09d3bf86e9dfc2f4f730fd234cff0cea86d9c686e444ddfae82b9860c49429a3c64d985232a5b664dcd4b153c64c187b7fc9b431534697d4de3b6a52cdd8da69b8f0b7f5c23246f880499346dc5f32667cf5a8fb4a6aa74e29a9ad29a9aa9d3abebade41fc2f7aa1930ff438a2ba3adad97f7e13d2ffdb44a787eb7651465fbfb2e1ba1dd1b209821cd994857ab46c5a8526e923985ceade943e0f2e993cb6764a4969c9f8f06f78e0ad9d36aaba4b09fe6f7228f2e4292593a78c9834a5a46652edb892ae5d70bd8fb46d4225feabad1b98b34e6c9a389df477969a1462bf3cad090afcc7694d236d5df20d48db9634cd694949136a78765316baaa8984379744ca32796ad5944923464e895ef8b66fb2f09d4da9e6f82656f3948e4d70764653161ad0b169847736c5d9cc0c9c05ff0dcac800708c5506009b2d6c6f00000028481f8b08000000000000ffed9d77741cc791c667911856000892600e50a219c1c5228309cc99122559391024419116495024942ccb922cc939e76c399de59cf35917edbbf3390739e72839dd3ff77cefee3dbfeb9eed323e3467d6d8d5145883ad79afb03db5bd53bffea6ba77b67b7691090adb9f8c655cb9dad885c1d91b3ddfef1e734f6e6b4bf058394ece4c4a38ab52c2599d12ce9a9470d6a684b32e259c9352c23939259c5312e4b46c55c1e82d69dea90cba26cd984d99a6e7a540d3fa9469da90024d1b83748c51d352c2d99412cee929e19c9112ce9929e16c4e09e7ac9470ce4e09e79c9470ce4d09e7bc9470ce4f09e78294702e4c09e7a294702e4e09674b4a38cf4f09e70529e1bc30259c17a584f3e204395700e712f7f814f7b8d43d2e738fcbdd23bd66a57b5ce5da58e3f65b8dadb66cc6dabce7f2c6da8d7518ebf49eeb32d66dacc758af7baec53dd7676c8db1b5c6d6195b6f6c83d361a3b14dc6361bdb626cabb16dc6b61bdb616ca7b15dc6761bdb636cafb17dc62e3176a9b1fdc62e3376b9b12b8c3dd5d895c6ae3276b5b16b3c966b8d5d67ec7a633718bbd1d84dc60e181b3076d0d82163878d0d1a3b62ec6663478d1d33f63463b7183b6eec84b193c6868c9d3276abb1d3c6ce181b36769bb1db8ddd61ec4e6377799a3dddd8ddc69e61ec1e8ff399c6ee35769fb1fb8d3dcbd803c61e34f690b1671b7b8eb1e71a7b9eb1e71b7b81b1171a7b91b1171b7b89b1971a7b99b1971b7b85b1571a7b95b1571b7b8db1d71a7b9db1d71b7b83b1371a7b9363a18ef066636f31f6b0b1b71a7b9bb1b71b7b87b1771afb3b63ef32f688b1771b7b8fb1f71a7b9fb1f71bfb80b10f1afb90b10f1bfb88b18f1afb98b18f1bfb84b14f1afb94b14f1bfb8cb1cf1afb7b639f33f6a8b17f30f68fc6fec9d83f1bfb1763ff6aecf3c6be60ecdf8cfdbbb1ff30f64563ff69ec4bc6beec69fe15635f35f635635f77be6fb8c76fbaba342ff62d63df76e5c7dce377dce377dde3f7bcd77cdfd80f3cdf0f8dfdc8f3fdd8d84f5cf9a7eef167eef1e7eef117eef197eef157eef1d7eef137eef1b7eef171f7f8847bfc9d7bfcbd7bfc837bfca37bb46baa973617ca938391ad3f48688cea3892b36b2a24fe9260f466b5a876cfd1638bf3d7b87d7a24ed6add7eade7af73fb75de7126bbfdc99ebfc9ed3779fe196e7f86e76f76fbcd9e7fb6db9fedf92f72fb17813f1bc09cabf35b5fb57365c047f95a05be5ae7ab065f1d1d0e7c939caf167c747eebc037c5f926816faaf34d065fd6f9a69096c6ce73befe20a95cc90dd8e3d6277d5cb70ed5903cef217bdc4626de69c9f30edae33631f0dafc98ee8e350df26686f335816fa6f34d079f1b82fedae7ac6f96f3cd04df6ce76b06df1ce79b05beb9ce371b7cf39c6f0ef8e63bdf5cf02d70be79e05be87cf3c1b7c8f916806fb1f32d045f8bf32d02dff9ceb7187c17385f0bf8e81e97f3c17791f35d00be8b9def42f0d1587b11f8e8daf062e7b3e3c4e40cbcc6f9698c0a5f43e333f896d2d80cbe65342e836f398dc9e05b01b1c9b712c615f2ad723e1aa3ec737daedc1f24d527f2619f5893f471cd91ed71d7257fdc70dd6e7d30a2753fc459035a6d70e504ef0d6ac3d819671487fc3550de0975a91ee941ef33c46ec7fdb5aebca1c8ebfabcd735409db511edef0f926dff3a8f679dc75c0bede7c9d9f6bce6ec98b79273f62aa8ebe71e5df34cc49cdd031c0c39dba5393be6ade49c1d84ba7eeed175ef44ccd96b81832167077872369fd39c2dcc91054174eed1679f8998b3478123f99cedd49c1dfb5672cede0f75fddca3cfbf1331676f078ee473b67b40af0dc6bc959cb32f81ba7eeed15ccc44ccd9078183216707759c1df35672cebe09eafab947f3821331675f0e1cc9e76c2f53ceb66bce0685f5ce2088ce3d9aa39e8839fb3070249fb387747e76ec5bc939fb69a8ebe71ead974cc49cfd802bdb75866fb8758605e0fba6f32d04dee473fb7007536ee735b70bf7810441748ed2dadd44cced475dd9e6f16370ef01f9bee37ce783efbbce7701f8bee77c1742bb18fac080f681316f25f7811f405d3f97691d7922f681af010743ce1ed29c1df35672ce3e0e75fddca37b1a2662cefe1838187276507376cc5bc939fb67a8ebe7de52579e88394bf795daeb859fbaeb85e5e0fb99f3ad00dfcf9d6f25f87ee17cabc0f74be76b05dfaf9c6f35f87eed7c39f0fdc6f9dac0f75be7cb83ef71e76b07df13ced701bedf395f27f87eef7c5de0fb83f37583ef8fced703be3f395faff3d97bf2e8deab2f3a9f3db7a4517f90ecb9a57b2ce9d8b4bf721c62377ab11bc731769317bb2922f62a86d85988415bc6dbef87f22a5e9e5c4330fafb1f146b75f2b1da6ddb5b83b1b77d35f0e418da9e851863e1c9014f5bf23ce1bdbef9e48f1b9ee3564fd32cc46a8576b533b42b03b1e8d8b44ff11ac087e3777b046347f28cf90cc4a263d37e0730920fdf4fe87d9dfa8f7d3f5c9219e165e84be13511c5a3dffe228ed5e0a73a7f9c39c2b6dcb1d5c3f3f8dedae6f998f232cc0b8a45c7a67d8a570fed691b7fc6fc5819731e23d718918158746c3f36f6f755e3afd998ce6b03f8cec198942f774caa07b6f1b84e893bd7526273bc5f6520068d6da4791efc546796fb42821ddbb6c3b8cbd0fff2a55ebfe178907c1ee773d8afc7c2d30e3c1c7d9fa9bfe6f07dff2f41b2b9d6e969d5e669d500753a40bf4e06fd8a5d87503c6556666556666556666556666556666556666556666556666556666556666596cf8cf75fe0fa26d55b2984917c79e0e198e70f7f3fca1d8b8e6fd775be0beb3ac9af5be473b86649f7182ef3da5c03759ec88cd4fd21aca7fb6b83b8a6b99257bb31dd67511f9cbd16cbb98618b70e1cb57ed99258ecfc21aef5367b8f9afd1db2564fd795119a32dca7324ad38ca729dea7b8c2e3b1793ab77a848d63edafd4b548d48aca49aeede13d06bce7a5307e502e5405a3c70f7c9fe94a3cf6e8354c5a2feff262d7409dffc98c9c1bba1795fecfa17fcf93add3ed1d9b5eb30cfcdddeb1a7b9d71247ad77fc56782dd5f93f1853df5c15fc55338efb3f705c0ea0adb8f54319d7cd937f1f2eace3b797c0d3093c1ce30cd3f5460efb40d2ebf8dd9e5651d73154a70bf4eb66d02fea5a94f6299e322bb3322bb3322bb3322bb3322bb3322bb3322bb3322bb3322bb3322bb332cb67c6ef8a126b16eae585308ed3bd0fe17a06fdfe0b1ddfaeebbcb06a242ef73a1cad392df7da5c0375be5c3552f7a5ae5c1f9c7dbf43dcb96458cf2b7a2e295e3db407d782b8becfdde1f174446841e596c46217d6f193d778641dbfddd3351fa129577fc53556d414fb6b9bc7836ba3f5c1d9f79664e138e371ef505c5e503cec4b1de0a3327e3f9ae33ce37b897f5f0fc5c3f5eb479cb6d302ae739fcf718e1b3dd0a6fee0ecfcae813aef87b1ef83ae8cf770e0bd238f463c4f5bb1756ad28fe5b7ec728575df35c0d90f7130f65a604d28761bc6ce38a338e4af81f2e7aa46ea523dd283b42676db47e837c190dd7f5d9bf7ba06a8d31bd1fefe20d9f6f7793c7d1eb33d271f813c7b14deffb9c6a4de188d9681465407af83b8eec9f3c748fffe46bc6fafceab83d72c54e70b3046c5dd3f1a75cf21d7fb58dc3d8751d7c69dc0e8b7d1bfcfb3d2efd37a0cc68ba4efd37a0c7208efd30abce32f87e313575d10ffde4275beef1ddfbf26a7d7e07d6054e747305e34ba7b16eb83b3afbff19ea9f1f87c15779f34c5c3eb1aecdb7fabed96b907eaf727c88c39812c789d40757ee39db3ee18eed511af7d22e6b5a415fd0e157e7ef1f5b33af4c26bfa13d1a1d0e7fbbcb6505ef7425ba8ce7f79d780c95fb714ae01936febe86b121a073a22da4a75fe1bfada9fe11a8fce137eeea8ab3efb79da8a5d03927eb6cde3fdfbc0185bc2ef03d7568fd4f57fe797b42ef5f781bbbcd749fc7de0ff853cab83fbd0b9c6eab5311a2d078da80e7e3788de47f0b77ca3de63b8eeed8f7b8f89fa0d4a1c9f1babc79fcd9f578bba46a03af45abc4698e998a7399dfdbafe7c21bd5f2679df307e57a215e2e277255a99f4cc816efdb08fd705e732768e2976dc6f4ee7c62176dc6f4e8f47ec262f76d338c656cd5573499a33fc2672f8fd33fccd52bb15bb2e258606785d550a18ab53c0589302c6da1430d6a58071520a1827a780714a0a18a7a680310b8ce7f2bd9d419f7cb9fa709daf62d71a189be17f97e44bfdff1dccff4ba5e8b50fc666f84c176ab12a18bb16f8398fe3b71f4afd5f2fc480ffbb607a0a1867a48071660a189b53c0382b058cb353c03827058c7353c0382f058cf353c0b820058c0b53c0b828058c8b53c0d89202c6f353c078410a182f4c01e3452960bc38058c4b943111c615bc8cf972192d0fc7fffc7b32ff738c81271775cf29d3774f4afe7f6bccbf4fda56eeefc6e1bd25bcff13eec9fdb61dc7bd23a5feb65db1ffb7cac4982f9791eb3e76fc1ecf5878f07b9151dfad6160cc97cbc8f5fd17fc8ede5878ba40b3ce08cd1818f3e53272dd2b57eabd9c784f7f5784660c8cf97219f1beea047942cdba4be0e901cdba23346360cc97cbc8755f7216628c85a71734eb89d08c81315f2e23d377db42cd7a4be0c1ef80f54668c6c0982f97d1f2ac61d2acaf049e35a0595f846692189127e9dfc9ee8b88c5f19dc152db4e0cc83825058c5353c088f749708c5fc5ee93e8e3d5275fae3e5ce7abd87d12189be1fb31a116f87d88bfa5c53a5e9ea2f74960ecf54c5ae0f755fe9616eb8187e3fb33598831161e626880d74d4f01e38c1430ce4c0163730a1867a58071760a18e7a480716e0a18e7a580717e0a1817a48071610a1817a58071710a18f1b32ac3b562d1cf2feb2778ecb8cf2a133d76dce792891e5bf35cf3bc12626b9e6b9e57426ccd73cdf34a88ad79ae795e09b135cf35cf2b21b6e6b9e67925c4d63cd73c97143b0d73fcca38f11891a725399e1cb61d63f50b687b7f044f86a9ed186ba380b61343da1837a480714d0a1855c7c23d88e5305a9e4d4c3c1b4be0d9043c9b99783695c0b31978b624cf13e6d4e6127888a1015eb726058c1b52c0a83aaa8ed6ec967b729bea2888310d3a2aa3322aa3329e0bc6348ce1ca988a7ccc97cb6879b626cf136ab6a5049eada019bdae8d97315f2ea3e5d9963c4fa8d9d61278b681665b23346360cc97cb6879b627cf136ab6ad049eeda0d9b608cd1818f3e5325a9e1dc9f3849a6d2f81670768b63d423306c67cb98c966767f23ca1663b4ae0d9099aed88d08c81315f2ea3e5d9953c4fa8d9ce12787681663b23346360cc97cb68797627cf136ab6ab049edda0d9ae08cd1818f3e5325a9e3dc9f3849aed2e81670f68b63b423306c67cb98c96676ff23ca1667b4ae0d90b9aed89d04c2ae39a14306e480123b38ef972192dcf3e269ebd25f0ec039e4b9878f695c07309f05c9a3c4f98539794c0430c0df0ba352960dc900246d5517594c4a83a568e8ecaa88cca581a637f0a18f55c2ba3544686cf5745bf4373c9048fdde8c56eac90d871dfa199e8b135cf35cf2b21b6e6b9e67925c4d63cd73caf84d89ae79ae795105bf35cf3bc12626b9e6b9e57426ccd73cdf34a88ad79ae795e09b135cf35cf2b21b6e6b9e67925c4d63cd73caf84d89ae79ae795105bf35cf3bc12626b9e6b9e57426ccd73cdf34a88ad79ae795e09b135cf35cf2b21b6e6b9e67925c4d63cd73caf84d89ae79ae795105bf35cf3bc12626b9e6b9e57426ccd73cd7349b1f7271f3b5fea6fccec071e8edfbc616a67ce1ef73277acbf24a89fd5ea724fab4b3cad1aa0ce65a0dfe50cfa65202e1d9bf6295ea9cc4f11c0cc143b6fc79729d07e8ab1c1d3c3c6bf82a9ed7163fd15133c76dc583fd163c78df5133db6e6b9e67925c4d63cd73caf84d89ae79ae7526263b93618b96ea7df3fb5c778aa2bd7b87d64253fd5b97452e1715aa07d8823b6f6217dafa884d89ae79ae795105bf35cf3bc12626b9e6b9e57426ccd73cdf34a88ad79ae795e09b135cf35cf2b21b6e6b9bc3c6f80e7abc68127f07882223c8b84f1cc11c6335d18cf14613ccb84f1540be3592f8c673ceee72b856797309eedc2787a84f12c16c6b35c18cf5c613c79613c3384f1740ae3992a8c678b309e1a613c1b85f1e484f1ec11c6b34418cf3c613c3385f1ac10c69315c6532b8c6793309ed5c278960ae3d92b8c67b7309e3e613c3b84f1f40ae3e912c6335f184fbb309e66613cadc278ce13c6532f8c67ab309e3a613cab84f1ec13c6b35618cf02613cb384f13408e36914c6334918cf3a613c3b85f16c13c6d32d8c67a1309e0e613cb385f1ac14c6334d184f93309ecdc278260be3c908e0c90667ff2659169edf0fbe2aefb5f67aa0ad79e4f92b9dbf0a5e73952b57471cfb4af0d177c3af8a782dea7425b4a5df95734f6e0b75c258fdb04ff1ea81e32a213c9385f16c16c6d3248c679a309e95c278660be3e910c6b350184fb7309e6dc278760ae359278c6792309e46613c0dc2786609e359208c67ad309e7dc2785609e3a913c6b355184fbd309ef384f1b40ae36916c6d32e8c67be309e2e613cbdc2787608e3e913c6b35b18cf5e613c4b85f1ac16c6b349184fad309eac309e15c278660ae399278c6789309e3dc27872c278360ae3a911c6b34518cf54613c9dc2786608e3c90be3992b8c67b9309ec5c2787a84f16c17c6b34b18cf7e613ceb85f1540be359268c678a309ee9c278e608e359248ca72a8287e1ff5f863c74ff1a1d9bf6f70b89cd701ec2fffb7935539bae71c7aa75c7257e8a570375ae750385bdbf0a5f4b5cfefd86f8de740d68740d535be87c64bcf3c31c3b8ff75506c01078fa04113c1cf7a332b573541e26f8ff677356ab6b3dadfc73d70075ae06fdae65d02f2ab7ffda07dc631a992d0f5d9b116b16eaad17c248be2b7879c27ebb3e18bd15ebb7d7020fc718c6d4ceb07f5de7b5697d84ee540773f53a867646f51ddabf0ece43da982dcf465726d62cd4db2884917cd7f0f284fd6b63307a2bd6bfae031e8ef187a99d61ffbade6bd3c608dda90ee6eaf50ced8cea3bb47f3d9c87b4315b9e4dae4cac59a8b7490823f9aee5e5e9c8429b692bd6bfae071e8ef187a99d61ffbac16bd3a608dda90ee6ea0d0ced8cea3bb47f039c076556e62866cb43dfe122d62cd4db2c84917cd7b1f274e4b2d066da8a8d6337000fc738cfa47b388edde8b5697384ee540773f546867646f51ddabf3122764b90ac16378d418b9b22786e1a672d285ea9cc57a7905975569de3985567d5398e5975569de3985567d5398e5975569de3985567d5d96eaab3eaac3aabce4930abceaa731cb3eaac3ac731abceaa731cb3eaac3ac731abceaa731cb3eaac3ac731abceaa731cb3eaac3ac731abceaa731cb3eaac3ac731abceaa731cb3eaac3ac7314bd0d9f2d06f66116b16ea6d11c248beeb7979c2ef056d09466f196fbf1fca3701cf0d0cfa30b533bc87fc80d7a62d11ba531dec5f0718da19d57768ff009c87032530df984266d5b93c66cb43bf4d4fac59a8b7550823f96ee0e509c7b1adc1e8add83876007838c679a67686e3d880d7a6ad11ba531dec5f030ced8cea3bb44ff1945999e3982d0ffd8f2862cd42bd6d4218c977132b4f3efc7ee3b660f4566c1c1b009e0389f314c63106ddc371eca0d7a66d11ba531dccd5830ced8cea3bb47f10ce4329cc37a6905975569de3985567d5398e5975569de3985567d5398e5975569de3985567d5398e5975569de3985567d5398e5975569de39855e7cad1d9f2d0ff0a22d62cd4db2e84917c075879dac37587edc1e82de3edf743f920f00c24ce53587760d03d5c7738e4b5697b84ee5407fbd721867646f51dda3f04e761a233df984266cd8df161d6dc50e63866cd0d658e63d6dc50e63866cd0d658e63d6dc50e63866cd0d658e63d6dc50e63866cd0d658e63d6dc50e63866cd0d658e63d6dc50e63866cd0d658e63d6dc50e63866cd0d658e6396901b9667872b136b16eaed10c248be015e9ef0770f7604a3b762f7ed1c029e830cfa30b533bc6fe7b0d7a61d11ba531dec5f8719da19d57768ff309c076556e62866cbb3d39589350bf5760a6124df415e9e701cdb198cde8a8d63878187639c676a67388e0d7a6dda19a13bd5c15c1d64686754dfa1fd41380fcaaccc51cc9667972b136b16eaed12c248be43bc3ce138b62b18bd151bc7068187639c676a67388e1df1dab42b4277aa83b97a84a19d517d87f68fc0795066658e62b63cbb5d9958b3506fb71046f21de6e5c967a1cdb4151bc78e000fc738cfd4ce701cbbd96bd3ee08dda90ee6eacd0ced8cea3bb47f339c87b4315b9e3dae4cac59a8b7470823f9067979c2feb52718bd15eb5f37030fc7f8c3d4ceb07f1df5dab4274277aa83b97a94a19d517d87f68fc279481bb3e5d9ebcac49a857a7b853092ef082f4fd8bff606a3b762fdeb28f0708c3f4ced0cfbd731af4d7b2374a73a98abc718da19d57768ff189c87b4315b9e7dae4cac59a8b74f0823f9f0fd621f134fbdc7531fa1c5448cdde8c56eac90d84d5eeca60a89ad79ae795e09b135cf35cf2b21b6e6b9e67925c4aed45c53cd2b53f3cc39d43c730e35cfa8e62235ff4b72b13b1b8291ad0a621d656a276efd50c6f939da1609e399238c67ba309e29c2789609e3a916c6d3238c67b1309ee5c278e60ae3c90be399218ca75318cf54613c35c27872c2789608e399278c67a6309e15c278b2c2786a85f1ac16c6b354184f9f309e5e613c5dc278e60be36917c6d32c8ca75518cf79c278ea85f1d409e359258c67ad309e05c2786609e36910c6d3288c67bf309e49c278d609e3e916c6b350184f87309ed9c278560ae399268ca74918cf64613c19013cd9e0ecefa3e0f709aac147f7f7ef03dfd35c793ff8aa2262d0718e818fe673e918f6fd6a6df3d90c55f09a5b22b89e16118fe2dc12f1daf1d01d63f5c33ec5ab078e5b84f04c16c6d3248c679a309e95c278660be3e910c6b350184fb7309e75c2782609e3d92f8ca751184f83309e59c2781608e3592b8c6795309e3a613cf5c278ce13c6d32a8ca759184fbb309ef9c278ba84f1f40ae3e913c6b35418cf6a613cb5c278b2c2785608e399298c679e309e25c27872c2786a84f14c15c6d3298c6786309ebc309eb9c278960be3592c8ca747184fb5309e65c278a608e3992e8c678e309e45c278aa2278f633f1c4fd9ec27e01b1edbc375d0bd29c58169e1f8fef29edf71869ff2830920fefd3cd31f1c4fd06454e406cabc56a28db2d0bcfe3f74cb8722ae731d27e544ee17d96ab9978e27eb763b580d8560b5a1ba07b00b2f03cde57cd9553ab3d46da8fcaa9265e9ef07f4bac0a466fc5ee35c23ec7710e99da99c3fe97e06f6844fe16f52a4fab06a8331ef715c78d07144f9995398ed9f2d0da17b1e2fbd9787c6f692c8c51efaf0c3ce1f8d81a8cde8a8d8f478187e3fd83a99de13876dc6b536b84ee540773f538433ba3fa0eed1f8f88dd1224abc5893168712282e7c4386b41f14a65de9f4266093a5b1eba579358b3506fa51046f2e57879c2f17165307a2b363e9e001e8ef70fa6768663c249af4d2b2374a73ad8bf4e32b433aaefd0fe49380fa5301f4f21b3ea5c1eb3e5a1351a62cd42bdbc1046f21d65e5c9e7b2d066da8a8d63278187639c67d23d1cc786bc36e52374a73ad8bf8618da19d577687f08ce83322bb3322bb3322bb3322bb3322bb3322bb3322bb3322bb3322bb3322bb332cb66b63cf4dd6162cd42bd76218ce43bc1ca535877680f466fc5d61d8680e764e23c85750706ddc37587535e9bda2374a73a98aba718da19d57768ff149c076556666556666556666556666556666556666556666556666556666556666596cd6c79e837e489350bf53a843092ef242f4ff8bdad8e60f4566cdde114f070accb30b5335c77b8d56b534784ee540773f556867646f51ddabf15ce83322b7314b3e5a1df1e24d62cd4eb14c248be21569ec2fa6967307a2b368edd0a3c1ce33c93eee13876da6b536784ee540773f534433ba3fa0eed9f86f3500af3f11432abceaa731cb3eaac3ac731abceaa731cb3eaac3ac731abceaa731cb3eaac3ac731abceaa731cb3eaac3ac731abceaa731cb3ea5c393a5b1efa9f86c49a857a5d4218c9778a95a73d5c77e80a466fc5d61d4e030fc7ba0c93eee1bac319af4d5d11ba531dec5f6718da19d57768ff0c9c8789ce7c3c85cc9a1be3c3acb9a1cc71cc9a1bca1cc7acb9a1cc71cc9a1bca1cc7acb9a1cc71cc9a1bca1cc7acb9a1cc71cc9a1bca1cc7acb9a1cc71cc9a1bca1cc7acb9a1cc71cc9a1bca1cc7acb9a1cc71cc9a1bca1cc72c21372c4fb72b136b16ea750b6124dfadbc3ce1ef1e7407a3b762f7ed9c019ed30cfa30b533bc6f67d86b537784ee5407fbd730433ba3fa0eed0fc3795066658e62b63c3dae4cac59a8d72384917ca77979f25968336dc5c6b161e0e118e799da198e63b7796dea89d09dea60aedec6d0cea8be43fbb7c179481bb3e5e9756562cd42bd5e218ce4c3f7e55e269e7a8fa73e428b7315db6ad1e7cae7b9c72c3cdf078c5ce361afc748fb98e3e4ab079e3e269e468fa731428b7315db6ab116ca76cbc2f36b81912ba7fa3c46da8fcaa946e059cbc4d3e4f134456871ae625b2dd6b9f234f79885e7d70123574eadf518693f2aa79a80671d134fdc98b46e1c62c7f5aff1881d972be3115b3557cd5573d59c53f3cc39d43c730e35cfa8e6a23467b88e0ae77b2946000cb8f543193f2b705c7b32b53317f5796c9dd726fc3c86730ee7eaf386322b731c33d3bc4547d68b4dfa041e0f6dc3cc5a8ce7bc699fd7a634cc9b16633e9e4266d5b93c661bfbf6e4637764bdd8a44fe0f1d0763bb3164ced0cc7833b82688d295e03d4c13cbd83a19d19884bc7a6fd3be03c94c27c3c85ccaa7379cc36f69d89c72efc9e3cc6267d028f87b63b99b5e06967613cb82b88d698e235401dccd3bb18da9981b8746cdabf0bce83322bb3322bb3322bb3322bb3322bb3322bb3322bb3322bb3322bb3322bb332cb66b6b19f9e78ecc2fc3dc6267d028f87b6a7336bc1d3cec2fcfddd41b4c614af01eae039bf9ba19d19884bc7a6fdbbe13c28b3322bb3322bb3322bb3322bb3322bb3322bb3322bb3322bb3322bb3322bb36c661bfb19c9c70ebf8f83b1499fc0e3a1ed19cc5a30b5339cbfbf2788d698e235401d3ce7f730b4330371e9d8b47f0f9c076556e628661bfb9989c72eace7616cd227f078687b26b3163ced2c8c07f706d11a53bc06a883e7fc5e867666202e1d9bf6ef85f3500af3f11432abceaa731cb3eaac3ac731abceaa731cb3eaac3ac731abceaa731cb3eaac3ac731abceaa731cb3eaac3ac731abceaa731cb3ea5c393adbd8f7251ebb3d9cbfc7d8a44fe0f1d0761fb3163ced2cccdfdf1f446b4cf11aa00ee6e9fd0cedcc405c3a36ed53bc4a603e9e4266cd8df161d6dc50e63866cd0d658e63d6dc50e63866cd0d658e63d6dc50e63866cd0d658e63d6dc50e63866cd0d658e63d6dc50e63866cd0d658e63d6dc50e63866cd0d658e63d6dc50e63866cd0d658e6396901b36f6b3928f1d7e9f1d63933e81c743dbb398b5606a6778ffcb0341b4c614af01ea609e3ec0d0ce0cc4a563d3fe03701e945999a3986dec07938f9dcf7ab1499fc0e3a1ed41662d98da198e070f05d11a53bc06a883e7fc21867666202e1d9bf61f82f39036663c7f93938b1ddeb74931aadca3f53ddb95abc1f71c57ae01df735db9167ccf73e53af03ddf952781ef05d01ef2bdd0955780ef45aebc0e7c2f76e5b5e07b892bf781efa5aedc0bbe97b9f230f85eeecab781ef15ae7c3bf85ee9ca7780ef55ae7c27f85eedca7781ef35aefc74f0bdd695ef06dfeb5cf919e07bbd2bdf03be37b8f233c1f74657be177c6f72e5fbc0f76657be1f7c6f71e525e07b38c2f756577e16f8dee6ca0f80efedaebc1f7cef70e529e07ba72b4f05dfdf41991edfe5cae781ef1157ae07dfbb5db9017cef71e546f0bdd795a781ef7daedc04bef7bbf274f07dc0956780ef83ae3c137c1f72e566f07dd8956781ef23ae3c1b7c1f75e539e0fb982bcf05dfc75d791ef83ee1caf3c1f749575e00be4fb9f242f07dda951781ef33aebc187c9f75653cbf7fefca0f828fc69587c047e3cab3c147e3ca73c047e3ca73c147e3caf3c047e3caf3c147e3ca0bc04779f742f051debd087c94772f061fe5dd4bc04779f752f051debd0c7c94772f071fe5dd2bc04779f74af051debd0a7c9477af061fe5dd6bc04779f75af051debd0e7c9477af071fe5dd1bc04779f746f051debd097c94776f061fe5dd5bc04779f730f828efde0a3ecabbb781afc595df0ebef35df91de0bbc095df09be0b5d19c7998b5cf95de0bbd8951f011f8d85ef06df535cf93de05beacaef05df32577e1ff896bbf2fbc1b7c2953f00be95aefc41f0ad72e50f81afd5953f0cbed5aefc11f0e55cf9a3e06b73e58f812fefca1f075fbb2b7f027c1daefc49f075baf2a7c0d7e5ca9f065fb72b7f067c3daefc59f0d1fb388d33b63fdb3e483a9046d6476d6e8d680bf926435bfa8364afe928161d9bf6db8191ce417efc19f363656cf3182d4f2783669857b415fbccd4093c1d0c3c4ced0c3f3375796d6af7dad400759e02edec62686706e2d2b169bf0b62739c73d4a2d61d77a9a7450dd6716f68f6bdb3988e740c9bbff988b6f432b7858e4de352ef38c4eef662e7bcd8381ed356ac7f7503730f03b33d6e5ff2c70dfbd71a772cca298a938336ad050d926a13c6ce38a338e4af81f2bce691ba548ff4a0f72f62b7b94ce712d9fdd7757aaf6b803abd11edef0f926d7f9fc7d3e731db73d2d83cc2c1d01fc21ce8f538683f07daf5c568d70bda511d7cffcb3369d7e3f1f478b12d0f5de374818fae15881fafb35ac781db1ff7ba22b8c9d70d8c51d73a6dc93316bdd6690346f2f5004f379366feb95eeae983efcb755e1d7a6d0dd4590def8dd988bab6df2dc98cb48b3e83ff2548764caf63d00be70702d027f0340c402f6a672d03cfd460648ee0ccf0d0e9819b072f1b1c389c01b41a0f131f3311cda8021f96ab237c41307a2a04a764692a04a764ab3c59700a86eadb8f52b65934dd3078e2d8f0534f0e9e3c74faae53c38387f70cdd8cd4b51e3d92c6b50049d147dbe46064d2a63f487631a6ce8b552c7926c3e3a4e479da98da19bee94df1da54e7b5a901ead4c2735318da9981b8746cda9f12113bc18128d462ea18b4981ac133759cb5c0896ff2614fa5e771f1a4ca6b0bf6686c939fe7893688022e81e3671c9c7dce76f65ad79849c1c8c9a6d1d3cea8daab5a7b22ec0ca97de7b233a07608b2339c7646d3bea9d9194b3b43696724ed0ca49d71b4338c7646d1ce20da19433b43d812146600ed8c9f9de1b3337a1703db1781d77eaab6ef907646cecec0d919377b65653fb1d9ab117bf56daf14edd581bd2ab09f2ced2c837db7b55732f65ddabeb3da2b457b8568afe8ed15ae5da55a6f6c83d37aa3b14dc6361bdb626cabb16dc6b61bdb616ca7b15dc6761bdb636cafb17dc62e31766950985dbfccd8e5c6ae30f65463571abbcad8d5c6ae3176adb1eb8c5d6fec0663371abbc9d8016303c60e1a3b64ecb0b14163478cdd6ceca8b163c69e66ec96a07087ce0963278d0d193b65ec5663a78d9d090a2b667685ccae88d91530bbe26557b8ec8a965dc1b22b567685caae48d915a8fb82c20a935d29b22b437655c0ae02d8597f3bcbffdca0308b6f67ed5f101466e5ed2cbc9d75b7b3ec7656ddcea2db59733b4b6e67c5ed2cb89df5b6b3dc7656dbce62db596b3b4b6d67a5ed2cb49d75b6b3cc0f078559643b6b6c6789edacb09d05b6b3be7696f791a0308b6b676ded2cad9d95b5b3b076d6d5ceb2da59553b8b6a674ded2ca99d15b5b3a076d6d3ce72da594d3b8b69672ded2ca59d95fc9cb1478dfd83b17f34f64fc6fed9d8bf18fb57639f37f60563ff66ecdf8dfd4750c8cbff34f625635f36f615635f35f635635f37f60d63df34f62d63df36f698b1ef18fbaeb1ef19fbbeb11f18fba1b11f19fbb1b19f18fba9b19f19fbb9b15f18fba5b15f19fbb5b1df18fbadb1c78d3d61ec77c67e6fec0fc6fe68ec4fc1c8ea060e227f763b34d33e303c3c78e2d470cbf050cb89db8e0f1f3b75fcae963b8e0d1f6d19ba7df0f491e34377e08bdfe5862d5a46d878faf4c05d2dc74e1e1ebcb365e8b6e196a1232d07876e3b79f80cbee8f3ee450bce8e3870f8707cb06f573d09d2ef9519f4d7ee75b440b3b378db1e2f47903f95f3a219d5e535e812f7ae439fde2f2f5cedb69c393e34dc926b3969fe0e1c37af193cdcda82cf9d31229f196e39333c707ab8e5c8e9a1132d6dad78dc6ba694d1889ae6325ed4da3cf69607ff0f1d686fac2d0a0400", + "packedBytecode": "0x000000028df71de500000047c51f8b08000000000000ffed9d779815c5b6f67b6040643b0398b3830915c56118e20c3098136614111186610405862866cc9283392341c95940401010c3c93979921e8f27dd7bcf39cffde37ef77ec1ef76ed5debce3b45f566f6d8b579f7eceae7a9d9d56baa7bfdeaedd5d5a9baab20484dff0c5381ceb70cd399c18193fcbf4aff967eb3a96b8ceb2a75c95990239c2d7284b3658e7016e60867ab1ce16c9d239c87e508679b1ce13c3c464ec5d6226838c5cddbd681ae713326724cd3237240d3a21cd3b43807346d17e4461bd53e47383be408e79139c279548e701e9d239cc7e408e7b139c2795c8e701e9f239c27e408e78939c279528e709e9c239ca7e408e7a939c2795a8e7096e40867c71ce13c3d4738cfc811ce337384f3ac1ce13c3b46cecec0d949ff9ea37fcfd5bfe7e95f297bbefebd40ff76d1752cd4f3172aae30a9873465c6ffba85a93c4cddc3d4c3f85fcf30f50a53ef30f5d1ff2bd1ffab08536598fa86a95f98fa6b0d0684e9a2305d1ca64bc27469982e0bd3e561ba224c5786e9aa305d1da66bc234304cd786e9ba305d1fa61bc27463986e0ad3cd611a14a65bc2746b980687e9b6300d31586e0fd3d030dd11a66161ba334cc3c334224cd5611a19a69a308d0a536d98ee0ad3e8308d09d3dd61ba274c63c3342e4ce3c35417a609619a18a649619a1ca629619a1aa67bc3342d4cf785e9fe303d6068f660981e0ad3c3617ac4e09c1ea647c3f458981e0fd313617a324c4f85e9e9303d13a619619a19a659619a1da639619a1ba679619a1fa605615a18a667c3f45c989e0fd30b617a314c2f85e9e530bd12a657c3f45a985e0fd31b617a53b3c88eb0284c6f8569719896846969989685e9ed30bd13a6e5615a11a695615a15a6d5615a13a6b5615a17a6f561da10a68d61da14a6cd617a374c5bc2b4354cdbc2f45e98b6876947987686e9fd30ed0ad3ee307d10a63d61da1ba67d61fa304cfbc3f451983e0ed32761fa344cdf0ad3b7c3f49d307d374cdf0bd3f70dcd7f10a61f86e94761fab1b6fd44fffe549795fb773f0bd3cf75fe17faf797faf757faf73363995f87e93786edb761fa9d61fb7d983ed7f92ff4ef1ff4ef97faf78ffaf72bfdfb27fdfb67fdfb17fdfb57fdfb37fdfb2ffaf75ff5efbfe9dfbfebdf7fe8df7f866973c754be4d503f550531b551e5b5c9673f227ea7a0e1a4b468a9ff27bf25da5ea8e7e557b46ba5e75b19f6d67abeb5b19e367abe8d61efa0e73b18f6a3f4fc5186fd183d7f8c613f4ecf1f67d8cfd4f367823d11c0bd616d57b696da54003689d716606ba56d2dc1d65a5607b6c3b4ad15d864fbb606dbe1da7618d8da6a5b1bb025b4ed70d1324c47685b551057ac948e50eb2d8a7bbdfa795971fcbc23d57adb39e26d1f3fef28b5de0e0e78557c1ca9d7d51ee2e6286deb00b6a3b5ed48b01da36d4781ed586d3b1a6cc769db31603b5edb8e05db09da761cd84ed4b6e3c17692b69d00b693b5ed44b09da26d2781ed546d3b196ca769db29602bd1b653c1a69bdce034b09dae6d25603b43db3a82ed4c6d3b1d6c6769db19603b5bdbce049bb4bf67814dce17cfd636d5761c5e00cb68bbb45bc965a4cd06dbb9d25e83ed3c69abc1d659da69b09d0fbec57601b43562eba26dd26ea9fff5d1f9aa20aefda4ac56adb722eef5866b56ebed1bff7a93cf1cfb05f55a57819f0ad0aabfcec7d8afa92bfa2ed049fc88bd10f257415929277ac8b147d8d5b1a052e7fba759ae8fb15c3194a9b4d4bf2a88b7fe7d0d9ebe06732bc8bb89d96edd7ccc367aca386607435933f6e43ca839c6ec40e07010b33d7dcc367aca38666ba1ac197b722edc1c63f676e07010b3d56e62b6acd4c76ceabe5910d8634fae879a63cc8e018ef863b6bb8fd9c64f19c7ece350d68c3db9266e8e313b0d38e28fd99ed5fedca0d153c631bb00ca9ab127f7679a63cc3e051c0e62b6d6b7b38d9e328ed937a1ac197b72afb039c6ec73c0117fccf67614b3dd7ccc06a967a041608f3db96fdd1c63763170c41fb323fdfdd9c64f19c7ec0e286bc69e3c43698e31bb5ee7d573869fe8e70c2783eda7da760af0c61fdb35dd1dc576998fed54df9020b0c7a83ccf6b8eb1fd81ceab38fe05f44710db2fb5ad23d87ea56da783ed336d3b03eae5601fa8f6fb40a3a78cf781df40593396e5d97273dc077e041c0e62b6c6c76ca3a78c63f66f50d68c3de9e7d01c63f6f7c0e120666b7dcc367aca3866ff13ca9ab1778ece37c79895bea6ea7ce10b7dbe701ed8fea06d9dc1f6a5b69d0fb63f6adb0560fb4adbba80ed4fda7621d8feac6da560fb8bb67505db5fb5ad0c6c7fd3b66e60fb176d2b07dbbf6a5b77b0fd9bb6f500dbdfb5ad27d8fea16dbdc0f64f6debad6daa9f9ef4bd92f3d636c05f15c4bb6da5dfa5ac5be6bb66c1773bc377bb2cfaee60f8ee60f15de6c077027cc85460cc5741becc2d4f6931f0a0aff2f87d755375ef1634beeee5c0d3dd41dd13e0a3313cdd81a747fc3cc9febf3de35f6f721b7733344d80af6e50af5e0eea5500be64dd322ffe8ac1866d6b2f0b63eff819cb0ac097ac5be67b03a3d8b0ad9777ae64ff51c7c34e05f5bc0ef6a5e43991f893ef96094739d8a5cc951debd93a6bb622f83f1ef77a18364771998c0bf125eb9679f15704f5e9917dc6b2c6327637185db51105e04bd6ed7dd76f07c9e371dcc1b58eb54d13df1559f0dddbf05d6ef8c6b653a674c7b6dec01cfb35a73eb655c6bfde52bc3e916b43f183e70f780d17579dd0b75c1b8a1fb11742feda82fab2524ef4907658d8552ccbb6447673b95ec672c550a6c252ffaa20defa571a3c9506b3da2617c3b1d0c1fe908c810a8343e6cb41bbca08ed2a403b29730e68e7aa3deb63f0c87c0fe09176ac27f0b8ba268ae2c9c6f5d8c17ce3392c5e3fcbfff13cc0d5f6ea6a30cabc6d7bf50646dbb98a83eb99b4e72add81516c7d80a79b23cda2b66b3712df0e6225d91e890f393797fdb707d8a54c6ffd429d6a2bef86b6d2458c603ccad4d86bdef8b75359f21abc7b063cb8ed1c5c577575148fa578ffe6eb20de5833dba5ee865651f7785cb5e5dd0c1e99177f9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec99f999f17912f6db92723d4818cdfe6faeeef327bf7fa8d725eb57cf75fe8fd3fe6065a5d83f46fa419c67d4b910ca14b5a82ffbffa13f98f99c0afb48f670ab5d725b627fcc2a98177fd8d70ab725437fa792d87c978d74f5bcad5dd0b0af9cb99fa2a62efa3fa3a60586a6d81fff7c8347c56965cb7a3617cffe327d16895a493ece677bc5813dd6e3df2e650d9e59b7081ab61f789c71d57f47da6a795e5e61f82e843227b5a8df36d2b74ac618ee662c87fd7e64ddb2cc7960af34d6dd5e2f2b1cad8cf5f78465a5cca9d0a6ee6d51af9983b6b22cd3beebf8dc3cfee370ea397eb70c78ba028f8b76c6d1f94629ee03713fc737fba7d9ce63a40cf6ed73d0af326d7f27f1e7993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367f6cc9e999f59f198cf5af1fdda7212c62cf57d483ecf906f95c9fa93df0b6e51efd7f5733879e6d4d9a833be3bfacf16f56537eb7c5170607f87a86de9eafb1451db52fce1b767f059908be7ba05e04bd65d66d142f225b1f94e3dc7773136843cc7ef66e85a6ed1d4d5fe8acf585153dc5fbb1b3cf86c34eadb3e6586cdd13e9e362ec41fee4b6560933cbe1fed623be3b1c4ecd723fef0f9f577b4b6ed0357dbbeacd465bb81df4da90a0e8c6ffc9eca0fa1edfbb1ce631f0eec3bf285e5ff32a57b4e2dfaa93a3bf8be666901ac4bb6afeddb9e03803526df5d715d053a0d30342884fce72deacb4a39292b5a0bbbda47e41b30c86e2ed7dd58ae18caf4b3d4bf2a88b7fee6b756fb1bcc6a9bfc0ce2ec0b38febb6a93fa4568741e6824651c7fb3d1dabfd2ec5788ed686ba38c2c8bdfa2fb2bb45151fd476dc700d7c73159b7ed38661e171ad3cf33dffb69fd17b41771f7d3fa2f8821eca71518ebef0ceb17aed641f4b145cafc3f63fde639b92c83fdc0fe673f81efb994e97c26e7e487eafaca764e8ecb45d55d31e377d0aa6264c69840163c4f90326db5d6b2cd2a23b87b5b962d8a5856b432bf1556141ca89f9befaca5f6f9fe465d24aef11be452e628a88b9bf396d439a0ab6fca55419d54becc525729733cec6b27ea7c02b613eeb7e75afe2f53ba73401cc3fda2f8eb9cdcbe17036715f841df97006b4cbebba26f3907143f622f84fc392debcb4a39d143b41676b58fc87914b29bcb5518cb1543990196fa5705f1d6ff2283e72283596d935320cece857ee8aedaea01111a75068da40cde53b47d07d476afc3d5fb1b51e752f8fe92797e85c74937e74df6f358f3be9aed1ca1b3c18fe7083da19d4d58ca9af70be5781967bf617c57a227f8c577255c7dbbb90fe85605f3785e70287dbbf88eadf2173566429f2cf88e1a33211bbe3b18be3b64d1b7d7dc6bcea4b983310892ef9fe1374bd594eebc14c72590e55a00a38bb11c1241c36f8f1f8c11c77790e55a02a38be343a6df3eef098cb25c2130ba78b714c7df680c237e63188ff3c2e8e05bb15d9bfaad58bca7d71a1899ded9c467538701a38bf3e2a6beab87e7f36de0d7d5b844dd32602c034659ee706074716f1caf651ac388d745b25c5b6074f10c2bd3f19df0dbf3786fd92563ba63bbe3be286599de7ba974cb93f65c037d3b18d730a905de673c98167dddf2a43df741df0eeefb25b5c071060fa6053e1b7431ee612268f81cee603cf8fc52963b1218ab1c31f6cf80b10a18ffe75e31300e70c4589501e3006014fbd1c0e8e0fe6b927140068c789f52963b06182f76c47851068c1703a32c772c30bab8979a00bf8d61bc041865b9e380f152478c9764c0782930ca72c703e3658e182fcd80f1326094e54e00c6cb1d315e9601e3e5c028cb9d088c573862bc3c03c62b8051963b0918af74c47845068c5702a32c7732305ee588f1ca0c18af024659ee1460bcda11e35519305e0d8cb2dca9c0788d23c6ab3360bc061865b9d38071a023c66b32601c088cb25c09305eeb887160068cd702a32cd71118af73c4786d068cd701a32c773a305eef88f1ba0c18af074659ee0c60bcc111e3f51930de008cb2dc99c078a323c61b3260bc111865b9b380f126478c3766c0781330ca726703e3cd8e186fca80f16660bcc9c238c811e3cd19300e024659ee7c60bc257ec6e4b5f4a00c186f019e5be3e7496a764b063cb7bae5497e57ef168bafdbe2f795dc168383c6d7fd36e019123f4f725bdc96018f3014c372a8d9edf13326351b9201e3edc033347e9ea466b767c0331434bbdda2d91df13326351b9a01e31dc0332c7e9ea4667764c0330c34bbc3a2d99df13326351b9601e39dc0333c7e9ea4667766c0333ca8d7ec4e8b6623e2674c6a363c03c611c0531d3f4f52b31119f0548366232c9a8d8c9f31a95975068c2381a7267e9ea4662333e0a901cd465a341b153f6352b39a0c1847014f6dfc3c49cd4665c0530b9a8db2687657fc8c49cd6a3360bc0b7846c7cf93d4ecae0c784683667759341b133f6352b3d119308e019ebbe3e7496a3626039ebb41b33116cdee71c47877068cf75878e2fe4ef6dd165fe31cd57d6cd0f8ba0b43312c87fd24c63b621c9701e3786094e5b09f449d23c6f11930d601a32c9770cc98ae9f441df89e10bfef64bb5417345e9f096e79d2f69340df131d69312168bc1613ddf2a4ed2781be2739d26262d0782d2601cf64075a24c047637884a11896c37e12531c314ece80710a30ca72d84f62aa23c62919304e0546590efb49dceb88716a068cf702a32c87fd24a63962bc3703c669c028cb613f89fb1c314ecb80f13e6094e5b09fc4fd8e18efcb80f17e6094e5b09fc4038e18efcf80f1016094e5b09fc4838e181fc880f1416094e5b09fc4438e181fcc80f1216094e5b09fc4c38e181fca80f1616094e5b09fc4238e181fce80f1116094e5b09fc474478c8f64c0381d186539ec27f1a823c6e919303e0a8cb21cf69378cc11e3a319303e068cb2dc3d8e19d35dbf3cd6cc7d475dab3477df51d725cdddb78f731fe7f9e0dbc7b98ff37cf0ede3dcc7793ef8f671eee33c1f7cfb38f7719e0fbe7d9cfb38cf07df3ece7d9c33f97edc81ef04f890a9c098af82bc3014c372f778c666cd883c25f1f19462ddd1d71304757fc2c253e0a8eee8eb4982ba0b43ae313e9e038cf7e400a3d731d507b1298c8ae729473c4f66c0f314f03ced88e7a90c789e069e67e2e749c6d4d319f00843312c774f0e303e9e038c5e47af2313a3d7317f74f48c9ed1337ac643c1980b6db867cc89782c6b2aa3e299113f4f52b36732e099019ac972b7ba652c6b2aa3e299193f4f52b31919f0cc04cd66583473c058d65446c5332b7e9ea4663333e099059acdb468e680b1aca98c8a6776fc3c49cd6665c0331b349b65d1cc016359531915cf9cf879929acdce80670e6836dba29903c6b2a6322a9eb9f1f324359b9301cf5cd06c8e4533078c654d65543cf3e2e7496a3637039e79a0d95c8b660e18cb9acaa878e6c7cf93d46c5e063cf341b37916cd1c3096359551f12c889f27a9d9fc0c78168066f32d9ab132de93038c8fe700a3631dcb9acaa878163ae2599001cf42e079d611cfc20c789e059ee7e2e749c6d4b319f00843312c774f0e303e9e038c5e47af2313a3d7317f74f48c9ed13366c6f8440e30fa6ded1959191d5c5fa57d87e6d966ee3bea1d9ae6ee3bea1d9ae6eedbc7b98ff37cf0ede3dcc7793ef8f671eee33c1f7cfb38f7719e0fbe7d9cfb38cf07df3ece7d9ce7836f1fe73ecef3c1b78f731fe7f9e0dbc7b98ff37cf0ede3dcc7793ef8f671eee33c1f7cfb38f7719e0fbe7d9cfb38cf07df3ece7d9ce7836f1fe73ecef3c1b78f731fe7f9e0dbc7b98ff37cf0ede3dcc7793ef8f671eee33c1f7cfb38f7719e0fbe7d9cfb38cf07df3ece7d9ce7836f1fe73ece997c3f1fbfefb24cbf31f33cf0b8f8e68da37a96aaf5bea0d7f5758cfa29ad5e34b47ad6d0aa18cabc00fabde840bf02f02beb9679f197297327026647becbda050df76bf1f1b8a1872af392a3ba47b5f52f3573df516d7d73f71dd5d63777df3ece7d9ce7836f1fe73ecef3c1b78f731fe72cbe31df2aa83f6f97ef9faa75bcacf3857a5eca3f01762933f9b0d46ffbc0ef432e7cfb7dc81f2bf2c1b78f731fe7f9e0dbc7b98ff37cf0ede3dcc7793ef8f671eee33c1f7cfb38f7719e0fbe7d9cfb38cf07df3ecef9e2bc18fe5f99059ec0e009d2f02c20e3994ac6339b8c673419cf50329eebc8782e26e379888ca79c8c670219cf48329e5bc878ae22e3b9908ca71f19cf34329ede643c73c878ee26e3799a8c671819cf0d643c9792f13c42c65346c633898c671419cf6d643cd790f15491f1dc4fc6d3938ce75c329e71643c73c978ce21e3194ec6f30c19cf4d643cc5643cedc8782e27e379928ce702329e0a329e47c978e693f14c21e3b98b8ce776329e52329e6bc978ba90f15c44c6f320194f77329e79643c75643c33c878aac9780691f19c47c67325194f4b329ebe643c0bc978ee25e3e943c633868ca73319cf1d643cd793f15c42c6f330194f37329e89643c33c9786ac8780693f15c4dc6d39f8ce73e329e5e643c63c9783a91f1dc49c67323194f36be679a09cf11643c45643c9791f13c46c6339d8ca72b19cf64329e59643cb5643c43c8780692f10c20e379808ca70719cf78329e11643c3793f13c45c6d39e8ca70319cf15643c05043c89e0c0314c12f0ffe7c1d6c258567df6754ec7faffbfa2ed2d60995775bea565ddaf804dbe25fbaa6559d4e915a84b95ce977eb329a913faaa8279f157041caf92f05c41c6d3818ca73d19cf53643c3793f18c20e3194fc6d3838ce701329e01643c03c9788690f1d492f1cc22e3994cc6d3958c673a19cf63643c9791f11491f11c41c6f33c19cf8d643c7792f17422e3194bc6d38b8ce73e329efe643c5793f10c26e3a921e39949c633918ca71b19cfc3643c9790f15c4fc67307194f67329e31643c7dc878ee25e35948c6d3978ca72519cf95643ce791f10c22e3a926e39941c65347c6338f8ca73b19cf83643c1791f17421e3b9968ca7948ce776329ebbc878a690f1cc27e379948ca7828ce702329e27c9782e27e36947c6534cc6731319cf33643cc3c978ce21e3994bc6338e8ce75c329e9e643cf793f15491f15c43c6731b19cf28329e49643c65643c8f90f15c4ac6730319cf30329ea7c978ee26e39943c6d39b8c671a194f3f329e0bc978ae22e3b9858c672419cf04329e72329e87c8782e26e3b98e8c672819cf68329ed9643c53c9781690f1545a789e77c423efbbcbba65fe7912df0eb643a95aef6b8eeaf4ba5e572bbd5ee1177f8550667adbd4af7a3f1c97152ef3fb04f86eceeba0d1eb8eea22dba3c0d83ee8fb6547bee51d2d59b7ccbfdccc7db7337cb7cb13df1d0cdf1df2c4b78f731fe7f9e0dbc7b98ff37cf0ede3dcc739936f07d70665f89d34990a8cf92ac8e3f5828befcb39aa6783ebc4af63d44f69f586a195796d550c655e03fdde70a09fedda53e6c55fa6cc9d0898312e4a8278e3e2cdf8eb54d62e68d85ebc69e88bf55ae448d3a863c8a266ee3bea18d2dc7d471d439abb6f1fe73ecef3c1b78f731fe7f9e0dbc7b98f7326df6fe97c8cd78da5e8433d5f94eb81b7c0ef129d2f88d1af5ad762bdae42bd6ee158027629f3bfe1b9a6dfe7fd3e1f976f7f6cf3719e0fbe7d9cfb38cf07df3ece7d9ce7836f1fe73ecef3c1b78f731fe7f9e09b39cecdbcf4173f07d85cf5e78f8ac56cbc4b70287d47c56273f71d158bcdddb78f731fe74cbe973af09d001f32a5ebe3b71478163be07154cfe4b38d65469d9e37ea540c65f018bfcc413d0bc0afac5be697018f4c95c0e3220e1ab3cd91670119cf54329ed9643ca3c9788692f15c47c6733119cf43643ce5643c13c8784692f1dc42c6731519cf85643cfdc878a691f1f426e39943c6733719cfd3643cc3c8786e20e3b9948ce711329e32329e49643ca3c8786e23e3b9868ca78a8ce77e329e9e643ce792f18c23e3994bc6339c8ce719329e9bc8788ac978da91f15c4ec6f32419cf05643c15643c8f92f1cc27e39942c6731719cfed643ca5643c8bc878ae25e3e942c6731119cf83643cddc978e691f1d491f1cc20e3a926e31944c6731e19cf95643c2dc978fa92f12c24e3b9978ca70f19cf18329ece643c7790f15c4fc6730919cfc3643cddc8782692f1cc24e3a921e3194cc6f30619cfd5643cfdc978ee23e3e945c633968ca71319cf9d643c3792f11c41c65344c6731919cf63643cd3c978ba92f14c26e39945c6534bc633848c672019cf00329e07c8787a90f18c27e31941c6733319cf53643cedc9783a90f15c41c65340c093080e7cf73f01ff7f036cf28efaf3607b5be71783ad85c5474b9d5f06b6429d97751c16a6973a1eb86ed4c9d57bf9e8ab0ae6c55f1170bc4dc27305194f07329ef6643c4f91f1dc4cc633828c673c194f0f329e07c8780690f10c24e31942c6534bc6338b8c6732194f57329ee9643c8f91f15c46c65344c6730419cf8d643c7792f17422e3194bc6d38b8ce73e329efe643c5793f1bc41c633988ca7868c672619cf44329e6e643c0f93f15c42c6733d19cf1d643c9dc978c690f1f421e3b9978c6721194f5f329e96643c5792f19c47c633888ca79a8c6706194f1d19cf3c329eee643c0f92f15c44c6d3858ce75a329e45643ca5643cb793f1dc45c633858c673e19cfa3643c15643c1790f13c49c67339194f3b329e62329e9bc8789e21e3194ec633978c671c19cfb9643c3dc978ee27e3a922e3b9868ce736329e51643c93c878cac8781e21e3b9948ce706329e61643c4f93f1dc4dc633878ca73719cf34329e7e643c1792f15c45c6730b19cf48329e09643ce5643c0f91f15c4cc6731d19cf50329ed1643cb3c978a692f12c20e3a9cc0e4f997ab75dfa5a07c0855315e49701cf2207fa38aa67297ed7e0eb18d7abb47ac7d0ea0d43ab6228b314f47bc7817e05e057d62df3e22f179915cf633a6ffb0ec463248c625be49627b9df3e16349cd2edb7ef008f8b76cd513d93fbd772a34e8f5974973218abcb1dd4d3b6efc8fc72d80eb9c6ac789ed479614d40b9274918c5b6cc2d4f72ff7a326838a5dbbf96038f8bf6c7513d93fbd70aa34e4f5a74973218ab2b1cd4d3b6efc8fc0ad80eb9c6ac789ed279614d40b9a74818c5f68e5b9ef204d459a674fbd70ae071d1fe38aa6772ff5a69d4e9298bee52066375a5837adaf61d995f09dbc1337b661bb3e291673bc29a80724f93308a6db9539ef2d204d459a674edd84ae071d1ce3bd23dd98ead32eaf4b445772983b1baca413d6dfb8eccafb2f82e09e2d5627523b4586de1599d652dc45fa6cc4b7390d9ebec758e62f63a7b9da398bdce5ee72866afb3d7398ad9ebec758e62f63a7b9da398bdce5ee72866afb3d7398ad9ebec758e62f63a7b9da398bdce5ee72866afb3d7398ad9ebec758e62f63a7b9da398bdce5ee72866afb3d7594d5e67afb3d7d9eb1c07b3d7d9eb1cc5ec75f63a473133e8ac78e4db95c29a8072cf90308a6d855b9ee47b41cf040da70263be0af2ab8167a5037d1cd533d9877c8d51a7672cba4b19dcbfd638a8a76ddf91f935b01d32615e9583cc5ee7a6312b9e193a2fac0928378384516c2bddf224dbb11941c3295d3bb606785cb4f38eea996cc7d61a759a61d15dcae0feb5d6413d6dfb8eccaf85ede0993db38d59f1ccd479614d40b999248c625bed94a72cf97ee3cca0e194ae1d5b0b3c2eda7947ba27dbb175469d665a74973218abeb1cd4d3b6efc8fc3ad80e9930afca4166afb3d7398ad9ebec758e62f63a7b9da398bdce5ee72866afb3d7398ad9ebec758e62f63a7b9da398bdce5ee72866afb3d7398ad9eb9c3f3a2b9e593a2fac0928378b84516c6b9cf2744b3e779815349cd23d7758073c2e9ecb38d23df9dc61bd51a75916dda50cee5feb1dd4d3b6efc8fc7ad80ecd9d79550e32fbd8c80eb38f0dcf1cc5ec63c3334731fbd8f0cc51cc3e363c7314b38f0dcf1cc5ec63c3334731fbd8f0cc51cc3e363c7314b38f0dcf1cc5ec63c3334731fbd8f0cc51cc3e363c7314b38f0dcf1cc5ec63c333473133c486e299adf3c29a8072b34918c5b6d62d4ff2bb07b3838653ba7e3beb81679d037d1cd533d96f678351a7d916dda50cee5f1b1cd4d3b6efc8fc06d80e9ed933db9815cf1c9d17d604949b43c228b6756e7992edd89ca0e194ae1ddb003c2eda7947f54cb6631b8d3acdb1e82e653056373aa8a76ddf91f98db01d3cb367b6312b9eb93a2fac0928379784516cebddf224dbb1b941c3295d3bb611785cb4f38eea996cc73619759a6bd15dca60ac6e72504fdbbe23f39b603b7866cf6c63563cf3745e5813506e1e09a3d836b8e5294b409d654ad78e6d021e17edbca37a26dbb1cd469de65974973218ab9b1dd4d3b6efc8fc66d80eb9c6ac78e6ebbcb026a0dc7c1246b16d74cb93dcbfe6070da774fbd766e071d1fe38aa6772ff7ad7a8d37c8bee520663f55d07f5b4ed3b32ff2e6c875c63563c0b745e5813506e0109a3d836b9e549ee5f0b828653bafdeb5de071d1fe38aa6772ffda62d4698145772983b1bac5413d6dfb8ecc6f81ed906bcc8a67a1ce0b6b02ca2d2461141b1e2f163ae22932788a2c5a1c2adf4a8b0a9d3f42ff26e0ff15c0e8aa3d5c6830ca3cc6b8d88ab2a0593b83a79da1d9a1f4adb4a884bc9a707b550223c3f66a9705cd3a183c1d0ccd0ea56fa5455f9d6faf7f717bf5054686edd501781cb4cfe50983474de9ce37b638d6c7513d93e71b5b03bbee781c923278ecdeeaa09eb6730999df0adbc1337b661bb3e219a4f3c29a8072834818c586d729dbe2e7294f183c6a4ad78e6d73ac8fa37a26dbb1f702bbeedb40772983b1fa9e837a16805f59b7ccbf07db2113e65539c8ec756e1ab3e219acf3c29a8072834918c5b61578b6c7cf539e3078d494ae1ddbee581f47f54cb6633b02bbeedb41772983fbd70e07f52c00bfb26e99df01db2113e65539c8ec756e1ab3e219a2f3c29a8072434818c5f61ef0ec8c9d27351e10f2a8295d3bb6d3b13e6eea996ac7de0fecbaef04dda50cee5fef3ba86701f89575cbfcfbb01d3cb367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367f6cc9ed93373332b9ea13a2fac0928379484516c3b806757ec3ca9e70ec8a3a674cf1d7639d6c74d3d53cf1d760776dd7781ee52066375b7837a16805f59b7ccef86ede0993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367f6cc9e999b59f10cd379614d40b961248c627b1f783e889fa73c61f0a829dd73870f1cebe3a89ec9e70e7b02bbee1f80ee520663758f837a16805f59b7ccef81edb0c7337b660bb3e219aef3c29a8072c34918c5b61b78f6c6ce937a7e8a3c6a4ad78eed75ac8f9b7aa6dab17d815df7bda0bb94c158dde7a09e05e057d62df3fb603b64c2bc2a0799bdce5ee72866afb3d7398ad9ebec758e62f63a7b9da398bdce5ee72866afb3d7398ad9ebec758e62f63a7b9da398bdce5ee72866af73fee8ac78aa755e581350ae9a84516c7b80e7c3d879ba95260c1e351518f35590ffd0b13e6eea997aeeb03fb0ebfe21e82e6570ffdaefa09e05e057d62df3fb613b3477e65539c8ec63233bcc3e363c7314b38f0dcf1cc5ec63c3334731fbd8f0cc51cc3e363c7314b38f0dcf1cc5ec63c3334731fbd8f0cc51cc3e363c7314b38f0dcf1cc5ec63c3334731fbd8f0cc51cc3e363c7314b38f0dcf1cc5cc101b8aa746e7853501e56a4818c5b60f783e8a9fa73c61f0a8a9c098af82fc478ef57154cf64bf9d8f03bbee1f81ee5206f7af8f1dd4b300fccaba65fe63d80e9ed933db98154fadce0b6b02cad592308a6d3ff07c123f4f59c2e05153ba76ec13c7fa38aa67b21dfb34b0ebfe09e82e6530563f7550cf02f02beb96f94f613be41ab3e219adf3c29a8072a34918c5f631f03888bb244f91c123f39f10f8565ad4e9fc11fa17b7571d30326cafa22c68d6cee069676876287d2b2d26405e4db8bd260023c3f66a9705cd3a183c1d0ccd0ea56fa5c5449d6faf7f717b4d044686edd5210b9a1dcaf6f050eedb87324ebde6874ef38243a879c121d4bcc06b4ea5b983e34b191ecb0260c0a90af29f02cfb7e3e749de97fb34039e6f03cfb7e2e7e9eaa89ea56abddf01f6b8d6abb4faaea1d5a78656c5500619beeb40bf02f02beb9679f1e7993d7314339edb0a6b02ca7d42c228b66f018f8b7643d5fd02bd2e597fab307d7674bd5f17cf4bf05e712bbd5ee1107f85506662497dd9df69b622f8bf6c37559ffd86cdd13bcc5d6dcfed645efc150559bb779bf65e326ae1e27953a6c7fdfd169eafe3e329c5fd1c7ded7354f74c9efdedb3f0c458f7ae51cf3df7c65ff764fbd145af4bd6aff6d17f3fdaa9e6e5b8ef49fbd1c5a87321941958525ff63fa0fdb0b515aef74d392737f7cd16417d7b265c25da6e3e13fa5adba5dc47501edb9c0afd8bfb6705d4d555bb18758f09db45b3ed76a9bdf95cd2f45d0cba7c44aa99ed3905ea5869e1ae24e0c678cce67e26ebb63d23ab347464d30cb7f547161dfb5ab8fb127033eed77d0d1dd9343bd87e3dc8c23d88809b71bf1e64e8c8a6d9c1f6ebc116eec104dc8cfbf560434736cd0eb65f0fb1700f21e066dcaf87183ab26976b0fd7aa8857b280137e37e3dd4d0914db383edd7c32cdcc308b819f7eb61868e6c9a1d6cbf1e6ee11e4ec0cdb85f0f0f1aeac8a6d9c1f6eb6a0b77350137e37e5d6de8c8a6d9c1f6eb1a0b770d0137e37e5d63e8c8a6d9c1f6eb5a0b772d0137e37e5d6be8c8a6d9c1f6ebd116eed104dc8cfb7563fbedb3eed77516ee3a026ec6fdbaced0914db383edd7132cdc1308b819f7eb09868e6c9a1d6cbf9e68e19e48c0cdb85f4f347464d3ccb65f3b7a9730e3771b3f76aa4f6a8ce98f33e0f910785cc494a3382875d4cf25d93775afa1d5c786563876c73ed0cf415f98b4df24107f9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec99f999f1bb8cf87c45ca7d44c228367c26e5e23ebfaafb857a5db2fe56611a786cbddf7db1fb2d2b2d30fc550187f82b8432279e565ff606cd56141cb8dd702c6edc967b62af436a5b9af12ff3e2af08eab317781cbc9f9fe4d967f0ecb36881ef9dc6e3bb6ca41b8dcb4adb050d637f8f511fd4f483d8fd37d4b4c0d0f403c7be1341c3ed290c3855411e795c3c1b7654cf645bb0dba893a9713194e904f5dceda09e05e057d62df3bb8147a616c0e32a06038327b0e823532519cf54329ed1643c6792f10c25e3399e8ce73a329ec3c9782e26e379888ca79c8c670219cf48329ed3c8786e21e3398a8ce72a329e0bc9780ac978fa91f14c23e3e94dc6733719cfd9643cc3c878ce27e339918ce706329e0419cfa5643c8f90f19491f14c22e31945c6d3918ce736329e63c878ae21e3694dc65345c6733f194f4f329e73c978c691f19c43c6339c8ce764329e9bc8788ac978da91f15c4ec6f328194f0519cf05643c53c878ee22e339838ce776329e52329ee3c878ae25e3e942c67311194f1b329e07c978ba93f1d491f15493f19c4ac633888ce73c329e23c978ae24e36949c6d3978ce75e329e3e643c63c8783a93f19c45c6730719cf09643cd793f1b425e3b9848c672f19cfc3643cddc8782692f1d490f1ec27e32921e3194cc6733419cfd5643cadc878fa93f1dc47c6d38b8c672c194f27329e3bc9784e22e3b9918ce708329e22329ecbc878a693f17425e3994cc6534bc6733a19cf10329e63c9780692f11c46c633808ce701329e1e643ce3c9784690f19c42c67333194f7b329e0e643c5790f11410f0248203bfc59480ffef039b7c33e843b0b5b0ac4f9e534b79755c5cdcf1c075b7b0acfb030b03eab40bea52a5f3a5df6c4aea84beaa605efc1501c707243c5790f17420e3694fc6733319cf29643c23c878c693f1f420e379808c670019cf61643c03c9788e25e31942c6733a194f2d19cf64329eae643cd3c9782e23e32922e339828ce746329e93c878ee24e3e944c633968ca71719cf7d643cfdc9785a91f15c4dc6733419cf60329e12329efd643c35643c13c978ba91f13c4cc6b3978ce712329eb6643cd793f19c40c6730719cf59643c9dc978c690f1f421e3b9978ca72f194f4b329e2bc9788e24e3398f8c671019cfa9643cd5643c75643cddc9781e24e36943c67311194f17329e6bc9788e23e32925e3b99d8ce70c329ebbc878a690f15c40c65341c6f32819cfe5643cedc8788ac9786e22e339998c673819cf39643ce3c878ce25e3e949c6733f194f15194f6b329e6bc8788e21e3b98d8ca72319cf28329e49643c65643c8f90f15c4ac69320e3b9818ce744329ef3c9788691f19c4dc67337194f6f329e69643cfdc8780ac9782e24e3b98a8ce728329e5bc8784e23e31949c633818ca79c8ce721329e8bc9780e27e3b98e8ce778329ea1643c6792f18c26e3994ac65349c6d3c2e0c1ffab77c3f6eabc7c3ba810fe3f49772e6fafd72565e419b1ba57f1be6153f5dde9a8beef07f55315ccef84fa0afbfbc0f3be239e5d068fe9bb08f295a0d90ec3a618b73b62dc6130cafc766014fd7600cf0e473c3b0d1ed37711e4fb8266ef1936c5b8cd11e37b06a3cc6f0346d1ef3de079cf11cf7683c7f45d04f941a0d956c3a618b73862dc6a30cafc166014fdb602cf56473cdb0c1ed37711e4078366ef1a36c5b8d911e3bb06a3cc6f0646d1ef5de079d711cf1683c7f45d04f921a0d926c3a618373a62dc6430cafc466014fd3601cf26473c9b0d1ed37711e48782661b0c9b625cef887183c128f3eb8151f4db003c1b1cf16c34784cdf45901f069aad336c8a71ad23c67506a3ccaf0546d16f1df0ac73c4b3dee0317d17417e3868b6c6b029c6d58e18d7188c32bf1a1845bf35c0b3c611cf5a83c7f45d04f96ad06c9561538c2b1d31ae3218657e25308a7eab806795239ed5068fe9bb08f235a0d90ac3a618973b625c6130cafc726014fd5600cf0a473c2b0d1ed37711e46b41b3770c9b627cdb11e33b06a3ccbf0d8ca2df3bc0f38e239ee5068fe9bb08f2a341b365864d312e75c4b8cc6094f9a5c028fa2d039e658e78de36784cdf4590af03cd961836c5b8d811e3128351e61703a3e8b704789638e2596af098be8b203f01347bcbb029c6458e18df3218657e11308a7e6f01cf5b8e78161b3ca6ef22c84f04cdde346c8af10d478c6f1a8c32ff06308a7e6f02cf9b8e7816193ca6ef22c8df0436e1ed03b6d775be37d85ed3f95e607b55e77b82ed159def01b69775be3bd85ed2f972b0bda8f3ddc0f682ce9781ed799def0ab6e774be1fd89ed5f9fe605ba8f355605ba0f303c0365fe72f02db3c9dbf186c7375fe12b0cdd1f94bc1365be72f03db2c9dbf1c6c3375fe0ab0cdd0f92bc1f68cce5f05b6a775fe6ab03da5f3d780ed499d1f08b62774fe5ab03daef3d781ed319dbf1e6cf7e8fc0d60bb55e76f04dbc73a7f33d83ed1f95bc0f6a9cedf06b66fe9fced60fbb6cedf01b6efe8fc9d60fbaece8f00dbf7747e24d8beaff3a3c0f6039dbf0b6c3fd4f93160fb91cedf0db61febfc58b0fd44e7c781eda73a3f1e6c3fd3f94960fbb9ce4f06db2f747e0ad87ea9f353c1f62b9dbf176c9fe9fc34b0fd5ae7ef03db6f74fe7eb0fd56e71f00dbef74fe41b0fd5ee71f02dbe73aff30d8bed0f947c0f6079d9f0eb62f75fe51b0fd51e7a55d53edec9f74be2488b79dfd2aa89f4ac0b7f85365feacf3ad8d32b26c2194395b772854cf38d4bb4bd20e4bbbac6cd20ebf0e3669875f039bb4c3af824ddae157c026edf0cb609376f825b0493bfc22d8a41d7e016cd20e3f0f3669879f039bb4c3cf82ad4ae717824ddae105609376783ed8a41d9e07366987e7824ddae1396093767836d8a41d9e0536698767824ddae119609376f819b0493bfc34d8a41d7e0a6cd20e3f093669879f009bb4c38f834ddae1c7c026edf03d609376f856b0c9fef215d8a46dfe186cd2367f0236699b3f059bb4cddf029bb4cddf069bb4cddf019bb4cddf059bb4cddf039bb4cddf079bb4cd3f009bb4cd3f049bb4cd3f029bb4cd3f069bb4cd3f01db789dff29d8a46dfe19d8a46dfe39d8a46dfe05d8a46dfe25d8a46dfe15d8a46dfe0c6cd236ff1a6cd236ff066cd236ff166cd236ff0e6cd236ff1e6cd2367f0e36699bbf009bb4cd7f00dba33a2f6d751bb0c9b36235957ec309c7e16901be84a52a88b7edc7a90af25877992ac978e690f18c26e379998ce74c329ea1643cc793f11c4ec6f32619cf04329e85643ccbc8789692f1bc41c6731a19cf06329ef5643c4791f1bc4fc6b3938ce742329e42329e59643c2f92f19c4dc6338c8ce77c329e13c97812643cf3c9789690f12c26e3798d8ca72319cf3a329eb5643cc790f1ec20e3d94ec6d39a8ce72b329e19643ce792f13c4fc6730e19cf70329e93c9788ac978da91f15490f15c40c633978ce72d329e45643caf90f19c41c6b3868c6735194f2919cf71643cef91f16c23e3e942c6d3868ce769329e3a329e67c978aac9784e25e31944c6731e19cf91643c2dc978fa92f1dc4ac6339b8ce725329ece643c6791f1ac22e35949c6f32519cf09643c5bc978b690f1b425e3d94bc633918c6701194f0d19cfeb643cfbc9784ac8780693f11c4dc6d38a8ce763329e99643c2f90f1ac20e3594ec6731219cfbb643c9bc9788e20e32922e39947c6534bc6f32a19cfe9643c43c8788e25e3398c8ce719329ee7c878de21e3799b8ce714329e4d643c1bc978da93f17420e3d94dc6b38b8ca7808027011c01d8e4ff2dc126dfe1d90fb62f747e2fd8e41b3e6f82ed739d7f146c0f5b6c2d2c7cc2301d6cf2aeec176093fb338f804dde99f81c6c72de20fed5fcca8e07f2b78065c44f4b0b3ffafbdcc22579dcdeb24c5510eff6465f5581fd9b770506e3a1e6d945c6b39b8ca703194f7b329e8d643c9bc8784e21e3799b8ce71d329ee7c8789e21e3398c8ce758329e21643ca793f1bc4ac6534bc6338f8ca7888ce708329ecd643cef92f19c44c6b39c8c670519cf0b643c33c9783e26e36945c6733419cf60329e12329efd643caf93f1d490f12c20e39948c6b3978ca72d19cf16329ead643c2790f17c49c6b3928c671519cf59643c9dc9785e22e3994dc6732b194f5f329e96643c4792f19c47c633888ce754329e6a329e67c978eac8789e26e36943c6d3858c671b19cf7b643cc791f19492f1ac26e35943c6730619cf2b643c8bc878de22e3994bc67301194f05194f3b329e62329e93c9788693f19c43c6f33c19cfb9643c33c878be22e3694dc6b39d8c670719cf31643c6bc978d691f17424e3798d8c673119cf12329ef9643c09329e13c978ce27e31946c6733619cf8b643cb3c8780ac9782e24e3d949c6f33e19cf51643cebc9783690f19c46c6f30619cf52329e65643c0bc9782690f1bc49c6733819cff1643c43c978ce24e379998c673419cf1c329e4a329e16169efd8e78e45b31b26e99dfdfcc7def347cefcc13dfdb0ddfdbf3c4f736c3f7b63cf1bdc5f0bd254f7c6f367c6fce13df1b0ddf1bf3c4f77ac3f7fa3cf1bdd6f0bd364f7caf367cafce13df2b0ddf2bf3c4f772c3f7f23cf1fdb6e1fbed3cf1bdd4f0bd344f7c2f367c2fce13df8b0cdf8bf2c437f3f5b7ea872b7d9577ebdf04fcbf0218df74c4b8df6094f93781516cf83dea0a473c51d7ee1504be9516722f4b9e7926e0ff95c0e82aa62a0c4699b7c5d44ee0a974c41375cfa192c0b7d242dec5963e9509f83f8ebfec2aa62a0d4699b7c5d476e0e9eb8827ea5e495f02df4a0b79f759def94bc0ff71bc755731d5d76094795b4c6d039e418e78a2eef10c22f0adb4906f85c9376912f07f1c9fd1554c0d321865de1653387eee60473c51f7a60613f8565ac8b776e59b9709f83f8edfe42aa6061b8c326f8b291c3f6e88239ea87b6a43087c2b2de459b07ca33d01ff1f0a8cae626a88c128f3b698c2f16e863ae289ba173894c0b7d26298ce4b1fab04fc7f1830ba8aa9a106a3ccdb626a3df00c73c413750f7318816fa5c5709d97773812f0ffe1c0e82aa686198c326f8ba9b5c033dc114fd4bdd7e104be9516d53a2feff427e0ffd5c0e82aa6861b8c326f8ba9d5c053ed8827ea9e7135816fa5458dcecb37e712f07f1cff7db823c66a8351e68703a3d856024f8d239ea87bdd3504be9516f26dff15fa3701ffc7f1585dc5548dc128f3b698c2f1a06b1df144dda3af25f0adb418adf332264c02fe3f1a185dc554adc128f3b698c2f12b473be2897ab6309ac0b7d242becdb54cff26e0ff75c0e82aa6461b8c326f8ba9a5c053e78867b1c1b3d8a2c5a1f2adb490bedc4bf46f02fe3f01185dc5549dc128f3b6985a0c3c131cf1443dcb9940e05b6921dfd67e4bff26e0ff1381d1554c4d301865de16538b8067a2239ea8675013b3e03bea794a367c473d1bc886efa8fbdcd9f01d75cf361bbea3ee3f66c377d4bdb46cf88eba2f940ddf51f738b2e13bea7a3d1bbea3ae3db3e13bea3a2a1bbea3ae09b2e13beafc361bbea3ced5b2e13beabcc3b7e7be3d8fdbf7a13c77c8d7f6fc501e430fe5b1c45f1bf86b836cf9f6c7127f6d902ddff97a6de0dbf3ecb7e772fd5510445f8fbdedc8f752c3b7cce37396a58e7c2f367ccb3c3e3358ecc8f722c3b7cce3fdef458e7c1719be657e51167cb7337cb7cba2ef0e86ef0e16df0eb67759226878fd2d0c3855411e63e02d075a38aa67a95aef12bdaeaf635cafedbe8db9bf14439925a09febb643d66db61db9c88c71d1263edfa509f021df255336797efc3ad8a4dd7f0d6cd22fe055b0c9b1e915b0c933a997c126cfac5e02db689dff186cf2ec18fbeccbf3ff6d60abd679ec2b3e5ce7b7804dfa52611f65e90fb7196cd2a711fbc64abfd48d6093bec5d82753fa87af079bf4f1c7be80f29ec65ab0c9bb36d8074dde975a0db6bd3a8f7d9fe43b342bc1365de75780ed0f3abf1c6c0fe9fcad60fbbdce7f05b6dfe9fc22b03da8f36f81edb73abf046c0fe8fc8b60fb8dcebf00b6fb75fe79b0dda7f3f82edbaf757e17d83ed3797c876a9aceef04dbaf741edfddb957e7b783ed973aff1cd8a6eafcb3609ba2f30bc1f60b9d5f00b69febfc7cb04dd6f97960fb99cecf05db249d9f03b69feafc6cb08dd7f95960fb89cecf04db389d9f01b6b13aff0cd87eacf34f83ed473aff25d8eed6f9c5606ba1f34bc1266346623f95429d7f1b6cad741efb1fc9f7fd2782ed309d9f00b6363a5f0736f936dc68b0c978d0b5604be87c0dd88ed0f96ab0c9f9d970b0c9f827c3c026e75243c1d65ee787804dce7b06834dc6b31c0436f906695fb01dadf39560936feb5780ed589ddf0f361973ec4db0c977ebf6824dc6627e046cf2bdeae9603b49e7ff00361987e521b09da2f3bf07dba93aff3bb0c9373c1f045b89ceff166c1d75fe01b09daef3bf019b8c91753fd8ced4f9fbc0266307ff1a6cf2bde7cfc0d649e7a781ed1c9dff15d8642c917bc126e383fe126c9d757e2ad8e43bdc53c07681ceff026c32dedfcfc126df189e0c3619d7ed6760ebaaf393c056a6f33f055b379d1f0fb6729dff09d8baebfc38b0f5d0f9b160eba9f33f065b2f9dff11d87aebbcb4336a7f56fbf93e3d5f15c4775ea6fc7d18349cd25d1b0803f2c479ae5d0c3ce86b4fec752f4b9ed7cb7edf42af5762680ff8de1dbbefd435c5077a5d857abdbb0ddf8550e61cdd38a8e5e498df522fb7d7580eef63c9ba65990bc1becb58777b5ddf0f1cd577b7c124dca88394395f33a963e30f74be0d2c13235bf2fa58622d000d71aa82bc30b8d1aaac14cf7b1bc3f301f0ec899d2775bdee222670df8afb7addbc8f6bc65a3194d90dfaed72a01feeebb26e99177f9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec99f99915cf3e9dc7e7ca526e1f09a3d8f6008f8bfbfcf81c56d6af9eebec3aaddeef9ed8fd367cbed74aafb7d4a8732194f91a9e39edd5f922f8bf6cb7a86de9e03961da6d29fe8aa03ef82c689f239e3d06cf1e8b16922f89cd77d948371a9795b60b1a3e5bdc6dd4073575b5bfeed1eb2a3034c5fdf54383079f8d1601ef47fa3701ebf908eae0601f4f1b17e20ff7a53d6093fc87c0e8623be3b144da03791e8ecfa6a5ccaf8ce7e2f16ffbb25297edc6fb50a7aae0c0f82e8432bf83b6ef739dc7be21fb40b77f58fe2f53bae7d4a29faaf38ef8eb9cdcbedb81b30afca0eff7803526df0ddea129d049fc88bd10f27f87fe1c524ef410ad851dc72b477673b90f8de58aa1cc4e4bfdab8278ebbfc3e0d96130ab6df225c4d93fe0f8efaa4dda19a1d185a09194d9031aed75c4b3c7e0110ef1a7cac8f66f6d9491650ba1ccff82364ad545da79a927f66dc16380abe398f89275cbbceddcf8036034eba8e263e0b1f5bc7b62e7cdadfe5f8795a47eb15d8fabff97acbbbd5e56380263fda5b07ee16a1d441f5bfe67fb96d4afdf65ffb2bd469d8505759632ed4a52bf2ace2ed3f94ccef50fd5755bd4b9fe4e073c89a0e1b5b79ad21ddff118f3be031e47f52cb51dbb7619752a86329da09e0ece63d2be0bbc037cbbd8e6a8859c43ed36b42884321d4b52bfd27644e988d7aa1f64a52e65d6f3c1524b5da44ca792fabab4017b9c4c2eb7db7b5027b5de3d96ba4a99f34bea75e9a2f309d84e78dfa4afe5ff32a56b0f702c9eadf1d739b97db7006715f841dfef026b4cbe1b7c0b44cef7c58fd80b215f59525f56ca891ea2b5b0ab7d44def9437673b9ddc672c550669ba5fe5541bcf5df6af06c3598d536e95a529f973872d96e6e8bd0a81434923278ff588eedf8de9dedb8bfc71177d4717f0f309aed269ebbb864db6bb099f7506de7835206cfc9a4ccd525a95fd5ce262c65cd7bc32eee63e23ba801d42330ea2a13c680836bc372bc7692764afc7401fb1e9d179dbb18da1542994125a95f87e7ddd67b97e6f51d5e5308b7b96fe1bb1f434aeab971ecc43dfab7086c9fe85f47d769e5b67b86c261bb6738bca49e1d9715ae8f2d7531af915b0407de53ffda288bf7ddd22d67e6cd712895be9f18e56c7ef09a27b67735ba969622538bc07ebfe04383bd203870cc4dd90f30e6ccfb285d8cf5e07d94ba92d4afb4496659b5edfffde87a7d643b8a76d89e604c7e088c553a5ffacda6aeb6facbbcf8538c1f197570d376a5de57cae43ef05ee071d1b63b6aa34bf1181bdff7297a57db8eff1f1a5a65f179adf5986f3e736f63e4e3f15d5663bbff64d362b785c7d57394282d765b7cc7a7458f91b6e3874d8b5d169e5d59d66297c5778c5ad4e27dcf745abc6fe171712f2a9d16ef5b7cc7a745cfd274cf35508b9d161e57f71ea2b4107f9932ef22606e63e4e3f15d5e6dbb4f66d3628785c7d5757394163b2cbee3d3a26b0fbc47974e8bed169ef8efcfa5d762bbc5777c5af4ea8df7f0d269f19e85c7d533dd282ddeb3f88e312e46d9eee5d8b4d866e1d996652db6597cc7787ed8c376afcda6c5560b8f83fbae69b5d86af11da31623f0be6b3a2db65878b664598b2d16dff16951dddd764fd8a6c5bb161e57f784a3b478d7e23b3e2d46f452be3737428bcd169ecd59d662b3c5778cd750c9b8d8d4082d3659783665598b4d16dff16951933cd7dad8082d365a783666598b8d16dff169519a3ca66e6884161b2c3c1bb2acc5068bef18e322793db9be115aacb7f0accfb216eb2dbe633c8e24e3625d23b45867e15997652dd6597cc7a7456df2fed3da4668b1d6c2b336cb5aacb5f88ef19e4b322ed634428b35169e3559d6628dc5777c5a744b1e535737428bd5169ed559d662b5c5777c5a8c4a3e135bd5082d5659785665598b5516df319e7726db8b958dd062a585676596b55869f11de37967f2fec58a4668b1c2c2b322cb5aacb0f88eb1ed4c9e772e6f8416cb2d3ccbb3acc5728bef18cf3b935abcd3082ddeb1f0bc93652ddeb1f88ef1bc33791c79bb115abc6de17135064a94166f5b7cc71817c9b6735923b45866e15996652d96597cc7785f2bd9762e6d84164b2d3caec66b88d262a9c5778cd723c97b7c4b1aa1c5120bcf922c6bb1c4e23bc66745c973f0c58dd062b185677196b5580cbef7c6ee3bd59f5b7c485fac0b0c2d0aa1cca91d53bfd2172b4a475907f62bc3babc157b5d52fdca1645d4e52da88b943913ead22670324651b9a3ba2663e64da8935aef4796ba4a99733bd6ebd259e713b04d3e06ddfa58fe2f5381315f0579d14fd5f9f5f8eb9c8cd5d780b30afca0ef57813526df5dd177814ee247ec8590efddb1beac94133d446b6157fbc81b3a8fece6728b8de58aa1cc1b96fa5705f1d6ff7583e7758339f9de03c499c4919bb62bc5f44684461780465206fbec7de488c7ec43281ce24f9591eddfda28837d28a5cc45d04661bf52a9672238b0dfa4a3b6ac2bb2cbba655efc15836d2f309a7554f1f119f4fd94b122641c0965937121bac17a7a1a3655d75e8eea2abe64dd32df0b18659c8a9ed9672c6b2c630f8351f1f471a0198ebd2153bae3451fe0e9ed80c7513d93c7a10aa34ebd8c3a1543197cb7b1c2413d0bc0afac5be62bc0b78b6d8e5ac831f95c438b422833dc387f8cd251d6a1e2b7a7a52efd1cd745d62ded52bf2cf8ae347c77377c278286db3908d2ef5f95c0dcd701b35a6ffff8d75b8ae76d1253e2a73bd469006810579d705d729e37c0d0b610f253e13c4fca4959397e09bb8a65d996c86e2ed7c758ae18caf4b3d4bf2a88b7fefd0d9efe06b3da2677c3b99d83fd211903fd0c0e99ef0edaf58fd0ae1f682765f0f8d7c391767d0d1e99ef013c728e530136395710fe04fcbf5b16b8cd76afc2c22d361c27ae8785b17bfc8cc9739d1e06a3cc770746b1f5059e4a479a99dbfa5c431f3c2eb736cac8b2855066161c1b1396b26abfeb54505faf96da1edbbb63ba4d6fed402f1ca731007d0243c300f4927ab672c0d336a81fab71f294ba4923ee1a75e3a8d4a347412b3430f1b7c0528d1660c37c4b8b2d081a0e495908361992b215d85a18b2e05098525e86b4732117ea21eb2e3438db004b9cbe71384f99d285ce61c0e3229455e8c8909e3a746e9d3466ca288c8f560667536247fdaf659a7251eb72b51dcc7da20ae6cd182c74e4bf25d4b70ae6c59fda3632b4ea841123ef1930e9aea9e3468d9f32198532776ccc17040d3780f91b25b8ab9d0e03002b8c8d432ba35ed860c8ff64c3b48d9fb31cc7cc35b509c09f4c6d41b7c31de8a6d62f63df8e1c3176ecf553abc78e1979d9d4f123a78ca91b8f5bb38da15cd49696ffb7069bad89c7b26ac2660b973dcc62b34d38ca701bb0c991eb70b0094f5bb0b584bc9437b78c9370ed04eb975d4afd4f89d34a57fcb0a03e04e470acda55b5ffaa5339f50959752aa48636569b530d5dacee18aaa189d557ecd4d0c36aa86135b4f089416ae8603554f029416a2860f5b58b922035b4efe9416ae8de3383d4d0bc6703dfb781f99c2075daa586d6ed1ca486ce55b72ebb04a9cfbca977ebd5e9bbba2da04e79d5259e3afd54a79deaf242ddbe50b7b2d4299d3a5d56a782eaf44d5d8ef4d75a0f08d34561ba384c9784e9d2305d16a6cbc3744598ae0cd35561ba3a4cd784696098ae0dd37561ba3e4c3784e9c630dd14a69b83d4f0ceb704a9e1d7d5f0cfb705a9a1a16f0f52c346df11a48694be33480d373d22480d453d32480d533d2a480d617d57901ade7a4c901a26f79e2035d4ae1a82777c901a0e5b0d93ad86cf56c3fcaa2181d590c26aa861352cb11ac2580d81ac86467e20480db9ac866c7e38480dfb3c3d4c8f86e9b1303d1ea627c2f464989e0a52c383ab61c36704a961c6d5f0e3b383d470e57383d4f0e66ad873351cba1a265d0d9fae865557c3bcabe1dfd5b0f02f85e9e530bd12a41e49a84731ea1185bafdaf1e83a95bd46f05a95be74b82d4236ef5c85f7581505d425417991541aa0b95ea52a6bad8a92e87aa0ba6ea92aabae8aa2ecbaa0bb7ead2aebaf8ab571ed42b20ea9518f58a907a654abd42a65ea953af18aad744d56b97ea3562f55af59e20755b7c5f907a54aa6e87ab4703ea96b9ba7dff6998be15a462f23b61fa6e98be17a6ef87e90761fa61901ad6580d77ac864b56432bab6198d590cd6a28673514b41a36fab32035f4b41abafab7416a48ecdf87e9f3307d11a486d7fe324c7f0cd35761fa5398fe1ca6bf84e9af61fa5b98fe254cff1aa67f0bd3dfc3f48f30fd33a81f661b1b921375eba3af60821153a68c1a37614ac994ba927153c74e193361ecfd25d3c64c195d5277efa849b563eba6e1c2dfd60bcb18e103264d1a717fc998f135a3ee2ba99b3aa5a4aeb6a4ba6eeaf89a0607f1bfe8854e3ed0e3889a9a6867fff94d48ff6f139d1eaedb45197dfdcaf4753ba265130439b2290bf568d9b40a4dd24730b9d4bd29751e5c32796cdd9492d292f1e1dff0c05b376d544d9712fcdfe450e4c9534a264f1931694a49eda4ba71255dbbe07a1f69db844afc575b3730679dd834713ae9ef2c3529c47e795a1314f88fd39a46dabae41b90b62d699ad3929226d4f0eca62c745513096f2e899465f2d4ea2993468c9c12bdf06ddf64e13b9b52cdf14dace6291d9be0ec8ca62c34a063d308ef6c8ab39919380bfe1ba14b957d8c5506009b2d6c6f00000028491f8b08000000000000ffed9d77745cc5f5c7dfaab92c5a59b6e55e44735ce5d5aacb4deedd6020f462d996b1836d195bb4100204484f20a41708a9900224a492427aef8d407a854012f8fdf33bf99ddfef1cce6fe6eddce8abf1bc8d767923dfa7bdef9cab9d7777f6ddcf7cdf9dd9b7336f57a920bf3dab2c65ca95ca4e0d8edfe8f91ef3987d7e5b738cc7cafae44c2584b322219c9509e1ac4a08677542386b12c23926219c6313c2392e464ecd56110cdde2e61def41d7b819d309d3f4a404685a9b304d3309d0b42e48c6183521219cf509e19c9810ce4909e19c9c10ce8684704e4908e7d484704e4b08e7f48470ce4808e7cc8470ce4a08e7ec8470ce4908e7dc8470362684f3e484709e9210ce5313c2795a42384f8f91731170ce338f2f308ff3cde302f3b8d03cd26b169bc725a68d5566bf49d952cda6acd97a2ea7ac4559abb236ebb976651dca3a957599e71acd73ddca96295bae6c85b295ca56191d562b5ba36cadb275cad62bdba06ca3b24dca362bdba26cabb26dcab62bdba1ec0c65672adba9ec2c65672b3b47d90b959dabec3c65e72bbbc062b950d945ca2e567689b24b955da66c97b25e65bb95ed51b657599fb27dca2e57b65fd901652f527685b283ca0e293bacac5fd91165572a3baaec98b201655729bb5ad935caae55769da5d98b955dafec25ca6eb0385faaec46653729bb59d9cb94dda2ec5665b7297bb9b257287ba5b257297bb5b2d7287badb2d7297bbdb2db95dda1ec0dcaee54f646656f52f666656f51f656656f53f67665ef50f64e65ef52769761a18e70b7b2772bbb47d97b94bd57d9fb94bd5fd907947d50d9bdcaee53f621651f56f611651f5576bfb207943da8ec63ca3eaeec21659f50f649659f52f669659f51f659650f2bfb9cb2cf2bfb82b22f2a7b44d997947d59d957947d55d9d7947d5dd937947d53d9b7947d5bd977947d57d9f7947d5fd90f2ccd7fa8ec47ca7eacec27c6f753f3f8335397e6c57eaeec17a6fca879fca5797ccc3c3e6ebde657ca7e6df97ea3ecb796ef77ca7e6fca7f308f7f348f7f328f7f368f7f318f7f358f4f98c727cde3dfcce353e6f169f3f877f3f80ff3f84ff3f88c79d46baa6736e4cb6383c1ad2788698c6add97d56b2a24febc60e8a6b5a834cfd163a3f157997d7a24edaacd7eb5e5af31fb35d671c69afdb196bfdeecd75bfe49667f92e56f30fb0d967faad99f6af94f33fba7813f1dc09cabf16b5fa571a5c047f95a01be6ae3ab045f0d1d0e7c638caf1a7c747e6bc037cef8c6806fbcf18d055fdaf8c69196ca4e32be9e20ae5cc9f6eae3d6c67d5cb30e95899f778f3e6e9d27de09f1f3f6e9e3d67be0d5f931d11c6b02e4cd24e3ab07df64e39b083e3304fdbbcf69df14e39b0cbea9c6d700be69c637057cd38d6f2af86618df34f0cd34bee9e09b657c33c037dbf866826f8ef1cd02df5ce39b0dbe46e39b03be938d6f2ef84e31be46f0d13d2e2783ef34e33b057ca71bdfa9e0a3b1f634f0d1b5e1e9c6a7c789b129788df1d31815be86c667f0cda7b1197c0b685c06df421a93c1b70862936f318c2be45b627c3446e9e7ba4db92788ab4fe4c23eb12ceee3aa23ebe3ae88ffb8e1baddca6050eb1e88b30cb45a65ca31de1bd48cb153c6280ef9aba0bc19ea523dd283de67885d8ffbcb4d795581d7755bafcb409de58ef6f704f1b67f85c5b3c262ae86f6fbc9d9969ce4ecb0b7a273f63ca86be71e5df38cc69cdd061c1e72b65d7276d85bd139db0775eddca3ebded198b3170287879cedf593b3b9ace46c7e8e2c08dcb9479f7d4663ceee078ef873b64d7276f85bd1397b33d4b5738f3eff8ec69cbd1a38e2cfd98e5eb93618f65674cede0e75eddca3b998d198b3b70287879ced937176d85bd1397b17d4b5738fe6054763cede091cf1e76c97a79c6d919c0df2eb9d41e0ce3d9aa31e8d397b0f70c49fb37b647e76f85bd139fb30d4b5738fd64b4663ce3e60ca7a9de1a7669d6116f87e667cb38137fedcdedbea29b77392dbf9fb4082c09da3b476371a73fb1153d679fc28dc7b40be5f1adfc9e07bccf84e01dfe3c6772ab4cb431fe8953e30ecade83ef06ba86be732ad238fc63ef063e0f090b37b246787bd159db34f415d3bf7e89e86d198b3bf030e0f39db27393becade89cfd17d4b5736fbe298fc69ca5fb4af5f5c21fccf5c242f0fdd1f81681ef4fc6b7187c7f36be25e0fb8bf13581efafc6b7147c4f185f167c4f1a5f33f8fe667c39f03d657c2de07bdaf85ac1f777e36b03df3f8caf1d7cff34be0ef03d637c9de07bd6f8ba8c4fdf9347f75e7dd7f8f4b9258d7a8278cf2ddd6349c7a6fdc52310bbce8a5d3782b1ebadd8f58ed84b3cc44e430cda52d67e0f9497f8e5c96682a1dfffa0584be38fd5a2dbde140cbfed4b8127eba1ed6988311c9e2cf034c7cf13deeb9b8bffb8e1396eb2344d43ac2668578b8776a520161d9bf6295e067c387eb738185be367cca520161d9bf65b81917cf87e42efebd47ff4fbe1bcd420af87be145e13513cfaed2fe2580a7eaaf3cce441b68586ad169ec7f7d666cbe7292fc3bca058746cdaa778b5d09ee69167cc0d97316b31fa1a2352108b8e6dc7c6febe64e4351bd679cd80ef048c49b952c7a45a601b89eb94a873cd25b68ff7ab14c4a0b18d34cf819fea4c315f48d063db4618773df4bf5cb1d76f381ec49fc7b92cf6ebe1f0b4008f8fbeefa9bf66f17dffb920de5c6bb3b46ab6b4ca409d56d0afcd837e85ae43289e300bb3300bb3300bb3300bb3300bb3300bb3300bb3300bb3300bb3300bb330f367c6fb2f707d93ea2d66c248be1cf0f898e70f7f3fca1c8b8eafd7751e83759df8d72d72595cb3a47b0c17586dae823a4fa706ebfe06d6d3edb5415cd35cec57bb61dd67511b1cbf16eb730d316a1dd8b57ed9185becdc1e5feb6d7586b9c9d275b143530ff7a90cd13465698af7292eb278749e4eaf1c64f3b1f657ec5a246a45e538d7f6f01e03bfe7253f7e502e540443c70f7c9f698f3df6d0354c5a2f6fb76257419dff490d9e1bba1795fecfa17dcf93aed3611d9b5eb300fc1dd6b12798d71247b575fc26782dd5f93f1853efae08fead998ffb3f705c0ea0adb8f54019d7cde37f1fceafe3b714c1d3063c3ec6194fd71b59ec0371afe377585ab9ae63a84e3be8d7e1413fd7b528ed533c61166661166661166661166661166661166661166661166661166661166661e6cf8cdf1525d634d4cb31611ca17b1fc2f50cfafd173abe5ed7796dc5605cdfeb70b4e6b4d06a7315d4f941c560dd3b4cb93638fe7e87a873e9613dafe0b9a478b5d01e5c0bf2f57dee568ba7d5a105951b638b9d5fc78f5fe3c175fc164bd79c43535ffd15d7585153ecafcd160fae8dd606c7df5b9286e38cc4bd43517941f1b02fb5828fcaf8fd681fe719df4becfb7a281eae5fdf67b49d10f83af7b9accf71a313dad4131c9fdf5550e77e18fb1e3465bc8703ef1d79c4f13c6d85d6a9493fdde6d87fcb2e9b5ff75d069c3d1007632f07d698623763ec94318a43fe2a287fb162b02ed5233d486b62d77d847e130cd9edd7355bafcb409d2e47fb7b8278dbdf6df1745bccfa9c3c0479f608bcfffb1a93ba22345a001a511dbc0ef2754f9e3d46daf737e27d7b35561dbc66a13adf84312aeafe51d73d87bedec7a2ee39745d1bb701a3dd46fb3ecf72bf4feb51182fe2be4feb51c821bc4f2bb08ebf108e4f5c3541f47b0bd5f995757cfb9a9c5e83f781519ddfc2785167ee59ac0d8ebffec67ba646e2f355d47dd2140faf6bb06fffa7b66be64ea8df132333e604b2e07502d579d23a671d11dc4b1daf7d3ae2b5a415fd0e157e7eb1f5d33a74c16b7a62d121dfe7bbadb6505e77415ba8ce7f59d780f15fb7e4af01e36febd06b121a075a1d6da53aff0d7ded5f708d47e7093f77d4541eff3c6d85ae01493fdde691fe7d608ccde1f781ab2b07ebdabff34b5a17fbfbc0edd6eb38fe3ef0ff429ed5c07de8bec6eae5111a2d048da80e7e3788de47f0b77c5def31beeeed8f7a8f71fd06258ecf759523cf66cfabb9ae11a80ebd16af11261be6094667bbae3d5f48ef9771de378cdf956882b8f85d89264f7a6641b71ed8c7eb8213193beb2976d46f4e67472076d46f4e8f44ec7a2b76fd08c616cd45734e9a7bf84de4f0fb67f89ba57a2b745d4a0c19785d4502182b13c0589500c6ea0430d62480714c0218c72680715c0218c72780310d8c27f2bddd833eb952f5f175be0a5d6b606c0fffbb2457ecffeff0fcbf540a5efb606c0f9fe9422d9604c3d7023fe7f9f8ed8762ffd70b31e0ff2e989800c64909609c9c00c68604304e4900e3d404304e4b00e3f40430ce4800e3cc0430ce4a00e3ec0430ce4900e3dc0430362680f1e404309e9200c65313c0785a02184f4f00e33c618c8571915fc65ca98c9ac7c7fffc7b3eff73cc034fd675cfa9a7ef9e14fdffd63cff3e6973a9bf1b87f796f8fd9f70cfefb7ed7cdc3b52ec6fdb15fa7fab9e1873a532faba8f1dbfc7331c1efc5ea4ebbb351e1873a532fafafe0b7e476f383ceda0599b43330f8cb952197ddd2b57ecbd9c784f7fbb43330f8cb95219f1beea187942cd3a8ae0e904cd3a1c9a7960cc95cae8ebbee434c4180e4f1768d6e9d0cc0363ae54464fdf6d0b35eb2a8207bf03d6e5d0cc0363ae5446cdb3cc9366dd45f02c03cdba1d9a7162449eb87f27bbdb11cbc777068b6d3b3120e3b804308e4f0023de27e163fc2a749f44b75f7d72a5eae3eb7c15ba4f02637bf87e4ca8057e1fe23f69b1c22f4fc1fb2430f64a4f5ae0f755fe93162b81c7c7f767d21063383cc49081d74d4c00e3a404304e4e0063430218a72480716a0218a72580717a02186724807166021867258071760218e72480716e0218f1b3aa876bc5829f5f568ef2d8519f55467beca8cf25a33db6e4b9e47939c4963c973c2f87d892e792e7e5105bf25cf2bc1c624b9e4b9e97436cc973c9f372882d792e79ce297612e6f88571f431224f637c3c596c3bc6ea61d0f61e074fca53db31d66a066d2786a431ae4a00e3b204308a8ef97b104b61d43c6b3cf1ac2e82670df0acf5c4b3a6089eb5c0b32e7e9e30a7d616c1430c1978ddb20430ae4a00a3e8283a6ad35bf6f96da22323c624e8288cc2288cc27822189330860b6322f231572aa3e6591f3f4fa8d9ba2278d68366f4ba66bf8cb9521935cf86f87942cdd617c1b301345befd0cc0363ae5446cdb3317e9e50b30d45f06c04cd363834f3c0982b9551f36c8a9f27d46c63113c9b40b38d0ecd3c30e64a65d43c9be3e70935db5404cf66d06c9343330f8cb9521935cf96f87942cd3617c1b30534dbecd0cc0363ae5446cdb3357e9e50b32d45f06c05cdb63834f3c0982b9551f36c8b9f27d46c6b113cdb40b3ad0ecd3c30e64a65d43cdbe3e70935db5604cf76d06c9b4333ae8ccb12c0b82a018c9e75cc95caa8797678e2d95e04cf0ee039c313cf8e2278ce009e33e3e70973ea8c2278882103af5b9600c6550960141d45474e8ca263f9e8288cc2288cc531f6248051ceb5307265f4f0f9aae07768ce18e5b1ebacd87565123bea3b34a33db6e4b9e47939c4963c973c2f87d892e792e7e5105bf25cf2bc1c624b9e4b9e97436cc973c9f372882d792e795e0eb125cf25cfcb21b6e4b9e47939c4963c973c2f87d892e792e7e5105bf25cf2bc1c624b9e4b9e97436cc973c9f372882d792e795e0eb125cf25cfcb21b6e4b9e47939c4963c973c2f87d892e792e7e5105bf25cf2bc1c624b9e4b9e97436cc973c9f372882d792e79ce29f6cef863e78afd8d999dc0e3e3376f3cb533ab8f7b9639d67331eaa7b53adbd2ea0c4bab0cd4390bf43bdb837e29884bc7a67d8a572cf30b18307b8a9dab0b86f66b8ab1cad243d739c753dba3c6fa734679eca8b17eb4c78e1aeb477b6cc973c9f372882d792e795e0eb125cf25cfb9c4c672753078dd4ebf7faa8ff14253ae32fbc84a7eaa73e698fce38440fa908fd8d287e4bda21c624b9e4b9e97436cc973c9f372882d792e795e0eb125cf25cfcb21b6e4b9e47939c4963c973c2f87d892e7fcf23c03cf578c004f60f1040578e630e399c68c6722339e71cc781630e3a964c6b39219cf48dccf570ccf16663c1b99f17432e399cb8c6721339ee9cc7872cc782631e36963c6339e19cf3a663c55cc785633e3c932e3d9c68c671e339e19cc782633e359c48c27cd8ca79a19cf1a663c4b99f1cc67c6b39d19cf56663cddcc783631e3e962c6d3ce8c6726339e16663c0dcc789a98f19cc48ca79619cf7a663c35cc789630e3d9c18c6739339e59cc78a630e3c930e3a963c6338619cf0a663c9b99f16c60c6d3c18c6736339e56663c5399f12c66c63381194f3d339eb5cc78c632e34931e04907c7ff26591a9edf09be0aebb5fa7aa0b961f0f9738dbf025e739e29573a8e7d2ef8e8bbe1e7395e8b3a9d0b6de931e5ecf3db429d30560fec53bc5ae0388f09cf58663c6b99f1d433e399c08c6731339ea9cc785a99f1cc66c6d3c18c6703339ecdcc785630e319c38ca78e194f8619cf14663cb398f12c67c6b38319cf12663c35cc78d633e3a965c67312339e26663c0dcc785a98f1cc64c6d3ce8ca78b19cf26663cddcc78b632e3d9ce8c673e339ea5cc78d630e3a966c69366c6b38819cf64663c3398f1cc63c6b38d194f9619cf6a663c55cc78d631e319cf8ca78d19cf24663c39663cd399f12c64c63397194f27339e8dcc78b630e3d9c98c6725339e4a663c0b98f18c63c6339119cf34663c7398f15438783cfcffcb9087ee5fa363d3fe4e26b13d9c87f0ff7e9eefa94d179863559be3123fc5ab823a179a8142df5f85af252efb7e437c6fba0034bac0535be87ca4acf3e339760eefab0c8021b0f4091c3c3eee47f5d4ce217918e3ff9fcd6aad2eb4b4b2cf5d06ea9c0ffa5de8413f576effbb0f98c724326b1eba3623d634d45bc984917ce7f8e509fbedca60e856a8df5e083c3ec6304fed0cfbd745569b563a74a73a98ab177968a7abefd0fe45701e92c6ac79569b32b1a6a1de6a268ce4bbc02f4fd8bf560743b742fdeb22e0f131fe786a67d8bf2eb6dab4daa13bd5c15cbdd8433b5d7d87f62f86f3903466cdb3c69489350df5d6306124df857e795ad3d066da0af5af8b81c7c7f8e3a99d61ffbac46ad31a87ee540773f5120fed74f51ddabf04ce83300bb38b59f3d077b888350df5d6326124df455e795ab36968336d85c6b14b80c7c738ef49f7701cbbd46ad35a87ee540773f5520fed74f51ddabfd411bb3188578bcb86a1c5650e9ecb46580b8a572cf3f90964169d45e72866d159748e62169d45e72866d159748e62169d45e72866d15974d69be82c3a8bcea2731ccca2b3e81cc52c3a8bce51cca2b3e81cc52c3a8bce51cca2b3e81cc52c3a8bce51cca2b3e81cc52c3a8bce51cca2b3e81cc52c3a8bce51cca2b3e81cc52c3a8bce51cc1c74d63cf49b59c49a867aeb983092ef62bf3ce1f782d60543b794b5df03e5cb80e7120ffa786a67780ff92eab4deb1cba531dec5fbb3cb4d3d577687f179c875d45305f9a4066d1b93466cd43bf4d4fac69a8b79e0923f92ef1cb138e63eb83a15ba1716c17f0f818e73db5331cc77aad36ad77e84e75b07ff57a68a7abefd03ec51366618e62d63cf43fa288350df536306124df655e7972e1f71b370443b742e3582ff0ec8a9d273f8e79d03d1cc7765b6ddae0d09dea60aeeef6d04e57dfa1fddd701e8a61be3481cca2b3e81cc52c3a8bce51cca2b3e81cc52c3a8bce51cca2b3e81cc52c3a8bce51cca2b3e81cc52c3a8bce51cca2b3e81cc52c3a978fce9a87fe5710b1a6a1de46268ce4dbe595a7255c77d8180cdd52d67e0f9477034f6fec3cf975070fba87eb0e7bac366d74e84e75b07fedf1d04e57dfa1fd3d701e463bf3a5096496dc181966c90d618e6296dc10e62866c90d618e6296dc10e62866c90d618e6296dc10e62866c90d618e6296dc10e62866c90d618e6296dc10e62866c90d618e6296dc10e62866c90d618e6296dc10e628660eb9a179369932b1a6a1de26268ce4ebf5cb13feeec1a660e856e8be9d3dc0b3db833e9eda19deb7b3d76ad32687ee5407fbd75e0fed74f51ddadf0be7419885d9c5ac79369b32b1a6a1de66268ce4dbed97271cc7360743b742e3d85ee0f131ce7b6a67388ef5596ddaecd09dea60aef67968a7abefd07e1f9c0761166617b3e6d962cac49a867a5b9830926f8f5f9e701cdb120cdd0a8d637dc0e3639cf7d4ce701cdb67b5698b4377aa83b9bacf433b5d7d87f6f7c17910666176316b9eada64cac69a8b7950923f9f6fae5c9a5a1cdb4151ac7f6018f8f71de533bc371ec72ab4d5b1dba531dccd5cb3db4d3d57768ff72380f4963d63cdb4c9958d3506f1b1346f2f5f9e509fbd7b660e856a87f5d0e3c3ec61f4fed0cfbd77eab4ddb1cba531dccd5fd1edae9ea3bb4bf1fce43d29835cf765326d634d4dbce84917cfbfcf284fd6b7b30742bd4bff6038f8ff1c7533bc3fe75c06ad37687ee540773f5808776bafa0eed1f80f3903466cdb3c39489350df5763061241fbe5fecf0c4536bf1d43ab4188db1ebacd8756512bbde8a5d5f26b125cf25cfcb21b6e4b9e47939c4963c973c2f87d8e59a6ba279796a9e3a819aa74ea0e629d19ca5e6cfc517bb2d130c6e15106bbfa776e2d603659c9fa36d0e339e69cc782632e319c78c6701339e4a663c9dcc78e632e359c88c673a339e1c339e49cc78da98f18c67c653c58c27cb8c671e339e19cc782633e359c48c27cd8ca79a19cf52663cf399f17433e3e962c6d3ce8c6726339e16663c0dcc789a98f19cc48ca796194f0d339e25cc789633e399c58c670a339e0c339e3a663c3b99f18c61c6b382194f07339ed9cc785a99f14c65c6b39819cf04663cf5cc78c632e34931e04907c77f1f05bf4f50093ebabf7f07f85e64ca3bc157e18841c739003e9acfa563e8f7abe50dc73354c06bae7070bdc8118fe25ce178ed48e88eb17a609fe2d502c7154c78c632e3a967c6338119cf62663c5399f1b432e399cd8ca78319cf0a663c6398f1ec64c653c78c27c38c670a339e59cc789633e359c28ca786194f2d339e9398f13431e36960c6d3c28c6726339e76663c5dcc78ba99f1cc67c6b394194f35339e34339e45cc782633e399c18c671e339e2c339e2a663ce399f1b431e399c48c27c78c673a339e85cc78e632e3e964c653c98c6701339e71cc782632e399c68c670e339e0a07cf4e4f3c51bfa7b093416c3def4dd78234279686e747e27b4a3b2d46dadf0f8ce4c3fb74b39e78a27e8322cb20b6d6622994f59686e7f17b26be722a6b31d2be2ba7f03ecba59e78a27eb7632983d85a0b5a1ba07b00d2f03cde57ed2ba7965a8cb4efcaa97abf3ce1ff9658120cdd0add6b847dcec739f4d4ce2cf6bf187f43c3f95bd44b2cad32506724ee2b8e1a0f289e300b7314b3e6a1b52f62c5f7b391f8ded270185defaf1e78c2f1b12918ba151a1ff7038f8ff70f4fed0cc7b183569b9a1cba531dccd5831edae9ea3bb47fd011bb3188578b43c3d0e29083e7d0086b41f18a65de9940660e3a6b1eba579358d3506f311346f265fdf284e3e3e260e856687c3c043c3ede3f3cb5331c130e5b6d5aecd09dea60ff3aeca19daebe43fb87e13c14c37c3081cca27369cc9a87d66888350df5724c18c9b7df2b4f2e9b8636d356681c3b0c3c3ec6794fba87e358bfd5a69c4377aa83fdabdf433b5d7d87f6fbe13c08b3300bb3300bb3300bb3300bb3300bb3300bb3300bb3300bb3300bb3300b336f66cd43df1d26d634d46b61c248be435e79f2eb0e2dc1d0add0ba433ff01c8e9d27bfeee041f770dde188d5a61687ee540773f5888776bafa0eed1f81f320ccc22cccc22cccc22cccc22cccc22cccc22cccc22cccc22cccc22cccc22cccbc99350ffd863cb1a6a15e2b1346f21df6cb137e6fab3518ba155a7738023c3ed6653cb5335c77b8d26a53ab4377aa83b97aa58776bafa0eed5f09e7419885d9c5ac79e8b70789350df5da983092afdf2b4f7efdb42d18ba151ac7ae041e1fe3bc27ddc371eca8d5a63687ee540773f5a88776bafa0eed1f85f3500cf3c104328bcea27314b3e82c3a47318bcea27314b3e82c3a47318bcea27314b3e82c3a47318bcea27314b3e82c3a47318bcea27314b3e85c3e3a6b1efa9f86c49a867aed4c18c977c42b4f4bb8eed01e0cdd0aad3b1c051e1feb329e740fd71d8e596d6a77e84e75b07f1df3d04e57dfa1fd63701e463bf3c104324b6e8c0cb3e4863047314b6e087314b3e4863047314b6e087314b3e4863047314b6e087314b3e4863047314b6e087314b3e4863047314b6e087314b3e4863047314b6e087314b3e4863047314b6e0873143387dcd03c1da64cac69a8d7c184917c57fae5097ff7a02318ba15ba6fe718f01cf5a08fa77686f7ed0c586dea70e84e75b07f0d7868a7abefd0fe009c0761166617b3e6e93465624d43bd4e268ce43bea9727978636d356681c1b001e1fe3bca77686e3d855569b3a1dba531dccd5ab3cb4d3d57768ff2a380f4963d63c5da64cac69a8d7c584917cf8bedce589a7d6e2a9756871a2626b2dba4df924f39886e7bb81d1d778d86531d23ee638f96a81a7db134f9dc553e7d0e244c5d65a2c87b2ded2f0fc7260f49553dd1623edbb72aa0e78967be2a9b778ea1d5a9ca8d85a8b15a63cc13ca6e1f915c0e82ba7965b8cb4efcaa97ae059e189276a4c5a3102b1a3fad748c48eca9591882d9a8be6a2b968ee53f3d409d43c7502354f89e6ac34f7701d15cef7528c001870eb81327e56f071ede9a99d59d7e7b115569bf0f318ce399ca8cf1bc22ccc51cc9ee62d5ad3566cd227b078681bf0acc548ce9b765b6d4ac2bc6921e6830964169d4b63d6b1af8e3f766bda8a4dfa04160f6d577bd6c2533bc3f1e09ac0ad31c5cb401dccd36b3cb4330571e9d8b47f0d9c8762980f269059742e8d59c7be36f6d8f9df93c7d8a44f60f1d076ad672dfcb4333f1e5c17b835a67819a883797a9d8776a6202e1d9bf6af83f320ccc22cccc22cccc22cccc22cccc22cccc22cccc22cccc22cccc22cccc22cccbc9975ec17c71e3b3f7f8fb1499fc0e2a1edc59eb5f0d3cefcfcfdf5815b638a97813a78ceaff7d0ce14c4a563d3fef5701e845998855998855998855998855998855998855998855998855998855998859937b38efd92f86387dfc7c1d8a44f60f1d0f612cf5a786a67387f7f43e0d698e265a00e9ef31b3cb4330571e9d8b47f039c0761166617b38efdd2d863e7d7f33036e913583cb4bdd4b3167eda991f0f6e0cdc1a53bc0cd4c1737ea38776a6202e1d9bf66f84f3500cf3c104328bcea27314b3e82c3a47318bcea27314b3e82c3a47318bcea27314b3e82c3a47318bcea27314b3e82c3a47318bcea27314b3e85c3e3aebd837c51ebb259cbfc7d8a44f60f1d07693672dfcb4333f7f7f73e0d698e265a00ee6e9cd1eda9982b8746cdaa778e5c07c3081cc921b23c32cb921cc51cc921bc21cc52cb921cc51cc921bc21cc52cb921cc51cc921bc21cc52cb921cc51cc921bc21cc52cb921cc51cc921bc21cc52cb921cc51cc921bc21cc52cb921cc51cc921bc21cc5cc213774ec97c51f3bfc3e3bc6267d028b87b69779d6c2533bc3fb5f6e09dc1a53bc0cd4c13cbdc5433b5310978e4dfbb7c0791066617631ebd8b7c61f3b97b662933e81c543dbad9eb5f0d4ce703cb82d706b4cf1325007cff96d1eda9982b8746cdabf0dce43d298f1fc8d8d2f7678df26c5a8308fdaf77253ae04df2b4cb90a7caf34e56af0bdca946bc0f76a531e03bed7407bc8f75a535e04bed799f20af0bdde949783ef7653ee06df1da6dc05be3798f200f8ee34e5abc0f74653be1a7c6f32e56bc0f76653be167c6f31e5ebc0f756537e31f8de66cad783efeda6fc12f0bdc3946f00df3b4df9a5e07b9729df08bebb4cf926f0dd6dca3783efdda63c0f7cf7387cef31e59781efbda67c0bf8de67ca3bc1f77e531e07be0f98f278f07d10caf478af299f04befb4cb9167c1f32e50cf83e6cca75e0fb88294f00df474db91e7cf79bf244f03d60ca93c0f7a0294f06dfc74cb9017c1f37e529e07bc894a782ef13a63c0d7c9f34e5e9e0fb9429cf00dfa74d7926f83e63cab3c0f759539e0dbe874d790ef83e67ca73c1f77953c6f3fb0553be157c34aedc063e1a575e0e3e1a575e013e1a575e093e1a575e053e1a575e0d3e1a575e033ecabbd7828ff2ee75e0a3bc7b3df828ef6e071fe5dd1de0a3bc7b03f828efee041fe5dd1bc14779f726f051debd197c94776f011fe5dd5bc14779f736f051debd1d7c9477ef001fe5dd3bc14779f72ef051dedd053ecabbbbc14779f76ef051dedd033ecabbf7808ff2eebde06b34e5f781ef64537e3ff84e31e50f80ef5453c671e63453be177ca79bf27de0a3b1f043e07b81297f187cf34df923e05b60ca1f05df4253be1f7c8b4cf901f02d36e507c1b7c4943f06be2653fe38f8969af243e0cb9af227c0d76cca9f045fce943f05be1653fe34f85a4df933e06b33e5cf82afdd941f065f87297f0e7c9da6fc79f0d1fb388d33ba3feb3e483a9046da476d6e72b4857c63a12d3d41bcd774148b8e4dfb2dc048e72037f28cb9e132365b8c9aa7cd83669857b415faccd4063cad1e783cb533fcccd46eb5a9c56a5306eabc00dad9eea19d29884bc7a6fd7688ede39ca316d5e6b8f32d2daab08e7943d3ef9d8574a463e8fccd39dad2e5b92d746c1a97ba46207687153b6bc5c6f198b642fdab03983b3d30ebe376c77fdcb07f2d33c7a29ca2385968d372d020ae3661ec94318a43fe2a28cf6818ac4bf5480f7aff22769dcb742e91dd7e5d9bf5ba0cd4e972b4bf2788b7fddd164fb7c5accf495dc3208787fe10e64097c541fb59d0ae3b42bb2ed08eeae0fb5fce93769d164fa7155bf3d0354e3bf8e85a81f8f13aab6904b8ed71afddc14dbe0e60745deb34c7cf58f05aa71918c9d7093c1d9e34b3cff57c4b1f7c5faeb1ead06baba0ce52786f4c3beaea7e372f35d82efa0cfe5c10ef985ee3412f9c1f08409fc0d23000bda89dd51e78c607837304c706fa8ff65ede77565fefde14a0555998f8987234a3027c58ae74f88260e854084ec9d254084ec95658b2e0140cd5d71fa574b368baa1efd08181171eee3bbce7e8754706faf66eebbf1ca9ab2d7a248d6a0192a28fb6b1c1e0a44d4f10ef624c8d15ab50f28c85c731f1f3347b6a67f8a637ce6a538dd5a60cd4a986e7c67968670ae2d2b1697f9c23768c0351a8c5f8616831dec1337e84b5c0896ff2614fa5e771f1a4c26a0bf6686c939de7b1368802ce83e3a70c9c7e4e77f66ad39831c1e0c9a6d153cfa8eaab5a7d22f40ca97ee7d233a07a08d2339c7a4653bfa9e9194b3d43a96724f50ca49e71d4338c7a4651cf20ea19433d43d818e46700f58c9f9ee1d3337aa703db7781577faad6ef907a464ecfc0e919377d65a53fb1e9ab117df5adaf14f5d581be2ad09f2cf52c837eb7d55732fa5d5abfb3ea2b457d85a8afe8f515ae5ea55aa96c95d17ab5b235cad62a5ba76cbdb20dca362adba46cb3b22dcab62adba66cbbb21dcace507666909f5d3f4bd9d9cace51f64265e72a3b4fd9f9ca2e5076a1b28b945dacec1265972abb4cd92e65bdca762bdba36cafb23e65fb945dae6cbfb203ca5ea4ec8a207f87ce21658795f52b3ba2ec4a6547951d0bf22b667a854caf88e91530bde2a557b8f48a965ec1d22b567a854aaf48e915a89b82fc0a935e29d22b437a5540af02e8597f3dcbffca203f8baf67ed5f13e467e5f52cbc9e75d7b3ec7a565dcfa2eb59733d4bae67c5f52cb89ef5d6b3dc7a565bcf62eb596b3d4bad67a5f52cb49e75d6b3ccf704f959643d6bac6789f5acb09e05d6b3be7a96f7be203f8bab676df52cad9e95d5b3b07ad655cfb2ea59553d8baa674df52ca99e15d5b3a07ad653cf72ea594d3d8ba9672df52ca59e95fca2b247947d49d997957d45d957957d4dd9d7957d43d937957d4bd9b7957d27c8e7e5f7947d5fd90f94fd50d98f94fd58d94f94fd54d9cf94fd5cd92f943daaec97ca1e53f6b8b25f29fbb5b2df28fbadb2df29fbbdb23f28fba3b23f29fbb3b2bf28fbabb227943da9ec6fca9e52f6b4b2bf2bfb87b27f2a7b46d9b3c1e0ea060e22ff323b34d3de3b30d077e8c840e3407fe3a1ab0e0e1c3872f0bac66b0e0cec6fecbfbaefe8be83fdd7e08bef35c3162d23ac3e7ab4f7bac60387f7f65ddbd87fd54063ffbec6ddfd571dde7b0c5ff40df3a259c747ecddbb373ad82f2a9e07e9e325067dc2bc8e166836176edb53a508f26c292f9a54595a83ce30ef3af4e9fdecfcd56ee3b183fd038dd9c6c3ea6fef41f59abebd4d8df8dc3125f2b181c66303bd47071af71ded3fd4d8dc84c7bd605c098da86a28e1454d0dc36f79f0ffa32be9722d0a0400", "privateFunctions": [ { "selector": { @@ -37,8 +37,8 @@ exports[`ContractClass creates a contract class from a contract compilation arti "isInternal": false } ], - "id": "0x28f6931da37e7dcba1db1327de9c81d93d6dbbcfd809b7503e43a298a2373fe3", + "id": "0x2fb6c774ae752073bb84ab8f00ac717fe7743d88a5ceef7d5a36cf9e2eb5718f", "privateFunctionsRoot": "0x2dc1f38d7be98a8e72227d6f8aec393c60db813a1819c9c86b02a00cc18f6687", - "publicBytecodeCommitment": "0x13b5b578e8f823e8816a172573e197816096c5b3097293a04acfbecb026c0744" + "publicBytecodeCommitment": "0x0debf6b39f2d3a831e4ac2ef6eb7f96a48ba1d8d971be8429581cb65a7366b39" }" `; From 0649eb8dbbde4114d9bb29a70c5a91bbec7a240a Mon Sep 17 00:00:00 2001 From: guipublic Date: Thu, 21 Mar 2024 17:03:55 +0000 Subject: [PATCH 18/98] export sha256_compression in acvm_js --- noir/noir-repo/acvm-repo/acvm_js/src/black_box_solvers.rs | 6 ++++++ noir/noir-repo/acvm-repo/acvm_js/src/lib.rs | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/noir/noir-repo/acvm-repo/acvm_js/src/black_box_solvers.rs b/noir/noir-repo/acvm-repo/acvm_js/src/black_box_solvers.rs index 6f614cf60d3..d10306eedd2 100644 --- a/noir/noir-repo/acvm-repo/acvm_js/src/black_box_solvers.rs +++ b/noir/noir-repo/acvm-repo/acvm_js/src/black_box_solvers.rs @@ -22,6 +22,12 @@ pub fn xor(lhs: JsString, rhs: JsString) -> JsString { field_element_to_js_string(&result) } +/// Sha256 compression function +#[wasm_bindgen] +pub fn sha256_compression(inputs: &[u32], state: &[u8]) -> Vec { + acvm::blackbox_solver::sha256_compression(inputs, state).unwrap().into() +} + /// Calculates the Blake2s256 hash of the input bytes #[wasm_bindgen] pub fn blake2s256(inputs: &[u8]) -> Vec { diff --git a/noir/noir-repo/acvm-repo/acvm_js/src/lib.rs b/noir/noir-repo/acvm-repo/acvm_js/src/lib.rs index e22d4ce47d7..a1f3be47031 100644 --- a/noir/noir-repo/acvm-repo/acvm_js/src/lib.rs +++ b/noir/noir-repo/acvm-repo/acvm_js/src/lib.rs @@ -19,7 +19,7 @@ cfg_if::cfg_if! { mod js_execution_error; mod black_box_solvers; - pub use black_box_solvers::{and, xor, blake2s256, keccak256, ecdsa_secp256k1_verify, ecdsa_secp256r1_verify}; + pub use black_box_solvers::{and, xor, sha256_compression, blake2s256, keccak256, ecdsa_secp256k1_verify, ecdsa_secp256r1_verify}; pub use build_info::build_info; pub use compression::{compress_witness, decompress_witness}; pub use execute::{execute_circuit, execute_circuit_with_black_box_solver, create_black_box_solver}; From 5e50459a0973ddc04cddb30316da3f3a1f6dd0a8 Mon Sep 17 00:00:00 2001 From: guipublic Date: Thu, 21 Mar 2024 17:39:48 +0000 Subject: [PATCH 19/98] fix acvm_js build --- noir/noir-repo/acvm-repo/acvm/src/pwg/blackbox/hash.rs | 4 ++-- noir/noir-repo/acvm-repo/acvm_js/src/black_box_solvers.rs | 7 +++++-- noir/noir-repo/acvm-repo/blackbox_solver/src/hash.rs | 2 +- noir/noir-repo/acvm-repo/blackbox_solver/src/lib.rs | 2 +- noir/noir-repo/acvm-repo/brillig_vm/src/black_box.rs | 4 ++-- 5 files changed, 11 insertions(+), 8 deletions(-) diff --git a/noir/noir-repo/acvm-repo/acvm/src/pwg/blackbox/hash.rs b/noir/noir-repo/acvm-repo/acvm/src/pwg/blackbox/hash.rs index 24c835a636a..c2e7c1cd3da 100644 --- a/noir/noir-repo/acvm-repo/acvm/src/pwg/blackbox/hash.rs +++ b/noir/noir-repo/acvm-repo/acvm/src/pwg/blackbox/hash.rs @@ -3,7 +3,7 @@ use acir::{ native_types::{Witness, WitnessMap}, BlackBoxFunc, FieldElement, }; -use acvm_blackbox_solver::{sha256compression, BlackBoxFunctionSolver, BlackBoxResolutionError}; +use acvm_blackbox_solver::{sha256_compression, BlackBoxFunctionSolver, BlackBoxResolutionError}; use crate::pwg::{insert_value, witness_to_value}; use crate::OpcodeResolutionError; @@ -118,7 +118,7 @@ pub(crate) fn solve_sha_256_permutation_opcode( state[i] = value.to_u128() as u32; } - sha256compression(&mut state, &message); + sha256_compression(&mut state, &message); let outputs: [Witness; 8] = outputs.try_into().map_err(|_| { OpcodeResolutionError::BlackBoxFunctionFailed( black_box_func, diff --git a/noir/noir-repo/acvm-repo/acvm_js/src/black_box_solvers.rs b/noir/noir-repo/acvm-repo/acvm_js/src/black_box_solvers.rs index d10306eedd2..6a7a9ead1d8 100644 --- a/noir/noir-repo/acvm-repo/acvm_js/src/black_box_solvers.rs +++ b/noir/noir-repo/acvm-repo/acvm_js/src/black_box_solvers.rs @@ -24,8 +24,11 @@ pub fn xor(lhs: JsString, rhs: JsString) -> JsString { /// Sha256 compression function #[wasm_bindgen] -pub fn sha256_compression(inputs: &[u32], state: &[u8]) -> Vec { - acvm::blackbox_solver::sha256_compression(inputs, state).unwrap().into() +pub fn sha256_compression(inputs: &[u32], state: &[u32]) -> Vec { + let mut state :[u32; 8] = state.try_into().unwrap(); + let inputs :[u32; 16] = inputs.try_into().unwrap(); + acvm::blackbox_solver::sha256_compression(&mut state, &inputs); + state.to_vec() } /// Calculates the Blake2s256 hash of the input bytes diff --git a/noir/noir-repo/acvm-repo/blackbox_solver/src/hash.rs b/noir/noir-repo/acvm-repo/blackbox_solver/src/hash.rs index d4de5f9d5c8..af503117466 100644 --- a/noir/noir-repo/acvm-repo/blackbox_solver/src/hash.rs +++ b/noir/noir-repo/acvm-repo/blackbox_solver/src/hash.rs @@ -27,7 +27,7 @@ pub fn keccak256(inputs: &[u8]) -> Result<[u8; 32], BlackBoxResolutionError> { .map_err(|err| BlackBoxResolutionError::Failed(BlackBoxFunc::Keccak256, err)) } -pub fn sha256compression(state: &mut [u32; 8], msg_blocks: &[u32; 16]) { +pub fn sha256_compression(state: &mut [u32; 8], msg_blocks: &[u32; 16]) { let mut blocks = [0_u8; 64]; for (i, block) in msg_blocks.iter().enumerate() { let bytes = block.to_be_bytes(); diff --git a/noir/noir-repo/acvm-repo/blackbox_solver/src/lib.rs b/noir/noir-repo/acvm-repo/blackbox_solver/src/lib.rs index fe82368e0b3..120870db374 100644 --- a/noir/noir-repo/acvm-repo/blackbox_solver/src/lib.rs +++ b/noir/noir-repo/acvm-repo/blackbox_solver/src/lib.rs @@ -16,7 +16,7 @@ mod hash; pub use curve_specific_solver::{BlackBoxFunctionSolver, StubbedBlackBoxSolver}; pub use ecdsa::{ecdsa_secp256k1_verify, ecdsa_secp256r1_verify}; -pub use hash::{blake2s, blake3, keccak256, keccakf1600, sha256compression}; +pub use hash::{blake2s, blake3, keccak256, keccakf1600, sha256_compression}; #[derive(Clone, PartialEq, Eq, Debug, Error)] pub enum BlackBoxResolutionError { diff --git a/noir/noir-repo/acvm-repo/brillig_vm/src/black_box.rs b/noir/noir-repo/acvm-repo/brillig_vm/src/black_box.rs index e993fa75b2a..5c6b40dc4a6 100644 --- a/noir/noir-repo/acvm-repo/brillig_vm/src/black_box.rs +++ b/noir/noir-repo/acvm-repo/brillig_vm/src/black_box.rs @@ -2,7 +2,7 @@ use acir::brillig::{BlackBoxOp, HeapArray, HeapVector, Value}; use acir::{BlackBoxFunc, FieldElement}; use acvm_blackbox_solver::{ blake2s, blake3, ecdsa_secp256k1_verify, ecdsa_secp256r1_verify, keccak256, keccakf1600, - sha256compression, BlackBoxFunctionSolver, BlackBoxResolutionError, + sha256_compression, BlackBoxFunctionSolver, BlackBoxResolutionError, }; use crate::Memory; @@ -214,7 +214,7 @@ pub(crate) fn evaluate_black_box( state[i] = value.to_u128() as u32; } - sha256compression(&mut state, &message); + sha256_compression(&mut state, &message); let state = state.map(|x| Value::from(x as u128)); memory.write_slice(memory.read_ref(output.pointer), &state); From 683496ccb8dfc6a595bef8ff653f28ac110ea9a5 Mon Sep 17 00:00:00 2001 From: guipublic Date: Thu, 21 Mar 2024 18:10:50 +0000 Subject: [PATCH 20/98] cargo fmt --- noir/noir-repo/acvm-repo/acvm_js/src/black_box_solvers.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/noir/noir-repo/acvm-repo/acvm_js/src/black_box_solvers.rs b/noir/noir-repo/acvm-repo/acvm_js/src/black_box_solvers.rs index 6a7a9ead1d8..e497cd18f42 100644 --- a/noir/noir-repo/acvm-repo/acvm_js/src/black_box_solvers.rs +++ b/noir/noir-repo/acvm-repo/acvm_js/src/black_box_solvers.rs @@ -25,8 +25,8 @@ pub fn xor(lhs: JsString, rhs: JsString) -> JsString { /// Sha256 compression function #[wasm_bindgen] pub fn sha256_compression(inputs: &[u32], state: &[u32]) -> Vec { - let mut state :[u32; 8] = state.try_into().unwrap(); - let inputs :[u32; 16] = inputs.try_into().unwrap(); + let mut state: [u32; 8] = state.try_into().unwrap(); + let inputs: [u32; 16] = inputs.try_into().unwrap(); acvm::blackbox_solver::sha256_compression(&mut state, &inputs); state.to_vec() } From 4e19f041fd4c28bfd7a2664e74ebc396f718b07a Mon Sep 17 00:00:00 2001 From: guipublic Date: Fri, 22 Mar 2024 10:44:43 +0000 Subject: [PATCH 21/98] update snapshot --- .../contract/__snapshots__/contract_class.test.ts.snap | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/yarn-project/circuits.js/src/contract/__snapshots__/contract_class.test.ts.snap b/yarn-project/circuits.js/src/contract/__snapshots__/contract_class.test.ts.snap index d0b5e308a32..7f7b3dd7c80 100644 --- a/yarn-project/circuits.js/src/contract/__snapshots__/contract_class.test.ts.snap +++ b/yarn-project/circuits.js/src/contract/__snapshots__/contract_class.test.ts.snap @@ -9,18 +9,18 @@ exports[`ContractClass creates a contract class from a contract compilation arti "selector": { "value": 2381782501 }, - "bytecode": "0x1f8b08000000000000ffed9d77781447baee5b20e22001ced9c2f6ae033616424409189c73c6c618631002830d88689c713639384772cec1648c0163eccdd9bbeb0db677d71bce7dee73ef9fe79c7b8fefed9aa9efe8a5a81e3472d7f04a53fd3ca5a9fe54dddfafdefeba3a55771504e9e95f612ad0f9a661ba20387a92ff27f56fe9779b3ac7b8ae52979c050d84b34903e16cda40380b1b0867b306c2d9bc8170b668209c2d1b0867ab18390b80cf156feb06c69b6860bc6d828611b7450d84b3b88170b66d209ced1a0867fb06c2794203e13cb181709ed440384f6e209ca73410ce531b08e7690d84f3f406c2794603e13cb381709ed54038cf6e209ce73410ce731b08674903e1ecd04038cf6b209ce7c7c8d91138e55efef7f4eff7f5ef85faf722fd7bb1febd44ff76d4752cd4f39786e9b230750ad3e5c6ff9430ea867e5998ba18ff2b0f53d730750b5377fdbf12fdbf1e61ea19a65e61aa085365987a87a94f98fa6a3dfa85e98a305d19a6abc2747598ae09d3b561ba2e4cd787e98630dd18a69bc27473986e09d3ad61ba2d4cb787e98e30dd19a6bbc2d43f4c7787e91e83654098ee0dd3c030dd17a64161ba3f4c83c3f440988684696898aac2342c4cd5611a1ea611617a304c23c3342a4c0f85e9e1308d0ed398308d0d534d98c685697c98268469629826856972981e09d31443b347c3f458981e0fd31306e793617a2a4c4f87696a989e09d3b3617a2e4ccf87e98530bd18a697c2f47298a685697a9866846966986685697698e684696e98e685697e985e09d3ab617a2d4caf87e98d30bd19a6b7c2f47698de09d3bb9a457684f7c2f47e98168469619816856971989684696998968569799856846965985685697598d684696d98d685697d9836846963983685697398b684696b983e08d3b6306d0fd38e30ed0cd3ae30ed0ed39e30ed0dd38761da17a68fc2b43f4c07c274304c1f87e950983e09d3e1307d1aa6cfc2f48330fd304c3f3234ff71987e12a69f86e967daf673fdfb0b5d56f6f95feadf5fe9df5febdfdfe8dfcf8df2bf35e67f67ccff5eff7ea17fffa07fffa87fffa47fffac7fbfd4bf5fe9dfaff5ef5ff4ef5ff5efdff4ef37faf7effaf71ffaf79ffa573dff7bb5433adf32a89d92414c6d52f9f0a1eafebf886d3e5f54cfae9aeaffc96f89b617ea79f92dd0f6667abe99616faee79b1beb69a9e75b1af6623d5f6cd8dbe9f97686fd043d7f82613f49cf9f64d83be8f90e604fe8ffa52b96fe51b6a6da54003689cf26606ba66d4dc1d65c5607b616dad60c6cb27d9b83ad95b6b5005b6b6d6b09b684b6b5122dc3d446db92415cb1523a54adb728eef5ea6726c5f1f356a9f5b675c4db2e7ede616abded1df0aaf83841afab08e2e6446d2b06db49dad6166c276b5b3bb09da26dedc176aab69d00b6d3b4ed44b09dae6d2781ed0c6d3b196c676adb29603b4bdb4e05dbd9da761ad8ced1b6d3c176aeb69d01b6126d3b136cbac90dce02db79da7636d8ced7b673c07681b69d0b3639c72b019b9cef75009b9cfb9d0736390f3c5fdb54dbd1aa00fc69bbb45b297fd26683edfbd25e83ed4269abc17691b4d360bb187c8bed12686bc4d651dba4dd52ffeba5f3c920aefda42cb59f54c4bdde70cd6abdbde35f6feaf95d9fa056eb24f8a900adfaea7c8c7d5b3aa36f39b7113f622f84fc0d5056ca891e72ec1176752ca8d4f9be1996eb652c570c652a2df54f06f1d6bfb7c1d3db606e06793731dba5d4c76c9da7ac6376009435634fce831a63ccde0c1c0e62b6dcc76c9da7ac6376049435634fce851b63ccde071c0e62b6879b982d2bf5319bbe371604f6d893eba1c618b3a38023fe98edea63b6ee53d631fb1c9435634fae891b63cc4e018ef863b67b0f7f6e50e729eb989d0765cdd893fb338d31665f040e07313bccb7b3759eb28ed90550d68c3db957d81863f655e0883f667b3a8ad92e3e6683f473ce20b0c79edcb76e8c31bb1838e28fd961fefe6cdda7ac6376379435634f9ea134c698dda8f3ea39c3cff57386b3c0f60b6d3b1b78e38fedea3247b1ddd9c776baff4710d863549ee735c6d8fe48e7551cff0afa2388edd7d257016cbfd1b6f3c0f6b9b69d0ff572b00f74f7fb40ddeb94ed3ef047286bc6b23c5b6e8cfbc02f80c341ccf6f0315bf73a651bb3ff0665cdd8937e0e8d3166bf040e0731dbd3c76cddeb946dccfe3b943563ef229d6f8c31fb3f755e9d2f7ca1cf172e01db1fb4ad23d8fea86d9782ed4fda7619d8feac6d9dc0f6a5b65d0eb6afb4ad146c5f6b5b67b0fd45dbcac0f6576deb02b6bf695b39d8bed1b6ae60fbbbb67503db3fb4ad3bd8fea96d3dc0f62f6deba96daa9f9ef4bd3aac6d2d813f19c4bb6da5dfa5ac5be63be7c0775bc377db1cfa6e6ff86e6ff15de6c077027cc85460cc27215fe696a7b41878d05779fcbebaa8ba7709ea5ef772e0e9eaa0ee09f051179eaec0d32d7e9ed4f1b37bfceb4d6de32e86a609f0d505ead5c341bd0ac097ac5be6c55f31d8b06ded6161ec193f635901f89275cb7c4f60141bb6f5f22e95ec3fea787861412daf837d29754e24fee4db55c2510e76297371875ab68e9aad08fe8fc7bd6e86cd515ca6e2427cc9ba655efc15417dbae59eb1acae8c5d0d46576d4401f892757bdfb5db41f2781c7771ad636bd3c477450e7cf7347c971bbeb1ed9429d3b1ad2730c77ecda98f6d95f1afb714af4fe4da50fce0f9035ec3c55527f42dd786e247ec8590bfa5a0b6ac94133da41d167615cbb22d91dd5cae87b15c3194a9b0d43f19c45bff4a83a7d26056dbe44a38163ad81f5231506170c87c39685719a15d056827652e02ed5cb567bd0c1e99ef063cd28e75071e57d744513cb9b81e3b966f3c87c5eb67f93f9e07b8da5e9d0d4699b76daf9ec0683b5771703d93f15ca52b308aad17f07471a459d476ed42e2db41aca4da23f121e7e6b2ff7603bb94e9a95fa8536de543d056ba88118c4799ea7acd1bff762a4b5d8377cd8207b79d83ebaace8ee2b114efdf7c1bc41b6b66bbd4d5d02aea1e8fabb6bc8bc123f3e2cf337b66cfec993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993d333f333e4fc27e5b52ae1b09a3d9ffcdd57dfed4370cf5ba64fdeab9ceff71da1facac14fbc7483f884b8c3a174299a226b565ff1ff407339f53611fc96e6eb54b6d4bec8f998479f1877dad705b32f4772a89cd77fa5b942e9eb7a93ed6ea3b9a66dfcf6e164d5df47f464d0b0c4db13ffea5068f8ad3caa6b56c2e9efd65fb2c12b5927c9ccff68a037bacc7bf5dca8e7866dd2438b2fdc0e38cabfe3bd256cbf3f20ac377219439b349edb691be5532ce6c176339ecf723eb96652e017ba5b1ee767a59e16866acbf3b2c2b65ce8136f540935acd1cb49565d9f65dc7e7e6f11f87d3cff1bb64c1d319785cb4338ece378ef8de6adccff1cdfe69b6f31829837dfb1cf4abccd8df49fc7966cfec993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367e667563ce6b3567cbfb69c8431477d1f52cf33e45b65b2fed4f7829bd4fa75fd1c4e9e397534ea8cef8efeef26b565b7ea7c5170747f87a86de9eafb1451db52fce1b767f059908be7ba05e04bd65d66d142f225b1f92e733636843cc7ef62e85a6ed1d4d5fe8acf585153dc5fbb1a3cf86c34eadb3e6586cd65dfa1a8b8107fb82f95814df2f87eb48bed8cc712b35f8ff8c3e7d73fd2dab60b5c6dfbb25297ed067e3725191c1ddff83d959f43dbf74b9dc73e1cd877e46bcbff65caf49c5af4537576f07dcdd20258976c5fdbb73dfb016b4cbe3be3ba0a74ea67685008f9af9ad49695725256b41676b58fc8376090dd5caeabb15c3194e963a97f3288b7fee6b756fb1acc6a9bfc06e2ec6b38febb6a93fa446874096824651c7fb3d1dabfd2ec5788ed6873a38c2c8bdfa2fb17b45151fd476dc700d7c73159b7ed38661e17ead2cf33dffb69fd07b41771f7d3fa0f8821eca71518ebef08eb17aee641f4b145cafc97b17ef39c5c96c17e60ffbd9fc0f75cca743e9b73f2e3757d653b27c7e5a2eaae98f13b68c9189931269005cf13a44c6badb56cb3ca08ee9e96658b229615adcc6f85150547ebe7e63b6be97dbeaf5117896bfc06b9943911eae2e6bc257d0ee8ea9b7249a893ca9759ea2a654e837ded0c9d4fc076c2fdf662cbff65ca740e8863b85f117f9d53dbf74ae04c821ff47d15b0c6e4bb33fa967340f123f642c85fd4b4b6ac94133d446b6157fb889c4721bbb95c85b15c3194e967a97f3288b7fe57183c5718cc6a9b9c0d717631f44377d556f78bd0a823682465f09ea2ed3ba0b67b1daededf883a97c2f797ccf32b3c4eba396fb29fc79af7d56ce7081d0d7e3c47e80eed6cc252d6bc5f28c7cb38fb0de3bb12ddc12fbe2be1eadbcdbd40b724cce379c1f1f4ede23bb6ca5fd49809bd72e03b6acc845cf86e6ff86e9f43df5e73af3993e60ec62048bd7f86df2c5553a6f3521c9740966b028c2ec6724804477e7bfc588c38be832cd714185d1c1fb2fdf679776094e50a81d1c5bba538fe465d18f11bc3789c174607df8aed5cdf6fc5e23dbde6c0c8f4ce263e9b6a018c2ece8bebfbae1e9ecfb7845f57e31275c982b10c1865b956c0e8e2de385ecbd48511af8b64b9d6c0e8e21956b6e33be1b7e7f1deb24bc64cc776c77d51cab2bdf752e99627e3b906fa7630ae614a0bbccf782c2d7abbe5c978ee83be1ddcf74b6981e30c1e4b0b7c36e862dcc34470e473b863f1e0f34b59ee04604c3a62ec9b05631218fffb5e3130f673c498cc82b11f308afd24607470ff35c5d82f0b46bc4f29cb9d0c8c573a62bc220bc62b8151963b05185ddc4b4d80dfba305e058cb2dca9c078b523c6abb260bc1a1865b9d380f11a478c5767c1780d30ca72a703e3b58e18afc982f15a6094e5ce00c6eb1c315e9b05e375c028cb9d098cd73b62bc2e0bc6eb8151963b0b186f70c4787d168c3700a32c773630dee888f1862c186f044659ee1c60bcc911e38d5930de048cb2dcb9c078b323c69bb260bc191865b91260bcc511e3cd5930de028cb25c0760bcd511e32d5930de0a8cb2dc79c0789b23c65bb360bc0d1865b9f381f176478cb765c1783b30ca721700e31d8e186fcf82f10e6094e5be078c773a62bc230bc63b815196fb3e30dee588f1ce2c18ef02c63b2d8cfd1d31de9505637f6094e52e05c6bbe3674c5d4bf7cf82f16ee0b9277e9e94667767c1738f5b9ed477f5eeb6f8ba377e5fa96d3120a87bddef059e81f1f3a4b6c5bd59f00843312c879add173f634ab3815930de073c83e2e74969765f163c8340b3fb2c9add1f3f634ab3415930de0f3c83e3e74969767f163c8341b3fb2d9a3d103f634ab3c159303e003c43e2e74969f640163c43825acd1eb06836347ec6946643b2601c0a3c55f1f3a4341b9a054f156836d4a2d9b0f819539a5565c1380c78aae3e74969362c0b9e6ad06c9845b3e1f133a634abce827138f08c889f27a5d9f02c78468066c32d9a3d183f634ab31159303e083c23e3e74969f660163c2341b3072d9a8d8a9f31a5d9c82c184701cf43f1f3a4341b9505cf43a0d9288b660f3b627c280bc6872d3c717f27fb218baf318eea3e3aa87bdd85a11896c37e12631d318ec982712c30ca72d84fa2c611e3d82c186b8051964b3866ccd44fa2067c8f8bdf77aa5daa09eaaecf38b73c19fb49a0eff18eb41817d45d8bf16e7932f69340df131c69313ea8bb16138067a2032d12e0a32e3cc2500ccb613f89498e182766c13809186539ec2731d911e3a42c182703a32c87fd241e71c438390bc647805196c37e12531c313e9205e3146094e5b09fc4a38e18a764c1f82830ca72d84fe231478c8f66c1f81830ca72d84fe271478c8f65c1f83830ca72d84fe209478c8f67c1f80430ca72d84fe249478c4f64c1f82430ca72d84fe229478c4f66c1f81430ca72d84fe269478c4f65c1f83430ca72d84f62aa23c6a7b3609c0a8cb21cf69378c611e3d42c189f0146590efb493ceb88f1992c189f054659ee61c78c99ae5f9e6de4bea3ae551abbefa8eb92c6eedbc7b98ff37cf0ede3dcc7793ef8f671eee33c1f7cfb38f7719e0fbe7d9cfb38cf07df3ece7d9ce7836f1fe73ece997c3fe7c077027cc85460cc27212f0cc5b0dcc39eb15133224f497c3ca55877f4f53c41dd9fb7f01438aa3bfa7a81a0eec2d0d0189f6b008c0f370046af63ba0f627d1815cf8bf0ff648c3c2f64c1f322f0bce488e7c52c785e029e97e3e749c5d44b59f00843312cf77003607cae01307a1dbd8e4c8c5ec7fcd1d1337a46cfe8198f07634368c33d638388c7b2fa322a9e69f1f3a4347b390b9e69a0992c778f5bc6b2fa322a9ee9f1f3a4349b9605cf74d06c9a4533078c65f565543c33e2e74969363d0b9e19a0d9748b660e18cbeacba87866c6cf93d26c46163c3341b31916cd1c3096d59751f1cc8a9f27a5d9cc2c78668166332d9a39602cab2fa3e2991d3f4f4ab35959f0cc06cd66593473c058565f46c533277e9e9466b3b3e099039acdb668e680b1acbe8c8a676efc3c29cde664c13317349b63d1cc0163597d1915cfbcf879529acdcd82671e6836d7a2192be3c30d80f1b906c0e858c7b2fa322a9ef98e78e665c1331f785e71c4333f0b9e5780e7d5f8795231f54a163cc2500ccb3ddc00189f6b008c5e47af2313a3d7317f74f48c9ed13366c7f87c0360f4dbda33b2323ab8becaf80ecd2b8ddc77d43b348ddd77d43b348dddb78f731fe7f9e0dbc7b98ff37cf0ede3dcc7793ef8f671eee33c1f7cfb38f7719e0fbe7d9cfb38cf07df3ece7d9ce7836f1fe73ecef3c1b78f731fe7f9e0dbc7b98ff37cf0ede3dcc7793ef8f671eee33c1f7cfb38f7719e0fbe7d9cfb38cf07df3ece7d9ce7836f1fe73ecef3c1b78f731fe7f9e0dbc7b98ff37cf0ede3dcc7793ef8f671eee33c1f7cfb38f7719e0fbe7d9cfb38cf07df3ece7d9c33f97e2d7edf65d97e63e635e071f1cd1b47f52c55eb7d5dafebdb18f5535abd6168f58aa1553194791df47bc3817e05e057d62df3e22f5be60b09981df92e53ed4b2ba8bff878ced043f97fd351dda3dafa371bb9efa8b6beb1fb8e6aeb1bbb6f1fe73ecef3c1b78f731fe7f9e0dbc7b98f7316df986f16d49eb7cbf74fd53aded2f9423d2fe59f07bb9499d822fddb2ef0fb900bdf7e1ff2c78a7cf0ede3dcc7793ef8f671eee33c1f7cfb38f7719e0fbe7d9cfb38cf07df3ece7d9ce7836f1fe73ecef3c1b78f73be382f86ff57e680273078820c3cf3c8782693f1cc24e31949c633888ce756329e2bc9789e24e32927e31947c6338c8ce76e329e1bc8782e27e3e943c633858ca72719cf2c329e87c8785e22e3194cc6733b19cfd5643c4f93f19491f14c20e3194ec6732f19cf4d643c49329ec7c878ba93f15c4cc633868c673619cf45643c43c8785e26e3b9938ca7988ca72d19cfb5643c2f90f15c46c65341c6f30c19cf5c329e49643c0f92f1dc47c6534ac6730b194f27329e2bc8789e20e3e94ac633878ca7868c671a194f15194f7f329e4bc878ae27e3694ac6d39b8c673e19cf23643cbdc8784691f17424e3b99f8ce736329eabc8789e22e3e942c6339e8c673a194f3519cf00329e1bc978fa92f13c4ac6d3838c673419cf85643c0f90f1dc41c6938bef9966c3d3868ca7888ce71a329e67c978a692f17426e39948c633838c670419cf40329e9bc978fa91f13c4ec6d38d8c672c19cf50329ebbc8785e24e36947c6d39e8ce73a329e02029e4470f4182609f8ff6b606b622cab3efb3aba43edffdfd6f626b0cc3b3adfd4b2eeb7c126df927dc7b22ceaf436d425a9f3a5df6d4ae984be92302ffe8a80e31d129eebc878da93f1b423e379918ce72e329ea1643c63c978ba91f13c4ec6d38f8ce766329e81643c23c8786690f14c24e3e94cc633958ce759329e6bc8788ac878da90f1bc46c6730719cf03643c1792f18c26e3e941c6f328194f5f329e1bc9780690f15493f14c27e3194fc6d3858ce729329eabc8786e23e3b99f8ca72319cf28329e5e643c8f90f1cc27e3e94dc6d3948ce77a329e4bc878fa93f15491f14c23e3a921e39943c6d3958ce709329e2bc8783a91f1dc42c6534ac6731f19cf83643c93c878e692f13c43c65341c6731919cf0b643cd792f1b425e32926e3b9938ce765329e21643c1791f1cc26e31943c67331194f77329ec7c87892643c3791f1dc4bc6339c8c6702194f1919cfd3643c5793f1dc4ec633988ce725329e87c8786691f1f424e39942c6d3878ce772329e1bc878ee26e31946c6338e8ca79c8ce749329e2bc9786e25e31944c633928c672619cf64329e79643c95169ed71cf1c8fbeeb26e997f8dc4b783ed50aad6fbaea33abda7d7d54caf57f8c55f219499da3afdabde0fc76585cbfc3e01be9bf31e68f49ea3bac8f62830b60ffa7ecb916f79474bd62df36f3572df6d0ddf6df3c4777bc377fb3cf1ede3dcc7793ef8f671eee33c1f7cfb38f771cee4dbc1b541197e274da602633e0979bc5e70f17d3947f53ce23af1db18f5535abd6f68655e5b1543997741bff71de867bbf69479f1972df38504cc18172541bc71b120fe3a95a976ab15e8bac0d017ebb5d091a651c790858ddc77d431a4b1fb8e3a863476df3ece7d9ce7836f1fe73ecef3c1b78f731fe74cbe17e97c8cd78da5e8433d5f94eb8145e07789ce17c4e857ad6bb15e57a15eb7702c01bb94f94f78aee9f779bfcfc7e5db1fdb7c9ce7836f1fe73ecef3c1b78f731fe7f9e0dbc7b98ff37cf0ede3dcc7793ef8668e73332ffdc52f023657fdf9a3623117ef121c4fdf51b1d8d87d47c56263f7ede3dcc73993efa50e7c27c0874c99faf82d059ec50e781cd533f56c639951a7d78c3a1543193cc62f7350cf02f02beb96f965c0235325f0b88883ba6c73e49947c633998c672619cf48329e41643cb792f15c49c6f324194f3919cf38329e61643c7793f1dc40c67339194f1f329e29643c3dc9786691f13c44c6f31219cf60329edbc978ae26e3799a8ca78c8c670219cf70329e7bc9786e22e34992f13c46c6d39d8ce762329e31643cb3c9788690f1bc4cc67327194f31194f5b329e6bc9785e20e3b98c8ca7828ce719329eb9643c93c8781e24e3b98f8ca7948c672119cf2d643c9dc878ae20e379828ca72b19cf1c329e1a329e69643c55643cfdc9782e21e3b99e8ca729194f6f329ef9643c8f90f1f422e31945c6d3918ce77e329edbc878ae22e3798a8ca70b19cf78329ee9643cd5643c03c878de27e3b9918ca72f19cfa3643c3dc8784693f15c48c6f30019cf1d643c6dc8788ac878ae21e379968c672a194f67329e89643c33c8784690f10c24e3b9998ca71f19cfe3643cddc878c692f10c25e3b98b8ce745329e76643cedc978ae23e32920e0490447bffb9f80ffbf0f367947fd35b02dd7f9c5606b62f1d154e79781ad50e7651d2dc234a5c3d1eb469d5cbd978fbe92302ffe8a80633909cf75643cedc978da91f1bc48c6731719cf50329eb1643cddc8781e27e3e947c6733319cf40329e11643c33c8782692f17426e3994ac6f32c19cf35643c45643c6dc878ee20e379808ce742329ed1643c3dc8781e25e3e94bc6732319cffb643c03c878aac978a693f18c27e3e942c6f31419cf55643cb791f1dc4fc6d3918c6714194f2f329e47c878e693f1f426e3694ac6733d19cf25643cfdc978aac878a691f1d490f1cc21e3e94ac6f30419cf15643c9dc8786e21e35948c6534ac6731f19cf83643c93c878e692f13c43c65341c6731919cf0b643cd792f1b425e32926e3b9938ce765329e21643cb3c978c690f15c4cc6d39d8ce731329e2419cf4d643cf792f10c27e39940c65346c6f33419cfd5643cb793f10c26e379898ce721329e59643c3dc978a690f1f421e3b99c8ce706329ebbc9788691f18c23e32927e379928ce74a329e5bc9780691f18c24e39949c633998c671e194f658e78d4bbedd2d73a002e9c92905f063c0b1df038aa67297ed7e0db18d7abb45a6168f5bea1553194590afaad70a05f01f89575cbfc0ae07956e76ddf54789684516c0b1df324a0ce3265da0756008f8b7dd2513d53b1bad2a8d3b316dda50cc6ea4a07f5b4ed3b32bf12785ed079614d40b9174818c5b6cc314f02ea2c53a6585d093c2ef61d47f54cc5ea2aa34e2f5874973218abab1cd4d3b6efc8fc2ae07951e7853501e55e246114db0ab73ce509a8b34c99627515f0b8d8771cd53315abab8d3abd68d15dca60acae76504fdbbe23f3ab613b7866cf6c63563c72ff5e581350ee251246b1ad74ca535e9a803acb94a91d5b0d3c2eda7947baa7dab135469d5eb2e82e653056d738a8a76ddf91f93516df2541bc5aacad83166b2d3c6b73ac85f8cb9679690364f63a7b9da398bdce5ee72866afb3d7398ad9ebec758e62f63a7b9da398bdce5ee72866afb3d7398ad9ebec758e62f63a7b9da398bdce5ee72866afb3d7398ad9ebec758e62f63a7b9da398bdce5ee72866afb3d7398ad9ebec758e62f63a7b9da398bdce5ee72866afb3d7398ad9ebec758e6266d059f1c8f709853501e55e266114db2ab73ca9f7825e0e8e9c0a8cf924e4d702cf6a07fa38aa67aa0ff93aa34e2f5b749732b87fad73504fdbbe23f3eb603b64c3bca601327b9debc7ac78a6e9bcb026a0dc341246b1ad76cb936ac7a605474e99dab175c0e3a29d7754cf543bb6dea8d3348bee5206f7aff50eea69db77647e3d6c07cfec996dcc8a67bace0b6b02ca4d276114db5aa73c65a9f71ba707474e99dab1f5c0e3a29d77a47baa1ddb60d469ba45772983b1bac1413d6dfb8ecc6f80ed900df39a06c8ec75f63a47317b9dbdce51cc5e67af7314b3d7d9eb1cc5ec75f63a47317b9dbdce51cc5e67af7314b3d7d9eb1cc5ec75f63a47317b9df34767c53343e7853501e56690308a6d9d539e2ea9e70e338223a74ccf1d36008f8be7328e744f3d77d868d4698645772983fbd74607f5b4ed3b32bf11b64363675ed300997d6ce486d9c786678e62f6b1e199a3987d6c78e628661f1b9e398ad9c786678e62f6b1e199a3987d6c78e628661f1b9e398ad9c786678e62f6b1e199a3987d6c78e628661f1b9e398ad9c786678e62f6b1e199a398196243f1ccd479614d40b999248c625bef9627f5dd8399c19153a67e3b1b816783037d1cd533d56f679351a79916dda50cee5f9b1cd4d3b6efc8fc26d80e9ed933db9815cf2c9d17d604949b45c228b60d6e7952edd8ace0c829533bb609785cb4f38eea996ac7361b759a65d15dca60ac6e76504fdbbe23f39b613b7866cf6c63563cb3755e5813506e3609a3d836bae549b563b38323a74cedd866e071d1ce3baa67aa1ddb62d469b645772983b1bac5413d6dfb8ecc6f81ede0993db38d59f1ccd179614d40b939248c62dbe4982701759629533bb605785cb4f38eea996ac7b61a759a63d15dca60ac6e75504fdbbe23f35b8167aece0b6b02cacd256114db66c73c09a8b34c9962752bf0b8d8771cd53315ab1f18759a6bd15dca60ac7ee0a09eb67d47e63f009e793a2fac0928378f84516c5b1cf324a0ce32658ad50f80c7c5bee3a89ea958dd66d4699e45772983b1bacd413d6dfb8ecc6f039ef93a2fac0928379f84516cd88ecd77c45364f01459b4385ebe9516153adf46ff26e0ff15c0e8aa6d996f30ca3cc6b8d88a72a0595b83a7ada1d9f1f4adb4a884bc9a707b550223c3f66a9b03cdda1b3ced0dcd8ea76fa5456f9d6fa77f717bf5064686edd51e781cb4cfe50983474d998edddb1cebe3a89ea963f7f6c0ae3b1e87a40c1ebbb73ba8a7ed5c42e6b7c376f0cc9ed9c6ac78faebbcb026a05c7f1246b1e139ff8ef879ca13068f9a32b5633b1cebe3a89ea9766c6760d77d07e82e653056773aa86701f89575cbfc4ed80ed930af6980cc5ee7fa312b9e013a2fac0928378084516cdb816757fc3ce50983474d99dab15d8ef57154cf543bb63bb0ebbe0b749732b87fed7650cf02f02beb96f9ddb01db2615ed30099bdcef563563c03755e5813506e2009a3d87602cf9ed879d263be208f9a32b5637b1cebe3a69ee9766c6f60d77d0fe82e6570ffdaeba09e05e057d62df37b613b7866cfec993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367e666563c83745e5813506e1009a3d87603cf87b1f3a49f3b208f9a323d77f8d0b13e6eea997eeeb02fb0ebfe21e82e653056f739a86701f89575cbfc3ed80e9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec99b99915cf609d17d604941b4cc228b6bdc0f351fc3ce50983474d999e3b7ce4581f47f54c3d77d81fd875ff0874973218abfb1dd4b300fccaba657e3f6c87fd9ed9335b9815cf109d17d604941b42c228b67dc07320769ef4f353e45153a676ec80637ddcd433dd8e1d0cecba1f00dda50cc6ea4107f52c00bfb26e993f08db211be6350d90d9ebec758e62f63a7b9da398bdce5ee72866afb3d7398ad9ebec758e62f63a7b9da398bdce5ee72866afb3d7398ad9ebec758e62f63ae78fce8aa74ae7853501e5aa4818c5b61f783e8e9da74b69c2e0515381319f84fcc78ef57153cff4738743815df78f41772983fbd72107f52c00bfb26e993f04dba1b133af6980cc3e3672c3ec63c3334731fbd8f0cc51cc3e363c7314b38f0dcf1cc5ec63c3334731fbd8f0cc51cc3e363c7314b38f0dcf1cc5ec63c3334731fbd8f0cc51cc3e363c7314b38f0dcf1cc5ec63c3334731fbd8f0cc51cc0cb1a178aa755e581350ae9a84516c0781e793f879ca13068f9a0a8cf924e43f71ac8fa37aa6faed1c0eecba7f02ba4b19dcbf0e3ba86701f89575cbfc61d80e9ed933db9815cf089d17d604941b41c228b643c0f3a9039e84c1a3a64cedd8a78ef57154cf543bf65960d7fd53d05dca60ac7ee6a09e05e057d62df39f01cf489d17d604941b49c228b6c3c0e32256154f91c123f39f12f8565ad4e87c1bfd8bdbab061819b657510e346b6bf0b435343b9ebe9516e320af26dc5ee38091617bb5cd8166ed0d9ef68666c7d3b7d262bcceb7d3bfb8bdc60323c3f66a9f03cd8e677b783cf7ede319a75ef3e3a779c171d4bce0386a5ee035a7d2dcc1f1a50c8f650130e09484fc67c0f3c3f87952f7b83ecb82e787c0f383f8793a3baa67a95aef8f803daef52aad7e6c68f599a155319441861f3bd0af00fccaba655efc7966cf1cc58ce7b6c29a80729f92308aed07c0e3a2dd5075bf4caf4bd6df2c4cfb4eaaf5ebe2d903de776da6d72b1ce2af10cadc5e525bf6a0662b82ffcb7653f53964d81cbd0fdcd9f60c4ce6c55f5190bbfba099eecba2162e9edd647bdc3f64e1f9363e9e52dccfd1d7414775cfe639da410b4f8c75ef1cf50cf140fc754fb51f9df4ba64fd6a1ffdfc24a79a97e3be27ed4727a3ce8550e6b292dab25f40fb616b2b5cef9b724e6eee9b4d82daf64cb84ab4dd7cbef2adb64bb94fa03cb63915fa17f7cf0aa8abab7631ea1e13b68b66dbed527bf3199fe9bb1874f9845433db730ad4b1d2c25d49c08df198cbfd4cd66d7b465669e8c8a6196eeb4f2c3af6b670f726e066dcaf7b1b3ab26976acfdbabf85bb3f0137e37edddfd0914db363edd7032cdc0308b819f7eb01868e6c9a1d6bbf1e68e11e48c0cdb85f0f347464d3ec58fbf5200bf720026ec6fd7a90a1239b66c7daaf075bb807137033eed7830d1dd9343bd67e3dc4c23d84809b71bf1e121ca9239b66c7daafab2cdc5504dc8cfb7595a1239b66c7daafab2ddcd504dc8cfb75b5a1239b66c7daaf4758b847107033eed7230c1dd9343bd67e3dd2c23d92809b71bfae6bbf7dd6fdbac6c25d43c0cdb85fd7183ab26976acfd7a9c857b1c0137e37e3dced0914db363edd7e32ddce309b819f7ebf1868e6c9ad9f66b47efe59565fb9ee061a7faa4c76b3e9c05cfc7c0e322a61cc541a9a37e2ea9bea9070cad0e1b5ae1381807413f077d6132bedf2ffe3cb367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367f6cc9ed933f333e3370ef1f98a94fb8484516cf84ccac57d7e55f7cbf5ba64fdcdc2d4f9945abf0763f75b565a60f84b0287f82b8432ff794e6dd9ae9aad28387abbe1b8d6b82df7c75e87f4b634e35fe6c55f11d4e700f038783f3fc573d0e03968d102df3b8dc777d930371a9795aaefefb40a6ab7f37ea33ea8e947b1fb3f52d30243d38f1cfb4e04476e4f61c0290979e471f16cd8513d536dc13ea34ea6c6c550e642a8e73e07f52c00bfb26e99df073c3235011e573118183c81451f992ac9782693f18c24e3b9808c671019cf69643cb792f1b422e3b9928ce749329e72329e71643cc3c878ce25e3b99b8ce744329e1bc8782e27e32924e3e943c633858ca72719cf43643cdf27e3194cc6732919cf19643cb793f124c878ae26e3799a8ca78c8c670219cf70329e0e643cf792f19c4cc67313194f73329e2419cf63643cddc9782e26e31943c6731119cf10329eb3c878ee24e32926e3694bc6732d19cf33643c15643c9791f14c22e379908ce77c329efbc8784ac9784e25e3b9858ca71319cf15643c2dc9789e20e3e94ac65343c65345c6730e194f7f329e4bc8784e20e3b99e8ca729194f6f329e47c8787a91f18c22e3e948c6f33d329efbc9784e27e3b98d8ca73519cf55643c07c8789e22e3e942c6339e8ca79a8ce710194f0919cf00329e93c8786e24e36946c6d3978ce751329e1e643ca3c9782e24e379808ce74c329e3bc878da90f11491f15c43c633958ca73319cf44329e11643ce791f10c24e339858ce766329e16643cfdc8781e27e3e946c633968c672819cfd9643c7791f1b423e3694fc6731d194f01014f2238fa5b4c09f8ff41b0c937833e065b13cbfae439b59457c7c5673b1cbdee2696757f6461409d3e84ba2475bef4bb4d299dd05712e6c55f11707c44c2731d194f7b329e76643c7791f19c4dc633948c672c194f37329ec7c978fa91f1b420e3b9998ce714329e81643ce791f18c20e39948c6d3998c672a19cf35643c45643c6dc878ee20e339938ce701329e0bc9784693f1f420e379948ca72f194f33329e1bc9784e22e31940c65342c673888ca79a8c673c194f17329ea7c8780e90f15c45c6d39a8ce736329ed3c978ee27e3f91e194f47329e51643cbdc8781e21e3e94dc6d3948ce77a329e13c8782e21e3e94fc6730e194f15194f0d194f57329e27c8785a92f15c41c6d3898ce716329e53c9784ac978ee23e3399f8ce741329e49643c9791f15490f13c43c6732d194f5b329e62329e3bc978ce22e31942c6731119cf18329e8bc978ba93f13c46c69324e3694ec6731319cfc9643cf792f17420e3194ec633818ca78c8ce769329eabc97812643cb793f19c41c6732919cf60329eef93f13c44c6d3938c670a194f1f329e42329ecbc9786e20e339918ce76e329e73c9788691f18c23e32927e379928ce74a329e56643cb792f19c46c633888ce702329e91643c93c9782ac9789a183cf87ff56ed8019d976f0715c2ffefd69dcbdbe97549197946acee55ec356caabe7b1cd5776f503b25617e0fd457d8f702cf5e473c1f1a3ca6ef22c8578266bb0d9b62dce58871b7c128f3bb8051f4db0d3cbb1df1ec31784cdf4590ef0d9aed346c8a718723c69d06a3ccef0046d16f27f0ec74c4b3cbe0317d1741be3f68b6ddb029c66d8e18b71b8c32bf0d1845bfedc0b3dd11cf0e83c7f45d04f901a0d907864d316e75c4f881c128f35b8151f4fb00783e70c4b3cde0317d17417e2068b6c5b029c6cd8e18b7188c32bf191845bf2dc0b3c511cf5683c7f45d04f941a0d926c3a618373a62dc6430cafc466014fd3601cf26473c9b0d1ed37711e40783661b0c9b625cef887183c128f3eb8151f4db003c1b1cf16c34784cdf45901f029aad336c8a71ad23c67506a3ccaf0546d16f1df0ac73c4b3dee0317d1741be0a345b63d814e36a478c6b0c46995f0d8ca2df1ae059e38867adc163fa2e827c3568b6cab029c6958e1857198c32bf121845bf55c0b3ca11cf6a83c7f45d04f911a0d90ac3a618973b625c6130cafc726014fd5600cf0a473c2b0d1ed37711e4478266cb0c9b625cea887199c128f34b8151f45b063ccb1cf12c37784cdf4590af01cd961836c5b8d811e3128351e61703a3e8b704789638e2596af098be8b203f0e345b64d814e342478c8b0c46995f088ca2df22e059e48867b1c163fa2e82fc78d06c8161538cef3b625c6030cafcfbc028fa2d009e058e78161a3ca6ef22c8df0936e1ed05b6f774be27d8ded5f91e607b47e7bb83ed6d9def06b6b774be2bd8ded4f972b0bda1f35dc0f6bace9781ed359def0cb65775be0fd85ed1f9be609baff349b0cdd3f97e609babf357806d8ece5f09b6d93a7f15d866e9fcd5609ba9f3d7806d86ce5f0bb6e93a7f1dd8a6e9fcf5607b59e76f00db4b3a7f23d85ed4f99bc0f682cedf0cb6e775fe16b03da7f3b782ed599dbf0d6c0febfced60bb47e7ef00db619dbf0b6c9feafcdd60fb4ce7ef05db0f74fe3eb0fd50e7ef07db8f74fe01b0fd58e78782ed273a3f0c6c3fd5f9e160fb99ce3f08b69febfc28b0fd42e71f02db2f757e34d87ea5f363c0f66b9d1f0bb6dfe8fc04b07daef313c1f65b9d9f04b6dfe9fc64b0fd5ee71f01db173a3f056c7fd0f947c1f6479d7f0c6c7fd2f9c7c1f6679d7f026c5feafc9360fb4ae79f02dbd73aff34d8fea2f353c1f6579d7f066c7fd37969d7543bfb779d2f09e26d67bf096aa712f02dfe54997fe87c73a38c2c5b08655aeb0e85ea19877a7749da616997954ddae1f7c026edf0bb609376f81db0493bfc36d8a41d7e0b6cd20ebf09366987df009bb4c3af834ddae1d7c026edf0ab609376f815b025757e3ed8a41d9e07366987e7824ddae1396093767836d8a41d9e0536698767824ddae119609376783ad8a41d9e063669875f069bb4c32f814ddae117c126edf00b609376f879b0493bfc1cd8a41d7e166cd20e3f0c366987ef019bec2fdf804ddae6c36093b6f953b049dbfc19d8a46dfe01d8a46dfe21d8a46dfe11d8a46dfe31d8a46dfe09d8a46dfe29d8a46dfe19d8a46dfe39d8a46dfe05d8a46dfe25d8a46dfe15d8c6eafcafc1266df36fc0266df3e76093b6f9b76093b6f9776093b6f9f76093b6f90bb049dbfc07b049dbfc47b049dbfc27b049dbfc67b049dbfc25d8a46dfe0a6cd2367f0d36699bff02b667745edaea96609367c56a2afd8e138ec3d3047c094b3288b7edc7290979acbb4c95643cb3c8784692f1bc45c6730119cf20329ed3c8785a91f12c20e31947c6339f8c671919cf52329ef7c978ce25e3d944c6b3918ce744329ebd643c7bc8782e27e32924e39941c6f306198fbcf7c9c233988ce752329e33c87812643c73c9789690f12c26e379978ca70319cf06329ef5643c2793f1ec26e3d945c6d39c8ce71b329e69643c1793f1bc46c6731119cf10329eb3c8788ac978da92f15490f15c46c6339b8c671119cf42329eb7c978ce27e35947c6b3968ca7948ce754329e9d643c3bc8783a91f1b424e379898ca7868ce715329e2a329e73c878fa93f15c42c67302194f53329ede643cf790f1cc24e379938ca72319cff7c878d690f1ac26e3f92b19cfe9643cdbc978b691f1b426e33940c6339e8c671e194f3519cf7b643c87c8784ac8780690f19c44c6d38c8ce73019cf74329ed7c9785691f1ac24e339938ce703329ead643c6dc8788ac878e690f18c20e379878ce73c329e81643ca790f1b420e379998ce755329e15643ccbc978ce26e3d942c6b3998ca71d194f7b329e7d643c1f92f11410f0248023009bfcbf29d8e43b3c87c0f6b5ce1f009b7cc36701d8bed2f967c0f694c5d6c4c2270c53c126efca7e0d36b93ff334d8e49d89afc026e70de25fcd4fef70347f135846fc34b5f0a3bfaf2c5c92c7ed2dcb248378b737fa4a06f66fde15188cc79be743329e7d643cedc978da91f16c26e3d942c6733619cf72329e15643caf92f1bc4cc6d3828ce714329e81643ce791f1bc43c633828c670e194f11194f1b329ead643c1f90f19c49c6b3928c671519cfeb643cd3c9780e93f13423e339898c6700194f0919cf21329ef7c878aac978e691f18c27e33940c6d39a8c671b19cf76329ed3c978fe4ac6b39a8c670d19cff7c8783a92f1bc49c633938ce71e329ede643c4dc9784e20e3b9848ca73f19cf39643c55643caf90f1d490f1bc44c6d3928ca71319cf0e329e9d643ca792f19492f1ac25e35947c6733e19cfdb643c0bc9781691f1cc26e3b98c8ca7828ca72d194f3119cf59643c43c8782e22e3798d8ce762329e69643cdf90f13427e3d945c6b39b8ce764329ef5643c1bc8783a90f1bc4bc6b3988c670919cf5c329e0419cf19643c9792f10c26e3f93e19cf1b643c33c8780ac9782e27e3d943c6b3978ce744329e8d643c9bc878ce25e3799f8c672919cf32329ef9643ce3c8781690f1b422e3398d8c671019cf05643c6f91f18c24e39945c65349c6d3c4c273c8118f7c2b46d62df3871ab9ef3d86ef3d79e27b97e17b579ef8de61f8de9127beb719beb7e589efad86efad79e27bb3e17b739ef8de68f8de9827bed71bbed7e789efb586efb579e27bb5e17b759ef85e69f85e9927be971bbe97e789efa586efa579e27bb1e17b719ef85e68f85e9827be99afbf553f5ce9abbc4fff26e0ff15c0b8c011e3218351e61700a3d8f07bd4158e78a2aedd2b087c2b2de45e963cf34cc0ff2b81d1554c55188c326f8ba93dc053e98827ea9e4325816fa585bc8b2d7d2a13f07f1c7fd9554c551a8c326f8ba95dc0d3db114fd4bd92de04be9516f2eeb3bcf39780ffe378ebae62aab7c128f3b698da013cfd1df144dde3e94fe05b6921df0a936fd224e0ff383ea3ab98ea6f30cabc2da670fcdc018e78a2ee4d0d20f0adb4906fedca372f13f07f1cbfc9554c0d301865de1653387edc40473c51f7d40612f8565ac8b360f9467b02fe3f08185dc5d4408351e66d3185e3dd0c72c413752f7010816fa5c5609d973e5609f8ff6060741553830c4699b7c5d446e019ec8827ea1ee66002df4a8b213a2fef7024e0ff4380d1554c0d361865de1653eb816788239ea87baf43087c2b2daa745edee94fc0ffab80d1554c0d311865de16536b81a7ca114fd43de32a02df4a8b6a9d976fce25e0ff38fefb10478c5506a3cc0f0146b1ad069e6a473c51f7baab097c2b2de4dbfeabf46f02fe8fe3b1ba8aa96a8351e66d3185e3418f70c413758f7e04816fa5c5489d97316112f0ff91c0e82aa646188c326f8b291cbf72a4239ea8670b23097c2b2de4db5ccbf46f02fe5f038cae626aa4c128f3b6985a0a3c358e78161b3c8b2d5a1c2fdf4a0be9cbbd44ff26e0ffe380d1554cd5188c326f8ba9c5c033ce114fd4b39c7104be9516f26ded45fa3701ff1f0f8cae626a9cc128f3b6985a083ce31df1443d831a9f03df51cf5372e13bead9402e7c47dde7ce85efa87bb6b9f01d75ff3117bea3eea5e5c277d47da15cf88ebac7910bdf51d7ebb9f01d75ed990bdf51d751b9f01d754d900bdf51e7b7b9f01d75ae960bdf51e71dbe3df7ed79dcbe8fe7b943beb6e7c7f3187a3c8f25fedac05f1be4cab73f96f86b835cf9ced76b03df9ee7be3d97ebaf8220fa7a6cb923df4b0ddf328fcf59963af2bdd8f02df3f8cc60b123df0b0ddf328ff7bf173af25d64f896f98539f0ddd6f0dd3687bedb1bbedb5b7cbbd8de89e0c8eb6f61c02909798c81450e781cd5b354ad77895ed7b731aed776dfc6dc5f8aa1cc12d0cf75db21ebced476b48ccf7769027cc837be944d9ec5be07366943df059b3c637f076cd2cebf0d3679bef316d8e4f9cf9b601ba9f387c126cf61b1ffbb3c4bdf01b62a9dc77ed743747e1bd8a45f12f6f795be655bc126fd03b19fa9f4f1dc0c36e9a78bfd1ba5aff546b0497f79ec5727ef3cac079bbcb782fdb9e4dda3b5603ba0f3d88f48bee9b21a6c53757e15d8fea2f32bc1f6a4cedf03b62f75fe1bb0fd59e71782ed099d5f04b63fe9fc12b03daef36f80ed8f3aff3ad81ed3f9d7c0f6a8cee37b617fd0f90fc1f685cee3fb4853747e0fd87eaff3f81ecc233abf0b6cbfd3f957c13659e75f01db249d9f0fb6dfeafc3cb07daef373c13651e7e780ed373a3f1b6c13747e16d87eadf333c13656e76780ed573a3f1d6c63747e1ad846ebfccb60fba5cebf04b65fe8fc5fc1f690ce2f065b139d5f0a36197f11fb7c14eafc72b0c9b8f4d89747be953f1e6c2d747e1cd85aea7c0dd8e43b6b23c126632b8f005b42e7abc1d646e7abc026e73a43c02663890c069b9c970c025b3b9d1f08363987180036191bb23fd8e47b9ebdc17692ce57824dbe535f01b65374fe10d864fcae0560936fc01d009b8c6bfc34d8e4dbcf53c176a6ceff056c32a6c993603b5be7bf04db393aff67b0c9f7309f005b89ceff096c1d74fe71b09da7f37f049b8c37f518d82ed0f947c126e3f0fe016cf2ede42fc076a1ce4f01db453aff7bb0c9b81c8f804dc6dafc1dd83aeafc64b0c937ad2781ed329dff2dd864ecbccfc126dfeb9d08361923ed3760ebacf313c056a6f3bf065b179d1f0bb6729dff15d8baeafc18b075d3f9d160ebaef3bf045b0f9dff05d87aeabcb4336a7f56fbf9413d9f0ce23dcffe383872ca749e2d0cc813e7796b31f0a0affdb1d7bd2c758e2cfb7d13bd5e89a1fde07b5fecbed3e7e71fe97515eaf5ee337c17429996ba7150cbc931bfa95eee80b11cde139275cb329783fd4363dded747d3f7254df7d069370a30e52a68d6652c7c68d3adf12968991ad4ced03126b0168885312f2c2e046abb2523cefad0bcf47c0b33f769ef4b5af8b98c07d2bee6b5ff39ea8196bc550661fe8f7a103fd705f9775cbbcf8f3cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfcccfac780eea3c3e579672074918c5b61f785cdce7c7e7b0b27ef55ce7fd736bfdee8fddef91cff79ae9f5961a752e84327f86674e8b75be08fe2fdb2d6a5b3a784e98715b8abf22a80f3e0b3ae88867bfc1b3dfa285e44b62f35d36cc8dc665a5aadf8a7ac67ec0d0f5a0455357fbeb7ebdae024353dc5f3f3678f0d96811f07ea27f13b09e4fa00e0ef6f18c7121fe705fda0f36c97f0c8c2eb6331e4ba43d90e7e1f86c5acaec329e8bc7bfedcb4a5db61b7ba14ec9e0e8f82e8432fba0eddbaff3d837e420e8f633cbff65caf49c5af45375de1d7f9d53db77177026c10ffade09ac31f93ee27d94029dc48fd80b21ff53e8cf21e5440fd15ad871ec6f643797fbd858ae18caecb1d43f19c45bffdd06cf6e83596d938f21ce7e06c77f576dd29e088d2e078da4cc7ed0e880239efd068f70883f5546b67f73a38c2c5b08657e0b6d94aa8bb4f3524fecdb82c70057c731f125eb9679dbb9f147c068d651c547e7536a79f7c7cedbb0fa7ffd03da8bb8fb7ffd0362a800380263fda5b07ee16a1e441f5ba4ccff308ea32eae31705b9a7aa2ce52e67f413bf4fd92743e9b73fde375dd1675aebfc7014f2238f2da5b4d998eef788cd9eb80c7513d4b6dc7ae0f8d3a1543990ba19e0ece6332be57bb1b7cbbd8e6a8859c43ed33b42884320525e95f693ba274c46bd58f72529732ebf960a9a52e52a645496d5d5a823d4e2697db6d27d449ad77bfa5ae52a64d49ad2ec53a9f80ed84f74dceb6fc5fa64ced018e6bb33dfe3aa7b6ef36e04c821ff4fd01b0c6e4fb88ef6ac8f9bef8117b21e4cf2aa92d2be5440fd15ad8d53e22effc21bbb9dc3e63b96228b3c352ff64106ffdb71b3cdb0d66b54dda97d4e6258e5cb69b3b22342a058da40cde3f96633bbe77673beeef77c41d75dcdf0f8c66bb89e72e2ed90e186ce63d54dbf9a094c1733229d3b124fdabdad984a56cb3e0c87bc32eee63e23ba801d42330ea2a13c680836bc372bc7692764afc7402fb7e9d179d3b19da154299ae25e95f87e7ddd67b97e6f51d5e5308b7b96fe1bb1fbd4a6ab9711cc2fdfab7086c9fea5f47d769e5b67b86c261bb67982ca965c76585ebb0a52ee6357293e0e87beadf1a65f1be5ba6e5ccbc39a6a3d2f753a39ccd0f5ef3c4f6ae46e7d252646a12d8ef177c6cb01704478f5f29fb01c69c791fa593b11ebc8f726b49fa57da24b3acdaf69f9f54ab8f6c47d10edb138cc98f8131a9f3a5df6dea6cabbfcc8b3fc5f8895107376d57fa7da56cee031f001e176dbba336ba148fb1f17d9fa26795edf8ffb1a1550e9fd75a8ff9e633f796463e1edf65d5b6fb4f362df659785c3d4789d2629fc5777c5a741b663b7ed8b4c865df87282d3eb4f88e518b1178df3393167b2d3c2eee4565d262afc5777c5a742fcdf45c03b5d863e17175ef214a0bf1972df38704cc2d8d7c3cbecbab6cf7c96c5aecb6f0b8ba6e8ed262b7c5777c5a74ee86f7e83269b1cbc213fffdb9cc5aecb2f88e4f8b1e3df11e5e262d765a785c3dd38dd262a7c5778c7131dc762fc7a6c50e0bcf8e1c6bb1c3e23bc6f3c36eb67b6d362db65b781cdc77cda8c5768bef18b5188af75d3369b1cdc2b32dc75a6cb3f88e4f8baaaeb67bc2362d3eb0f0b8ba271ca5c50716dff16931b487f2bdb50e5a6cb5f06ccdb1165b2dbe63bc864ac5c5963a68b1c5c2b325c75a6cb1f88e4f8bead4b9d6e63a68b1d9c2b339c75a6cb6f88e4f8bd2d43175531db4d864e1d994632d36597cc71817a9ebc98d75d062a38567638eb5d868f11de3712415171beaa0c5060bcf861c6bb1c1e23b3e2d46a4ee3fadaf8316eb2d3ceb73acc57a8bef18efb9a4e2625d1db45867e15997632dd6597cc7a74597d431756d1db4586be1599b632dd65a7cc7a7c5f0d433b13575d0628d85674d8eb55863f11de37967aabd585d072d565b7856e7588bd516df319e77a6ee5facaa8316ab2c3cab72acc52a8bef18dbced479e7ca3a68b1d2c2b332c75aacb4f88ef1bc33a5c58a3a68b1c2c2b322c75aacb0f88ef1bc33751c595e072d965b7896e7588be516df31c645aaed5c56072d96597896e5588b6516df31ded74ab59d4beba0c5520b8fabf11aa2b4586af11de3f548ea1edf923a68b1c4c2b324c75a2cb1f88ef15951ea1c7c711db4586ce1599c632d1683ef03b1fb4ef7e7161fd217eb32438b4228f36d49fa57fa6245e928ebc07e65589745b1d725ddaf6c61445d16415da44c6187dabab40c9c8cf753eea8aea99859007552ebfdc4525729d3aa43ad2e099d4fc036390cba9d61f9bf4c05c67c12f2a29faaf37bf1d73915abef026712fca0ef77803526df9dd177814ee247ec85903fbd436d5929277a88d6c2aef691f7751ed9cde5161bcb154399f72df54f06f1d6ff3d83e73d83596d936288338923376d579ae9fd088d2e038da40cf6d9fbc4118fd9875038c49f2a23dbbfb95106fb504a99f3a08dc27ea552cf447074bf49476d5967649775cbbcf82b06db016034eba8e2631ff4fd94b122641c0965937121bac07aba1b3655d71e8eea2abe64dd32df0318659c8aeeb9672cab2b63378351f1f472a0198ebd2153a6e3452fe0e9e980c7513d53c7a10aa34e3d8c3a1543197cb7b1c2413d0bc0afac5be62bc0b78b6d8e5ac831f962438b42ac37b46799749475a8f8ed6ea94b1fc77591754bbbd42707be2b0ddf5d0ddf89e0c8ed1c0499f7af4a60eeed8059adb76ffceb2dc5f3368929f1d315ead40f3488ab4eb82e39cfeb67685b08f9fe709e27e5a4ac1cbf845dc5b26c4b643797eb652c570c65fa58ea9f0ce2ad7f5f83a7afc1acb6c90d706ee7607f48c5401f8343e6bb82767d23b4eb03da49193cfe7573a45d6f8347e6bb018f9ce354804dce15843f01ffef92036eb3ddabb0708b0dc789eb6661ec1a3f63ea5ca79bc128f35d81516cbd81a7d29166e6b6bed8d0078fcbcd8d32b26c219479088e8d094b59b5df5d58505bafa6da1edbbb63ba4d6fee402f1ca731007d0243c300f4927a3673c0d33aa81dab71e2a49a09431f1c7ec7f0f4a347412b3430f1b7c0528d2660c37c538b2d088e1c92b2106c32246533b0353164c1a130a5bc0c69e7422ed443d65d6870b60496387de3709e32650a9d16c0e3229455e8c8909e3a74ee99306ad2708c8f6606677d6247fdaf69867251eb72b51dcc7d2209f3660c163af2df14ea9b8479f1a7b68d0cad3a6ee8b087fb4d7870f298e163274d44a1cc1d1bf305c1911bc0fc8d12dcd54e87018015c6c6a199512f6c30e47fb2615ac7cf598e63e69ada04e04fa6d6a05b2b07baa9f5cbd8b7c3868e1e7ddbe4aad1a3865d3379ecb049a36ac6e2d66c692817b5a5e5ffcdc1666be2b1ac9ab0d9c2655b586cb60947196e09363972b5029bf0b4065b53c84b7973cb3809d70b60fdb24ba9ff29719ae98ab7086a43400ec7aa5d55fbaf3a95539f9055a7426a6863b539d5d0c5ea8ea11a9a587dc54e0d3dac861a56430b9f11a4870e5643059f1da48702565fbb2809d243fb9e17d40eddaba6c3c0f9bd203d34afba4d7351903eed5243eb760cd243e7aa5b979d82f467ded4bbf5eaf45ddd1650a7bcea124f9d7eaad34e7579a16e5fa85b59ea944e9d2eab534175faa62e47fa6aadfb85e98a305d19a6abc2747598ae09d3b561ba2e4cd787e98630dd18a69bc27473986e09d3ad61ba2d4cb787e98e30dd19a6bb82f4f0ce7707e9e1d7d5f0cff706e9a1a1ef0bd2c346df1fa487947e20480f373d34480f453d2c480f533d3c480f61fd60901ede7a54901e26f7e1203dd4ae1a82776c901e0e5b0d93ad86cf56c3fcaa2181d590c26aa861352cb11ac2580d81ac86467e3c480fb9ac866c7e2a480ffb3c354ccf84e9d9303d17a6e7c3f442985e0cd2c383ab61c3a705e961c6d5f0e33383f470e5b383f4f0e66ad873351cba1a265d0d9fae865557c3bcabe1dfd5b0f06f86e9ad30bd1da41f49a84731ea1185bafdaf1e83a95bd48b82f4adf32541fa11b77ae4afba40a82e21aa8bccaa20dd854a7529535dec549743d505537549555d74559765d5855b7569575dfcd52b0fea1510f54a8c7a4548bd32a55e2153afd4a9570cd56ba2eab54bf51ab17aad7a7f90be2d7e30483f2a55b7c3d5a301158feaf6fd6761fa41987e18a61f85e9c761fa49987e1aa69f85e9e7417a586335dcb11a2e590dadac8661564336aba19cd550d06ad8e82f82f4d0d36ae8ea3f05e921b1bf0cd35761fa3a480faffdd730fd2d4cdf84e9ef61fa4798fe19a67f05b54369636371866e61f4554a3074d2a4e163c64d2a9954533266f2e849a3c68d7eac64caa849234b6a1e193e61c4e89a29b8f00ff5c2320e78bf0913863e56326a6cf5f0474b6a264f2aa91951525533796cf51107ea7fea85ce3adae3d0eaea6867fffe5d48ff6f3d9db6d26d9f8cb07e7de6bab5695a0f414ea8cf42dd9ad6af4213f4514a2e67ef4c9feb964c1c5d33a9a4b4646cf8373cb8d64c195edda904ff37311479e2a4928993864e9854326242cd9892ce9d70bd4fb7ae4725fea3b51b985667d44f9c16fa5b4af50ab19de7d64381cfcfad1fe9dfbf0be9bfd5d369eac09b6d0d9bd767a14b4aea47585e1229cbc4c95593260c1d36297ae19edf65e1bef5a9e62df5ace67fd5c759d30ef558a84387fa11f6ad8fb35159380bfe3f244cae11d44d0600", + "bytecode": "0x1f8b08000000000000ffed9d77781447baee5b20821924c0395bd8de75c0c6428828018373ced818630c4260b001118d33ce2607e74cce194cc61830c6de9cbdbbde607b77bde1dce73ef7fe79ceb9f7f8deae99fa8e5e15d58346ee1a5e69aa9fa734d59faafbfbd5db5f57a7eaae82203dfd2b4c053adf3c4ce707474ef2ffa4fe2dfd6e539718d755ea92b3a09170366b249ccd1b09676123e16cd148385b3612ce568d84b37523e13c2e46ce02e073c5dba691f1261a196fdba071c46d5123e12c6e249ced1a0967fb46c2d9a191701edf48384f68249c273612ce931a09e7c98d84f39446c2796a23e13cad91709ede4838cf68249c673612ceb31a09e7d98d84f39c46c259d248383b3612ce731b09e779317276024eb997ff3dfdfb7dfd7b81febd50ff5ea47f2fd6bf9d741d0bf5fc2561ba344c9dc37499f13f258cbaa15f16a6aec6ffcac3d42d4cddc3d443ffaf44ffaf67987a85a977982ac25419a63e61ea1ba67e5a8ffe61ba3c4c5784e9ca305d15a6abc3744d98ae0dd37561ba3e4c3784e9c630dd14a69bc3744b986e0dd36d61ba3d4c7784e9ce300d08d35d61badb601918a67bc234284cf786697098ee0bd39030dd1fa6a1611a16a6aa300d0f53759846846964981e08d3a8308d0ed383617a284c63c234364ce3c25413a6f1619a10a689619a14a6c9619a12a687c334d5d0ec91303d1aa6c7c2f4b8c1f944989e0cd353619a16a6a7c3f44c989e0dd373617a3e4c2f84e9c530bd14a6e9619a11a699619a15a6d9619a13a6b9619a17a6f9615a10a697c3f44a985e0dd36b617a3d4c6f84e9cd30bd15a6b7c3f48e66911de1dd30bd17a6f7c3b4304c8bc2b4384c4bc2b4344ccbc2b43c4c2bc2b4324cabc2b43a4c6bc2b4364cebc2b43e4c1bc2b4314c9bc2b4394c5bc2b4354c1f84695b98b68769479876866957987687694f98f686e9c330ed0bd34761da1fa603613a18a68fc374284c9f84e970983e0dd36761fa41987e18a61f199aff384c3f09d34fc3f4336dfbb9fefd852e2bfbfc2ff5efaff4efaff5ef6ff4efe746f9df1af3bf33e67faf7fbfd0bf7fd0bf7fd4bf7fd2bf7fd6bf5feadfaff4efd7faf72ffaf7affaf76ffaf71bfdfb77fdfb0ffdfb4ffdab9effbdd2319d6f1dd44ec920a636a97cc43075ff5fc4369f2faa6757cdf5ffe4b744db0bf5bcfc16687b0b3ddfc2b0b7d4f32d8df5b4d6f3ad0d7bb19e2f36ecedf57c7bc37ebc9e3fdeb09fa8e74f34ec1df57c47b027f4ffd2154bff285b736d2a009bc46733b0b5d0b6e6606b29ab035b2b6d6b0136d9be2dc1769cb6b5025b1b6d6b0db684b61d275a86a9adb62583b862a574985a6f51dcebd5cf4c8ae3e7ad52eb6de788b77dfcbcc3d57a3b38e055f171bc5e5711c4cd09da560cb613b5ad1dd84ed2b6f6603b59db3a80ed146d3b1e6ca76adb09603b4ddb4e04dbe9da7612d8ced0b693c176a6b69d02b6b3b4ed54b09dad6da781ed1c6d3b1d6c25da7606d874931b9c09b673b5ed2cb09da76d6783ed7c6d3b076c728e57023639dfeb083639f73b176c721e789eb6a9b6e3b802f0a7edd26ea5fc499b0db6ef4b7b0db60ba4ad06db85d24e83ed22f02db68ba1ad115b276d93764bfdafb7ce2783b8f693b2d47e5211f77ac335abf5f6897fbda9e7777d835aad93e0a702b4eaa7f331f66de982bee5dc46fc88bd10f2d7435929277ac8b147d8d5b1a052e7fb6558aeb7b15c3194a9b4d43f19c45bff3e064f1f83b905e4ddc46cd7521fb3f59eb28ed98150d68c3d390f6a8a317b13703888d9721fb3f59eb28ed99150d68c3d39176e8a317b2f703888d99e6e62b6acd4c76cfade5810d8634fae879a62cc8e068ef863b69b8fd9fa4f59c7ecb350d68c3db9266e8a313b1538e28fd91e3dfdb941bda7ac63763e9435634feecf34c5987d01381cc4ec70dfced67bca3a66df87b266ecc9bdc2a618b3af0047fc31dbcb51cc76f5311ba49f7306813df6e4be75538cd9c5c0117fcc0ef7f767eb3f651db3bba1ac197bf20ca529c6ec469d57cf197eae9f339c09b65f68db59c01b7f6c5797398aed2e3eb6d3fd3f82c01ea3f23caf29c6f6473aafe2f857d01f416cbf96be0a60fb8db69d0bb6cfb5ed3ca897837da087df07ea5fa76cf7813f42593396e5d97253dc077e011c0e62b6a78fd9fad729db98fd37286bc69ef473688a31fb25703888d95e3e66eb5fa76c63f6dfa1ac197b17ea7c538cd9ffa9f3ea7ce10b7dbe7031d8fea06d9dc0f6476dbb046c7fd2b64bc1f6676deb0cb62fb5ed32b07da56da560fb5adbba80ed2fda5606b6bf6a5b57b0fd4ddbcac1f68db67503dbdfb5ad3bd8fea16d3dc0f64f6deb09b67f695b2f6d53fdf4a4efd5616d6b0dfcc920de6d2bfd2e65dd32df2507bedb19bedbe5d07707c377078bef3207be13e043a602633e09f932b73ca5c5c083becae3f7d555d5bd6b50ffba97034f3707754f808ffaf074039eeef1f3a48e9f3de25f6f6a1b7735344d80afae50af9e0eea5500be64dd322ffe8ac1866d6b4f0b63aff819cb0ac097ac5be67b01a3d8b0ad9777a964ff51c7c30b0a6a791dec4ba97322f127dfae128e72b04b998b3ad6b275d26c45f07f3cee75376c8ee2321517e24bd62df3e2af08ead33df78c65f565ec6630ba6a230ac097acdbfbaedd0e92c7e3b88b6b1d5b9b26be2b72e0bb97e1bbdcf08d6da74c998e6dbd8039f66b4e7d6cab8c7fbda5787d22d786e207cf1ff01a2eae3aa16fb936143f622f84fccd05b565a59ce821edb0b0ab58966d89ece6723d8de58aa14c85a5fec920defa571a3c9506b3da2657c0b1d0c1fe908a810a8343e6cb41bbca08ed2a403b29732168e7aa3deb6df0c87c77e09176ac07f0b8ba268ae2c9c5f5d8d17ce3392c5e3fcbfff13cc0d5f6ea6230cabc6d7bf50246dbb98a83eb998ce72add80516cbd81a7ab23cda2b66b5712df0e6225d51e890f393797fdb73bd8a54c2ffd429d6a2b1f84b6d2458c603cca54df6bdef8b75359ea1abc5b163cb8ed1c5c577571148fa578ffe6db20de5833dba56e865651f7785cb5e55d0d1e99177f9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec99f999f17912f6db9272dd4918cdfe6faeeef3a7be61a8d725eb57cf75fe8fd3fe6065a5d83f46fa415c6cd4b910ca1435ab2dfbffa03f98f99c0afb487677ab5d6a5b627fcc24cc8b3fec6b85db92a1bf53496cbed3dfa274f1bcad5d50b7af9cb99fa2a62efa3fa3a60586a6d81fff128347c56965f35a3617cffeb27d16895a493ece677bc5813dd6e3df2e65759e59370beab61f789c71d57f47da6a795e5e61f82e84326734abdd36d2b74ac699ed6a2c87fd7e64ddb2ccc560af34d6dd5e2f2b1c2d8cf5f78065a5ccd9d0a61e6856ab9983b6b22cdbbeebf8dc3cfee370fa397ed72c78ba008f8b76c6d1f9469defadc6fd1cdfec9f663b8f9132d8b7cf41bfca8cfd9dc49f67f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b667e66c5633e6bc5f76bcb491873d4f721f53c43be5526eb4f7d2fb859ad5fd7cfe1e4995327a3cef8eee8ff6e565b76abce170547f67788da96aebe4f11b52dc51f7e7b069f05b978ae5b00be64dd65162d245f129bef32676343c873fcae86aee5164d5dedaff88c1535c5fdb59bc183cf46a3beed5366d81cede319e342fce1be540636c9e3fbd12eb6331e4bcc7e3de20f9f5fff486bdb3e70b5edcb4a5db61bf8dd946470647ce3f7547e0e6ddf2f751efb7060df91af2dff9729d3736ad14fd5d9c1f7354b0b605db27d6ddff6ec0fac31f9ee82eb2ad0a9bfa14121e4bf6a565b56ca4959d15ad8d53e22df80417673b96ec672c550a6afa5fec920defa9bdf5aed6730ab6df21b88b3afe1f8efaa4dea1ba1d1c5a0919471fccd466bff4ab35f21b6a32d8d32b22c7e8bee5fd04645f51fb51d035c1fc764ddb6e398795ca84f3fcf7cefa7f51fd05ec4dd4feb3f2086b09f5660acbf13ac5fb85a06d1c71629f35fc6facd73725906fb81fdf77e02df7329d3f96ccec98fd5f595ed9c1c978baabb62c6efa0256364c69840163c4f90326db4d6b2cd2a23b87b59962d8a5856b432bf1556141ca99f9befaca5f7f97e465d24aef11be452e604a88b9bf396f439a0ab6fca25a14e2a5f66a9ab943915f6b5d3753e01db09f7db8b2cff9729d339208ee17e79fc754e6ddf2b8033097ed0f795c01a93ef2ee85bce01c58fd80b217f61f3dab2524ef410ad855ded23721e85ece67215c672c550a6bfa5fec920defa5f6ef05c6e30ab6d7216c4d945d00fdd555bdd3f42a34ea09194c17b8ab6ef80daee75b87a7f23ea5c0adf5f32cfaff038e9e6bcc97e1e6bde57b39d237432f8f11ca107b4b3094b59f37ea11c2fe3ec378cef4af400bff8ae84ab6f37f706dd92308fe705c7d2b78befd82a7f516326f4ce81efa8311372e1bb83e1bb430e7d7bcdbde64c9a3b188320f5fe197eb3544d99ce4b715c0259ae1930ba18cb2111d4fdf6f8d118717c0759ae3930ba383e64fbedf31ec028cb1502a38b774b71fc8dfa30e23786f1382f8c0ebe15dba5a1df8ac57b7a2d8191e99d4d7c36d50a185d9c1737f45d3d3c9f6f0dbfaec625ea9a05631930ca72c701a38b7be3782d531f46bc2e92e5da00a38b6758d98eef84df9ec77bcb2e19331ddb1df74529cbf6de4ba55b9e8ce71ae8dbc1b886292df03ee3d1b4e8e39627e3b90ffa7670df2fa5058e3378342df0d9a08b710f1341dde77047e3c1e797b2dcf1c09874c4d82f0bc62430fef7bd6260ecef88319905637f6014fb89c0e8e0fe6b8ab17f168c789f52963b0918af70c47879168c5700a32c773230bab8979a00bff561bc121865b95380f12a478c5766c1781530ca72a702e3d58e18afca82f16a6094e54e03c66b1c315e9d05e335c028cb9d0e8cd73a62bc260bc66b8151963b0318af73c4786d168cd701a32c7726305eef88f1ba2c18af074659ee2c60bcc111e3f55930de008cb2dcd9c078a323c61bb260bc111865b97380f126478c3766c1781330ca7225c078b323c69bb260bc191865b98ec0788b23c69bb360bc051865b97381f156478cb764c1782b30ca72e701e36d8e186fcd82f1366094e5ce07c6db1d31de9605e3edc028cb7d0f18ef70c4787b168c7700a32cf77d60bcd311e31d5930de098c775818073862bc330bc601c028cb5d028c77c5cf98ba961e9005e35dc07377fc3c29cdeeca82e76eb73ca9efeadd65f1754ffcbe52db626050ffbadf033c83e2e7496d8b7bb2e0118662580e35bb377ec6946683b260bc177806c7cf93d2ecde2c78068366f75a34bb2f7ec6946683b360bc0f7886c4cf93d2ecbe2c78868066f75934bb3f7ec6946643b260bc1f7886c6cf93d2ecfe2c788606b59add6fd16c58fc8c29cd8666c1380c78aae2e74969362c0b9e2ad06c9845b3e1f133a634abca827138f054c7cf93d26c78163cd5a0d9708b6623e2674c69569d05e308e019193f4f4ab31159f08c04cd4658347b207ec6946623b3607c007846c5cf93d2ec812c784681660f58341b1d3f634ab35159308e069e07e3e74969363a0b9e0741b3d116cd1e72c4f860168c0f5978e2fe4ef683165f631dd57d4c50ffba0b43312c87fd24c639621c9b05e3386094e5b09f448d23c6715930d600a32c9770cc98a99f440df81e1fbfef54bb5413d45f9ff16e7932f69340df131c69313ea8bf1613dcf264ec2781be273ad26242507f2d2602cf24075a24c0477d7884a11896c37e12931d314eca82713230ca72d84f628a23c6c959304e0146590efb493cec88714a168c0f03a32c87fd24a63a627c380bc6a9c028cb613f89471c314ecd82f1116094e5b09fc4a38e181fc982f1516094e5b09fc4638e181fcd82f1316094e5b09fc4e38e181fcb82f1716094e5b09fc4138e181fcf82f1096094e5b09fc4938e189fc882f1496094e5b09fc4538e189fcc82f1296094e5b09fc434478c4f65c1380d186539ec27f1b423c66959303e0d8cb21cf69378c611e3d359303e038cb2dc438e19335dbf3cd3c47d475dab3475df51d7254dddb78f731fe7f9e0dbc7b98ff37cf0ede3dcc7793ef8f671eee33c1f7cfb38f7719e0fbe7d9cfb38cf07df3ece7d9c33f97ed681ef04f890a9c0984f425e188a61b9873c639366449e92f8784ab1eee8eb3982ba3f67e129705477f4f53c41dd85a1b1313edb08181f6a048c5ec7741fc486302a9e17e0ffc918799ecf82e705e079d111cf0b59f0bc083c2fc5cf938aa917b3e011866258eea146c0f86c2360f43a7a1d9918bd8ef9a3a367f48c9ed1331e0bc6c6d0867bc646118f650d65543cd3e3e74969f652163cd3413359ee6eb78c650d65543c33e2e74969363d0b9e19a0d9748b660e18cb1acaa87866c6cf93d26c46163c3341b31916cd1c3096359451f1cc8a9f27a5d9cc2c78668166332d9a39602c6b28a3e2991d3f4f4ab35959f0cc06cd66593473c058d65046c533277e9e9466b3b3e099039acdb668e680b1aca18c8a676efc3c29cde664c13317349b63d1cc016359431915cfbcf879529acdcd82671e6836d7a29903c6b286322a9ef9f1f3a4349b9705cf7cd06c9e453356c6871a01e3b38d80d1b18e650d65543c0b1cf1cccf826701f0bcec886741163c2f03cf2bf1f3a462eae52c7884a118967ba811303edb0818bd8e5e472646af63fee8e8193da367cc8ef1b946c0e8b7b567646574707d95f11d9a979bb8efa877689abaefa877689aba6f1fe73ecef3c1b78f731fe7f9e0dbc7b98ff37cf0ede3dcc7793ef8f671eee33c1f7cfb38f7719e0fbe7d9cfb38cf07df3ece7d9ce7836f1fe73ecef3c1b78f731fe7f9e0dbc7b98ff37cf0ede3dcc7793ef8f671eee33c1f7cfb38f7719e0fbe7d9cfb38cf07df3ece7d9ce7836f1fe73ecef3c1b78f731fe7f9e0dbc7b98ff37cf0ede3dcc7793ef8f671eee33c1f7cfb38f7719e0fbe7d9cfb3867f2fd6afcbecbb2fdc6ccabc0e3e29b378eea59aad6fb9a5ed7b731eaa7b47addd0ea6543ab6228f31ae8f7ba03fd0ac0afac5be6c55fb6cc1710303bf25dd62ea8bb5f8b8f670d3d5499371cd53daaad7fa389fb8e6aeb9bbaefa8b6bea9fbf671eee33c1f7cfb38f7719e0fbe7d9cfb3867f18df91641ed79bb7cff54ade34d9d2fd4f352fe39b04b9949add2bfed03bf0fb9f0edf7217facc807df3ece7d9ce7836f1fe73ecef3c1b78f731fe7f9e0dbc7b98ff37cf0ede3dcc7793ef8f671eee33c1f7cfb38e78bf362f87f650e78028327c8c0339f8c670a19cf2c329e51643c83c9786e21e3b9828ce709329e72329ef1643cc3c978ee22e3b99e8ce732329ebe643c53c9787a91f1cc26e379908ce745329e21643cb791f15c45c6f314194f1919cf44329e11643cf790f1dc48c69324e379948ca70719cf45643c63c978e690f15c48c633948ce725329e3bc8788ac978da91f15c43c6f33c19cfa5643c15643c4f93f1cc23e3994cc6f30019cfbd643ca5643c3793f17426e3b99c8ce771329e6e643c73c9786ac878a693f15491f10c20e3b9988ce73a329ee6643c7dc8781690f13c4cc6d39b8c6734194f27329efbc8786e25e3b9928ce749329eae643c13c8786690f15493f10c24e3b9818ca71f19cf23643c3dc978c690f15c40c6733f19cfed643cb9f89e69363c6dc9788ac878ae26e379868c671a194f17329e49643c33c9784692f10c22e3b9898ca73f19cf63643cddc978c691f10c23e3b9938ce705329ef6643c1dc878ae25e32920e04904478e619280ffbf0ab666c6b2eab3af633ad6feff2d6d6f06cbbcadf3cd2deb7e0b6cf22dd9b72dcba24e6f415d923a5ffadda6944ee82b09f3e2af0838de26e1b9968ca703194f7b329e17c878ee24e31946c6338e8ca73b19cf63643cfdc9786e22e31944c633928c672619cf24329e2e643cd3c8789e21e3b99a8ca7888ca72d19cfab643cb793f1dc4fc6730119cf18329e9e643c8f90f1f423e3b9818c6720194f3519cf0c329e09643c5dc9789e24e3b9928ce756329efbc8783a91f18c26e3e94dc6f33019cf02329e3e643ccdc978ae23e3b9988c6700194f1519cf74329e1a329eb9643cddc8781e27e3b99c8ca73319cfcd643ca5643cf792f13c40c633998c671e19cfd3643c15643c9792f13c4fc6730d194f3b329e62329e3bc8785e22e3194ac6732119cf1c329eb1643c1791f1f420e379948c2749c6732319cf3d643c23c8782692f19491f13c45c6731519cf6d643c43c8785e24e379908c6736194f2f329ea9643c7dc9782e23e3b99e8ce72e329ee1643ce3c978cac9789e20e3b9828ce716329ec1643ca3c8786691f14c21e3994fc65369e179d5118fbcef2eeb96f957497c3bd80ea56abdef38aad3bb7a5d2df47a855ffc154299696dd2bfeafd705c56b8ccef13e0bb39ef8246ef3aaa8b6c8f0263fba0ef371df99677b464dd32ff6613f7ddcef0dd2e4f7c77307c77c813df3ece7d9ce7836f1fe73ecef3c1b78f731fe74cbe1d5c1b94e177d2642a30e69390c7eb0517df977354cf3ad789dfc6a89fd2ea3d432bf3daaa18cabc03fabde7403fdbb5a7cc8bbf6c992f2060c6b82809e28d8bf7e3af5359bba06e7bf1bea12fd66ba1234da38e210b9bb8efa8634853f71d750c69eabe7d9cfb38cf07df3ece7d9ce7836f1fe73ece997c2fd2f918af1b4bd1877abe28d7038bc0ef129d2f88d1af5ad762bdae42bd6ee158027629f39ff05cd3eff37e9f8fcbb73fb6f938cf07df3ece7d9ce7836f1fe73ecef3c1b78f731fe7f9e0dbc7b98ff37cf0cd1ce7665efa8b5f086caefaf347c5622ede253896bea362b1a9fb8e8ac5a6eedbc7b98f7326df4b1df84e800f9932f5f15b0a3c8b1df038aa67ead9c632a34eaf1a752a8632788c5fe6a09e05e057d62df3cb8047a64ae0711107f5d9e6c8339f8c670a19cf2c329e51643c83c9786e21e3b9828ce709329e72329ef1643cc3c978ee22e3b99e8ce732329ebe643c53c9787a91f1cc26e379908ce745329e21643cb791f15c45c6f314194f1919cf44329e11643cf790f1dc48c69324e379948ca70719cf45643c63c978e690f10c25e379898ce70e329e62329e76643cd790f13c4fc67329194f0519cfd3643cf3c8782693f13c40c6732f194f2919cf42329e9bc9783a93f15c4ec6f338194f37329eb9643c35643cd3c978aac8780690f15c4cc6731d194f73329e3e643c0bc8781e26e3e94dc6339a8ca71319cf7d643cb792f15c49c6f324194f57329e09643c33c878aac9780692f1bc47c67303194f3f329e47c8787a92f18c21e3b9808ce77e329edbc978da92f11491f15c4dc6f30c19cf34329e2e643c93c8786692f18c24e31944c67313194f7f329ec7c878ba93f18c23e31946c6732719cf0b643cedc9783a90f15c4bc65340c093088e7cf73f01ff7f0f6cf28efaab605baef38bc1d6cce2a3b9ce2f035ba1cecb3a5a85696ac723d78d3ab97a2f1f7d25615efc1501c772129e6bc9783a90f1b427e379818ce74e329e61643ce3c878ba93f13c46c6d39f8ce726329e41643c23c9786692f14c22e3e942c6338d8ce719329eabc9788ac878da92f1dc4ec6733f19cf05643c63c8787a92f13c42c6d38f8ce706329ef7c8780692f15493f1cc20e39940c6d3958ce749329e2bc9786e25e3b98f8ca71319cf68329ede643c0f93f12c20e3e943c6d39c8ce73a329e8bc9780690f15491f14c27e3a921e3994bc6d38d8ce771329ecbc9783a93f1dc4cc6b3908ca7948ce75e329e07c8782693f1cc23e3799a8ca7828ce752329ee7c978ae21e36947c6534cc6730719cf4b643c43c978e690f18c25e3b9888ca70719cfa3643c49329e1bc978ee21e31941c633918ca78c8ce729329eabc8786e23e31942c6f32219cf83643cb3c9787a91f14c25e3e94bc6731919cff5643c7791f10c27e3194fc6534ec6f30419cf15643cb790f10c26e31945c6338b8c670a19cf7c329eca1cf1a877dba5af75005c382521bf0c78163ae07154cf52fcaec1b731ae5769b5c2d0ea3d43ab6228b314f45be140bf02f02beb96f915c0f38ccedbbea9f00c09a3d8163ae649409d65cab40fac001e17fba4a37aa66275a551a7672cba4b198cd5950eea69db77647e25f03caff3c29a8072cf93308a6d99639e04d459a64cb1ba12785cec3b8eea998ad555469d9eb7e82e6530565739a8a76ddf91f955c0f382ce0b6b02cabd40c228b6156e79ca1350679932c5ea2ae071b1ef38aa672a56571b757ac1a2bb94c1585deda09eb67d47e657c376f0cc9ed9c6ac78e4febdb026a0dc8b248c625be994a7bc3401759629533bb61a785cb4f38e744fb5636b8c3abd68d15dca60acae71504fdbbe23f36b2cbe4b8278b5585b0f2dd65a78d6e6580bf1972df3d246c8ec75f63a47317b9dbdce51cc5e67af7314b3d7d9eb1cc5ec75f63a47317b9dbdce51cc5e67af7314b3d7d9eb1cc5ec75f63a47317b9dbdce51cc5e67af7314b3d7d9eb1cc5ec75f63a47317b9dbdce51cc5e67af7314b3d7d9eb1cc5ec75f63a47317b9dbdce51cc5e67af7314b3d7d9eb1cc5cca0b3e291ef130a6b02cabd44c228b6556e7952ef05bd14d49d0a8cf924e4d702cf6a07fa38aa67aa0ff93aa34e2f59749732b87fad73504fdbbe23f3eb603b64c3bca611327b9d1bc6ac78a6ebbcb026a0dc741246b1ad76cb936ac7a60775a74cedd83ae071d1ce3baa67aa1d5b6fd469ba45772983fbd77a07f5b4ed3b32bf1eb68367f6cc3666c53343e7853501e56690308a6dad539eb2d4fb8d3382ba53a6766c3df0b868e71de99e6ac73618759a61d15dca60ac6e70504fdbbe23f31b603b64c3bca611327b9dbdce51cc5e67af7314b3d7d9eb1cc5ec75f63a47317b9dbdce51cc5e67af7314b3d7d9eb1cc5ec75f63a47317b9dbdce51cc5ee7fcd159f1ccd479614d40b999248c625be794a76beab9c3cca0ee94e9b9c306e071f15cc691eea9e70e1b8d3acdb4e82e6570ffdae8a09eb67d47e637c27668eacc6b1a21b38f8ddc30fbd8f0cc51cc3e363c7314b38f0dcf1cc5ec63c3334731fbd8f0cc51cc3e363c7314b38f0dcf1cc5ec63c3334731fbd8f0cc51cc3e363c7314b38f0dcf1cc5ec63c3334731fbd8f0cc51cc3e363c731433436c289e593a2fac0928378b84516cebddf2a4be7b302ba83b65eab7b311783638d0c7513d53fd763619759a65d15dcae0feb5c9413d6dfb8ecc6f82ede0993db38d59f1ccd679614d40b9d9248c62dbe09627d58ecd0eea4e99dab14dc0e3a29d7754cf543bb6d9a8d36c8bee52066375b3837adaf61d99df0cdbc1337b661bb3e299a3f3c29a8072734818c5b6d12d4faa1d9b13d49d32b5639b81c7453befa89ea9766c8b51a73916dda50cc6ea1607f5b4ed3b32bf05b68367f6cc3666c53357e7853501e5e692308a6d93639e04d459a64cedd816e071d1ce3baa67aa1ddb6ad469ae45772983b1bad5413d6dfb8ecc6f059e793a2fac0928378f84516c9b1df324a0ce32658ad5adc0e362df7154cf54ac7e60d4699e45772983b1fa81837adaf61d99ff0078e6ebbcb026a0dc7c1246b16d71cc93803acb9429563f001e17fb8ea37aa662759b51a7f916dda50cc6ea3607f5b4ed3b32bf0d7816e8bcb026a0dc021246b1613bb6c0114f91c15364d1e258f9565a54e87c5bfd9b80ff5700a3abb66581c128f318e3622bca8166ed0c9e768666c7d2b7d2a212f26ac2ed55098c0cdbab5d0e34eb60f07430343b96be95167d74bebdfec5edd5071819b65707e071d03e97270c1e35653a766f73ac8fa37aa68edddb03bbee781c923278ecdeeea09eb6730999df0edbc1337b661bb3e219a0f3c29a8072034818c586e7fc3be2e7294f183c6acad48eed70ac8fa37aa6dab19d815df71da0bb94c158dde9a09e05e057d62df33b613b64c3bca611327b9d1bc6ac7806eabcb026a0dc401246b16d079e5df1f394270c1e35656ac77639d6c7513d53edd8eec0aefb2ed05dcae0feb5db413d0bc0afac5be677c376c886794d2364f63a378c59f10cd279614d40b941248c62db093c7b62e7498ff9823c6acad48eed71ac8f9b7aa6dbb1bd815df73da0bb94c1fd6baf837a16805f59b7ccef85ede0993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367f6cc9e999b59f10cd679614d40b9c1248c62db0d3c1fc6ce937eee803c6acaf4dce143c7fab8a967fab9c3bec0aefb87a0bb94c158dde7a09e05e057d62df3fb603b7866cfec993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367e666563c43745e5813506e0809a3d8f602cf47f1f394270c1e35657aeef091637d1cd533f5dc617f60d7fd23d05dca60acee7750cf02f02beb96f9fdb01df67b66cf6c61563c43755e5813506e2809a3d8f601cf81d879d2cf4f91474d99dab1038ef57153cf743b7630b0eb7e0074973218ab071dd4b300fccaba65fe206c876c98d7344266afb3d7398ad9ebec758e62f63a7b9da398bdce5ee72866afb3d7398ad9ebec758e62f63a7b9da398bdce5ee72866afb3d7398ad9eb9c3f3a2b9e2a9d17d60494ab226114db7ee0f938769eaea50983474d05c67c12f21f3bd6c74d3dd3cf1d0e0576dd3f06dda50cee5f871cd4b300fccaba65fe106c87a6cebca61132fbd8c80db38f0dcf1cc5ec63c3334731fbd8f0cc51cc3e363c7314b38f0dcf1cc5ec63c3334731fbd8f0cc51cc3e363c7314b38f0dcf1cc5ec63c3334731fbd8f0cc51cc3e363c7314b38f0dcf1cc5ec63c333473133c486e2a9d679614d40b96a1246b11d049e4fe2e7294f183c6a2a30e69390ffc4b13e8eea99eab77338b0ebfe09e82e6570ff3aeca09e05e057d62df387613b7866cf6c63563c23755e5813506e2409a3d80e01cfa70e7812068f9a32b5639f3ad6c7513d53edd867815df74f41772983b1fa99837a16805f59b7cc7f063ca3745e5813506e1409a3d80e038f8b58553c45068fcc7f4ae05b6951a3f36df52f6eaf1a6064d85e4539d0ac9dc1d3ced0ec58fa565a8c87bc9a707b8d074686edd52e079a7530783a189a1d4bdf4a8b093adf5effe2f69a008c0cdbab430e343b96ede1b1dcb78f659c7acd8f9de605c750f38263a87981d79c4a7307c797323c9605c0805312f29f01cf0fe3e749dde3fa2c0b9e1f02cf0fe2e7e9e2a89ea56abd3f02f6b8d6abb4fab1a1d5678656c55006197eec40bf02f02beb9679f1e7993d7314339edb0a6b02ca7d4ac228b61f008f8b7643d5fd52bd2e597f8b30ed3bb1d6af8b670f78dfb5855eaf7088bf4228735b496dd9839aad08fe2fdb4dd5e7906173f43e7017db333099177f4541eeee8366ba2f8b5ab8787693ed71ff9085e7dbf8784a713f475f071dd53d9be768072d3c31d6bd4bd433c403f1d73dd57e74d6eb92f5ab7df4f3139d6a5e8efb9eb41f9d8d3a1742994b4b6acb7e01ed87adad70bd6fca39b9b96f360b6adb33e12ad176f3f9cab7da2ee53e81f2d8e654e85fdc3f2ba0aeaedac5a87b4cd82e9a6db74bedcd677ca6ef62d0e51352cd6ccf2950c74a0b77250137c6632ef73359b7ed1959a5a1239b66b8ad3fb1e8d8c7c2dd87809b71bfee63e8c8a6d9d1f6eb0116ee0104dc8cfbf500434736cd8eb65f0fb4700f24e066dcaf071a3ab26976b4fd7a90857b100137e37e3dc8d0914db3a3edd7832ddc8309b819f7ebc1868e6c9a1d6dbf1e62e11e42c0cdb85f0f317464d3ec68fbf5500bf750026ec6fd7a6850574736cd8eb65f5759b8ab08b819f7eb2a434736cd8eb65f575bb8ab09b819f7eb6a434736cd8eb65f8fb4708f24e066dcaf471a3ab26976b4fd7a94857b140137e37e5ddf7efbacfb758d85bb86809b71bfae317464d3ec68fbf5780bf778026ec6fd7abca1239b6647dbaf2758b827107033eed7130c1dd934b3edd78edecb2bcbf63dc1c34ef5498fd77c380b9e8f81c7454c398a835247fd5c527d530f185a1d36b4c271300e827e0efac2647cbf5ffc7966cfec993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367e667c66f1ce2f31529f70909a3d8f099948bfbfcaaee97e975c9fa5b84a9cbc9b57e0fc6eeb7acb4c0f097040ef1570865fef3ecdab2dd345b5170e476c371ad715bee8fbd0ee96d69c6bfcc8bbf22a8cf01e071f07e7e8ae7a0c173d0a205be771a8fefb2e16e342e2b6d17d48dfdfd467d50d38f62f75f57d30243d38f1cfb4e0475b7a730e094843cf2b87836eca89ea9b6609f512753e362287301d4739f837a16805f59b7ccef031e999a018fab180c0c9ec0a28f4c95643c53c8784691f19c4fc633988ce754329e5bc8788e23e3b9828ce709329e72329ef1643cc3c978ce21e3b98b8ce704329eebc9782e23e32924e3e94bc633958ca71719cf83643cdf27e31942c6730919cfe9643cb791f124c878ae22e3798a8ca78c8c672219cf08329e8e643cf790f19c44c67323194f4b329e2419cfa3643c3dc8782e22e3194bc6732119cf50329e33c978ee20e32926e36947c6730d19cfd3643c15643c9792f14c26e379808ce73c329e7bc9784ac9784e21e3b9998ca73319cfe5643cadc9781e27e3e946c65343c65345c6733619cf00329e8bc9788e27e3b98e8ca739194f1f329e87c9787a93f18c26e3e944c6f33d329efbc8784e23e3b9958ca70d19cf95643c07c8789e24e3e94ac633818ca79a8ce710194f0919cf40329e13c9786e20e36941c6d38f8ce711329e9e643c63c8782e20e3b99f8ce70c329edbc978da92f11491f15c4dc6338d8ca70b19cf24329e91643ce792f10c22e339998ce726329e56643cfdc9781e23e3e94ec6338e8c671819cf59643c7792f1b427e3e940c6732d194f01014f2238f25b4c09f8ff41b0c937833e065b33cbfae439b59457c7c5673a1eb9ee6696757f6461409d3e84ba2475bef4bb4d299dd05712e6c55f11707c44c2732d194f07329ef6643c7792f19c45c6338c8c671c194f77329ec7c878fa93f1b422e3b9898ce764329e41643ce792f18c24e39944c6d3858c671a19cfd5643c45643c6dc9786e27e339838ce77e329e0bc878c690f1f424e379848ca71f194f0b329e1bc8784e24e31948c65342c673888ca79a8c6702194f57329e27c9780e90f15c49c6d3868ce756329ed3c878ee23e3f91e194f27329ed1643cbdc9781e26e3e943c6d39c8ce73a329ee3c9782e26e31940c67336194f15194f0d194f37329ec7c9785a93f15c4ec6d3998ce766329e53c8784ac978ee25e3398f8ce701329ec9643c9792f15490f13c4dc6730d194f3b329e62329e3bc878ce24e3194ac6732119cf58329e8bc8787a90f13c4ac69324e36949c6732319cf49643cf790f17424e31941c633918ca78c8ce729329eabc87812643cb791f19c4ec6730919cf10329eef93f13c48c6d38b8c672a194f5f329e42329ecbc878ae27e339818ce72e329e73c8788693f18c27e32927e379828ce70a329ee3c8786e21e339958c673019cff9643ca3c878a690f15492f1343378f0ffeaddb0033a2fdf0e2a84ffdfa53b97b7d7eb9232f28c58ddabd86bd8547df738aaefdea0764ac2fc1ea8afb0ef059ebd8e783e34784cdf4590af04cd761b36c5b8cb11e36e8351e67701a3e8b71b78763be2d963f098be8b20df0734db69d814e30e478c3b0d4699df018ca2df4ee0d9e9886797c163fa2e82fc00d06cbb61538cdb1c316e3718657e1b308a7edb8167bb239e1d068fe9bb08f20341b30f0c9b62dcea88f1038351e6b702a3e8f701f07ce088679bc163fa2e82fc20d06c8b61538c9b1d316e3118657e33308a7e5b80678b239ead068fe9bb08f28341b34d864d316e74c4b8c96094f98dc028fa6d029e4d8e78361b3ca6ef22c80f01cd361836c5b8de11e3068351e6d703a3e8b701783638e2d968f098be8b203f14345b67d814e35a478ceb0c46995f0b8ca2df3ae059e78867bdc163fa2e827c1568b6c6b029c6d58e18d7188c32bf1a1845bf35c0b3c611cf5a83c7f45d04f96ad06c9561538c2b1d31ae3218657e25308a7eab806795239ed5068fe9bb08f22341b315864d312e77c4b8c26094f9e5c028faad009e158e78561a3ca6ef22c88f02cd961936c5b8d411e3328351e69702a3e8b70c789639e2596ef098be8b205f039a2d316c8a71b123c62506a3cc2f0646d16f09f02c71c4b3d4e0317d17417e3c68b6c8b029c6858e1817198c32bf101845bf45c0b3c811cf6283c7f45d04f909a0d9fb864d31bee788f17d8351e6df0346d1ef7de079df11cf4283c7f45d04f93bc026bcbdc1f6aecef702db3b3adf136c6feb7c0fb0bda5f3ddc1f6a6ce7703db1b3a5f0eb6d775be2bd85ed3f932b0bdaaf35dc0f68acef705dbcb3adf0f6c0b743e09b6f93adf1f6cf374fe72b0cdd5f92bc03647e7af04db6c9dbf0a6cb374fe6ab0cdd4f96bc03643e7af05db749dbf0e6c2fe9fcf5607b51e76f00db0b3a7f23d89ed7f99bc0f69ccedf0cb66775fe16b03da3f3b782ed219dbf0d6c77ebfced603bacf37782ed539dbf0b6c9fe9fc3d60fb81cedf0bb61feafc7d60fb91cedf0fb61febfc30b0fd44e78783eda73a3f026c3fd3f907c0f6739d1f0db65fe8fc8360fba5ce8f01dbaf747e2cd87eadf3e3c0f61b9d9f08b6cf757e12d87eabf393c1f63b9d9f02b6dfebfcc360fb42e7a782ed0f3aff08d8fea8f38f82ed4f3aff18d8feacf38f83ed4b9d7f026c5fe9fc9360fb5ae79f02db5f747e1ad8feaaf34f83ed6f3a2fed9a6a67ffaef32541bcedec3741ed5402bec59f2af30f9d6f699491650ba14c1bdda1503de350ef2e493b2cedb2b2493bfc2ed8a41d7e076cd20ebf0d366987df029bb4c36f824ddae137c026edf0eb609376f835b0493bfc2ad8a41d7e056cd20ebf0cb6a4ce2f009bb4c3f3c126edf03cb0493b3c176cd20ecf019bb4c3b3c126edf02cb0493b3c136cd20ecf009bb4c3d3c126edf04b609376f845b0493bfc02d8a41d7e1e6cd20e3f073669879f059bb4c3cf804ddae187c026edf0dd6093fde51bb049db7c186cd2367f0a36699b3f039bb4cd3f009bb4cd3f049bb4cd3f029bb4cd3f069bb4cd3f019bb4cd3f059bb4cd3f039bb4cd3f079bb4cdbf009bb4cdbf049bb4cdbf02db389dff35d8a46dfe0dd8a46dfe1c6cd236ff166cd236ff0e6cd236ff1e6cd2367f0136699bff0036699bff0836699bff0436699bff0c36699bbf049bb4cd5f814ddae6afc1266df35fc0f6b4ce4b5bdd1a6cf2ac584da5df71c271789a812f614906f1b6fd3825218f7597a9928c673619cf28329e37c978ce27e3194cc6732a19cf71643cef93f18c27e35940c6b38c8c672919cf7b643ce790f16c22e3d948c6730219cf5e329e3d643c9791f11492f1cc24e3799d8c47defb64e11942c6730919cfe9643c09329e79643c4bc8781693f1bc43c6d3918c670319cf7a329e93c8787693f1ec22e36949c6f30d19cf74329e8bc8785e25e3b9908c672819cf99643cc5643cedc8782ac8782e25e39943c6b3888c672119cf5b643ce791f1ac23e3594bc6534ac6730a19cf4e329e1d643c9dc9785a93f1bc48c65343c6f332194f1519cfd9643c03c8782e26e3399e8ca739194f1f329ebbc9786691f1bc41c6d3898ce77b643c6bc8785693f1fc958ce734329eed643cdbc878da90f11c20e39940c6339f8ca79a8ce75d329e43643c25643c03c9784e24e36941c673988c670619cf6b643cabc8785692f19c41c6f30119cf56329eb6643c45643c73c9784692f1bc4dc6732e19cf20329e93c9785a91f1bc44c6f30a19cf0a329ee5643c6791f16c21e3d94cc6d39e8ca70319cf3e329e0fc9780a087812c011804dfedf1c6cf21d9e4360fb5ae70f804dbee1f33ed8bed2f9a7c1f6a4c5d6ccc2270cd3c026efca7e0d36b93ff314d8e49d89afc026e70de25fcdcfe878247f335846fc34b7f0a3bfaf2c5c92c7ed2dcb248378b737fa4a06f66fde15188cc79ae743329e7d643c1dc878da93f16c26e3d942c6731619cf72329e15643caf90f1bc44c6d38a8ce764329e41643ce792f1bc4dc633928c672e194f11194f5b329ead643c1f90f19c41c6b3928c671519cf6b643c33c8780e93f1b420e339918c6720194f0919cf21329e77c978aac978e693f14c20e33940c6d3868c671b19cf76329ed3c878fe4ac6b39a8c670d19cff7c8783a91f1bc41c6338b8ce76e329e3e643ccdc9788e27e3b9988c670019cfd9643c55643c2f93f1d490f1bc48c6d39a8ca73319cf0e329e9d643ca790f19492f1ac25e35947c6731e19cf5b643c0bc9781691f1cc21e3b9948ca7828ca71d194f3119cf99643c43c9782e24e379958ce722329ee9643cdf90f1b424e3d945c6b39b8ce724329ef5643c1bc8783a92f1bc43c6b3988c670919cf3c329e0419cfe9643c9790f10c21e3f93e19cfeb643c33c9780ac9782e23e3d943c6b3978ce704329e8d643c9bc878ce21e3798f8c672919cf32329e05643ce3c978de27e3398e8ce754329ec1643ce793f1bc49c6338a8c6736194f25194f330bcf21473cf2ad1859b7cc1f6ae2bef718bef7e489ef5d86ef5d79e27b87e17b479ef8de66f8de9627beb71abeb7e689efcd86efcd79e27ba3e17b639ef85e6ff85e9f27bed71abed7e689efd586efd579e27ba5e17b659ef85e6ef85e9e27be971abe97e689efc586efc579e27ba1e17b619ef866befe56fd70a5aff23efd9b80ff5700e3fb8e180f198c32ff3e308a0dbf475de18827eadabd82c0b7d242ee65c933cf04fcbf12185dc55485c128f3b698da033c958e78a2ee395412f8565ac8bbd8d2a73201ffc7f1975dc554a5c128f3b698da053c7d1cf144dd2be943e05b6921ef3ecb3b7f09f83f8eb7ee2aa6fa188c326f8ba91dc033c0114fd43d9e0104be9516f2ad30f9264d02fe8fe333ba8aa90106a3ccdb620ac7cf1de88827eaded44002df4a0bf9d6ae7cf33201ffc7f19b5cc5d4408351e66d3185e3c70d72c413754f6d10816fa5853c0b966fb427e0ff8381d1554c0d321865de165338decd60473c51f7020713f8565a0cd179e9639580ff0f0146573135d86094795b4c6d049e218e78a2ee610e21f0adb418aaf3f20e4702fe3f14185dc5d4108351e66d31b51e78863ae289baf73a94c0b7d2a24ae7e59dfe04fcbf0a185dc5d4508351e66d31b51678aa1cf144dd33ae22f0adb4a8d679f9e65c02fe8fe3bf0f75c4586530cafc506014db6ae0a976c41375afbb9ac0b7d242beedbf4aff26e0ff381eabab98aa361865de1653381ef448473c51f7e84712f8565a8cd27919132601ff1f058cae626aa4c128f3b698c2f12b4739e2897ab6308ac0b7d242becdb54cff26e0ff35c0e82aa646198c326f8ba9a5c053e38867b1c1b3d8a2c5b1f2adb490bedc4bf46f02fe3f1e185dc5548dc128f3b6985a0c3ce31df1443dcb194fe05b6921dfd65ea47f13f0ff09c0e82aa6c61b8c326f8ba985c033c1114fd433a80939f01df53c2517bea39e0de4c277d47dee5cf88eba679b0bdf51f71f73e13bea5e5a2e7c47dd17ca85efa87b1cb9f01d75bd9e0bdf51d79eb9f01d751d950bdf51d704b9f01d757e9b0bdf51e76ab9f01d75dee1db73df9ec7edfb589e3be46b7b7e2c8fa1c7f258e2af0dfcb541ae7cfb6389bf36c895ef7cbd36f0ed79eedb73b9fe2a08a2afc7963bf2bdd4f02df3f89c65a923df8b0ddf328fcf0c163bf2bdd0f02df378ff7ba123df45866f995f9803dfed0cdfed72e8bb83e1bb83c5b78bed9d08ea5e7f0b034e49c8630c2c72c0e3a89ea56abd4bf4babe8d71bdb6fb36e6fe520c6596807eaedb0e5977a6b6a3757cbe4b13e043bef1a56cf22cf65db0491bfa0ed8e419fbdb609376fe2db0c9f39d37c126cf7fde00db289d3f0c36790e8bfddfe559fa0eb055e93cf6bb1eaaf3dbc026fd92b0bfaff42ddb0a36e91f88fd4ca58fe766b0493f5decdf287dad37824dfacb63bf3a79e7613dd8e4bd15eccf25ef1ead05db019dc77e44f24d97d5609ba6f3abc0f6179d5f09b62774fe6eb07da9f3df80edcf3abf106c8febfc22b0fd49e79780ed319d7f1d6c7fd4f9d7c0f6a8cebf0ab647741edf0bfb83ce7f08b62f741edf479aaaf37bc0f67b9dc7f7601ed6f95d60fb9dcebf02b6293aff32d826ebfc02b0fd56e7e783ed739d9f07b6493a3f176cbfd1f939609ba8f3b3c1f66b9d9f05b6713a3f136cbfd2f919601babf3d3c13646e75f02db2f75fe45b0fd42e7ff0ab607757e31d89ae9fc52b0c9f88bd8e7a350e797834dc6a5c7be3cf2adfc09606ba5f3e3c1d65ae76bc026df591b0536195b7924d8123a5f0db6b63a5f053639d7190a36194b6408d8e4bc6430d8daebfc20b0c939c440b0c9d89003c026dff3ec03b61375be126cf29dfa0ab09dacf387c026e377bd0f36f906dc01b0c9b8c64f814dbefd3c0d6c67e8fc5fc026639a3c01b6b374fe4bb09dadf37f069b7c0ff371b095e8fc9fc0d651e71f03dbb93aff47b0c978538f82ed7c9d7f046c320eef1fc026df4efe026c17e8fc54b05da8f3bf079b8ccbf130d864accddf81ad93ce4f019b7cd37a32d82ed5f9df824dc6cefb1c6cf2bdde49609331d27e03b62e3a3f116c653aff6bb075d5f971602bd7f95f81ad9bce8f055b779d1f03b61e3aff4bb0f5d4f95f80ad97ce4b3ba3f667b59f1fd4f3c920def3ec8f83ba53a6f36c61409e38cf5b8b81077ded8fbdee65a97364d9ef9be9f54a0ced07dffb62f79d3e3fff48afab50af779fe1bb10cab4d68d835a4e8ef9cdf572078ce5f09e90ac5b96b90cec1f1aeb6eafebfb91a3faee3398841b7590326d35933a366ed4f9d6b04c8c6c656a1f90580b40439c92901706375a9595e2796f7d783e029efdb1f3a4af7d5dc404ee5b715ffb9af744cd582b8632fb40bf0f1de887fbbaac5be6c59f67f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b667e66c57350e7f1b9b2943b48c228b6fdc0e3e23e3f3e8795f5abe73aef9d53eb777fec7eeb3edf6ba1d75b6ad4b910cafc199e392dd6f922f8bf6cb7a86de9e03961c66d29fe8aa03ef82ce8a0239efd06cf7e8b16922f89cd77d970371a9795b60bea3e5bdc67d4073575b5bfeed7eb2a3034c5fdf56383079f8d1601ef27fa3701ebf904eae0601fcf1817e20ff7a5fd6093fcc7c0e8623be3b144da03791e8ecfa6a5cc2ee3b978fcdbbeacd465bbb117ea940c8e8cef4228b30fdabefd3a8f7d430e826e3fb3fc5fa64ccfa9453f55e7ddf1d739b57d77016712fca0ef9dc01a93ef3aefa314e8247ec45e08f99f427f0e29277a88d6c28e637f23bbb9dcc7c672c550668fa5fec920defaef3678761bcc6a9b7c0c71f63338febb6a93f644687419682465f68346071cf1ec37788443fca932b2fd5b1a6564d94228f35b68a3545da49d977a62df163c06b83a8e892f59b7ccdbce8d3f0246b38e2a3eba9c5ccbbb3f76dec6d5ffeb1fd05ec4ddffeb1f104305c01118eb2f85f50b57cb20fad82265fe87711c75718d81dbd2d413759632ff0bdaa1ef97a4f3d99ceb1fabebb6a873fd3d0e781241dd6b6f35653abee33166af031e47f52cb51dbb3e34ea540c652e807a3a388fc9f85eed6ef0ed629ba316720eb5cfd0a210ca1494a47fa5ed88d211af553fca495dcaace783a596ba48995625b575690df638995c6eb79d5027b5defd96ba4a99b625b5ba14eb7c02b613de3739cbf27f9932b50738aecdf6f8eb9cdabedb8033097ed0f707c01a93ef3adfd590f37df123f642c89f59525b56ca891ea2b5b0ab7d44def9437673b97dc672c5506687a5fec920defa6f3778b61bcc6a9b7428a9cd4b1cb96c37774468540a1a4919bc7f2cc7767cefce76dcdfef883beab8bf1f18cd7613cf5d5cb21d30d8cc7ba8b6f3412983e76452a65349fa57b5b3094bd91641dd7bc32eee63e23ba801d42330ea2a13c680836bc372bc7692764afc7406fb7e9d179d3b1bda1542996e25e95f87e7ddd67b97e6f51d5e5308b7b96fe1bb1fbd4b6ab9711cc2fdfab7086c9fea5f47d769e5b67b86c261bb67982ca965c76585ebb0a52ee63572b3e0c87beadf1a65f1be5ba6e5ccbc39a6a3d2f753a39ccd0f5ef3c4f6ae4697d252646a16d8ef177c6cb01704478e5f29fb01c69c791fa5b3b11ebc8f724b49fa57da24b3acdaf69f9f58ab8f6c47d10edb138cc98f8131a9f3a5df6dea62abbfcc8b3fc5f8895107376d57fa7da56cee031f001e176dbba336ba148fb1f17d9fa25795edf8ffb1a1550e9fd75a8ff9e633f7d6463e1edf65d5b6fb4f362df659785c3d4789d2629fc5777c5a741f6e3b7ed8b4c865df87282d3eb4f88e518b9178df3393167b2d3c2eee4565d262afc5777c5af428cdf45c03b5d863e17175ef214a0bf1972df38704ccad8d7c3cbecbab6cf7c96c5aecb6f0b8ba6e8ed262b7c5777c5a74e98ef7e83269b1cbc213fffdb9cc5aecb2f88e4f8b9ebdf01e5e262d765a785c3dd38dd262a7c5778c7131c2762fc7a6c50e0bcf8e1c6bb1c3e23bc6f3c3eeb67b6d362db65b781cdc77cda8c5768bef18b51886f75d3369b1cdc2b32dc75a6cb3f88e4f8baa6eb67bc2362d3eb0f0b8ba271ca5c50716dff16931aca7f2bdb51e5a6cb5f06ccdb1165b2dbe63bc864ac5c5967a68b1c5c2b325c75a6cb1f88e4f8bead4b9d6e67a68b1d9c2b339c75a6cb6f88e4f8bd2d43175533db4d864e1d994632d36597cc71817a9ebc98df5d062a38567638eb5d868f11de3712415171beaa1c5060bcf861c6bb1c1e23b3e2d46a6ee3fadaf8716eb2d3ceb73acc57a8bef18efb9a4e2625d3db45867e15997632dd6597cc7a745d7d431756d3db4586be1599b632dd65a7cc7a7c588d433b135f5d0628d85674d8eb55863f11de37967aabd585d0f2d565b7856e7588bd516df319e77a6ee5facaa8716ab2c3cab72acc52a8bef18dbced479e7ca7a68b1d2c2b332c75aacb4f88ef1bc33a5c58a7a68b1c2c2b322c75aacb0f88ef1bc33751c595e0f2d965b7896e7588be516df31c645aaed5c560f2d96597896e5588b6516df31ded74ab59d4beba1c5520b8fabf11aa2b4586af11de3f548ea1edf927a68b1c4c2b324c75a2cb1f88ef15951ea1c7c713db4586ce1599c632d1683ef03b1fb4ef7e7161fd217eb52438b4228f36d49fa57fa6245e928ebc07e65589745b1d725ddaf6c61445d16415da44c61c7dabab40e9c8cf753eea8aea998791feaa4d6fb89a5ae52e6b88eb5ba24743e01dbe430e876bae5ff321518f349c88b7eaaceefc65fe754acbe039c49f083bedf06d6987c7741df053a891fb11742feb48eb565a59ce8215a0bbbda47ded3796437975b6c2c570c65deb3d43f19c45bff770d9e770d66b54d8a21ce248edcb45d69a6f72234ba14349232d867ef13473c661f42e1107faa8c6cff964619ec432965ce85360afb954a3d13c191fd261db5655d905dd62df3e2af186c0780d1aca38a8f7dd0f753c68a907124944dc685e80aebe961d8545d7b3aaaabf89275cb7c4f6094712a7ae49eb1acbe8cdd0d46c5d3db816638f6864c998e17bd81a797031e47f54c1d872a8c3af534ea540c65f0ddc60a07f52c00bfb26e99af00df2eb6396a21c7e48b0c2d0ab1ded09e65d251d6a1e2b787a52e7d1dd745d62ded52df1cf8ae347c77337c2782badb390832ef5f95c0dcc701b35a6fbff8d75b8ae76d1253e2a71bd4a93f6810579d705d729ed7dfd0b610f203e03c4fca4959397e09bb8a65d996c86e2ed7db58ae18caf4b5d43f19c45bff7e064f3f83596d93ebe1dccec1fe908a81be0687cc7703edfa4568d717b4933278fcebee48bb3e068fcc77071e39c7a9009b9c2b087f02fedf3507dc66bb5761e1161b8e13d7ddc2d82d7ec6d4b94e778351e6bb01a3d8fa004fa523cdcc6d7d91a10f1e975b1a6564d94228f3201c1b1396b26abfbba0a0b65ecdb53db677c7749bded2815e384e6300fa04868601e825f56ce180a74d503b56e3a4c93513873d30e2f611e9478f82566860e26f81a51acdc086f9e6165b10d41d92b2106c3224650bb0353364c1a130a5bc0c69e7422ed443d65d6870b60696387de3709e32650a9d56c0e3229455e8c8909e3a74ee9e387af2088c8f160667436247fdaf79867251eb72b51dcc7d2209f3660c163af2df1cea9b8479f1a7b68d0cad3a7ed8f087fa4f7c60cad811e3264f42a1cc1d1bf30541dd0d60fe4609ee6aa7c300c00a63e3d0c2a8173618f23fd9306de2e72cc731734d6d02f027531bd0ed3807baa9f5cbd8b7c3878d1973eb94aa31a3875f3d65dcf0c9a36bc6e1d66c6d2817b5a5e5ff2dc1666be2b1ac9ab0d9c2655b596cb60947196e0d3639721d0736e16903b6e69097f2e6967112aee7c3fa659752ff53e2b4d0156f15d486801c8e55bbaaf65f752aa73e21ab4e85d4d0c66a73aaa18bd51d433534b1fa8a9d1a7a580d35ac86163e3d480f1dac860a3e2b480f05acbe765112a487f63d37a81dba574d8781f37b417a685e759be6c2207ddaa586d6ed14a487ce55b72e3b07e9cfbca977ebd5e9bbba2da04e79d5259e3afd54a79deaf242ddbe50b7b2d4299d3a5d56a782eaf44d5d8ef4d35af70fd3e561ba224c5786e9aa305d1da66bc2746d98ae0bd3f561ba214c3786e9a630dd1ca65bc2746b986e0bd3ed61ba234c7706e9e19def0ad2c3afabe19fef09d24343df1ba4878dbe2f480f297d7f901e6e7a58901e8a7a78901ea67a44901ec2fa81203dbcf5e8203d4cee43417aa85d3504efb8203d1cb61a265b0d9fad86f9554302ab2185d550c36a58623584b11a02590d8dfc58901e72590dd9fc64901ef6795a989e0ed333617a364ccf85e9f930bd10a4870757c3864f0fd2c38cabe1c76705e9e1cae704e9e1cdd5b0e76a3874354cba1a3e5d0dabae867957c3bfab61e1df08d39b617a2b483f92508f62d4230a75fb5f3d0653b7a81705e95be74b82f4236ef5c85f7581505d425417995541ba0b95ea52a6bad8a92e87aa0ba6ea92aabae8aa2ecbaa0bb7ead2aebaf8ab571ed42b20ea9518f58a907a654abd42a65ea953af18aad744d56b97ea3562f55af5fe207d5bfc60907e54aa6e87ab47032a1ed5edfbcfc2f48330fd304c3f0ad38fc3f49330fd344c3f0bd3cf83f4b0c66ab863355cb21a5a590dc3ac866c564339aba1a0d5b0d15f04e9a1a7d5d0d57f0ad243627f19a6afc2f475901e5efbaf61fa5b98be09d3dfc3f48f30fd334cff0a6a87d2c6c6e274ddc2e8ab9460d8e4c923c68e9f5c32b9a664ec943193478f1ff368c9d4d1934795d43c3c62e2c831355371e11fea85651cf0fe13270e7bb464f4b8ea118f94d44c995c5233b2a4aa66cab8ea3a07ea7fea85ce3cd2e3b0eaea6867fffe5d48ff6f039d1ea7db3e1961fdbacc756bdbbc01821cdf9085ba376f588526eaa3945ccede913ed72d9934a666724969c9b8f06f7870ad993aa2ba7309fe6f5228f2a4c92593260f9b38b964e4c49ab1255d3ae37a9f6ad3804afc471b3730c79dde30715ae96f293528c4769ed300053e3fa761a47fff2ea4ffd640a7a9036fb6356cd990852e2e6918617949a42c93a6544d9e386cf8e4e8857b7d9785fb35a49a3737b09affd51067cd3b3660a18e1d1b46d8af21ce4667e12cf8ff31433ebfd44d0600", "isInternal": false }, { "selector": { "value": 2603445359 }, - "bytecode": "0x1f8b08000000000000ffed9d77701cc795c667911856581024981324db1423b8586430813953a6242b072650a44512140925cbb2244b72ce395b4e6739e77c9673ce39e7ecba2adf3f57bef255b9ae7bb69ff1a139b3c6aee6816fb06faa1eb6e76defbc5f7ff3a667b67b7690098acb9f8d655cb9d6d8638273177a7fc0bde61fddd29ee0b6f29c9c999470d6a484b336259c7529e1ac4f0967434a3827a58473724a38a724c899013e2edea929e3cda68cf782201d79db9812ce5c4a389b52c2392d259ccd29e19c9e12ce1929e16c4909e7cc9470ce4a09e7ec9470ce4909e7dc9470ce4b09e7fc94702e4809e7c294702e4a09e7e29470b6a684f3c294705e9420e70ae0a431f2c7bad7c7b9d725eef562f7bad4bd2e73afcb5d1bebdcbadde64a63ab8cb579efadb6ccc6ec6079c17bafc358a7b12e63ddeebd56f75e8fb15e637dc6fa8dad31b6d6d83a63eb8d6d709a6c34b6c9d866635b8c6d35b6cdd876633b8ced34b6cbd86e637b8ced35b6cfd825c61e6f6cbfb14b8d5d66ec72634f307685c772a5b1ab8c5d6dec1a63d71abbced8f5c66e3076a3b103c60e1a3b64ecb0b123c6068d1d357693b163c68e1b7ba2b19b8d9d3076d2d8296343c64e1bbbc5d81963678d0d1bbbd5d86d9e66b71bbbc3d89dc69ee471de65ecc9c6ee36f61463f718bbd7d87dc69e6aec7e630f187bd0d8d38c3dddd8338c3dd3d8b38c3ddbd8738c3dd7d8f38c3ddfd80b8cbdd0d88b8cbdd8d84b8cbdd4d8cb8cbddcd82b8cbdd2d8ab1c0b1d08af36f61a63af35f63a63af37f690b137187ba3b137197bb3b1b718fb0f636f35f6b0b1b7197bbbb177187ba7b177197bb7b1f7187bafb1f7197bbfb10f18fba0b10f19fbb0b18f18fba8b18f19fbb8b14f18fb4f639f34f688b14f19fbb4b1cf18fbacb1cf19fbbcb12f18fba2b12f19fbb2b1af18fbaaa7f9d78c7dddd8378c7dd3f9bee55ebfedead231ff1df7fa5df7fa3df7fa7df7fa03affe0fbdf51f79eb3f76af3f71af3f75af3f73af3f77afbf70afbf74afbf72afbf76afbf71afbf75afbf73afbf77af7f70af7f74af7f72af765e6dc5cc62797230b20c0409f5499d837d765c9dc4f6e7edec9c50ad7b8f5e5b9dbfceadd36bc6f9ebdd7abde76f70eb0dde7626bbf5c99e3fe7d6739e7f9a5b9fe6f9a7bbf5e99ebfc5adb778fe0bddfa85e0cfbaf78a0d2bbe585fad7365c047f95903be7ae7ab055f036d0e7c939caf1e7cb47f1bc037c5f926816faaf34d065fd6f9a69096c62e70be8120a95cc91fb4db6d4c7abb6e2e22973cef21bbdd2626de69c9f31eb6db6d66e0b5f931dd6dab11f26686f3e5c0d7e27c4de0735dd0bf8e39eb9be57ccde09bed7cd3c137c7f966806faef3b5806f9ef3cd04df7ce79b05be05ce371b7c0b9d6f0ef81639df5cf02d76be79e06b75bef9e0bbd0f91680ef22e75b083eea2f1781efb1ceb7187c746dd70a3ebacebb107c74cd7791f3d97e627206e2393ff551613cea9fc1f738ea9bc1b784fa65f05d4c7d32f896426cf22d837e857ccb9d8ffa28fb5ebf2b0f04491d1385f0185e93f476cd96ed76d725bfdd700e6c7d30a2f500c459035a6d70e504ef0f69c7d8741d4371c85f07e59d5097ea911e749e2176dbefaf75e50d253ed7ef7d2e0775d646b47f2048b6fdeb3c9e751e733db49f29678f6ace8e79293b67af84ba7eeed135cf44ccd93dc0917cce767468ce8e79293b6707a1ae9f7b74dd3b1173f61ae060c8d91e9e9c2de435678be36041109d7bf4dd6722e6ec31e0483e67bb3467c7be949db3f7415d3ff7e8fbef44ccd9db8023f99cede9d16b83312f65e7ecf3a1ae9f7b3416331173f601e060c8d943dacf8e79293b675f0b75fddca371c18998b32f028ee473b68f29673b346783e29c661044e71e8d514fc49c7d083892cfd9c33a3e3bf6a5ec9cfd18d4f5738fe64b2662cebedb95ed3cc3b7dc3cc302f07ddbf916026ff2b97da49d29b7db35b78bf77a0441748ed2dcdd44cced475cd9e6f177e1de03f27d8fee4b00dff79def22f0fdc0bb6783e918e8d66360ec6d2af718f819d4f57399e69127e231f06de060c8d91ecdd9b1b7a9dc9cfd0bd4f5738fee69988839fb4be060c8d95ecdd9b1b7a9dc9cfd3bd4f5736fa92b4fc49cfd2f57b6d70b3f71d70bcbc1f753e75b01be9f39df4af0fddcf95681ef17ced706be5f3adf6af0fdcaf9f2e0fbb5f3b583ef37ce5700df6f9daf037cbf73be4ef0fddef9bac0f707e7eb06df1f9daf077c7f72be5ef0fdd9f9fa9ccfde9347f75e7dd1f9ecbe258d068264f72ddd6349dba6f595e310bbc98bdd348eb19bbdd8cd11b15731c4ce420c5a32defa009457f1f2e473c083b156271fabc3b6bd2d187bdb57034f9ea1ed598831169e3cf0b427cf139e3f0bc96f37dcc76d9ea65988d506edea6068570662d1b6699de2e5c087fd7747046367f28c850cc4a26dd37a2730920fcf27745ea7e3c79e0f97644678198ea5f09a88e2d1f39f886335f8a9ce375b46d8963bb646781fcfaded9e8f292fc3bca058b46d5aa7788dd09ef6f1672c8c9531ef3172f511198845dbf663e3f1be6afc351bd37ecd81ef3cf449854afba446601b8feb94b87d2d2536c7f92a0331a86f23cd0be0a73ab3dc0f126cdfb61dfa5d86e3af50eef51bf607c9e771218fc7f558783a8087e3d8673a5ef378deff67906cae75795ab57b5ae5a04e27e8d7c5a05fa9eb108aa7cccaaccccaaccccaaccccaaccccaaccccaaccccaaccccaaccccaaccccaacccf299f1fe0b9cdfa47a2b853092af003c1ce3fce133a0dcb668fb765ee7c730af93fcbc45218f7396748fe132afcd7550e7af9991ba3f87f9747f6e10e73457f26a37a6fb2c1a8373e76239e710e3e681a3e62f5b138b5d38cc35df66ef51b3cf216bf3745d19a129c37d2aa334cd789ae27d8a2b3c1e9ba7736b47d838e6feca9d8b44ada89ce4dc1ede63c0bb5f8afd07e5424d30baffc0f34c77e2b147cf61d27c79b717bb0eeafc6f6664dfd0bda8f4bfeefc7b9e6c9d1e6fdbf49965e0eff1b63dcd7d9638eabdedb7c167a9ceff419ffaba9ae05f9a71dcff81fd72006dc56500ca386f9efc79b8388fdf51064f17f070f4334cd71b793c06929ec7eff1b48aba8ea13adda05f0f837e51d7a2b44ef194599995599995599995599995599995599995599995599995599995599995593e33fe569458b350af2084719cee7d08e733e8f92fb47d3baff39c9a91b8dcf37034e7b4dc6b731dd4f946cd48dd17b8726370eefd0e71fb92613eafe4bea4788dd01e9c0be2fa3d77a7c7d319a105955b138b5d9cc74f5ee39179fc0e4fd74284a65cc72bceb1a2a678bcb67b3c3837da189c7b6f4916b6331ef70ec5e505c5c363a9137c54c6df4773ec673c97f8f7f5503c9cbf7ed8693b2de0daf7853c67bfd10b6d1a08cecdef3aa8f32ee8fbdee3ca780f07de3bf248c4fbb4949aa726fd589e65972fcefbae01ce018883b1d7026b42b1db3176c619c5217f1d943f59335297ea911ea435b1db63849e0986ecfee7dabdcfe5a04e5f44fb078264dbdfeff1f47bcc769fbc1ff2ec1138ff73f5497d311a2d038da80e5e0771dd93e7f791fefd8d78df5e835707af59a8ce17a18f8abb7f34ea9e43aef358dc3d8751d7c65dc0e8b7d1bfcfb3daefd3fa21f41749dfa7f543c821bc4f2bf0b6bf1cb64f5c0d41fcb985eafcd4dbbe7f4d4e9fc1fbc0a8ce2fa0bf6872f72c3606e75e7fe33d53e3f1fd2aee3e698a87d735786cffbbb65be65ea83f902033e604b2e07502d5f993b7cf7a62b857477cf6af319f25ade83954f8fdc5d7cfead0079f19484487e231dfefb585f2ba0fda4275fedbbb064cfebaa5780d987c5b475f93503fd019d156aaf33f70acfd1daef1683fe1f78e86da73dfa7a5d43520e967db3cdecf07c6d8129e0f5c5f3b52d77fce2f695deef381bbbdcf497c3ef03f20cf1ae03e74aebe7a6d8c46cb4123aa83bf0da2f3083ecb37ea1cc3756f7fdc3926ea1994d83f37d58e3f9b3fae16758d4075e8b3788dd0e298a7399dfdbafe78219d2f93bc6f187f2bd10671f1b7126d4c7ae641b70158c7eb82f3193bcf143bee99d3f971881df7cce9f188ddecc56e1ec7d8aab96a2e497386672287bf3fc36796daa5d4752931e4e073352960ac4d01635d0a18eb53c0d89002c64929609c9c02c62929609c9a02c62c309ecf733b833e854af5e1da5fa5ae353036c3ff2e2994fbff3b98ff974ac96b1f8ccdf09d2ed4625530762df07b1ec7b31fcafd5f2fc480ffbb607a0a1867a480b125058c3353c0382b058cb353c03827058c7353c0382f058cf353c0b820058c0b53c0b828058c8b53c0d89a02c60b53c078510a181f9302c6c7a680f17129605ca28c8930aee0652c54ca687938fee7dfa3f99f630c3cf9a87b4e997e7b52f6ff5b637e3e697ba5cf8dc37b4b78ff27dca37bb61dc7bd23e53edbaed4ff5b65622c54cac8751f3bfe8e672c3cf8bbc8a8dfd63030162a65e4fafd0bfe466f2c3cdda0595784660c8c854a19b9ee952bf75e4ebca7bf3b423306c642a58c785f75823ca1663d65f0f482663d119a3130162a65e4ba2f390b31c6c2d3079af54668c6c058a89491e9b76da1667d65f0e06fc0fa223463602c54ca6879d63069d65f06cf1ad0ac3f4233498cc893f473b2fb236271fc66b0dcb61303324e4901e3d41430e27d121cfd57a9fb24fa79f52954aa0fd7fe2a759f04c666f87d4ca805fe1ee2df69b18e97a7e47d12187b3d9316f87b957fa7c57ae0e1f8fd4c16628c85871872f0b9e929609c9102c6961430ce4c01e3ac1430ce4e01e39c1430ce4d01e3bc1430ce4f01e38214302e4c01e3a214302e4e01237e5765b8562cf9fd65fd048f1df75d65a2c78efb5e32d1636b9e6b9e57436ccd73cdf36a88ad79ae795e0db135cf35cfab21b6e6b9e67935c4d63cd73caf86d89ae79ae79262a7618c5f19271e23f2b426c793c7b663ac01016d1f88e0c930b51d636d14d07662481be3861430ae4901a3ea58bc07b11246cbb389896763193c9b80673313cfa632783603cf96e479c29cda5c060f31e4e0736b52c0b821058caaa3ea28895175ac1e1d955119955119cf07631afa70654c453e162a65b43c5b93e70935db5206cf56d08c3ed7cecb58a894d1f26c4b9e27d46c6b193cdb40b3ad119a3130162a65b43cdb93e70935db5606cf76d06c5b84660c8c854a192dcf8ee47942cdb697c1b30334db1ea1190363a15246cbb333799e50b31d65f0ec04cd764468c6c058a894d1f2ec4a9e27d46c67193cbb40b39d119a3130162a65b43cbb93e70935db5506cf6ed06c5784660c8c854a192dcf9ee47942cd7697c1b30734db1da1190363a15246cbb337799e50b33d65f0ec05cdf644682695714d0a1837a4809159c742a58c96671f13cfde3278f601cf254c3cfbcae0b904781e9f3c4f98539794c1430c39f8dc9a14306e4801a3eaa83a4a62541dab4747655446652c8f7120058cbaaf95512a23c3f7ab92bfa1b96482c76ef262375549ecb8dfd04cf4d89ae79ae7d5105bf35cf3bc1a626b9e6b9e57436ccd73cdf36a88ad79ae795e0db135cf35cfab21b6e6b9e67935c4d63cd73caf86d89ae79ae7d5105bf35cf3bc1a626b9e6b9e57436ccd73cdf36a88ad79ae795e0db135cf35cfab21b6e6b9e67935c4d63cd73caf86d89ae79ae7d5105bf35cf3bc1a626b9e6b9e57436ccd73cdf36a88ad79ae795e0db135cf35cfab21b6e6b9e6b9a4d8fb938f5d28f71933fb8187e399374cedccdbed5eeab6f5cf04f5b35a5de6697589a7550eea5c0afa5dc6a05f06e2d2b6699de295cb7cb10066a6d805dbbf4c81f6538c0d9e1e36fee54c6d8febeb2f9fe0b1e3fafa891e3baeaf9fe8b135cf35cfab21b6e6b9e67935c4d63cd73c97121bcbf5c1c8753b3dffd46ee309ae5ce7d69195fc54e7f1938aafd3023d863862eb31a4e78a6a88ad79ae795e0db135cf35cfab21b6e6b9e67935c4d63cd73caf86d89ae79ae7d5105bf35cf3bc1a626b9ecbcbf31cbc5f330e3c81c71394e059248c678e309ee9c278a608e359268ca75618cf7a613ce3713f5f393cbb84f16c17c6d32b8c67b1309ee5c278e60ae32908e399218ca74b18cf54613c5b84f1d409e3d9288c272f8c678f309e25c278e609e36911c6b342184f56184fbd309e4dc278560be3592a8c67af309eddc278fa85f1ec10c6d3278ca75b18cf7c613c1dc278660ae36913c67381309e46613c5b85f13408e359258c679f309eb5c2781608e399258c27278ca74918cf24613ceb84f1ec14c6b34d184f8f309e85c2783a85f1cc16c6b35218cf34613ccdc278360be3992c8c272380271b9cfb4cb22cbcbf1f7c35de67edf540f3cc91f7af70fe1af8cc95ae5c1bb1ed2bc047bf0dbf32e2b3a8d315d0960157ce3fba25d409630dc03ac56b048e2b85f04c16c6b359184fb3309e69c278560ae3992d8ca75318cf42613c3dc278b609e3d9298c679d309e49c2789a84f1e484f1cc12c6b34018cf5a613cfb84f1ac12c6d3208c67ab309e46613c1708e36913c63353184f87309ef9c278ba85f1f409e3d9218ca75f18cf6e613c7b85f12c15c6b35a18cf26613cf5c278b2c2785608e36911c6334f18cf12613c7b84f1e485f16c14c653278c678b309ea9c278ba84f1cc10c65310c6335718cf72613c8b85f1f40ae3d92e8c6797309efdc278d60be3a915c6b34c18cf14613cd385f1cc11c6b348184f4d040fc3ffbf0c79e8fe35da36adef17129b613f84fff7f32aa6365dedb655efb64bfc14af0eea5ce33a0a7b7f157e96b8fcfb0df1dc7435687435535b687f64bcfdc31d1befab0c8021f0f409227838ee47656ae7a83c4cf0ffcfe6ad56d7785af9fb2e0775ae02fdae61d02f2ab7ff750c000f5de7106b16eaad17c248becb9979b2d0665a4a1d03d7000fc731c9d4ce3057aff5dab43e4277aa83b97a2d433ba38e1d5abf167836ba32b166a1de46218ce4bb9a99270b6da6a554ae5e0b3c1cc70e533bc35cbdce6bd3c608dda90ee6ea750ced8c3a7668fd3ae0d9e4cac49a857a9b843092ef1a5e9ece2cb4999652b97a1df0701c3b4ced0c73f57aaf4d9b2274a73a98abd733b433ead8a1f5eb613f28b33247315b1efa9d0eb166a1de66218ce4bb9695a7339f8536d352aa1fbb1e7838fa7926ddc37eec06af4d9b2374a73a98ab3730b433ead8a1f51b2262b706c96a71e318b4b83182e7c671d682e295cb7c550a995567d5398e5975569de3985567d5398e5975569de3985567d5398e5975569de3985567d5398e5975569de39855e7f161569d55e73866d559758e63569d55e73866d559758e63569d55e73866d559758e63569d55e73866d559758e63569d55e73866d559758e63569d55e73866d5b93266cb43cf4522d62cd4db2284917cd7f1f284bf0bda128c5e32defa00946f049eeb19f4616a67780ff901af4d5b2274a73a787c1d606867d4b143eb07603f1c2883f9861432abce95315b1e7afe38b166a1de56218ce4bb9e9727ecc7b606a39752fdd801e0e1e8e799da19f66307bd366d8dd09deae0f17590a19d51c70ead533c6556e63866cb43ff078858b3506f9b1046f2ddc8ca53087fdfb82d18bd94eac70e02cf81c4798afd1883ee613f76c86bd3b608dda90ee6ea218676461d3bb47e08f64339cc37a4905975569de3985567d5398e5975569de3985567d5398e5975569de3985567d5398e5975569de3985567d5398e5975569de39855e7ead1d9f2d0ff8321d62cd4db2e84917c0758793ac27987edc1e825e3ad0f40f910f01c4c9ca738efc0a07b38ef70d86bd3f608dda90e1e5f8719da1975ecd0fa61d80f139df98614326b6e8c0fb3e68632c7316b6e28731cb3e68632c7316b6e28731cb3e68632c7316b6e28731cb3e68632c7316b6e28731cb3e68632c7316b6e28731cb3e68632c7316b6e28731cb3e68632c7316b6e28731cb384dcb03c3b5c9958b3506f871046f21de4e5099f7bb02318bd94ba6fe730f01c62d087a99de17d3b47bc36ed88d09deae0f17584a19d51c70ead1f81fda0ccca1cc56c7976ba32b166a1de4e218ce43bc4cb13f6633b83d14ba97eec08f070f4f34ced0cfbb141af4d3b2374a73a98ab830ced8c3a76687d10f683322b7314b3e5d9e5cac49a857abb843092ef302f4fd88fed0a462fa5fab141e0e1e8e799da19f66347bd36ed8ad09dea60ae1e656867d4b143eb47613f28b33247315b9eddae4cac59a8b75b0823f98e30f364a1cdb494eac78e020f473fcfd4ceb01fbbc96bd3ee08dda90ee6ea4d0ced8c3a7668fd26e0d9e3cac49a857a7b8430926f9099270b6da6a554aede043c1cc70e533bc35c3de6b5694f84ee540773f518433ba38e1d5a3f063c7b5d9958b3506faf1046f21d65e6c9429b692995abc78087e3d8616a6798abc7bd36ed8dd09dea60ae1e676867d4b143ebc781679f2b136b16eaed13c2483eecc7f631f1347a3c8d115a4cc4d84d5eeca62a89ddecc56eae92d89ae79ae7d5105bf35cf3bc1a626b9e6b9e5743ec6acd35d5bc3a35cf9c47cd33e751f38c6a2e52f37f2617bb2b178c2c35108b617cae7d2c638ec8b34818cf1c613cd385f14c11c6b34c184fad309e5e613c8b85f12c17c63357184f4118cf0c613c5dc278a60ae3a913c69317c6b34418cf3c613c2dc2785608e3c90ae3a917c6b35a18cf52613cfdc278fa84f1740be3992f8ca74318cf4c613c6dc2782e10c6d3288ca74118cf2a613c6b85f12c10c6334b184f4e184f93309efdc2782609e359278ca74718cf42613c9dc278660be359298c679a309e66613c9385f16404f06483737fdb81bf27a8051fdddfbf0f7c4f74e5fde0ab898841db390e3e1acfa56dd8f3d58299e732d4c0676e8ee07a62443c8a7373c467c743778c3500eb14af11386e16c23359184fb3309e69c278560ae3992d8ca75318cf42613c3dc278d609e399248c67bf309e26613c39613cb384f12c10c6b35618cf2a613c0dc2781a85f15c208ca74d18cf4c613c1dc278e60be3e916c6d3278ca75f18cf52613cab85f1d40be3c90ae359218ca74518cf3c613c4b84f1e485f1d409e3992a8ca74b18cf0c613c05613c7385f12c17c6b358184faf309e5a613ccb84f14c11c6335d18cf1c613c8b84f1d444f0ec67e2897b9ec27e01b1edb8375d0bd2985816de1f8fdf29edf71869fd1830920fefd3cd33f1c43d83222f20b6d5623594ed9285f7f177265c3995f718693d2aa7f03ecbd54c3c71cfed582d20b6d582e606e81e802cbc8ff75573e5d46a8f91d6a372aa999727fcff01ab82d14ba97b8df098e3d8874cedcce3f197e03334229f91bccad32a0775c6e3bee2b8fe80e229b332c7315b1e9afb22563c9f8dc7ef96c6c218757e65e009fbc7b660f452aa7f3c063c1ce70fa67686fdd809af4d6d11ba531dccd5130ced8c3a7668fd4444ecd620592d4e8e418b93113c27c7590b8a572ef3fe14324bd0d9f2d0bd9ac49a857a2b8530922fcfcb13f68f2b83d14ba9fef124f0709c3f98da19f609a7bc36ad8cd09deae0f1758aa19d51c70ead9f82fd500ef3891432abce95315b1e9aa321d62cd42b086124df31569e423e0b6da6a5543f760a7838fa7926ddc37e6cc86b53214277aa83c7d710433ba38e1d5a1f82fda0cccaaccccaaccccaaccccaaccccaaccccaaccccaaccccaaccccaaccccaacccb2992d0ffd769858b350af430823f94eb2f214e71d3a82d14ba9798721e03995384f71de8141f770dee1b4d7a68e08dda90ee6ea698676461d3bb47e1af683322bb3322bb3322bb3322bb3322bb3322bb3322bb3322bb3322bb3322bb332cb66b63cf40c7962cd42bd4e218ce43bc5cb13fe6eab3318bd949a77380d3c1cf3324ced0ce71d6ef1dad419a13bd5c15cbd85a19d51c70eaddf02fb419995398ad9f2d0b30789350bf5ba8430926f8895a7387fda158c5e4af563b7000f473fcfa47bd88f9df1dad415a13bd5c15c3dc3d0cea86387d6cfc07e2887f9440a995567d5398e5975569de3985567d5398e5975569de3985567d5398e5975569de3985567d5398e5975569de3985567d5398e5975ae1e9d2d0ffd4f4362cd42bd6e218ce43bcdcad311ce3b7407a39752f30e678087635e8649f770dee1acd7a6ee08dda90e1e5f6719da1975ecd0fa59d80f139df9440a993537c68759734399e398353794398e59734399e398353794398e59734399e398353794398e59734399e398353794398e59734399e398353794398e59734399e398353794398e59734399e398353794398e59426e589e1e5726d62cd4eb11c248be5b7879c2e71ef404a39752f7ed9c059e330cfa30b533bc6f67d86b534f84ee54078faf618676461d3bb43e0cfb419995398ad9f2f4ba32b166a15eaf1046f29d61e6c9429b6929d58f0d030f473fcfd4ceb01fbbd56b536f84ee540773f5568676461d3bb47e2bf0f4b932b166a15e9f1046f2e139ae8f89a7d1e3698cd0e27cc5b65af4bbf205ee350beff7032357dfd2e731d23ae638f91a81a79f89a7c9e3698ad0e27cc5b65aac85b25db2f0fe5a60e4caa97e8f91d6a372aa0978d632f1347b3ccd115a9cafd8568b75ae3ccdbd66e1fd75c0c895536b3d465a8fcaa966e059c7c413d727ad1b87d871c7d778c48ecb95f188ad9aabe6aab96acea979e63c6a9e398f9a675473519a335c478563a7142300065c06a08cdf1538ae3d99da998ffa3eb6ce6b137e1fc33187f3f57d439995398e9969dca233ebc5267d028f879661662dc6730cb2df6b93b431c872994fa4905975ae8cd9c6be2df9d89d592f36e913783cb4dcc6ac05533bc3fee0f6205a638a97833a98a7b733b433037169dbb47e3bec8772984fa4905975ae8cd9c6be23f1d8c567b3636cd227f07868b983590b9e7616fb833b83688d295e0eea609edec9d0ce0cc4a56dd3fa9db01f945999955999955999955999955999955999955999955999955999955999955936b38dfda4c46317c7ef3136e913783cb43c89590b9e7616c7efef0aa235a67839a883fbfc2e867666202e6d9bd6ef82fda0cccaaccccaaccccaaccccaaccccaaccccaaccccaaccccaaccccaaccccaacccb2996dec27271f3bfc3d0ec6267d028f879627336bc1d4ce70fcfeee205a638a97833ab8cfef66686706e2d2b669fd6ed80fcaaccc51cc36f653128f5d9ccfc3d8a44fe0f1d0f214662d78da59ec0fee09a235a67839a883fbfc1e867666202e6d9bd6ef81fd500ef3891432abceaa731cb3eaac3ac731abceaa731cb3eaac3ac731abceaa731cb3eaac3ac731abceaa731cb3eaac3ac731abceaa731cb3ea5c3d3adbd8f7261ebb231cbfc7d8a44fe0f1d0722fb3163ced2c8edfdf17446b4cf1725007f3f43e867666202e6d9bd6295e35309f4821b3e6c6f8306b6e28731cb3e68632c7316b6e28731cb3e68632c7316b6e28731cb3e68632c7316b6e28731cb3e68632c7316b6e28731cb3e68632c7316b6e28731cb3e68632c7316b6e28731cb3e68632c7314bc80d1bfba9c9c70e7fcf8eb1499fc0e3a1e5a9cc5a30b533bcffe5fe205a638a97833a98a7f733b433037169dbb47e3fec076556e628661bfb0186d8592f36e913783cb43cc0ac05533bc3fee0c1205a638a97833ab8cf1f64686706e2d2b669fd41888d7a27143bbc079262d4b857eb7b9a2bd782efe9ae5c07be67b8723df89ee9ca0de07b962b4f02dfb3a13de47b8e2baf00df735d791df89ee7ca6bc1f77c57ee07df0b5cb90f7c2f74e561f0bdc8956f05df8b5df936f0bdc4956f07df4b5df90ef0bdcc95ef04dfcb5df949e07b852bdf05be57baf293c1f72a57be1b7caf76e5a780ef35ae7c0ff85eebcaf782ef75ae7c1ff85eefca4bc0f75084ef0daefc54f0bdd195ef07df9b5c793ff8deecca53c0f716579e0abeff8032bdbed5952f00dfc3aedc08beb7b9720e7c6f77e526f0bdc395a781ef9daedc0cbe77b9f274f0bddb956780ef3daedc02bef7baf24cf0bdcf956781effdae3c1b7c1f70e539e0fba02bcf05df875c791ef83eeccaf3c1f711575e00be8fbaf242f07dcc951781efe3aebc187c9f7065dcbfffe9ca0f808ffa9507c147fdcad3c047fdcad3c147fdca33c047fdca33c147fdcab3c047fdcab3c14779f71cf051de3d177c9477cf031fe5ddf3c14779f702f051debd107c94772f021fe5dd8bc14779f712f051debd147c94772f031fe5ddcbc14779f70af051debd127c9477af021fe5ddabc14779f71af051debd167c9477af031fe5ddebc14779f710f828efde003ecabb3782afd595df04be0b5df9cde0bbc895df02bec7b832f6338f75e5b782ef71aefc30f8a82f7c1bf82e76e5b7836fa92bbf037ccb5cf99de05beecaef02df0a577e37f856baf27bc0b7ca95df0bbe36577e1ff856bbf2fbc19777e50f80afdd953f08be822b7f087c1daefc61f075baf247c0d7e5ca1f055fb72b7f0c7c3daefc71f0f5baf227c047e771ea67ecf16c8f41d28134b23e6a735b445bc83719da3210247b4d47b168dbb4de018cb40f0ae3cf58182b63bbc76879ba1834c3bca2a5d4f78f2ee0e964e0616a67f8fda3db6b5387d7a61cd4b918dad9cdd0ce0cc4a56dd37a37c4e6d8e7a845bddbee524f8b3aa8f3077792b3e7ce523ad2366cfe1622dad2c7dc16da36f54b7de310bbc78b9df762637f4c4ba9e3ab07987b1998ed76fb93df6e787cad71dba29ca2387968d35ad020a93661ec8c338a43fe3a28ffa365a42ed5233de8fc45ec3697695f22bbffb92eef7339a8d317d1fe8120d9f6f77b3cfd1eb3dd277f6b19e160381ec21ce8f338683d0fdaf5c768d707da511d3cff1598b4ebf5787abdd89687ae71bac147d70ac48fd7596de3c0edf77bdd11dce4eb01c6a86b9df6e4194b5eebb40323f97a81a78749337f5f2ff5f4c1f3728357873e5b07759adc97bd69c1e8ef1f54d71e774b3223eda2efe0ff0c92edd31b18f4c2f18100f4093c0d03d08bda59cfc03335181923383b3c74e6e04d83970e1e3c9201b43a0f135f3311cda8011f966b237c41307a2804876469280487646b3c59700886eadbaf52b65934dc3078f2f8f0134e0d9e3a7ce6ced3c38347f60cdd84d4f51e3d92c6b50049d147cbe46064d066204836791abc58a5926732bc4e62e0616a6778d29be2b5a9c16b530eead4c37b5318da9981b8b46d5ac70160f26176d2fb386150e3b505b3780abcfafb36d10651c0c7c0f6330ecebe57e7846d70f0242ef5187614d15ec9d91d6147056d6f6d47fdec616747f5ec8591edc8ed289d1d95b3a37076d4cd8eb2d951353b8a6647cdec28991d156b0d8aa35e1701cf1781d18e6ad9512c3b6a65bf49dab3821d85b2a34e7694c95e4dd86f29f60c6caf38edd5913d23da33a1fd3665bf59db338c3d7bdb33933d9bd8ab237b5564af62ed559d9d99596f6c83d37aa3b14dc6361bdb626cabb16dc6b61bdb616ca7b15dc6761bdb636cafb17dc62e31f6f8a038a27ca9b1cb8c5d6eec09c6ae3076a5b1ab8c5d6dec1a63d71abbced8f5c66e3076a3b103c60e1a3b64ecb0b123c6068d1d357693b163c68e1b7ba2b19b83e21d1e278d9d323664ecb4b15b8c9d31763628ce12d959213b0b64677dec2c8f9dd5b1b33876d6c6ced2d859193b0b63675dee0d8ab32a7676c4ce86d891703bf26d47baedc8f63382e2c8b51da97e76501c89b623cf76a4d98e2cdb91643b726c478aedc8b01d09b623bf76a4d78eecda915c3b726b476aedc8ac1d89b523af76a4d58eac3e1414474eed48a91d19b523a176e4d38e74da91cd8783e2c8a51da9b423937624d28e3cda91463bb2684712edc8a11d29b423837624d08efcd9913e3bb26747f2ecc89d1da9b323737624ee93c61e31f629639f36f619639f35f639639f37f685a098935f32f665635f31f655635f33f67563df30f64d63df32f66d63df31f65d63df33f67d633f30f643633f32f663633f31f653633f33f67363bf30f64b63bf32f66b63bf31f65b63bf33f67b637f30f647637f32f6e76064d41e3b8abfbb151a413e383c3c78f2f470ebf050ebc95b4f0c1f3f7de2ced6db8f0f1f6b1dba6df0ccd11343b7e387dfeaba261a1edf78e6ccc13b5b8f9f3a327847ebd0adc3ad43475b0f0ddd7aeac859fcd017dc87169c1bf1e09123f1c17e50f328487f5261d03fbacfd1c4c3ced26dfb4b2582fcad920fcda8adac4197b8330b7d2bbdac7815d77af6c4d0706bbef594f97bf084f9cce091b6567cefac11f9ec70ebd9e18367865b8f9e193ad9dade86dbbd7a4a058df87d4b051fcacd1c7bcb83ff079bac954d69010400", + "bytecode": "0x1f8b08000000000000ffed9d77701cc795c667911856581024981324db1423b8586430813953a6242b072650a44512140925cbb2244b72ce395b4e6739e77c9673ce39e7ecba2adf3f57bef255b9ae7bb69ff1a139b3c6aee6816fb06faa1eb6e76defbc5f7ff3a667b67b7690098acb9f8d655cb9d6d8638273177a7fc0bde61fddd29ee0b6f29c9c999470d6a484b336259c7529e1ac4f0967434a3827a58473724a38a724c899013e2edea929e3cda68cf782201d79db9812ce5c4a389b52c2392d259ccd29e19c9e12ce1929e16c4909e7cc9470ce4a09e7ec9470ce4909e7dc9470ce4b09e7fc94702e4809e7c294702e4a09e7e29470b6a684f3c294705e9420e70ae0a431f2c7bad7c7b9d725eef562f7bad4bd2e73afcb5d1bebdcbadde64a63ab8cb579efadb6ccc6ec6079c17bafc358a7b12e63ddeebd56f75e8fb15e637dc6fa8dad31b6d6d83a63eb8d6d709a6c34b6c9d866635b8c6d35b6cdd876633b8ced34b6cbd86e637b8ced35b6cfd825c61e6f6cbfb14b8d5d66ec72634f307685c772a5b1ab8c5d6dec1a63d71abbced8f5c66e3076a3b103c60e1a3b64ecb0b123c6068d1d357693b163c68e1b7ba2b19b8d9d3076d2d8296343c64e1bbbc5d81963678d0d1bbbd5d86d9e66b71bbbc3d89dc69ee471de65ecc9c6ee36f61463f718bbd7d87dc69e6aec7e630f187bd0d8d38c3dddd8338c3dd3d8b38c3ddbd8738c3dd7d8f38c3ddfd80b8cbdd0d88b8cbdd8d84b8cbdd4d8cb8cbddcd82b8cbdd2d8ab1c0b1d08af36f61a63af35f63a63af37f690b137187ba3b137197bb3b1b718fb0f636f35f6b0b1b7197bbbb177187ba7b177197bb7b1f7187bafb1f7197bbfb10f18fba0b10f19fbb0b18f18fba8b18f19fbb8b14f18fb4f639f34f688b14f19fbb4b1cf18fbacb1cf19fbbcb12f18fba2b12f19fbb2b1af18fbaaa7f9d78c7dddd8378c7dd3f9bee55ebfedead231ff1df7fa5df7fa3df7fa7df7fa03affe0fbdf51f79eb3f76af3f71af3f75af3f73af3f77afbf70afbf74afbf72afbf76afbf71afbf75afbf73afbf77af7f70af7f74af7f72af765e6dc5cc62797230b20c0409f5499d837d765c9dc4f6e7edec9c50ad7b8f5e5b9dbfceadd36bc6f9ebdd7abde76f70eb0dde7626bbf5c99e3fe7d6739e7f9a5b9fe6f9a7bbf5e99ebfc5adb778fe0bddfa85e0cfbaf78a0d2bbe585fad7365c047f95903be7ae7ab055f036d0e7c939caf1e7cb47f1bc037c5f926816faaf34d065fd6f9a69096c62e70be8120a95cc91fb4db6d4c7abb6e2e22973cef21bbdd2626de69c9f31eb6db6d66e0b5f931dd6dab11f26686f3e5c0d7e27c4de0735dd0bf8e39eb9be57ccde09bed7cd3c137c7f966806faef3b5806f9ef3cd04df7ce79b05be05ce371b7c0b9d6f0ef81639df5cf02d76be79e06b75bef9e0bbd0f91680ef22e75b083eea2f1781efb1ceb7187c746dd70a3ebacebb107c74cd7791f3d97e627206e2393ff551613cea9fc1f738ea9bc1b784fa65f05d4c7d32f896426cf22d837e857ccb9d8ffa28fb5ebf2b0f04491d1385f0185e93f476cd96ed76d725bfdd700e6c7d30a2f500c459035a6d70e504ef0f69c7d8741d4371c85f07e59d5097ea911e749e2176dbefaf75e50d253ed7ef7d2e0775d646b47f2048b6fdeb3c9e751e733db49f29678f6ace8e79293b67af84ba7eeed135cf44ccd93dc0917cce767468ce8e79293b6707a1ae9f7b74dd3b1173f61ae060c8d91e9e9c2de435678be36041109d7bf4dd6722e6ec31e0483e67bb3467c7be949db3f7415d3ff7e8fbef44ccd9db8023f99cede9d16b83312f65e7ecf3a1ae9f7b3416331173f601e060c8d943dacf8e79293b675f0b75fddca371c18998b32f028ee473b68f29673b346783e29c661044e71e8d514fc49c7d083892cfd9c33a3e3bf6a5ec9cfd18d4f5738fe64b2662cebedb95ed3cc3b7dc3cc302f07ddbf916026ff2b97da49d29b7db35b78bf77a0441748ed2dcdd44cced475cd9e6f177e1de03f27d8fee4b00dff79def22f0fdc0bb6783e918e8d66360ec6d2af718f819d4f57399e69127e231f06de060c8d91ecdd9b1b7a9dc9cfd0bd4f5738fee69988839fb4be060c8d95ecdd9b1b7a9dc9cfd3bd4f5736fa92b4fc49cfd2f57b6d70b3f71d70bcbc1f753e75b01be9f39df4af0fddcf95681ef17ced706be5f3adf6af0fdcaf9f2e0fbb5f3b583ef37ce5700df6f9daf037cbf73be4ef0fddef9bac0f707e7eb06df1f9daf077c7f72be5ef0fdd9f9fa9ccfde9347f75e7dd1f9ecbe258d068264f72ddd6349dba6f595e310bbc98bdd348eb19bbdd8cd11b15731c4ce420c5a32defa009457f1f2e473c083b156271fabc3b6bd2d187bdb57034f9ea1ed598831169e3cf0b427cf139e3f0bc96f37dcc76d9ea65988d506edea6068570662d1b6699de2e5c087fd7747046367f28c850cc4a26dd37a2730920fcf27745ea7e3c79e0f97644678198ea5f09a88e2d1f39f886335f8a9ce375b46d8963bb646781fcfaded9e8f292fc3bca058b46d5aa7788dd09ef6f1672c8c9531ef3172f511198845dbf663e3f1be6afc351bd37ecd81ef3cf449854afba446601b8feb94b87d2d2536c7f92a0331a86f23cd0be0a73ab3dc0f126cdfb61dfa5d86e3af50eef51bf607c9e771218fc7f558783a8087e3d8673a5ef378deff67906cae75795ab57b5ae5a04e27e8d7c5a05fa9eb108aa7cccaaccccaaccccaaccccaaccccaaccccaaccccaaccccaaccccaaccccaacccf299f1fe0b9cdfa47a2b853092af003c1ce3fce133a0dcb668fb765ee7c730af93fcbc45218f7396748fe132afcd7550e7af9991ba3f87f9747f6e10e73457f26a37a6fb2c1a8373e76239e710e3e681a3e62f5b138b5d38cc35dfd6e498db3c5d574668ca709fca284d339ea6789fe20a8fc7e6e9dcda11368eb9bf72e722512b2a2739b787f718f0ee9762ff41b950138cee3ff03cd39d78ecd17398345fdeedc5ae833aff9b19d937742f2afdaf3bff9e275ba7c7db367d6619f87bbc6d4f739f258e7a6ffb6df059aaf37fd0a7beae26f897661cf77f60bf1c405b71198032ce9b277f1e2ecee37794c1d3053c1cfd0cd3f5461e8f81a4e7f17b3cada2ae63a84e37e8d7c3a05fd4b528ad533c6556666556666556666556666556666556666556666556666556666556666596cf8cbf1525d62cd42b08611ca77b1fc2f90c7afe0b6ddfceeb3ca766242ef73c1ccd392df7da5c0775be513352f705aedc189c7bbf43dcbe6498cf2bb92f295e23b407e782b87ecfdde9f174466841e5d6c46217e7f193d778641ebfc3d3b510a129d7f18a73aca8291eafed1e0fce8d3606e7de5b9285ed8cc7bd43717941f1f058ea041f95f1f7d11cfb19cf25fe7d3d140fe7af1f76da4e0bb8f67d21cfd96ff4429b068273f3bb0eeabc0bfabef7b832dec381f78e3c12f13e2da5e6a9493fdbe6c49f65972fcefbae01ce018883b1d7026b42b1db3176c619c5217f1d943f59335297ea911ea435b1db63849e0986ecfee7dabdcfe5a04e5f44fb078264dbdfeff1f47bcc769fbc1ff2ec1138ff73f5497d311a2d038da80e5e0771dd93e7f791fefd8d78df5e835707af59a8ce17a18f8abb7f34ea9e43aef358dc3d8751d7c65dc0e8b7d1bfcfb3daefd3fa21f41749dfa7f543c821bc4f2bf0b6bf1cb64f5c0d41fcb985eafcd4dbbe7f4d4e9fc1fbc0a8ce2fa0bf6872f72c3606e75e7fe33d53e3f1fd2aee3e698a87d735786cffbbb65be65ea83f902033e604b2e07502d5f993b7cf7a62b857477cf6af319f25ade83954f8fdc5d7cfead0079f19484487e231dfefb585f2ba0fda4275fedbbb064cfebaa5780d987c5b475f93503fd019d156aaf33f70acfd1daef1683fe1f78e86da73dfa7a5d43520e967db3cdecf07c6d8129e0f5c5f3b52d77fce2f695deef381bbbdcf497c3ef03f20cf1ae03e74aebe7a6d8c46cb4123aa83bf0da2f3083ecb37ea1cc3756f7fdc3926ea1994d83f37d58e3f9b3fae16758d4075e8b3788dd0e298a7399dfdbafe78219d2f93bc6f187f2bd10671f1b7126d4c7ae641b70158c7eb82f3193bcf143bee99d3f971881df7cce9f188ddecc56e1ec7d8aab96a2e497386672287bf3fc36796daa5d4752931e4e073352960ac4d01635d0a18eb53c0d89002c64929609c9c02c62929609c9a02c62c309ecf733b833e854af5e1da5fa5ae353036c3ff2e2994fbff3b98ff974ac96b1f8ccdf09d2ed4625530762df07b1ec7b31fcafd5f2fc480ffbb607a0a1867a480b125058c3353c0382b058cb353c03827058c7353c0382f058cf353c0b820058c0b53c0b828058c8b53c0d89a02c60b53c078510a181f9302c6c7a680f17129605ca28c8930aee0652c54ca687938fee7dfa3f99f630c3cf9a87b4e997e7b52f6ff5b637e3e697ba5cf8dc37b4b78ff27dca37bb61dc7bd23e53edbaed4ff5b65622c54cac8751f3bfe8e672c3cf8bbc8a8dfd63030162a65e4fafd0bfe466f2c3cdda0595784660c8c854a19b9ee952bf75e4ebca7bf3b423306c642a58c785f75823ca1663d65f0f482663d119a3130162a65e4ba2f390b31c6c2d3079af54668c6c058a89491e9b76da1667d65f0e06fc0fa223463602c54ca6879d63069d65f06cf1ad0ac3f4233498cc893f473b2fb236271fc66b0dcb61303324e4901e3d41430e27d121cfd57a9fb24fa79f52954aa0fd7fe2a759f04c666f87d4ca805fe1ee2df69b18e97a7e47d12187b3d9316f87b957fa7c57ae0e1f8fd4c16628c85871872f0b9e929609c9102c6961430ce4c01e3ac1430ce4e01e39c1430ce4d01e3bc1430ce4f01e38214302e4c01e3a214302e4e01237e5765b8562cf9fd65fd048f1df75d65a2c78efb5e32d1636b9e6b9e57436ccd73cdf36a88ad79ae795e0db135cf35cfab21b6e6b9e67935c4d63cd73caf86d89ae79ae79262a7618c5f19271e23f2b426c793c7b663ac01016d1f88e0c930b51d636d14d07662481be3861430ae4901a3ea58bc07b11246cbb389896763193c9b80673313cfa632783603cf96e479c29cda5c060f31e4e0736b52c0b821058caaa3ea28895175ac1e1d955119955119cf07631afa70654c453e162a65b43c5b93e70935db5206cf56d08c3ed7cecb58a894d1f26c4b9e27d46c6b193cdb40b3ad119a3130162a65b43cdb93e70935db5606cf76d06c5b84660c8c854a192dcf8ee47942cdb697c1b30334db1ea1190363a15246cbb333799e50b31d65f0ec04cd764468c6c058a894d1f2ec4a9e27d46c67193cbb40b39d119a3130162a65b43cbb93e70935db5506cf6ed06c5784660c8c854a192dcf9ee47942cd7697c1b30734db1da1190363a15246cbb337799e50b33d65f0ec05cdf644682695714d0a1837a4809159c742a58c96671f13cfde3278f601cf254c3cfbcae0b904781e9f3c4f98539794c1430c39f8dc9a14306e4801a3eaa83a4a62541dab4747655446652c8f7120058cbaaf95512a23c3f7ab92bfa1b96482c76ef262375549ecb8dfd04cf4d89ae79ae7d5105bf35cf3bc1a626b9e6b9e57436ccd73cdf36a88ad79ae795e0db135cf35cfab21b6e6b9e67935c4d63cd73caf86d89ae79ae7d5105bf35cf3bc1a626b9e6b9e57436ccd73cdf36a88ad79ae795e0db135cf35cfab21b6e6b9e67935c4d63cd73caf86d89ae79ae7d5105bf35cf3bc1a626b9e6b9e57436ccd73cdf36a88ad79ae795e0db135cf35cfab21b6e6b9e6b9a4d8fb938f5d28f71933fb8187e399374cedccdbed5eeab6f5cf04f5b35a5de6697589a7550eea5c0afa5dc6a05f06e2d2b6699de295cb7cb10066a6d885a660f4714d3136787ad83a9733b53daeafbf7c82c78eebeb277aecb8be7ea2c7d63cd73caf86d89ae79ae7d5105bf35cf35c4a6c2cd70723d7edf4fc53bb8d27b8729d5b4756f2539dc74f2abe4e0bf418e288adc7909e2baa21b6e6b9e67935c4d63cd73caf86d89ae79ae7d5105bf35cf3bc1a626b9e6b9e57436ccd73cdf36a88ad792e2fcf73f07ecd38f0041e4f50826791309e39c278a60be399228c6799309e5a613ceb85f18cc7fd7ce5f0ec12c6b35d184faf309ec5c278960be3992b8ca7208c6786309e2e613c5385f16c11c653278c67a3309ebc309e3dc2789608e399278ca74518cf0a613c59613cf5c2783609e3592d8c67a9309ebdc278760be3e917c6b343184f9f309e6e613cf385f17408e399298ca74d18cf05c2781a85f16c15c6d3208c6795309e7dc278d60ae359208c6796309e9c309e26613c9384f1ac13c6b35318cf36613c3dc278160ae3e914c6335b18cf4a613cd384f1340be3d92c8c67b2309e8c009e6c70ee33c9b2f0fe7ef0d5789fb5d703cd3347debfc2f96be03357ba726dc4b6af001ffd36fcca88cfa24e57405b065c39ffe89650278c3500eb14af1138ae14c2335918cf66613ccdc278a609e359298c67b6309e4e613c0b85f1f408e3d9268c67a7309e75c2782609e36912c69313c6334b18cf02613c6b85f1ec13c6b34a184f83309eadc2781a85f15c208ca74d18cf4c613c1dc278e60be3e916c6d3278c6787309e7e613cbb85f1ec15c6b35418cf6a613c9b84f1d40be3c90ae359218ca74518cf3c613c4b84f1ec11c69317c6b351184f9d309e2dc278a60ae3e912c63343184f4118cf5c613ccb85f12c16c6d32b8c67bb309e5dc278f60be3592f8ca75618cf32613c5384f14c17c6334718cf22613c35113c0cffff32e4a1fbd768dbb4be5f486c86fd10fedfcfab98da74b5db56bddb2ef153bc3aa8738deb28ecfd55f859e2f2ef37c473d3d5a0d1d54c6da1fd91f1f60f776cbcaf320086c0d32788e0e1b81f95a99da3f230c1ff3f9bb75a5de369e5efbb1cd4b90af4bb8641bfa8dcfed731003c749d43ac59a8b75e0823f92e67e6c9429b6929750c5c033c1cc724533bc35cbdd66bd3fa08dda90ee6eab50ced8c3a7668fd5ae0d9e8cac49a857a1b853092ef6a669e2cb4999652b97a2df0701c3b4ced0c73f53aaf4d1b2374a73a98abd731b433ead8a1f5eb8067932b136b16ea6d12c248be6b78793ab3d0665a4ae5ea75c0c371ec30b533ccd5ebbd366d8ad09dea60ae5ecfd0cea86387d6af87fda0ccca1cc56c79e8773ac49a857a9b853092ef5a569ece7c16da4c4ba97eec7ae0e1e8e799740ffbb11bbc366d8ed09dea60aedec0d0cea86387d66f8888dd1a24abc58d63d0e2c6089e1bc7590b8a572ef3552964569d55e73866d559758e63569d55e73866d559758e63569d55e73866d559758e63569d55e73866d559758e63569dc7875975569de3985567d5398e5975569de3985567d5398e5975569de3985567d5398e5975569de3985567d5398e5975569de3985567d5398e5975569de39855e7ca982d0f3d178958b3506f8b1046f25dc7cb13fe2e684b307ac978eb0350be1178ae67d087a99de13de407bc366d89d09deae0f17580a19d51c70ead1f80fd70a00ce61b52c8ac3a57c66c79e8f9e3c49a857a5b853092ef7a5e9eb01fdb1a8c5e4af563078087a39f676a67d88f1df4dab4354277aa83c7d7418676461d3bb44ef1945999e3982d0ffd1f2062cd42bd6d4218c977232b4f21fc7de3b660f452aa1f3b083c0712e729f6630cba87fdd821af4ddb2274a73a98ab8718da1975ecd0fa21d80fe530df904266d559758e63569d55e73866d559758e63569d55e73866d559758e63569d55e73866d559758e63569d55e73866d559758e63569dab4767cb43ff0f8658b3506fbb1046f21d60e5e908e71db607a3978cb73e00e543c07330719ee2bc0383eee1bcc361af4ddb2374a73a787c1d666867d4b143eb87613f4c74e61b52c8acb9313ecc9a1bca1cc7acb9a1cc71cc9a1bca1cc7acb9a1cc71cc9a1bca1cc7acb9a1cc71cc9a1bca1cc7acb9a1cc71cc9a1bca1cc7acb9a1cc71cc9a1bca1cc7acb9a1cc71cc9a1bca1cc7acb9a1cc71cc1272c3f2ec706562cd42bd1d4218c9779097277ceec18e60f452eabe9dc3c07388411fa67686f7ed1cf1dab4234277aa83c7d7118676461d3bb47e04f683322b7314b3e5d9e9cac49a857a3b853092ef102f4fd88fed0c462fa5fab123c0c3d1cf33b533ecc706bd36ed8cd09dea60ae0e32b433ead8a1f541d80fcaaccc51cc9667972b136b16eaed12c248bec3bc3c613fb62b18bd94eac7068187a39f676a67d88f1df5dab42b4277aa83b97a94a19d51c70ead1f85fda0ccca1cc56c7976bb32b166a1de6e218ce43bc2cc938536d352aa1f3b0a3c1cfd3c533bc37eec26af4dbb2374a73a98ab3731b433ead8a1f59b80678f2b136b16eaed11c248be41669e2cb4999652b97a13f0701c3b4ced0c73f598d7a63d11ba531dccd5630ced8c3a7668fd18f0ec756562cd42bdbd4218c9779499270b6da6a554ae1e031e8e6387a99d61ae1ef7dab4374277aa83b97a9ca19d51c70ead1f079e7dae4cac59a8b74f0823f9b01fdbc7c4d3e8f13446683111633779b19baa2476b317bbb94a626b9e6b9e57436ccd73cdf36a88ad79ae795e0db1ab35d754f3ead43c731e35cf9c47cd33aab948cdff995cecae5c30b2d4402c86f1b9f6b18c3922cf22613c7384f14c17c6334518cf32613cb5c2787a85f12c16c6b35c18cf5c613c05613c3384f17409e3992a8ca74e184f5e18cf12613cf384f1b408e359218c272b8ca75e18cf6a613c4b85f1f40be3e913c6d32d8c67be309e0e613c3385f1b409e3b940184fa3309e06613cab84f1ac15c6b34018cf2c613c39613c4dc278f60be399248c679d309e1e613c0b85f1740ae3992d8c67a5309e69c2789a85f14c16c69311c0930dcefd6d07fe9ea0167c747fff3ef03dd195f783af2622066de738f8683c97b661cf570b669ecb50039fb93982eb8911f128cecd119f1d0fdd31d600ac53bc46e0b85908cf64613ccdc278a609e359298c67b6309e4e613c0b85f1f408e359278c6792309efdc2789a84f1e484f1cc12c6b34018cf5a613cab84f13408e36914c67381309e36613c3385f17408e3992f8ca75b184f9f309e7e613c4b85f1ac16c6532f8c272b8c6785309e16613cf384f12c11c69317c653278c67aa309e2e613c3384f11484f1cc15c6b35c18cf62613cbdc2786a85f12c13c6334518cf74613c7384f12c12c65313c1b39f8927ee790afb05c4b6e3de742d48636259787f3c7ea7b4df63a4f563c0483ebc4f37cfc413f70c8abc80d8568bd550b64b16dec7df9970e554de63a4f5a89cc2fb2c5733f1c43db763b580d8560b9a1ba07b00b2f03ede57cd9553ab3d465a8fcaa9665e9ef0ff07ac0a462fa5ee35c2638e631f32b5338fc75f82cfd0887c46f22a4fab1cd4198ffb8ae3fa038aa7ccca1cc76c7968ee8b58f17c361ebf5b1a0b63d4f9958127ec1fdb82d14ba9fef118f0709c3f98da19f66327bc36b545e84e7530574f30b433ead8a1f51311b15b8364b53839062d4e46f09c1c672d285eb9ccfb53c82c4167cb43f76a126b16eaad14c248be3c2f4fd83fae0c462fa5fac793c0c371fe606a67d8279cf2dab4324277aa83c7d7298676461d3bb47e0af64339cc2752c8ac3a57c66c79688e8658b350af2084917cc758790af92cb4999652fdd829e0e1e8e799740ffbb121af4d8508dda90e1e5f430ced8c3a76687d08f683322bb3322bb3322bb3322bb3322bb3322bb3322bb3322bb3322bb3322bb332cb66b63cf4db6162cd42bd0e218ce43bc9ca539c77e808462fa5e61d8680e754e23cc5790706ddc37987d35e9b3a2274a73a98aba719da1975ecd0fa69d80fcaaccccaaccccaaccccaaccccaaccccaaccccaaccccaaccccaaccccaacccca2c9bd9f2d033e489350bf53a853092ef142f4ff8bbadce60f4526adee134f070cccb30b5339c77b8c56b536784ee540773f5168676461d3bb47e0bec076556e62866cb43cf1e24d62cd4eb12c248be21569ee2fc6957307a29d58fdd023c1cfd3c93ee613f76c66b535784ee540773f50c433ba38e1d5a3f03fba11ce6132964569d55e73866d559758e63569d55e73866d559758e63569d55e73866d559758e63569d55e73866d559758e63569d55e73866d5b97a74b63cf43f0d89350bf5ba853092ef342b4f4738efd01d8c5e4acd3b9c011e8e791926ddc37987b35e9bba2374a73a787c9d656867d4b143eb67613f4c74e6132964d6dc181f66cd0d658e63d6dc50e63866cd0d658e63d6dc50e63866cd0d658e63d6dc50e63866cd0d658e63d6dc50e63866cd0d658e63d6dc50e63866cd0d658e63d6dc50e63866cd0d658e63d6dc50e6386609b961797a5c9958b350af470823f96ee1e5099f7bd0138c5e4addb7731678ce30e8c3d4cef0be9d61af4d3d11ba531d3cbe8619da1975ecd0fa30ec076556e62866cbd3ebcac49a857abd4218c9778699270b6da6a5543f360c3c1cfd3c533bc37eec56af4dbd11ba531dccd55b19da1975ecd0faadc0d3e7cac49a857a7d4218c987e7b83e269e468fa731428bf315db6ad1efca17b8d72cbcdf0f8c5c7d4b9fc748eb98e3e46b049e7e269e268fa729428bf315db6ab116ca76c9c2fb6b81912ba7fa3d465a8fcaa926e059cbc4d3ecf134476871be625b2dd6b9f234f79a85f7d70123574eadf518693d2aa79a81671d134f5c9fb46e1c62c71d5fe3113b2e57c623b66aae9aabe6aa39a7e699f3a879e63c6a9e51cd4569ce701d158e9d528c0018701980327e57e0b8f6646a673eeafbd83aaf4df87d0cc71cced7f70d6556e63866a6718bceac179bf4093c1e5a8699b518cf31c87eaf4dd2c620cb653e914266d5b932661bfbb6e4637766bdd8a44fe0f1d0721bb3164ced0cfb83db83688d295e0eea609edeced0ce0cc4a56dd3faedb01fca613e914266d5b932661bfb8ec463179fcd8eb1499fc0e3a1e50e662d78da59ec0fee0ca235a67839a883797a27433b331097b64deb77c27e5066655666655666655666655666655666655666655666655666655666655666d9cc36f693128f5d1cbfc7d8a44fe0f1d0f224662d78da591cbfbf2b88d698e2e5a00eeef3bb18da9981b8b46d5abf0bf683322bb3322bb3322bb3322bb3322bb3322bb3322bb3322bb3322bb3322bb332cb66b6b19f9c7cecf0f738189bf4093c1e5a9eccac05533bc3f1fbbb83688d295e0eeae03ebf9ba19d19884bdba6f5bb613f28b3324731dbd84f493c76713e0f63933e81c743cb5398b5e06967b13fb82788d698e2e5a00eeef37b18da9981b8b46d5abf07f64339cc2752c8ac3aabce71ccaab3ea1cc7ac3aabce71ccaab3ea1cc7ac3aabce71ccaab3ea1cc7ac3aabce71ccaab3ea1cc7ac3aabce71ccaa73f5e86c63df9b78ec8e70fc1e63933e81c743cbbdcc5af0b4b3387e7f5f10ad31c5cb411dccd3fb18da9981b8b46d5aa778d5c07c2285cc9a1be3c3acb9a1cc71cc9a1bca1cc7acb9a1cc71cc9a1bca1cc7acb9a1cc71cc9a1bca1cc7acb9a1cc71cc9a1bca1cc7acb9a1cc71cc9a1bca1cc7acb9a1cc71cc9a1bca1cc7acb9a1cc71cc9a1bca1cc72c21376ceca7261f3bfc3d3bc6267d028f8796a7326bc1d4cef0fe97fb83688d295e0eea609edecfd0ce0cc4a56dd3fafdb01f945999a3986dec07186267bdd8a44fe0f1d0f200b3164ced0cfb830783688d295e0eeae03e7f90a19d19884bdba6f5072136ea9d50ecf01e488a51e35eadef69ae5c0bbea7bb721df89ee1caf5e07ba62b3780ef59ae3c097ccf86f690ef39aebc027ccf75e575e07b9e2baf05dff35db91f7c2f70e53ef0bdd09587c1f72257be157c2f76e5dbc0f71257be1d7c2f75e53bc0f73257be137c2f77e52781ef15ae7c17f85ee9ca4f06dfab5cf96ef0bdda959f02bed7b8f23de07bad2bdf0bbed7b9f27de07bbd2b2f01df4311be37b8f253c1f74657be1f7c6f72e5fde07bb32b4f01df5b5c792af8fe03caf4fa5657be007c0fbb7223f8dee6ca39f0bddd959bc0f70e579e06be77ba7233f8dee5cad3c1f76e579e01bef7b8720bf8deebca33c1f73e579e05bef7bbf26cf07dc095e780ef83ae3c177c1f72e579e0fbb02bcf07df475c7901f83eeaca0bc1f731575e04be8fbbf262f07dc29571fffea72b3f003eea571e041ff52b4f031ff52b4f071ff52bcf001ff52bcf041ff52bcf021ff52bcf061fe5dd73c04779f75cf051de3d0f7c9477cf071fe5dd0bc04779f742f051debd087c94772f061fe5dd4bc04779f752f051debd0c7c94772f071fe5dd2bc04779f74af051debd0a7c9477af061fe5dd6bc04779f75af051debd0e7c9477af071fe5dd43e0a3bc7b03f828efde08be56577e13f82e74e53783ef22577e0bf81ee3cad8cf3cd695df0abec7b9f2c3e0a3bef06de0bbd895df0ebea5aefc0ef02d73e577826fb92bbf0b7c2b5cf9dde05be9caef01df2a577e2ff8da5cf97de05bedcaef075fde953f00be7657fe20f80aaefc21f075b8f287c1d7e9ca1f015f972b7f147cddaefc31f0f5b8f2c7c1d7ebca9f001f9dc7a99fb1c7b33d064907d2c8faa8cd6d116d21df6468cb4090ec351dc5a26dd37a0730d23e288c3f6361ac8ced1ea3e5e962d00cf38a9652df3fba80a7938187a99de1f78f6eaf4d1d5e9b7250e762686737433b331097b64debdd109b639fa316f56ebb4b3d2deaa0ce1fdc49ce9e3b4be948dbb0f95b88684b1f735b68dbd42ff58d43ec1e2f76de8b8dfd312da58eaf1e60ee6560b6dbed4f7ebbe1f1b5c66d8b728ae2e4a14d6b4183a4da84b133ce280ef9eba0fc8f9691ba548ff4a0f317b1db5ca67d89ecfee7babccfe5a04e5f44fb078264dbdfeff1f47bcc769ffcad658483e1780873a0cfe3a0f53c68d71fa35d1f684775f0fc5760d2aed7e3e9f5625b1ebac6e9061f5d2b103f5e67b58d03b7dfef75477093af0718a3ae75da93672c79add30e8ce4eb059e1e26cdfc7dbdd4d307cfcb0d5e1dfa6c1dd469725ff6a605a3bf7f505d7bdc2dc98cb48bbe83ff3348b64f6f60d00bc70702d027f0340c402f6a673d03cfd460648ce0ecf0d09983370d5e3a78f04806d0ea3c4c7ccd4434a3067c58ae8df005c1e8a1101c92a5a1101c92adf164c12118aa6fbf4ad966d170c3e0c9e3c34f383578eaf0993b4f0f0f1ed933741352d77bf4481ad70224451f2d938391419b8120d9e469f062954a9ec9f03a898187a99de1496f8ad7a606af4d39a8530fef4d61686706e2d2b6691d0780c987d949efe384418dd716cce229f0eaefdb441b44011f03dbcf3838fb5e9d13b6c1c193b8d463d851447b256777841d15b4bdb51df5b3879d1dd5b31746b623b7a3747654ce8ec2d951373bca6647d5ec289a1d35b3a3647654ac35288e7a5d043c5f04463baa6547b1eca895fd2669cf0a7614ca8e3ad951267b3561bfa5d833b0bde2b45747f68c68cf84f6db94fd666dcf30f6ec6dcf4cf66c62af8eec5591bd8ab55775766666bdb10d4eeb8dc63619db6c6c8bb1adc6b619db6e6c87b19dc67619db6d6c8fb1bdc6f619bbc4d8e383e288f2a5c62e3376b9b12718bbc2d895c6ae3276b5b16b8c5d6bec3a63d71bbbc1d88dc60e183b68ec90b1c3c68e181b3476d4d84dc68e193b6eec89c66e0e8a77789c3476cad890b1d3c66e3176c6d8d9a0384b646785ec2c909df5b1b33c7656c7cee2d8591b3b4b636765ec2c8c9d75b93728ceaad8d9113b1b6247c2edc8b71de9b623dbcf088a23d776a4fad9417124da8e3cdb91663bb26c4792edc8b11d29b623c37624d88efcda915e3bb26b4772edc8ad1da9b523b37624d68ebcda91563bb2fa50501c39b523a57664d48e84da914f3bd26947361f0e8a239776a4d28e4cda91483bf268471aedc8a21d49b4238776a4d08e0cda91403bf26747faecc89e1dc9b3237776a4ce8eccd991b84f1a7bc4d8a78c7ddad8678c7dd6d8e78c7dded81782624e7ec9d8978d7dc5d8578d7dcdd8d78d7dc3d8378d7dcbd8b78d7dc7d8778d7dcfd8f78dfdc0d80f8dfdc8d88f8dfdc4d84f8dfdccd8cf8dfdc2d82f8dfdcad8af8dfdc6d86f8dfdced8ef8dfdc1d81f8dfdc9d89f8391517bec28feee566804f9e0f0f0e0c9d3c3adc343ad276f3d317cfcf4893b5b6f3f3e7cac75e8b6c133474f0cdd8e1f7eabeb9a68787ce3993307ef6c3d7eeac8e01dad43b70eb70e1d6d3d3474eba92367f1435f701f5a706ec483478ec407fb41cda320fd498541ffe83e47130f3b4bb7ed2f9508f2b74a3e34a3b6b2065de2ce2cf4adf4b2e2555cebd91343c3adf9d653e6efc113e6338347da5af1bdb346e4b3c3ad67870f9e196e3d7a66e8646b7b1b6ef7ea291534e2f72d157c283773ec2d0ffe1f9f7a505f69010400", "isInternal": false } ], - "packedBytecode": "0x000000028df71de500000047641f8b08000000000000ffed9d77781447baee5b20e22001ced9c2f6ae033616424409189c73c6c618631002830d88689c713639384772cec1648c0163eccdd9bbeb0db677d71bce7dee73ef9fe79c7b8fefed9aa9efe8a5a81e3472d7f04a53fd3ca5a9fe54dddfafdefeba3a55771504e9e95f612ad0f9a661ba20387a92ff27f56fe9779b3ac7b8ae52979c050d84b34903e16cda40380b1b0867b306c2d9bc8170b668209c2d1b0867ab18390b80cf156feb06c69b6860bc6d828611b7450d84b3b88170b66d209ced1a0867fb06c2794203e13cb181709ed440384f6e209ca73410ce531b08e7690d84f3f406c2794603e13cb381709ed54038cf6e209ce73410ce731b08674903e1ecd04038cf6b209ce7c7c8d91138e55efef7f4eff7f5ef85faf722fd7bb1febd44ff76d4752cd4f39786e9b230750ad3e5c6ff9430ea867e5998ba18ff2b0f53d730750b5377fdbf12fdbf1e61ea19a65e61aa085365987a87a94f98fa6a3dfa85e98a305d19a6abc2747598ae09d3b561ba2e4cd787e98630dd18a69bc27473986e09d3ad61ba2d4cb787e98e30dd19a6bbc2d43f4c7787e91e83654098ee0dd3c030dd17a64161ba3f4c83c3f440988684696898aac2342c4cd5611a1ea611617a304c23c3342a4c0f85e9e1308d0ed398308d0d534d98c685697c98268469629826856972981e09d31443b347c3f458981e0fd31306e793617a2a4c4f87696a989e09d3b3617a2e4ccf87e98530bd18a697c2f47298a685697a9866846966986685697698e684696e98e685697e985e09d3ab617a2d4caf87e98d30bd19a6b7c2f47698de09d3bb9a457684f7c2f47e98168469619816856971989684696998968569799856846965985685697598d684696d98d685697d9836846963983685697398b684696b983e08d3b6306d0fd38e30ed0cd3ae30ed0ed39e30ed0dd38761da17a68fc2b43f4c07c274304c1f87e950983e09d3e1307d1aa6cfc2f48330fd304c3f3234ff71987e12a69f86e967daf673fdfb0b5d56f6f95feadf5fe9df5febdfdfe8dfcf8df2bf35e67f67ccff5eff7ea17fffa07fffa87fffa47fffac7fbfd4bf5fe9dfaff5ef5ff4ef5ff5efdff4ef37faf7effaf71ffaf79ffa573dff7bb5433adf32a89d92414c6d52f9f0a1eafebf886d3e5f54cfae9aeaffc96f89b617ea79f92dd0f6667abe99616faee79b1beb69a9e75b1af6623d5f6cd8dbe9f97686fd043d7f82613f49cf9f64d83be8f90e604fe8ffa52b96fe51b6a6da54003689cf26606ba66d4dc1d65c5607b616dad60c6cb27d9b83ad95b6b5005b6b6d6b09b684b6b5122dc3d446db92415cb1523a54adb728eef5ea6726c5f1f356a9f5b675c4db2e7ede616abded1df0aaf83841afab08e2e6446d2b06db49dad6166c276b5b3bb09da26dedc176aab69d00b6d3b4ed44b09dae6d2781ed0c6d3b196c676adb29603b4bdb4e05dbd9da761ad8ced1b6d3c176aeb69d01b6126d3b136cbac90dce02db79da7636d8ced7b673c07681b69d0b3639c72b019b9cef75009b9cfb9d0736390f3c5fdb54dbd1aa00fc69bbb45b297fd26683edfbd25e83ed4269abc17691b4d360bb187c8bed12686bc4d651dba4dd52ffeba5f3c920aefda42cb59f54c4bdde70cd6abdbde35f6feaf95d9fa056eb24f8a900adfaea7c8c7d5b3aa36f39b7113f622f84fc0d5056ca891e72ec1176752ca8d4f9be1996eb652c570c652a2df54f06f1d6bfb7c1d3db606e06793731dba5d4c76c9da7ac6376009435634fce831a63ccde0c1c0e62b6dcc76c9da7ac6376049435634fce851b63ccde071c0e62b6879b982d2bf5319bbe371604f6d893eba1c618b3a38023fe98edea63b6ee53d631fb1c9435634fae891b63cc4e018ef863b67b0f7f6e50e729eb989d0765cdd893fb338d31665f040e07313bccb7b3759eb28ed90550d68c3db957d81863f655e0883f667b3a8ad92e3e6683f473ce20b0c79edcb76e8c31bb1838e28fd961fefe6cdda7ac6376379435634f9ea134c698dda8f3ea39c3cff57386b3c0f60b6d3b1b78e38fedea3247b1ddd9c776baff4710d863549ee735c6d8fe48e7551cff0afa2388edd7d257016cbfd1b6f3c0f6b9b69d0ff572b00f74f7fb40ddeb94ed3ef047286bc6b23c5b6e8cfbc02f80c341ccf6f0315bf73a651bb3ff0665cdd8937e0e8d3166bf040e0731dbd3c76cddeb946dccfe3b943563ef229d6f8c31fb3f755e9d2f7ca1cf172e01db1fb4ad23d8fea86d9782ed4fda7619d8feac6d9dc0f6a5b65d0eb6afb4ad146c5f6b5b67b0fd45dbcac0f6576deb02b6bf695b39d8bed1b6ae60fbbbb67503db3fb4ad3bd8fea96d3dc0f62f6deba96daa9f9ef4bd3aac6d2d813f19c4bb6da5dfa5ac5be63be7c0775bc377db1cfa6e6ff86e6ff15de6c077027cc85460cc27215fe696a7b41878d05779fcbebaa8ba7709ea5ef772e0e9eaa0ee09f051179eaec0d32d7e9ed4f1b37bfceb4d6de32e86a609f0d505ead5c341bd0ac097ac5be6c55f31d8b06ded6161ec193f635901f89275cb7c4f60141bb6f5f22e95ec3fea787861412daf837d29754e24fee4db55c2510e76297371875ab68e9aad08fe8fc7bd6e86cd515ca6e2427cc9ba655efc15417dbae59eb1acae8c5d0d46576d4401f892757bdfb5db41f2781c7771ad636bd3c477450e7cf7347c971bbeb1ed9429d3b1ad2730c77ecda98f6d95f1afb714af4fe4da50fce0f9035ec3c55527f42dd786e247ec8590bfa5a0b6ac94133da41d167615cbb22d91dd5cae87b15c3194a9b0d43f19c45bff4a83a7d26056dbe44a38163ad81f5231506170c87c39685719a15d056827652e02ed5cb567bd0c1e99ef063cd28e75071e57d744513cb9b81e3b966f3c87c5eb67f93f9e07b8da5e9d0d4699b76daf9ec0683b5771703d93f15ca52b308aad17f07471a459d476ed42e2db41aca4da23f121e7e6b2ff7603bb94e9a95fa8536de543d056ba88118c4799ea7acd1bff762a4b5d8377cd8207b79d83ebaace8ee2b114efdf7c1bc41b6b66bbd4d5d02aea1e8fabb6bc8bc123f3e2cf337b66cfec993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993d333f333e4fc27e5b52ae1b09a3d9ffcdd57dfed4370cf5ba64fdeab9ceff71da1facac14fbc7483f884b8c3a174299a226b565ff1ff407339f53611fc96e6eb54b6d4bec8f998479f1877dad705b32f4772a89cd77fa5b942e9eb7a93ed6ea3b9a66dfcf6e164d5df47f464d0b0c4db13ffea5068f8ad3caa6b56c2e9efd65fb2c12b5927c9ccff68a037bacc7bf5dca8e7866dd2438b2fdc0e38cabfe3bd256cbf3f20ac377219439b349edb691be5532ce6c176339ecf723eb96652e017ba5b1ee767a59e16866acbf3b2c2b65ce8136f540935acd1cb49565d9f65dc7e7e6f11f87d3cff1bb64c1d319785cb4338ece378ef8de6adccff1cdfe69b6f31829837dfb1cf4abccd8df49fc7966cfec993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367e667563ce6b3567cbfb69c8431477d1f52cf33e45b65b2fed4f7829bd4fa75fd1c4e9e397534ea8cef8efeef26b565b7ea7c5170747f87a86de9eafb1451db52fce1b767f059908be7ba05e04bd65d66d142f225b1f92e733636843cc7ef62e85a6ed1d4d5fe8acf585153dc5fbb1a3cf86c34eadb3e6586cd65dfa1a8b8107fb82f95814df2f87eb48bed8cc712b35f8ff8c3e7d73fd2dab60b5c6dfbb25297ed067e3725191c1ddff83d959f43dbf74b9dc73e1cd877e46bcbff65caf49c5af4537576f07dcdd20258976c5fdbb73dfb016b4cbe3be3ba0a74ea67685008f9af9ad49695725256b41676b58fc8376090dd5caeabb15c3194e963a97f3288b7fee6b756fb1acc6a9bfc06e2ec6b38febb6a93fa446874096824651c7fb3d1dabfd2ec5788ed6873a38c2c8bdfa2fb17b45151fd476dc700d7c73159b7ed38661e17ead2cf33dffb69fd07b41771f7d3fa0f8821eca71518ebef08eb17aee641f4b145cafc97b17ef39c5c96c17e60ffbd9fc0f75cca743e9b73f2e3757d653b27c7e5a2eaae98f13b68c9189931269005cf13a44c6badb56cb3ca08ee9e96658b229615adcc6f85150547ebe7e63b6be97dbeaf5117896bfc06b9943911eae2e6bc257d0ee8ea9b7249a893ca9759ea2a654e837ded0c9d4fc076c2fdf662cbff65ca740e8863b85f117f9d53dbf74ae04c821ff47d15b0c6e4bb33fa967340f123f642c85fd4b4b6ac94133d446b6157fb889c4721bbb95c85b15c3194e967a97f3288b7fe57183c5718cc6a9b9c0d717631f44377d556f78bd0a823682465f09ea2ed3ba0b67b1daededf883a97c2f797ccf32b3c4eba396fb29fc79af7d56ce7081d0d7e3c47e80eed6cc252d6bc5f28c7cb38fb0de3bb12ddc12fbe2be1eadbcdbd40b724cce379c1f1f4ede23bb6ca5fd49809bd72e03b6acc845cf86e6ff86e9f43df5e73af3993e60ec62048bd7f86df2c5553a6f3521c9740966b028c2ec6724804477e7bfc588c38be832cd714185d1c1fb2fdf679776094e50a81d1c5bba538fe465d18f11bc3789c174607df8aed5cdf6fc5e23dbde6c0c8f4ce263e9b6a018c2ece8bebfbae1e9ecfb7845f57e31275c982b10c1865b956c0e8e2de385ecbd48511af8b64b9d6c0e8e21956b6e33be1b7e7f1deb24bc64cc776c77d51cab2bdf752e99627e3b906fa7630ae614a0bbccf782c2d7abbe5c978ee83be1ddcf74b6981e30c1e4b0b7c36e862dcc34470e473b863f1e0f34b59ee04604c3a62ec9b05631218fffb5e3130f673c498cc82b11f308afd24607470ff35c5d82f0b46bc4f29cb9d0c8c573a62bc220bc62b8151963b05185ddc4b4d80dfba305e058cb2dca9c078b523c6abb260bc1a1865b9d380f11a478c5767c1780d30ca72a703e3b58e18afc982f15a6094e5ce00c6eb1c315e9b05e375c028cb9d098cd73b62bc2e0bc6eb8151963b0b186f70c4787d168c3700a32c773630dee888f1862c186f044659ee1c60bcc911e38d5930de048cb2dcb9c078b323c69bb260bc191865b91260bcc511e3cd5930de028cb25c0760bcd511e32d5930de0a8cb2dc79c0789b23c65bb360bc0d1865b9f381f176478cb765c1783b30ca721700e31d8e186fcf82f10e6094e5be078c773a62bc230bc63b815196fb3e30dee588f1ce2c18ef02c63b2d8cfd1d31de9505637f6094e52e05c6bbe3674c5d4bf7cf82f16ee0b9277e9e94667767c1738f5b9ed477f5eeb6f8ba377e5fa96d3120a87bddef059e81f1f3a4b6c5bd59f00843312c879add173f634ab3815930de073c83e2e74969765f163c8340b3fb2c9add1f3f634ab3415930de0f3c83e3e74969767f163c8341b3fb2d9a3d103f634ab3c159303e003c43e2e74969f640163c43825acd1eb06836347ec6946643b2601c0a3c55f1f3a4341b9a054f156836d4a2d9b0f819539a5565c1380c78aae3e74969362c0b9e6ad06c9845b3e1f133a634abce827138f08c889f27a5d9f02c78468066c32d9a3d183f634ab31159303e083c23e3e74969f660163c2341b3072d9a8d8a9f31a5d9c82c184701cf43f1f3a4341b9505cf43a0d9288b660f3b627c280bc6872d3c717f27fb218baf318eea3e3aa87bdd85a11896c37e12631d318ec982712c30ca72d84fa2c611e3d82c186b8051964b3866ccd44fa2067c8f8bdf77aa5daa09eaaecf38b73c19fb49a0eff18eb41817d45d8bf16e7932f69340df131c69313ea8bb16138067a2032d12e0a32e3cc2500ccb613f89498e182766c13809186539ec2731d911e3a42c182703a32c87fd241e71c438390bc647805196c37e12531c313e9205e3146094e5b09fc4a38e18a764c1f82830ca72d84fe231478c8f66c1f81830ca72d84fe271478c8f65c1f83830ca72d84fe209478c8f67c1f80430ca72d84fe249478c4f64c1f82430ca72d84fe229478c4f66c1f81430ca72d84fe269478c4f65c1f83430ca72d84f62aa23c6a7b3609c0a8cb21cf69378c611e3d42c189f0146590efb493ceb88f1992c189f054659ee61c78c99ae5f9e6de4bea3ae551abbefa8eb92c6eedbc7b98ff37cf0ede3dcc7793ef8f671eee33c1f7cfb38f7719e0fbe7d9cfb38cf07df3ece7d9ce7836f1fe73ece997c3fe7c077027cc85460cc27212f0cc5b0dcc39eb15133224f497c3ca55877f4f53c41dd9fb7f01438aa3bfa7a81a0eec2d0d0189f6b008c0f370046af63ba0f627d1815cf8bf0ff648c3c2f64c1f322f0bce488e7c52c785e029e97e3e749c5d44b59f00843312cf77003607cae01307a1dbd8e4c8c5ec7fcd1d1337a46cfe8198f07634368c33d638388c7b2fa322a9e69f1f3a4347b390b9e69a0992c778f5bc6b2fa322a9ee9f1f3a4349b9605cf74d06c9a4533078c65f565543c33e2e74969363d0b9e19a0d9748b660e18cbeacba87866c6cf93d26c46163c3341b31916cd1c3096d59751f1cc8a9f27a5d9cc2c78668166332d9a39602cab2fa3e2991d3f4f4ab35959f0cc06cd66593473c058565f46c533277e9e9466b3b3e099039acdb668e680b1acbe8c8a676efc3c29cde664c13317349b63d1cc0163597d1915cfbcf879529acdcd82671e6836d7a2192be3c30d80f1b906c0e858c7b2fa322a9ef98e78e665c1331f785e71c4333f0b9e5780e7d5f8795231f54a163cc2500ccb3ddc00189f6b008c5e47af2313a3d7317f74f48c9ed13366c7f87c0360f4dbda33b2323ab8becaf80ecd2b8ddc77d43b348ddd77d43b348dddb78f731fe7f9e0dbc7b98ff37cf0ede3dcc7793ef8f671eee33c1f7cfb38f7719e0fbe7d9cfb38cf07df3ece7d9ce7836f1fe73ecef3c1b78f731fe7f9e0dbc7b98ff37cf0ede3dcc7793ef8f671eee33c1f7cfb38f7719e0fbe7d9cfb38cf07df3ece7d9ce7836f1fe73ecef3c1b78f731fe7f9e0dbc7b98ff37cf0ede3dcc7793ef8f671eee33c1f7cfb38f7719e0fbe7d9cfb38cf07df3ece7d9c33f97e2d7edf65d97e63e635e071f1cd1b47f52c55eb7d5dafebdb18f5535abd6168f58aa1553194791df47bc3817e05e057d62df3e22f5be60b09981df92e53ed4b2ba8bff878ced043f97fd351dda3dafa371bb9efa8b6beb1fb8e6aeb1bbb6f1fe73ecef3c1b78f731fe7f9e0dbc7b98f7316df986f16d49eb7cbf74fd53aded2f9423d2fe59f07bb9499d822fddb2ef0fb900bdf7e1ff2c78a7cf0ede3dcc7793ef8f671eee33c1f7cfb38f7719e0fbe7d9cfb38cf07df3ece7d9ce7836f1fe73ecef3c1b78f73be382f86ff57e680273078820c3cf3c8782693f1cc24e31949c633888ce756329e2bc9789e24e32927e31947c6338c8ce76e329e1bc8782e27e3e943c633858ca72719cf2c329e87c8785e22e3194cc6733b19cfd5643c4f93f19491f14c20e3194ec6732f19cf4d643c49329ec7c878ba93f15c4cc633868c673619cf45643c43c8785e26e3b9938ca7988ca72d19cfb5643c2f90f15c46c65341c6f30c19cf5c329e49643c0f92f1dc47c6534ac6730b194f27329e2bc8789e20e3e94ac633878ca7868c671a194f15194f7f329e4bc878ae27e3694ac6d39b8c673e19cf23643cbdc8784691f17424e3b99f8ce736329eabc8789e22e3e942c6339e8c673a194f3519cf00329e1bc978fa92f13c4ac6d3838c673419cf85643c0f90f1dc41c6938bef9966c3d3868ca7888ce71a329e67c978a692f17426e39948c633838c670419cf40329e9bc978fa91f13c4ec6d38d8c672c19cf50329ebbc8785e24e36947c6d39e8ce73a329e02029e4470f4182609f8ff6b606b622cab3efb3aba43edffdfd6f626b0cc3b3adfd4b2eeb7c126df927dc7b22ceaf436d425a9f3a5df6d4ae984be92302ffe8a80e31d129eebc878da93f1b423e379918ce72e329ea1643c63c978ba91f13c4ec6d38f8ce766329e81643c23c8786690f14c24e3e94cc633958ce759329e6bc8788ac878da90f1bc46c6730719cf03643c1792f18c26e3e941c6f328194f5f329e1bc9780690f15493f14c27e3194fc6d3858ce729329eabc8786e23e3b99f8ca72319cf28329e5e643c8f90f1cc27e3e94dc6d3948ce77a329e4bc878fa93f15491f14c23e3a921e39943c6d3958ce709329e2bc8783a91f1dc42c6534ac6731f19cf83643c93c878e692f13c43c65341c6731919cf0b643cd792f1b425e32926e3b9938ce765329e21643c1791f1cc26e31943c67331194f77329ec7c87892643c3791f1dc4bc6339c8c6702194f1919cfd3643c5793f1dc4ec633988ce725329e87c8786691f1f424e39942c6d3878ce772329e1bc878ee26e31946c6338e8ca79c8ce749329e2bc9786e25e31944c633928c672619cf64329e79643c95169ed71cf1c8fbeeb26e997f8dc4b783ed50aad6fbaea33abda7d7d54caf57f8c55f219499da3afdabde0fc76585cbfc3e01be9bf31e68f49ea3bac8f62830b60ffa7ecb916f79474bd62df36f3572df6d0ddf6df3c4777bc377fb3cf1ede3dcc7793ef8f671eee33c1f7cfb38f771cee4dbc1b541197e274da602633e0979bc5e70f17d3947f53ce23af1db18f5535abd6f68655e5b1543997741bff71de867bbf69479f1972df38504cc18172541bc71b120fe3a95a976ab15e8bac0d017ebb5d091a651c790858ddc77d431a4b1fb8e3a863476df3ece7d9ce7836f1fe73ecef3c1b78f731fe74cbe17e97c8cd78da5e8433d5f94eb8145e07789ce17c4e857ad6bb15e57a15eb7702c01bb94f94f78aee9f779bfcfc7e5db1fdb7c9ce7836f1fe73ecef3c1b78f731fe7f9e0dbc7b98ff37cf0ede3dcc7793ef8668e73332ffdc52f023657fdf9a3623117ef121c4fdf51b1d8d87d47c56263f7ede3dcc73993efa50e7c27c0874c99faf82d059ec50e781cd533f56c639951a7d78c3a1543193cc62f7350cf02f02beb96f965c0235325f0b88883ba6c73e49947c633998c672619cf48329e41643cb792f15c49c6f324194f3919cf38329e61643c7793f1dc40c67339194f1f329e29643c3dc9786691f13c44c6f31219cf60329edbc978ae26e3799a8ca78c8c670219cf70329e7bc9786e22e34992f13c46c6d39d8ce762329e31643cb3c9788690f1bc4cc67327194f31194f5b329e6bc9785e20e3b98c8ca7828ce719329eb9643c93c8781e24e3b98f8ca7948c672119cf2d643c9dc878ae20e379828ca72b19cf1c329e1a329e69643c55643cfdc9782e21e3b99e8ca729194f6f329ef9643c8f90f1f422e31945c6d3918ce77e329edbc878ae22e3798a8ca70b19cf78329ee9643cd5643c03c878de27e3b9918ca72f19cfa3643c3dc8784693f15c48c6f30019cf1d643c6dc8788ac878ae21e379968c672a194f67329e89643c33c8784690f10c24e3b9998ca71f19cfe3643cddc878c692f10c25e3b98b8ce745329e76643cedc978ae23e32920e0490447bffb9f80ffbf0f367947fd35b02dd7f9c5606b62f1d154e79781ad50e7651d2dc234a5c3d1eb469d5cbd978fbe92302ffe8a80633909cf75643cedc978da91f1bc48c6731719cf50329eb1643cddc8781e27e3e947c6733319cf40329e11643c33c8782692f17426e3994ac6f32c19cf35643c45643c6dc878ee20e379808ce742329ed1643c3dc8781e25e3e94bc6732319cffb643c03c878aac978a693f18c27e3e942c6f31419cf55643cb791f1dc4fc6d3918c6714194f2f329e47c878e693f1f426e3694ac6733d19cf25643cfdc978aac878a691f1d490f1cc21e3e94ac6f30419cf15643c9dc8786e21e35948c6534ac6731f19cf83643c93c878e692f13c43c65341c6731919cf0b643cd792f1b425e32926e3b9938ce765329e21643cb3c978c690f15c4cc6d39d8ce731329e2419cf4d643cf792f10c27e39940c65346c6f33419cfd5643cb793f10c26e379898ce721329e59643c3dc978a690f1f421e3b99c8ce706329ebbc9788691f18c23e32927e379928ce74a329e5bc9780691f18c24e39949c633998c671e194f658e78d4bbedd2d73a002e9c92905f063c0b1df038aa67297ed7e0db18d7abb45a6168f5bea1553194590afaad70a05f01f89575cbfc0ae07956e76ddf54789684516c0b1df324a0ce3265da0756008f8b7dd2513d53b1bad2a8d3b316dda50cc6ea4a07f5b4ed3b32bf12785ed079614d40b9174818c5b6cc314f02ea2c53a6585d093c2ef61d47f54cc5ea2aa34e2f5874973218abab1cd4d3b6efc8fc2ae07951e7853501e55e246114db0ab73ce509a8b34c99627515f0b8d8771cd53315abab8d3abd68d15dca60acae76504fdbbe23f3ab613b7866cf6c63563c72ff5e581350ee251246b1ad74ca535e9a803acb94a91d5b0d3c2eda7947baa7dab135469d5eb2e82e653056d738a8a76ddf91f93516df2541bc5aacad83166b2d3c6b73ac85f8cb9679690364f63a7b9da398bdce5ee72866afb3d7398ad9ebec758e62f63a7b9da398bdce5ee72866afb3d7398ad9ebec758e62f63a7b9da398bdce5ee72866afb3d7398ad9ebec758e62f63a7b9da398bdce5ee72866afb3d7398ad9ebec758e62f63a7b9da398bdce5ee72866afb3d7398ad9ebec758e6266d059f1c8f709853501e55e266114db2ab73ca9f7825e0e8e9c0a8cf924e4d702cf6a07fa38aa67aa0ff93aa34e2f5b749732b87fad73504fdbbe23f3eb603b64c3bca601327b9debc7ac78a6e9bcb026a0dc341246b1ad76cb936ac7a605474e99dab175c0e3a29d7754cf543bb6dea8d3348bee5206f7aff50eea69db77647e3d6c07cfec996dcc8a67bace0b6b02ca4d276114db5aa73c65a9f71ba707474e99dab1f5c0e3a29d77a47baa1ddb60d469ba45772983b1bac1413d6dfb8ecc6f80ed900df39a06c8ec75f63a47317b9dbdce51cc5e67af7314b3d7d9eb1cc5ec75f63a47317b9dbdce51cc5e67af7314b3d7d9eb1cc5ec75f63a47317b9df34767c53343e7853501e56690308a6d9d539e2ea9e70e338223a74ccf1d36008f8be7328e744f3d77d868d4698645772983fbd74607f5b4ed3b32bf11b64363675ed300997d6ce486d9c786678e62f6b1e199a3987d6c78e628661f1b9e398ad9c786678e62f6b1e199a3987d6c78e628661f1b9e398ad9c786678e62f6b1e199a3987d6c78e628661f1b9e398ad9c786678e62f6b1e199a398196243f1ccd479614d40b999248c625bef9627f5dd8399c19153a67e3b1b816783037d1cd533d56f679351a79916dda50cee5f9b1cd4d3b6efc8fc26d80e9ed933db9815cf2c9d17d604949b45c228b60d6e7952edd8ace0c829533bb609785cb4f38eea996ac7361b759a65d15dca60ac6e76504fdbbe23f39b613b7866cf6c63563cb3755e5813506e3609a3d836bae549b563b38323a74cedd866e071d1ce3baa67aa1ddb62d469b645772983b1bac5413d6dfb8ecc6f81ede0993db38d59f1ccd179614d40b939248c62dbe4982701759629533bb605785cb4f38eea996ac7b61a759a63d15dca60ac6e75504fdbbe23f35b8167aece0b6b02cacd256114db66c73c09a8b34c9962752bf0b8d8771cd53315ab1f18759a6bd15dca60ac7ee0a09eb67d47e63f009e793a2fac0928378f84516c5b1cf324a0ce32658ad50f80c7c5bee3a89ea958dd66d4699e45772983b1bacd413d6dfb8ecc6f039ef93a2fac0928379f84516cd88ecd77c45364f01459b4385ebe9516153adf46ff26e0ff15c0e8aa6d996f30ca3cc6b8d88a72a0595b83a7ada1d9f1f4adb4a884bc9a707b550223c3f66a9b03cdda1b3ced0dcd8ea76fa5456f9d6fa77f717bf5064686edd51e781cb4cfe50983474d998edddb1cebe3a89ea963f7f6c0ae3b1e87a40c1ebbb73ba8a7ed5c42e6b7c376f0cc9ed9c6ac78faebbcb026a05c7f1246b1e139ff8ef879ca13068f9a32b5633b1cebe3a89ea9766c6760d77d07e82e653056773aa86701f89575cbfc4ed80ed930af6980cc5ee7fa312b9e013a2fac0928378084516cdb816757fc3ce50983474d99dab15d8ef57154cf543bb63bb0ebbe0b749732b87fed7650cf02f02beb96f9ddb01db2615ed30099bdcef563563c03755e5813506e2009a3d87602cf9ed879d263be208f9a32b5637b1cebe3a69ee9766c6f60d77d0fe82e6570ffdaeba09e05e057d62df37b613b7866cfec993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367e666563c83745e5813506e1009a3d87603cf87b1f3a49f3b208f9a323d77f8d0b13e6eea997eeeb02fb0ebfe21e82e653056f739a86701f89575cbfc3ed80e9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec99b99915cf609d17d604941b4cc228b6bdc0f351fc3ce50983474d999e3b7ce4581f47f54c3d77d81fd875ff0874973218abfb1dd4b300fccaba657e3f6c87fd9ed9335b9815cf109d17d604941b42c228b67dc07320769ef4f353e45153a676ec80637ddcd433dd8e1d0cecba1f00dda50cc6ea4107f52c00bfb26e993f08db211be6350d90d9ebec758e62f63a7b9da398bdce5ee72866afb3d7398ad9ebec758e62f63a7b9da398bdce5ee72866afb3d7398ad9ebec758e62f63ae78fce8aa74ae7853501e5aa4818c5b61f783e8e9da74b69c2e0515381319f84fcc78ef57153cff4738743815df78f41772983fbd72107f52c00bfb26e993f04dba1b133af6980cc3e3672c3ec63c3334731fbd8f0cc51cc3e363c7314b38f0dcf1cc5ec63c3334731fbd8f0cc51cc3e363c7314b38f0dcf1cc5ec63c3334731fbd8f0cc51cc3e363c7314b38f0dcf1cc5ec63c3334731fbd8f0cc51cc0cb1a178aa755e581350ae9a84516c0781e793f879ca13068f9a0a8cf924e43f71ac8fa37aa6faed1c0eecba7f02ba4b19dcbf0e3ba86701f89575cbfc61d80e9ed933db9815cf089d17d604941b41c228b643c0f3a9039e84c1a3a64cedd8a78ef57154cf543bf65960d7fd53d05dca60ac7ee6a09e05e057d62df39f01cf489d17d604941b49c228b6c3c0e32256154f91c123f39f12f8565ad4e87c1bfd8bdbab061819b657510e346b6bf0b435343b9ebe9516e320af26dc5ee38091617bb5cd8166ed0d9ef68666c7d3b7d262bcceb7d3bfb8bdc60323c3f66a9f03cd8e677b783cf7ede319a75ef3e3a779c171d4bce0386a5ee035a7d2dcc1f1a50c8f650130e09484fc67c0f3c3f87952f7b83ecb82e787c0f383f8793a3baa67a95aef8f803daef52aad7e6c68f599a155319441861f3bd0af00fccaba655efc7966cf1cc58ce7b6c29a80729f92308aed07c0e3a2dd5075bf4caf4bd6df2c4cfb4eaaf5ebe2d903de776da6d72b1ce2af10cadc5e525bf6a0662b82ffcb7653f53964d81cbd0fdcd9f60c4ce6c55f5190bbfba099eecba2162e9edd647bdc3f64e1f9363e9e52dccfd1d7414775cfe639da410b4f8c75ef1cf50cf140fc754fb51f9df4ba64fd6a1ffdfc24a79a97e3be27ed4727a3ce8550e6b292dab25f40fb616b2b5cef9b724e6eee9b4d82daf64cb84ab4dd7cbef2adb64bb94fa03cb63915fa17f7cf0aa8abab7631ea1e13b68b66dbed527bf3199fe9bb1874f9845433db730ad4b1d2c25d49c08df198cbfd4cd66d7b465669e8c8a6196eeb4f2c3af6b670f726e066dcaf7b1b3ab26976acfdbabf85bb3f0137e37edddfd0914db363edd7032cdc0308b819f7eb01868e6c9a1d6bbf1e68e11e48c0cdb85f0f347464d3ec58fbf5200bf720026ec6fd7a90a1239b66c7daaf075bb807137033eed7830d1dd9343bd67e3dc4c23d84809b71bf1e121ca9239b66c7daafab2cdc5504dc8cfb7595a1239b66c7daafab2ddcd504dc8cfb75b5a1239b66c7daaf4758b847107033eed7230c1dd9343bd67e3dd2c23d92809b71bfae6bbf7dd6fdbac6c25d43c0cdb85fd7183ab26976acfd7a9c857b1c0137e37e3dced0914db363edd7e32ddce309b819f7ebf1868e6c9ad9f66b47efe59565fb9ee061a7faa4c76b3e9c05cfc7c0e322a61cc541a9a37e2ea9bea9070cad0e1b5ae1381807413f077d6132bedf2ffe3cb367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367f6cc9ed933f333e3370ef1f98a94fb8484516cf84ccac57d7e55f7cbf5ba64fdcdc2d4f9945abf0763f75b565a60f84b0287f82b8432ff794e6dd9ae9aad28387abbe1b8d6b82df7c75e87f4b634e35fe6c55f11d4e700f038783f3fc573d0e03968d102df3b8dc777d930371a9795aaefefb40a6ab7f37ea33ea8e947b1fb3f52d30243d38f1cfb4e04476e4f61c0290979e471f16cd8513d536dc13ea34ea6c6c550e642a8e73e07f52c00bfb26e99df073c3235011e573118183c81451f992ac9782693f18c24e3b9808c671019cf69643cb792f1b422e3b9928ce749329e72329e71643cc3c878ce25e3b99b8ce744329e1bc8782e27e32924e3e943c633858ca72719cf43643cdf27e3194cc6732919cf19643cb793f124c878ae26e3799a8ca78c8c670219cf70329e0e643cf792f19c4cc67313194f73329e2419cf63643cddc9782e26e31943c6731119cf10329eb3c878ee24e32926e3694bc6732d19cf33643c15643c9791f14c22e379908ce77c329efbc8784ac9784e25e3b9858ca71319cf15643c2dc9789e20e3e94ac65343c65345c6730e194f7f329e4bc8784e20e3b99e8ca729194f6f329e47c8787a91f18c22e3e948c6f33d329efbc9784e27e3b98d8ca73519cf55643c07c8789e22e3e942c6339e8ca79a8ce710194f0919cf00329e93c8786e24e36946c6d3978ce751329e1e643ca3c9782e24e379808ce74c329e3bc878da90f11491f15c43c633958ca73319cf44329e11643ce791f10c24e339858ce766329e16643cfdc8781e27e3e946c633968c672819cfd9643c7791f1b423e3694fc6731d194f01014f2238fa5b4c09f8ff41b0c937833e065b13cbfae439b59457c7c5673b1cbdee2696757f6461409d3e84ba2475bef4bb4d299dd05712e6c55f11707c44c2731d194f7b329e76643c7791f19c4dc633948c672c194f37329ec7c978fa91f1b420e3b9998ce714329e81643ce791f18c20e39948c6d3998c672a19cf35643c45643c6dc878ee20e339938ce701329e0bc9784693f1f420e379948ca72f194f33329e1bc9784e22e31940c65342c673888ca79a8c673c194f17329ea7c8780e90f15c45c6d39a8ce736329ed3c978ee27e3f91e194f47329e51643cbdc8781e21e3e94dc6d3948ce77a329e13c8782e21e3e94fc6730e194f15194f0d194f57329e27c8785a92f15c41c6d3898ce716329e53c9784ac978ee23e3399f8ce741329e49643c9791f15490f13c43c6732d194f5b329e62329e3bc978ce22e31942c6731119cf18329e8bc978ba93f13c46c69324e3694ec6731319cfc9643cf792f17420e3194ec633818ca78c8ce769329eabc97812643cb793f19c41c6732919cf60329eef93f13c44c6d3938c670a194f1f329e42329ecbc9786e20e339918ce76e329e73c9788691f18c23e32927e379928ce74a329e56643cb792f19c46c633888ce702329e91643c93c9782ac9789a183cf87ff56ed8019d976f0715c2ffefd69dcbdbe97549197946acee55ec356caabe7b1cd5776f503b25617e0fd457d8f702cf5e473c1f1a3ca6ef22c8578266bb0d9b62dce58871b7c128f3bb8051f4db0d3cbb1df1ec31784cdf4590ef0d9aed346c8a718723c69d06a3ccef0046d16f27f0ec74c4b3cbe0317d1741be3f68b6ddb029c66d8e18b71b8c32bf0d1845bfedc0b3dd11cf0e83c7f45d04f901a0d907864d316e75c4f881c128f35b8151f4fb00783e70c4b3cde0317d17417e2068b6c5b029c6cd8e18b7188c32bf191845bf2dc0b3c511cf5683c7f45d04f941a0d926c3a618373a62dc6430cafc466014fd3601cf26473c9b0d1ed37711e40783661b0c9b625cef887183c128f3eb8151f4db003c1b1cf16c34784cdf45901f029aad336c8a71ad23c67506a3ccaf0546d16f1df0ac73c4b3dee0317d1741be0a345b63d814e36a478c6b0c46995f0d8ca2df1ae059e38867adc163fa2e827c3568b6cab029c6958e1857198c32bf121845bf55c0b3ca11cf6a83c7f45d04f911a0d90ac3a618973b625c6130cafc726014fd5600cf0a473c2b0d1ed37711e4478266cb0c9b625cea887199c128f34b8151f45b063ccb1cf12c37784cdf4590af01cd961836c5b8d811e3128351e61703a3e8b704789638e2596af098be8b203f0e345b64d814e342478c8b0c46995f088ca2df22e059e48867b1c163fa2e82fc78d06c8161538cef3b625c6030cafcfbc028fa2d009e058e78161a3ca6ef22c8df0936e1ed05b6f774be27d8ded5f91e607b47e7bb83ed6d9def06b6b774be2bd8ded4f972b0bda1f35dc0f6bace9781ed359def0cb65775be0fd85ed1f9be609baff349b0cdd3f97e609babf357806d8ece5f09b6d93a7f15d866e9fcd5609ba9f3d7806d86ce5f0bb6e93a7f1dd8a6e9fcf5607b59e76f00db4b3a7f23d85ed4f99bc0f682cedf0cb6e775fe16b03da7f3b782ed599dbf0d6c0febfced60bb47e7ef00db619dbf0b6c9feafcdd60fb4ce7ef05db0f74fe3eb0fd50e7ef07db8f74fe01b0fd58e78782ed273a3f0c6c3fd5f9e160fb99ce3f08b69febfc28b0fd42e71f02db2f757e34d87ea5f363c0f66b9d1f0bb6dfe8fc04b07daef313c1f65b9d9f04b6dfe9fc64b0fd5ee71f01db173a3f056c7fd0f947c1f6479d7f0c6c7fd2f9c7c1f6679d7f026c5feafc9360fb4ae79f02dbd73aff34d8fea2f353c1f6579d7f066c7fd37969d7543bfb779d2f09e26d67bf096aa712f02dfe54997fe87c73a38c2c5b08655aeb0e85ea19877a7749da616997954ddae1f7c026edf0bb609376f81db0493bfc36d8a41d7e0b6cd20ebf09366987df009bb4c3af834ddae1d7c026edf0ab609376f815b025757e3ed8a41d9e07366987e7824ddae1396093767836d8a41d9e0536698767824ddae119609376783ad8a41d9e063669875f069bb4c32f814ddae117c126edf00b609376f879b0493bfc1cd8a41d7e166cd20e3f0c366987ef019bec2fdf804ddae6c36093b6f953b049dbfc19d8a46dfe01d8a46dfe21d8a46dfe11d8a46dfe31d8a46dfe09d8a46dfe29d8a46dfe19d8a46dfe39d8a46dfe05d8a46dfe25d8a46dfe15d8c6eafcafc1266df36fc0266df3e76093b6f9b76093b6f9776093b6f9f76093b6f90bb049dbfc07b049dbfc47b049dbfc27b049dbfc67b049dbfc25d8a46dfe0a6cd2367f0d36699bff02b667745edaea96609367c56a2afd8e138ec3d3047c094b3288b7edc7290979acbb4c95643cb3c8784692f1bc45c6730119cf20329ed3c8785a91f12c20e31947c6339f8c671919cf52329ef7c978ce25e3d944c6b3918ce744329ebd643c7bc8782e27e32924e39941c6f306198fbcf7c9c233988ce752329e33c87812643c73c9789690f12c26e379978ca70319cf06329ef5643c2793f1ec26e3d945c6d39c8ce71b329e69643c1793f1bc46c6731119cf10329eb3c8788ac978da92f15490f15c46c6339b8c671119cf42329eb7c978ce27e35947c6b3968ca7948ce754329e9d643c3bc8783a91f1b424e379898ca7868ce715329e2a329e73c878fa93f15c42c67302194f53329ede643cf790f1cc24e379938ca72319cff7c878d690f1ac26e3f92b19cfe9643cdbc978b691f1b426e33940c6339e8c671e194f3519cf7b643c87c8784ac8780690f19c44c6d38c8ce73019cf74329ed7c9785691f1ac24e339938ce703329ead643c6dc8788ac878e690f18c20e379878ce73c329e81643ca790f1b420e379998ce755329e15643ccbc978ce26e3d942c6b3998ca71d194f7b329e7d643c1f92f11410f0248023009bfcbf29d8e43b3c87c0f6b5ce1f009b7cc36701d8bed2f967c0f694c5d6c4c2270c53c126efca7e0d36b93ff334d8e49d89afc026e70de25fcd4fef70347f135846fc34b5f0a3bfaf2c5c92c7ed2dcb248378b737fa4a06f66fde15188cc79be743329e7d643cedc978da91f16c26e3d942c6733619cf72329e15643caf92f1bc4cc6d3828ce714329e81643ce791f1bc43c633828c670e194f11194f1b329ead643c1f90f19c49c6b3928c671519cfeb643cd3c9780e93f13423e339898c6700194f0919cf21329ef7c878aac978e691f18c27e33940c6d39a8c671b19cf76329ed3c978fe4ac6b39a8c670d19cff7c8783a92f1bc49c633938ce71e329ede643c4dc9784e20e3b9848ca73f19cf39643c55643caf90f1d490f1bc44c6d3928ca71319cf0e329e9d643ca792f19492f1ac25e35947c6733e19cfdb643c0bc9781691f1cc26e3b98c8ca7828ca72d194f3119cf59643c43c8782e22e3798d8ce762329e69643cdf90f13427e3d945c6b39b8ce764329ef5643c1bc8783a90f1bc4bc6b3988c670919cf5c329e0419cf19643c9792f10c26e3f93e19cf1b643c33c8780ac9782e27e3d943c6b3978ce744329e8d643c9bc878ce25e3799f8c672919cf32329ef9643ce3c8781690f1b422e3398d8c671019cf05643c6f91f18c24e39945c65349c6d3c4c273c8118f7c2b46d62df3871ab9ef3d86ef3d79e27b97e17b579ef8de61f8de9127beb719beb7e589efad86efad79e27bb3e17b739ef8de68f8de9827bed71bbed7e789efb586efb579e27bb5e17b759ef85e69f85e9927be971bbe97e789efa586efa579e27bb1e17b719ef85e68f85e9827be99afbf553f5ce9abbc4fff26e0ff15c0b8c011e3218351e61700a3d8f07bd4158e78a2aedd2b087c2b2de45e963cf34cc0ff2b81d1554c55188c326f8ba93dc053e98827ea9e4325816fa585bc8b2d7d2a13f07f1c7fd9554c551a8c326f8ba95dc0d3db114fd4bd92de04be9516f2eeb3bcf39780ffe378ebae62aab7c128f3b698da013cfd1df144dde3e94fe05b6921df0a936fd224e0ff383ea3ab98ea6f30cabc2da670fcdc018e78a2ee4d0d20f0adb4906fedca372f13f07f1cbfc9554c0d301865de1653387edc40473c51f7d40612f8565ac8b360f9467b02fe3f08185dc5d4408351e66d3185e3dd0c72c413752f7010816fa5c5609d973e5609f8ff6060741553830c4699b7c5d446e019ec8827ea1ee66002df4a8b213a2fef7024e0ff4380d1554c0d361865de1653eb816788239ea87baf43087c2b2daa745edee94fc0ffab80d1554c0d311865de16536b81a7ca114fd43de32a02df4a8b6a9d976fce25e0ff38fefb10478c5506a3cc0f0146b1ad069e6a473c51f7baab097c2b2de4dbfeabf46f02fe8fe3b1ba8aa96a8351e66d3185e3418f70c413758f7e04816fa5c5489d97316112f0ff91c0e82aa646188c326f8b291cbf72a4239ea8670b23097c2b2de4db5ccbf46f02fe5f038cae626aa4c128f3b6985a0a3c358e78161b3c8b2d5a1c2fdf4a0be9cbbd44ff26e0ffe380d1554cd5188c326f8ba9c5c033ce114fd4b39c7104be9516f26ded45fa3701ff1f0f8cae626a9cc128f3b6985a083ce31df1443d831a9f03df51cf5372e13bead9402e7c47dde7ce85efa87bb6b9f01d75ff3117bea3eea5e5c277d47da15cf88ebac7910bdf51d7ebb9f01d75ed990bdf51d751b9f01d754d900bdf51e7b7b9f01d75ae960bdf51e71dbe3df7ed79dcbe8fe7b943beb6e7c7f3187a3c8f25fedac05f1be4cab73f96f86b835cf9ced76b03df9ee7be3d97ebaf8220fa7a6cb923df4b0ddf328fcf59963af2bdd8f02df3f8cc60b123df0b0ddf328ff7bf173af25d64f896f98539f0ddd6f0dd3687bedb1bbedb5b7cbbd8de89e0c8eb6f61c02909798c81450e781cd5b354ad77895ed7b731aed776dfc6dc5f8aa1cc12d0cf75db21ebced476b48ccf7769027cc837be944d9ec5be07366943df059b3c637f076cd2cebf0d3679bef316d8e4f9cf9b601ba9f387c126cf61b1ffbb3c4bdf01b62a9dc77ed743747e1bd8a45f12f6f795be655bc126fd03b19fa9f4f1dc0c36e9a78bfd1ba5aff546b0497f79ec5727ef3cac079bbcb782fdb9e4dda3b5603ba0f3d88f48bee9b21a6c53757e15d8fea2f32bc1f6a4cedf03b62f75fe1bb0fd59e71782ed099d5f04b63fe9fc12b03daef36f80ed8f3aff3ad81ed3f9d7c0f6a8cee37b617fd0f90fc1f685cee3fb4853747e0fd87eaff3f81ecc233abf0b6cbfd3f957c13659e75f01db249d9f0fb6dfeafc3cb07daef373c13651e7e780ed373a3f1b6c13747e16d87eadf333c13656e76780ed573a3f1d6c63747e1ad846ebfccb60fba5cebf04b65fe8fc5fc1f690ce2f065b139d5f0a36197f11fb7c14eafc72b0c9b8f4d89747be953f1e6c2d747e1cd85aea7c0dd8e43b6b23c126632b8f005b42e7abc1d646e7abc026e73a43c02663890c069b9c970c025b3b9d1f08363987180036191bb23fd8e47b9ebdc17692ce57824dbe535f01b65374fe10d864fcae0560936fc01d009b8c6bfc34d8e4dbcf53c176a6ceff056c32a6c993603b5be7bf04db393aff67b0c9f7309f005b89ceff096c1d74fe71b09da7f37f049b8c37f518d82ed0f947c126e3f0fe016cf2ede42fc076a1ce4f01db453aff7bb0c9b81c8f804dc6dafc1dd83aeafc64b0c937ad2781ed329dff2dd864ecbccfc126dfeb9d08361923ed3760ebacf313c056a6f3bf065b179d1f0bb6729dff15d8baeafc18b075d3f9d160ebaef3bf045b0f9dff05d87aeabcb4336a7f56fbf9413d9f0ce23dcffe383872ca749e2d0cc813e7796b31f0a0affdb1d7bd2c758e2cfb7d13bd5e89a1fde07b5fecbed3e7e71fe97515eaf5ee337c17429996ba7150cbc931bfa95eee80b11cde139275cb329783fd4363dded747d3f7254df7d069370a30e52a68d6652c7c68d3adf12968991ad4ced03126b0168885312f2c2e046abb2523cefad0bcf47c0b33f769ef4b5af8b98c07d2bee6b5ff39ea8196bc550661fe8f7a103fd705f9775cbbcf8f3cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfcccfac780eea3c3e579672074918c5b61f785cdce7c7e7b0b27ef55ce7fd736bfdee8fddef91cff79ae9f5961a752e84327f86674e8b75be08fe2fdb2d6a5b3a784e98715b8abf22a80f3e0b3ae88867bfc1b3dfa285e44b62f35d36cc8dc665a5aadf8a7ac67ec0d0f5a0455357fbeb7ebdae024353dc5f3f3678f0d96811f07ea27f13b09e4fa00e0ef6f18c7121fe705fda0f36c97f0c8c2eb6331e4ba43d90e7e1f86c5acaec329e8bc7bfedcb4a5db61b7ba14ec9e0e8f82e8432fba0eddbaff3d837e420e8f633cbff65caf49c5af45375de1d7f9d53db77177026c10ffade09ac31f93ee27d94029dc48fd80b21ff53e8cf21e5440fd15ad871ec6f643797fbd858ae18caecb1d43f19c45bffdd06cf6e83596d938f21ce7e06c77f576dd29e088d2e078da4cc7ed0e880239efd068f70883f5546b67f73a38c2c5b08657e0b6d94aa8bb4f3524fecdb82c70057c731f125eb9679dbb9f147c068d651c547e7536a79f7c7cedbb0fa7ffd03da8bb8fb7ffd0362a800380263fda5b07ee16a1e441f5ba4ccff308ea32eae31705b9a7aa2ce52e67f413bf4fd92743e9b73fde375dd1675aebfc7014f2238f2da5b4d998eef788cd9eb80c7513d4b6dc7ae0f8d3a1543990ba19e0ece6332be57bb1b7cbbd8e6a8859c43ed33b42884320525e95f693ba274c46bd58f72529732ebf960a9a52e52a645496d5d5a823d4e2697db6d27d449ad77bfa5ae52a64d49ad2ec53a9f80ed84f74dceb6fc5fa64ced018e6bb33dfe3aa7b6ef36e04c821ff4fd01b0c6e4fb88ef6ac8f9bef8117b21e4cf2aa92d2be5440fd15ad8d53e22effc21bbb9dc3e63b96228b3c352ff64106ffdb71b3cdb0d66b54dda97d4e6258e5cb69b3b22342a058da40cde3f96633bbe77673beeef77c41d75dcdf0f8c66bb89e72e2ed90e186ce63d54dbf9a094c1733229d3b124fdabdad984a56cb3e0c87bc32eee63e23ba801d42330ea2a13c680836bc372bc7692764afc7402fb7e9d179d3b19da154299ae25e95f87e7ddd67b97e6f51d5e5308b7b96fe1bb1fbd4a6ab9711cc2fdfab7086c9fea5f47d769e5b67b86c261bb67982ca965c76585ebb0a52ee6357293e0e87beadf1a65f1be5ba6e5ccbc39a6a3d2f753a39ccd0f5ef3c4f6ae46e7d252646a12d8ef177c6cb01704478f5f29fb01c69c791fa593b11ebc8f726b49fa57da24b3acdaf69f9f54ab8f6c47d10edb138cc98f8131a9f3a5df6dea6cabbfcc8b3fc5f8895107376d57fa7da56cee031f001e176dbba336ba148fb1f17d9fa26795edf8ffb1a1550e9fd75a8ff9e633f796463e1edf65d5b6fb4f362df659785c3d4789d2629fc5777c5a741b663b7ed8b4c865df87282d3eb4f88e518b1178df3393167b2d3c2eee4565d262afc5777c5a742fcdf45c03b5d863e17175ef214a0bf1972df38704cc2d8d7c3cbecbab6cf7c96c5aecb6f0b8ba6e8ed262b7c5777c5a74ee86f7e83269b1cbc213fffdb9cc5aecb2f88e4f8b1e3df11e5e262d765a785c3dd38dd262a7c5778c7131dc762fc7a6c50e0bcf8e1c6bb1c3e23bc6f3c36eb67b6d362db65b781cdc77cda8c5768bef18b5188af75d3369b1cdc2b32dc75a6cb3f88e4f8baaaeb67bc2362d3eb0f0b8ba271ca5c50716dff16931b487f2bdb50e5a6cb5f06ccdb1165b2dbe63bc864ac5c5963a68b1c5c2b325c75a6cb1f88e4f8bead4b9d6e63a68b1d9c2b339c75a6cb6f88e4f8bd2d43175531db4d864e1d994632d36597cc71817a9ebc98d75d062a38567638eb5d868f11de3712415171beaa0c5060bcf861c6bb1c1e23b3e2d46a4ee3fadaf8316eb2d3ceb73acc57a8bef18efb9a4e2625d1db45867e15997632dd6597cc7a74597d431756d1db4586be1599b632dd65a7cc7a7c5f0d433b13575d0628d85674d8eb55863f11de37967aabd585d072d565b7856e7588bd516df319e77a6ee5facaa8316ab2c3cab72acc52a8bef18dbced479e7ca3a68b1d2c2b332c75aacb4f88ef1bc33a5c58a3a68b1c2c2b322c75aacb0f88ef1bc33751c595e072d965b7896e7588be516df31c645aaed5c56072d96597896e5588b6516df31ded74ab59d4beba0c5520b8fabf11aa2b4586af11de3f548ea1edf923a68b1c4c2b324c75a2cb1f88ef15951ea1c7c711db4586ce1599c632d1683ef03b1fb4ef7e7161fd217eb32438b4228f36d49fa57fa6245e928ebc07e65589745b1d725ddaf6c61445d16415da44c6187dabab40c9c8cf753eea8aea99859007552ebfdc4525729d3aa43ad2e099d4fc036390cba9d61f9bf4c05c67c12f2a29faaf37bf1d73915abef026712fca0ef77803526df9dd177814ee247ec85903fbd436d5929277a88d6c2aef691f7751ed9cde5161bcb154399f72df54f06f1d6ff3d83e73d83596d936288338923376d579ae9fd088d2e038da40cf6d9fbc4118fd9875038c49f2a23dbbfb95106fb504a99f3a08dc27ea552cf447074bf49476d5967649775cbbcf82b06db016034eba8e2631ff4fd94b122641c0965937121bac07aba1b3655d71e8eea2abe64dd32df0318659c8aeeb9672cab2b63378351f1f472a0198ebd2153a6e3452fe0e9e980c7513d53c7a10aa34e3d8c3a1543197cb7b1c2413d0bc0afac5be62bc0b78b6d8e5ac831f962438b42ac37b46799749475a8f8ed6ea94b1fc77591754bbbd42707be2b0ddf5d0ddf89e0c8ed1c0499f7af4a60eeed8059adb76ffceb2dc5f3368929f1d315ead40f3488ab4eb82e39cfeb67685b08f9fe709e27e5a4ac1cbf845dc5b26c4b643797eb652c570c65fa58ea9f0ce2ad7f5f83a7afc1acb6c90d706ee7607f48c5401f8343e6bb82767d23b4eb03da49193cfe7573a45d6f8347e6bb018f9ce354804dce15843f01ffef92036eb3ddabb0708b0dc789eb6661ec1a3f63ea5ca79bc128f35d81516cbd81a7d29166e6b6bed8d0078fcbcd8d32b26c219479088e8d094b59b5df5d58505bafa6da1edbbb63ba4d6fee402f1ca731007d0243c300f4927a3673c0d33aa81dab71e2a49a09431f1c7ec7f0f4a347412b3430f1b7c0528d2660c37c538b2d088e1c92b2106c32246533b0353164c1a130a5bc0c69e7422ed443d65d6870b60496387de3709e32650a9d16c0e3229455e8c8909e3a74ee99306ad2708c8f6606677d6247fdaf69867251eb72b51dcc7d2209f3660c163af2df14ea9b8479f1a7b68d0cad3a6ee8b087fb4d7870f298e163274d44a1cc1d1bf305c1911bc0fc8d12dcd54e87018015c6c6a199512f6c30e47fb2615ac7cf598e63e69ada04e04fa6d6a05b2b07baa9f5cbd8b7c3868e1e7ddbe4aad1a3865d3379ecb049a36ac6e2d66c692817b5a5e5ffcdc1666be2b1ac9ab0d9c2655b586cb60947196e09363972b5029bf0b4065b53c84b7973cb3809d70b60fdb24ba9ff29719ae98ab7086a43400ec7aa5d55fbaf3a95539f9055a7426a6863b539d5d0c5ea8ea11a9a587dc54e0d3dac861a56430b9f11a4870e5643059f1da48702565fbb2809d243fb9e17d40eddaba6c3c0f9bd203d34afba4d7351903eed5243eb760cd243e7aa5b979d82f467ded4bbf5eaf45ddd1650a7bcea124f9d7eaad34e7579a16e5fa85b59ea944e9d2eab534175faa62e47fa6aadfb85e98a305d19a6abc2747598ae09d3b561ba2e4cd787e98630dd18a69bc27473986e09d3ad61ba2d4cb787e98e30dd19a6bb82f4f0ce7707e9e1d7d5f0cff706e9a1a1ef0bd2c346df1fa487947e20480f373d34480f453d2c480f533d3c480f61fd60901ede7a54901e26f7e1203dd4ae1a82776c901e0e5b0d93ad86cf56c3fcaa2181d590c26aa861352cb11ac2580d81ac86467e3c480fb9ac866c7e2a480ffb3c354ccf84e9d9303d17a6e7c3f442985e0cd2c383ab61c3a705e961c6d5f0e33383f470e5b383f4f0e66ad873351cba1a265d0d9fae865557c3bcabe1dfd5b0f06f86e9ad30bd1da41f49a84731ea1185bafdaf1e83a95bd48b82f4adf32541fa11b77ae4afba40a82e21aa8bccaa20dd854a7529535dec549743d505537549555d74559765d5855b7569575dfcd52b0fea1510f54a8c7a4548bd32a55e2153afd4a9570cd56ba2eab54bf51ab17aad7a7f90be2d7e30483f2a55b7c3d5a301158feaf6fd6761fa41987e18a61f85e9c761fa49987e1aa69f85e9e7417a586335dcb11a2e590dadac8661564336aba19cd550d06ad8e82f82f4d0d36ae8ea3f05e921b1bf0cd35761fa3a480faffdd730fd2d4cdf84e9ef61fa4798fe19a67f05b54369636371866e61f4554a3074d2a4e163c64d2a9954533266f2e849a3c68d7eac64caa849234b6a1e193e61c4e89a29b8f00ff5c2320e78bf0913863e56326a6cf5f0474b6a264f2aa91951525533796cf51107ea7fea85ce3adae3d0eaea6867fffe5d48ff6f3d9db6d26d9f8cb07e7de6bab5695a0f414ea8cf42dd9ad6af4213f4514a2e67ef4c9feb964c1c5d33a9a4b4646cf8373cb8d64c195edda904ff37311479e2a4928993864e9854326242cd9892ce9d70bd4fb7ae4725fea3b51b985667d44f9c16fa5b4af50ab19de7d64381cfcfad1fe9dfbf0be9bfd5d369eac09b6d0d9bd767a14b4aea47585e1229cbc4c95593260c1d36297ae19edf65e1bef5a9e62df5ace67fd5c759d30ef558a84387fa11f6ad8fb35159380bfe3f244cae11d44d06009b2d6c6f00000027cc1f8b08000000000000ffed9d77701cc795c667911856581024981324db1423b8586430813953a6242b072650a44512140925cbb2244b72ce395b4e6739e77c9673ce39e7ecba2adf3f57bef255b9ae7bb69ff1a139b3c6aee6816fb06faa1eb6e76defbc5f7ff3a667b67b7690098acb9f8d655cb9d6d8638273177a7fc0bde61fddd29ee0b6f29c9c999470d6a484b336259c7529e1ac4f0967434a3827a58473724a38a724c899013e2edea929e3cda68cf782201d79db9812ce5c4a389b52c2392d259ccd29e19c9e12ce1929e16c4909e7cc9470ce4a09e7ec9470ce4909e7dc9470ce4b09e7fc94702e4809e7c294702e4a09e7e29470b6a684f3c294705e9420e70ae0a431f2c7bad7c7b9d725eef562f7bad4bd2e73afcb5d1bebdcbadde64a63ab8cb579efadb6ccc6ec6079c17bafc358a7b12e63ddeebd56f75e8fb15e637dc6fa8dad31b6d6d83a63eb8d6d709a6c34b6c9d866635b8c6d35b6cdd876633b8ced34b6cbd86e637b8ced35b6cfd825c61e6f6cbfb14b8d5d66ec72634f307685c772a5b1ab8c5d6dec1a63d71abbced8f5c66e3076a3b103c60e1a3b64ecb0b123c6068d1d357693b163c68e1b7ba2b19b8d9d3076d2d8296343c64e1bbbc5d81963678d0d1bbbd5d86d9e66b71bbbc3d89dc69ee471de65ecc9c6ee36f61463f718bbd7d87dc69e6aec7e630f187bd0d8d38c3dddd8338c3dd3d8b38c3ddbd8738c3dd7d8f38c3ddfd80b8cbdd0d88b8cbdd8d84b8cbdd4d8cb8cbddcd82b8cbdd2d8ab1c0b1d08af36f61a63af35f63a63af37f690b137187ba3b137197bb3b1b718fb0f636f35f6b0b1b7197bbbb177187ba7b177197bb7b1f7187bafb1f7197bbfb10f18fba0b10f19fbb0b18f18fba8b18f19fbb8b14f18fb4f639f34f688b14f19fbb4b1cf18fbacb1cf19fbbcb12f18fba2b12f19fbb2b1af18fbaaa7f9d78c7dddd8378c7dd3f9bee55ebfedead231ff1df7fa5df7fa3df7fa7df7fa03affe0fbdf51f79eb3f76af3f71af3f75af3f73af3f77afbf70afbf74afbf72afbf76afbf71afbf75afbf73afbf77af7f70af7f74af7f72af765e6dc5cc62797230b20c0409f5499d837d765c9dc4f6e7edec9c50ad7b8f5e5b9dbfceadd36bc6f9ebdd7abde76f70eb0dde7626bbf5c99e3fe7d6739e7f9a5b9fe6f9a7bbf5e99ebfc5adb778fe0bddfa85e0cfbaf78a0d2bbe585fad7365c047f95903be7ae7ab055f036d0e7c939caf1e7cb47f1bc037c5f926816faaf34d065fd6f9a69096c62e70be8120a95cc91fb4db6d4c7abb6e2e22973cef21bbdd2626de69c9f31eb6db6d66e0b5f931dd6dab11f26686f3e5c0d7e27c4de0735dd0bf8e39eb9be57ccde09bed7cd3c137c7f966806faef3b5806f9ef3cd04df7ce79b05be05ce371b7c0b9d6f0ef81639df5cf02d76be79e06b75bef9e0bbd0f91680ef22e75b083eea2f1781efb1ceb7187c746dd70a3ebacebb107c74cd7791f3d97e627206e2393ff551613cea9fc1f738ea9bc1b784fa65f05d4c7d32f896426cf22d837e857ccb9d8ffa28fb5ebf2b0f04491d1385f0185e93f476cd96ed76d725bfdd700e6c7d30a2f500c459035a6d70e504ef0f69c7d8741d4371c85f07e59d5097ea911e749e2176dbefaf75e50d253ed7ef7d2e0775d646b47f2048b6fdeb3c9e751e733db49f29678f6ace8e79293b67af84ba7eeed135cf44ccd93dc0917cce767468ce8e79293b6707a1ae9f7b74dd3b1173f61ae060c8d91e9e9c2de435678be36041109d7bf4dd6722e6ec31e0483e67bb3467c7be949db3f7415d3ff7e8fbef44ccd9db8023f99cede9d16b83312f65e7ecf3a1ae9f7b3416331173f601e060c8d943dacf8e79293b675f0b75fddca371c18998b32f028ee473b68f29673b346783e29c661044e71e8d514fc49c7d083892cfd9c33a3e3bf6a5ec9cfd18d4f5738fe64b2662cebedb95ed3cc3b7dc3cc302f07ddbf916026ff2b97da49d29b7db35b78bf77a0441748ed2dcdd44cced475cd9e6f177e1de03f27d8fee4b00dff79def22f0fdc0bb6783e918e8d66360ec6d2af718f819d4f57399e69127e231f06de060c8d91ecdd9b1b7a9dc9cfd0bd4f5738fee69988839fb4be060c8d95ecdd9b1b7a9dc9cfd3bd4f5736fa92b4fc49cfd2f57b6d70b3f71d70bcbc1f753e75b01be9f39df4af0fddcf95681ef17ced706be5f3adf6af0fdcaf9f2e0fbb5f3b583ef37ce5700df6f9daf037cbf73be4ef0fddef9bac0f707e7eb06df1f9daf077c7f72be5ef0fdd9f9fa9ccfde9347f75e7dd1f9ecbe258d068264f72ddd6349dba6f595e310bbc98bdd348eb19bbdd8cd11b15731c4ce420c5a32defa009457f1f2e473c083b156271fabc3b6bd2d187bdb57034f9ea1ed598831169e3cf0b427cf139e3f0bc96f37dcc76d9ea65988d506edea6068570662d1b6699de2e5c087fd7747046367f28c850cc4a26dd37a2730920fcf27745ea7e3c79e0f97644678198ea5f09a88e2d1f39f886335f8a9ce375b46d8963bb646781fcfaded9e8f292fc3bca058b46d5aa7788dd09ef6f1672c8c9531ef3172f511198845dbf663e3f1be6afc351bd37ecd81ef3cf449854afba446601b8feb94b87d2d2536c7f92a0331a86f23cd0be0a73ab3dc0f126cdfb61dfa5d86e3af50eef51bf607c9e771218fc7f558783a8087e3d8673a5ef378deff67906cae75795ab57b5ae5a04e27e8d7c5a05fa9eb108aa7cccaaccccaaccccaaccccaaccccaaccccaaccccaaccccaaccccaaccccaacccf299f1fe0b9cdfa47a2b853092af003c1ce3fce133a0dcb668fb765ee7c730af93fcbc45218f7396748fe132afcd7550e7af9991ba3f87f9747f6e10e73457f26a37a6fb2c1a8373e76239e710e3e681a3e62f5b138b5d38cc35df66ef51b3cf216bf3745d19a129c37d2aa334cd789ae27d8a2b3c1e9ba7736b47d838e6feca9d8b44ada89ce4dc1ede63c0bb5f8afd07e5424d30baffc0f34c77e2b147cf61d27c79b717bb0eeafc6f6664dfd0bda8f4bfeefc7b9e6c9d1e6fdbf49965e0eff1b63dcd7d9638eabdedb7c167a9ceff419ffaba9ae05f9a71dcff81fd72006dc56500ca386f9efc79b8388fdf51064f17f070f4334cd71b793c06929ec7eff1b48aba8ea13adda05f0f837e51d7a2b44ef194599995599995599995599995599995599995599995599995599995599995593e33fe569458b350af2084719cee7d08e733e8f92fb47d3baff39c9a91b8dcf37034e7b4dc6b731dd4f946cd48dd17b8726370eefd0e71fb92613eafe4bea4788dd01e9c0be2fa3d77a7c7d319a105955b138b5d9cc74f5ee39179fc0e4fd74284a65cc72bceb1a2a678bcb67b3c3837da189c7b6f4916b6331ef70ec5e505c5c363a9137c54c6df4773ec673c97f8f7f5503c9cbf7ed8693b2de0daf7853c67bfd10b6d1a08cecdef3aa8f32ee8fbdee3ca780f07de3bf248c4fbb4949aa726fd589e65972fcefbae01ce018883b1d7026b42b1db3176c619c5217f1d943f59335297ea911ea435b1db63849e0986ecfee7dabdcfe5a04e5f44fb078264dbdfeff1f47bcc769fbc1ff2ec1138ff73f5497d311a2d038da80e5e0771dd93e7f791fefd8d78df5e835707af59a8ce17a18f8abb7f34ea9e43aef358dc3d8751d7c65dc0e8b7d1bfcfb3daefd3fa21f41749dfa7f543c821bc4f2bf0b6bf1cb64f5c0d41fcb985eafcd4dbbe7f4d4e9fc1fbc0a8ce2fa0bf6872f72c3606e75e7fe33d53e3f1fd2aee3e698a87d735786cffbbb65be65ea83f902033e604b2e07502d5f993b7cf7a62b857477cf6af319f25ade83954f8fdc5d7cfead0079f19484487e231dfefb585f2ba0fda4275fedbbb064cfebaa5780d987c5b475f93503fd019d156aaf33f70acfd1daef1683fe1f78e86da73dfa7a5d43520e967db3cdecf07c6d8129e0f5c5f3b52d77fce2f695deef381bbbdcf497c3ef03f20cf1ae03e74aebe7a6d8c46cb4123aa83bf0da2f3083ecb37ea1cc3756f7fdc3926ea1994d83f37d58e3f9b3fae16758d4075e8b3788dd0e298a7399dfdbafe78219d2f93bc6f187f2bd10671f1b7126d4c7ae641b70158c7eb82f3193bcf143bee99d3f971881df7cce9f188ddecc56e1ec7d8aab96a2e497386672287bf3fc36796daa5d4752931e4e073352960ac4d01635d0a18eb53c0d89002c64929609c9c02c62929609c9a02c62c309ecf733b833e854af5e1da5fa5ae353036c3ff2e2994fbff3b98ff974ac96b1f8ccdf09d2ed4625530762df07b1ec7b31fcafd5f2fc480ffbb607a0a1867a480b125058c3353c0382b058cb353c03827058c7353c0382f058cf353c0b820058c0b53c0b828058c8b53c0d89a02c60b53c078510a181f9302c6c7a680f17129605ca28c8930aee0652c54ca687938fee7dfa3f99f630c3cf9a87b4e997e7b52f6ff5b637e3e697ba5cf8dc37b4b78ff27dca37bb61dc7bd23e53edbaed4ff5b65622c54cac8751f3bfe8e672c3cf8bbc8a8dfd63030162a65e4fafd0bfe466f2c3cdda0595784660c8c854a19b9ee952bf75e4ebca7bf3b423306c642a58c785f75823ca1663d65f0f482663d119a3130162a65e4ba2f390b31c6c2d3079af54668c6c058a89491e9b76da1667d65f0e06fc0fa223463602c54ca6879d63069d65f06cf1ad0ac3f4233498cc893f473b2fb236271fc66b0dcb61303324e4901e3d41430e27d121cfd57a9fb24fa79f52954aa0fd7fe2a759f04c666f87d4ca805fe1ee2df69b18e97a7e47d12187b3d9316f87b957fa7c57ae0e1f8fd4c16628c85871872f0b9e929609c9102c6961430ce4c01e3ac1430ce4e01e39c1430ce4d01e3bc1430ce4f01e38214302e4c01e3a214302e4e01237e5765b8562cf9fd65fd048f1df75d65a2c78efb5e32d1636b9e6b9e57436ccd73cdf36a88ad79ae795e0db135cf35cfab21b6e6b9e67935c4d63cd73caf86d89ae79ae79262a7618c5f19271e23f2b426c793c7b663ac01016d1f88e0c930b51d636d14d07662481be3861430ae4901a3ea58bc07b11246cbb389896763193c9b80673313cfa632783603cf96e479c29cda5c060f31e4e0736b52c0b821058caaa3ea28895175ac1e1d955119955119cf07631afa70654c453e162a65b43c5b93e70935db5206cf56d08c3ed7cecb58a894d1f26c4b9e27d46c6b193cdb40b3ad119a3130162a65b43cdb93e70935db5606cf76d06c5b84660c8c854a192dcf8ee47942cdb697c1b30334db1ea1190363a15246cbb333799e50b31d65f0ec04cd764468c6c058a894d1f2ec4a9e27d46c67193cbb40b39d119a3130162a65b43cbb93e70935db5506cf6ed06c5784660c8c854a192dcf9ee47942cd7697c1b30734db1da1190363a15246cbb337799e50b33d65f0ec05cdf644682695714d0a1837a4809159c742a58c96671f13cfde3278f601cf254c3cfbcae0b904781e9f3c4f98539794c1430c39f8dc9a14306e4801a3eaa83a4a62541dab4747655446652c8f7120058cbaaf95512a23c3f7ab92bfa1b96482c76ef262375549ecb8dfd04cf4d89ae79ae7d5105bf35cf3bc1a626b9e6b9e57436ccd73cdf36a88ad79ae795e0db135cf35cfab21b6e6b9e67935c4d63cd73caf86d89ae79ae7d5105bf35cf3bc1a626b9e6b9e57436ccd73cdf36a88ad79ae795e0db135cf35cfab21b6e6b9e67935c4d63cd73caf86d89ae79ae7d5105bf35cf3bc1a626b9e6b9e57436ccd73cdf36a88ad79ae795e0db135cf35cfab21b6e6b9e6b9a4d8fb938f5d28f71933fb8187e399374cedccdbed5eeab6f5cf04f5b35a5de6697589a7550eea5c0afa5dc6a05f06e2d2b6699de295cb7cb10066a6d805dbbf4c81f6538c0d9e1e36fee54c6d8febeb2f9fe0b1e3fafa891e3baeaf9fe8b135cf35cfab21b6e6b9e67935c4d63cd73c97121bcbf5c1c8753b3dffd46ee309ae5ce7d69195fc54e7f1938aafd3023d863862eb31a4e78a6a88ad79ae795e0db135cf35cfab21b6e6b9e67935c4d63cd73caf86d89ae79ae7d5105bf35cf3bc1a626b9ecbcbf31cbc5f330e3c81c71394e059248c678e309ee9c278a608e359268ca75618cf7a613ce3713f5f393cbb84f16c17c6d32b8c67b1309ee5c278e60ae32908e399218ca74b18cf54613c5b84f1d409e3d9288c272f8c678f309e25c278e609e36911c6b342184f56184fbd309e4dc278560be3592a8c67af309eddc278fa85f1ec10c6d3278ca75b18cf7c613c1dc278660ae36913c67381309e46613c5b85f13408e359258c679f309eb5c2781608e399258c27278ca74918cf24613ceb84f1ec14c6b34d184f8f309e85c2783a85f1cc16c6b35218cf34613ccdc278360be3992c8c272380271b9cfb4cb22cbcbf1f7c35de67edf540f3cc91f7af70fe1af8cc95ae5c1bb1ed2bc047bf0dbf32e2b3a8d315d0960157ce3fba25d409630dc03ac56b048e2b85f04c16c6b359184fb3309e69c278560ae3992d8ca75318cf42613c3dc278b609e3d9298c679d309e49c2789a84f1e484f1cc12c6b34018cf5a613cfb84f1ac12c6d3208c67ab309e46613c1708e36913c63353184f87309ef9c278ba85f1f409e3d9218ca75f18cf6e613c7b85f12c15c6b35a18cf26613cf5c278b2c2785608e36911c6334f18cf12613c7b84f1e485f16c14c653278c678b309ea9c278ba84f1cc10c65310c6335718cf72613c8b85f1f40ae3d92e8c6797309efdc278d60be3a915c6b34c18cf14613cd385f1cc11c6b348184f4d040fc3ffbf0c79e8fe35da36adef17129b613f84fff7f32aa6365dedb655efb64bfc14af0eea5ce33a0a7b7f157e96b8fcfb0df1dc7435687435535b687f64bcfdc31d1befab0c8021f0f409227838ee47656ae7a83c4cf0ffcfe6ad56d7785af9fb2e0775ae02fdae61d02f2ab7ff750c000f5de7106b16eaad17c248becb9979b2d0665a4a1d03d7000fc731c9d4ce3057aff5dab43e4277aa83b97a2d433ba38e1d5abf167836ba32b166a1de46218ce4bb9a99270b6da6a554ae5e0b3c1cc70e533bc35cbdce6bd3c608dda90ee6ea750ced8c3a7668fd3ae0d9e4cac49a857a9b843092ef1a5e9ece2cb4999652b97a1df0701c3b4ced0c73f57aaf4d9b2274a73a98abd733b433ead8a1f5eb613f28b33247315b1efa9d0eb166a1de66218ce4bb9695a7339f8536d352aa1fbb1e7838fa7926ddc37eec06af4d9b2374a73a98ab3730b433ead8a1f51b2262b706c96a71e318b4b83182e7c671d682e295cb7c550a995567d5398e5975569de3985567d5398e5975569de3985567d5398e5975569de3985567d5398e5975569de39855e7f161569d55e73866d559758e63569d55e73866d559758e63569d55e73866d559758e63569d55e73866d559758e63569d55e73866d559758e63569d55e73866d5b93266cb43cf4522d62cd4db2284917cd7f1f284bf0bda128c5e32defa00946f049eeb19f4616a67780ff901af4d5b2274a73a787c1d606867d4b143eb07603f1c2883f9861432abce95315b1e7afe38b166a1de56218ce4bb9e9727ecc7b606a39752fdd801e0e1e8e799da19f66307bd366d8dd09deae0f17590a19d51c70ead533c6556e63866cb43ff078858b3506f9b1046f2ddc8ca53087fdfb82d18bd94eac70e02cf81c4798afd1883ee613f76c86bd3b608dda90ee6ea218676461d3bb47e08f64339cc37a4905975569de3985567d5398e5975569de3985567d5398e5975569de3985567d5398e5975569de3985567d5398e5975569de39855e7ead1d9f2d0ff8321d62cd4db2e84917c0758793ac27987edc1e825e3ad0f40f910f01c4c9ca738efc0a07b38ef70d86bd3f608dda90e1e5f8719da1975ecd0fa61d80f139df98614326b6e8c0fb3e68632c7316b6e28731cb3e68632c7316b6e28731cb3e68632c7316b6e28731cb3e68632c7316b6e28731cb3e68632c7316b6e28731cb3e68632c7316b6e28731cb3e68632c7316b6e28731cb384dcb03c3b5c9958b3506f871046f21de4e5099f7bb02318bd94ba6fe730f01c62d087a99de17d3b47bc36ed88d09deae0f17584a19d51c70ead1f81fda0ccca1cc56c7976ba32b166a1de4e218ce43bc4cb13f6633b83d14ba97eec08f070f4f34ced0cfbb141af4d3b2374a73a98ab830ced8c3a76687d10f683322b7314b3e5d9e5cac49a857abb843092ef302f4fd88fed0a462fa5fab141e0e1e8e799da19f66347bd36ed8ad09dea60ae1e656867d4b143eb47613f28b33247315b9eddae4cac59a8b75b0823f98e30f364a1cdb494eac78e020f473fcfd4ceb01fbbc96bd3ee08dda90ee6ea4d0ced8c3a7668fd26e0d9e3cac49a857a7b8430926f9099270b6da6a554aede043c1cc70e533bc35c3de6b5694f84ee540773f518433ba38e1d5a3f063c7b5d9958b3506faf1046f21d65e6c9429b692995abc78087e3d8616a6798abc7bd36ed8dd09dea60ae1e676867d4b143ebc781679f2b136b16eaed13c2483eecc7f631f1347a3c8d115a4cc4d84d5eeca62a89ddecc56eae92d89ae79ae7d5105bf35cf3bc1a626b9e6b9e5743ec6acd35d5bc3a35cf9c47cd33e751f38c6a2e52f37f2617bb2b178c2c35108b617cae7d2c638ec8b34818cf1c613cd385f14c11c6b34c184fad309e5e613c8b85f12c17c63357184f4118cf0c613c5dc278a60ae3a913c69317c6b34418cf3c613c2dc2785608e3c90ae3a917c6b35a18cf52613cfdc278fa84f1740be3992f8ca74318cf4c613c6dc2782e10c6d3288ca74118cf2a613c6b85f12c10c6334b184f4e184f93309efdc2782609e359278ca74718cf42613c9dc278660be359298c679a309e66613c9385f16404f06483737fdb81bf27a8051fdddfbf0f7c4f74e5fde0ab898841db390e3e1acfa56dd8f3d58299e732d4c0676e8ee07a62443c8a7373c467c743778c3500eb14af11386e16c23359184fb3309e69c278560ae3992d8ca75318cf42613c3dc278d609e399248c67bf309e26613c39613cb384f12c10c6b35618cf2a613c0dc2781a85f15c208ca74d18cf4c613c1dc278e60be3e916c6d3278ca75f18cf52613cab85f1d40be3c90ae359218ca74518cf3c613c4b84f1e485f1d409e3992a8ca74b18cf0c613c05613c7385f12c17c6b358184faf309e5a613ccb84f14c11c6335d18cf1c613c8b84f1d444f0ec67e2897b9ec27e01b1edb8375d0bd2985816de1f8fdf29edf71869fd1830920fefd3cd33f1c43d83222f20b6d5623594ed9285f7f177265c3995f718693d2aa7f03ecbd54c3c71cfed582d20b6d582e606e81e802cbc8ff75573e5d46a8f91d6a372aa999727fcff01ab82d14ba97b8df098e3d8874cedcce3f197e03334229f91bccad32a0775c6e3bee2b8fe80e229b332c7315b1e9afb22563c9f8dc7ef96c6c218757e65e009fbc7b660f452aa7f3c063c1ce70fa67686fdd809af4d6d11ba531dccd5130ced8c3a7668fd4444ecd620592d4e8e418b93113c27c7590b8a572ef3fe14324bd0d9f2d0bd9ac49a857a2b8530922fcfcb13f68f2b83d14ba9fef124f0709c3f98da19f609a7bc36ad8cd09deae0f1758aa19d51c70ead9f82fd500ef3891432abce95315b1e9aa321d62cd42b086124df31569e423e0b6da6a5543f760a7838fa7926ddc37e6cc86b53214277aa83c7d710433ba38e1d5a1f82fda0cccaaccccaaccccaaccccaaccccaaccccaaccccaaccccaaccccaaccccaacccb2992d0ffd769858b350af430823f94eb2f214e71d3a82d14ba9798721e03995384f71de8141f770dee1b4d7a68e08dda90ee6ea698676461d3bb47e1af683322bb3322bb3322bb3322bb3322bb3322bb3322bb3322bb3322bb3322bb332cb66b63cf40c7962cd42bd4e218ce43bc5cb13fe6eab3318bd949a77380d3c1cf3324ced0ce71d6ef1dad419a13bd5c15cbd85a19d51c70eaddf02fb419995398ad9f2d0b30789350bf5ba8430926f8895a7387fda158c5e4af563b7000f473fcfa47bd88f9df1dad415a13bd5c15c3dc3d0cea86387d6cfc07e2887f9440a995567d5398e5975569de3985567d5398e5975569de3985567d5398e5975569de3985567d5398e5975569de3985567d5398e5975ae1e9d2d0ffd4f4362cd42bd6e218ce43bcdcad311ce3b7407a39752f30e678087635e8649f770dee1acd7a6ee08dda90e1e5f6719da1975ecd0fa59d80f139df9440a993537c68759734399e398353794398e59734399e398353794398e59734399e398353794398e59734399e398353794398e59734399e398353794398e59734399e398353794398e59734399e398353794398e59426e589e1e5726d62cd4eb11c248be5b7879c2e71ef404a39752f7ed9c059e330cfa30b533bc6f67d86b534f84ee54078faf618676461d3bb43e0cfb419995398ad9f2f4ba32b166a15eaf1046f29d61e6c9429b6929d58f0d030f473fcfd4ceb01fbbd56b536f84ee540773f5568676461d3bb47e2bf0f4b932b166a15e9f1046f2e139ae8f89a7d1e3698cd0e27cc5b65af4bbf205ee350beff7032357dfd2e731d23ae638f91a81a79f89a7c9e3698ad0e27cc5b65aac85b25db2f0fe5a60e4caa97e8f91d6a372aa0978d632f1347b3ccd115a9cafd8568b75ae3ccdbd66e1fd75c0c895536b3d465a8fcaa966e059c7c413d727ad1b87d871c7d778c48ecb95f188ad9aabe6aab96acea979e63c6a9e398f9a675473519a335c478563a7142300065c06a08cdf1538ae3d99da998ffa3eb6ce6b137e1fc33187f3f57d439995398e9969dca233ebc5267d028f879661662dc6730cb2df6b93b431c872994fa4905975ae8cd9c6be2df9d89d592f36e913783cb4dcc6ac05533bc3fee0f6205a638a97833a98a7b733b433037169dbb47e3bec8772984fa4905975ae8cd9c6be23f1d8c567b3636cd227f07868b983590b9e7616fb833b83688d295e0eea609edec9d0ce0cc4a56dd3fa9db01f945999955999955999955999955999955999955999955999955999955999955936b38dfda4c46317c7ef3136e913783cb43c89590b9e7616c7efef0aa235a67839a883fbfc2e867666202e6d9bd6ef82fda0cccaaccccaaccccaaccccaaccccaaccccaaccccaaccccaaccccaaccccaacccb2996dec27271f3bfc3d0ec6267d028f879627336bc1d4ce70fcfeee205a638a97833ab8cfef66686706e2d2b669fd6ed80fcaaccc51cc36f653128f5d9ccfc3d8a44fe0f1d0f214662d78da59ec0fee09a235a67839a883fbfc1e867666202e6d9bd6ef81fd500ef3891432abceaa731cb3eaac3ac731abceaa731cb3eaac3ac731abceaa731cb3eaac3ac731abceaa731cb3eaac3ac731abceaa731cb3ea5c3d3adbd8f7261ebb231cbfc7d8a44fe0f1d0722fb3163ced2c8edfdf17446b4cf1725007f3f43e867666202e6d9bd6295e35309f4821b3e6c6f8306b6e28731cb3e68632c7316b6e28731cb3e68632c7316b6e28731cb3e68632c7316b6e28731cb3e68632c7316b6e28731cb3e68632c7316b6e28731cb3e68632c7316b6e28731cb3e68632c7314bc80d1bfba9c9c70e7fcf8eb1499fc0e3a1e5a9cc5a30b533bcffe5fe205a638a97833a98a7f733b433037169dbb47e3fec076556e628661bfb0186d8592f36e913783cb43cc0ac05533bc3fee0c1205a638a97833ab8cf1f64686706e2d2b669fd41888d7a27143bbc079262d4b857eb7b9a2bd782efe9ae5c07be67b8723df89ee9ca0de07b962b4f02dfb3a13de47b8e2baf00df735d791df89ee7ca6bc1f77c57ee07df0b5cb90f7c2f74e561f0bdc8956f05df8b5df936f0bdc4956f07df4b5df90ef0bdcc95ef04dfcb5df949e07b852bdf05be57baf293c1f72a57be1b7caf76e5a780ef35ae7c0ff85eebcaf782ef75ae7c1ff85eefca4bc0f75084ef0daefc54f0bdd195ef07df9b5c793ff8deecca53c0f716579e0abeff8032bdbed5952f00dfc3aedc08beb7b9720e7c6f77e526f0bdc395a781ef9daedc0cbe77b9f274f0bddb956780ef3daedc02bef7baf24cf0bdcf956781effdae3c1b7c1f70e539e0fba02bcf05df875c791ef83eeccaf3c1f711575e00be8fbaf242f07dcc951781efe3aebc187c9f7065dcbfffe9ca0f808ffa9507c147fdcad3c047fdcad3c147fdca33c047fdca33c147fdcab3c047fdcab3c14779f71cf051de3d177c9477cf031fe5ddf3c14779f702f051debd107c94772f021fe5dd8bc14779f712f051debd147c94772f031fe5ddcbc14779f70af051debd127c9477af021fe5ddabc14779f71af051debd167c9477af031fe5ddebc14779f710f828efde003ecabb3782afd595df04be0b5df9cde0bbc895df02bec7b832f6338f75e5b782ef71aefc30f8a82f7c1bf82e76e5b7836fa92bbf037ccb5cf99de05beecaef02df0a577e37f856baf27bc0b7ca95df0bbe36577e1ff856bbf2fbc19777e50f80afdd953f08be822b7f087c1daefc61f075baf247c0d7e5ca1f055fb72b7f0c7c3daefc71f0f5baf227c047e771ea67ecf16c8f41d28134b23e6a735b445bc83719da3210247b4d47b168dbb4de018cb40f0ae3cf58182b63bbc76879ba1834c3bca2a5d4f78f2ee0e964e0616a67f8fda3db6b5387d7a61cd4b918dad9cdd0ce0cc4a56dd37a37c4e6d8e7a845bddbee524f8b3aa8f3077792b3e7ce523ad2366cfe1622dad2c7dc16da36f54b7de310bbc78b9df762637f4c4ba9e3ab07987b1998ed76fb93df6e787cad71dba29ca2387968d35ad020a93661ec8c338a43fe3a28ffa365a42ed5233de8fc45ec3697695f22bbffb92eef7339a8d317d1fe8120d9f6f77b3cfd1eb3dd277f6b19e160381ec21ce8f338683d0fdaf5c768d707da511d3cff1598b4ebf5787abdd89687ae71bac147d70ac48fd7596de3c0edf77bdd11dce4eb01c6a86b9df6e4194b5eebb40323f97a81a78749337f5f2ff5f4c1f3728357873e5b07759adc97bd69c1e8ef1f54d71e774b3223eda2efe0ff0c92edd31b18f4c2f18100f4093c0d03d08bda59cfc03335181923383b3c74e6e04d83970e1e3c9201b43a0f135f3311cda8011f966b237c41307a2804876469280487646b3c59700886eadbaf52b65934dc3078f2f8f0134e0d9e3a7ce6ced3c38347f60cdd84d4f51e3d92c6b50049d147cbe46064d066204836791abc58a5926732bc4e62e0616a6778d29be2b5a9c16b530eead4c37b5318da9981b8b46d5ac70160f26176d2fb386150e3b505b3780abcfafb36d10651c0c7c0f6330ecebe57e7846d70f0242ef5187614d15ec9d91d6147056d6f6d47fdec616747f5ec8591edc8ed289d1d95b3a37076d4cd8eb2d951353b8a6647cdec28991d156b0d8aa35e1701cf1781d18e6ad9512c3b6a65bf49dab3821d85b2a34e7694c95e4dd86f29f60c6caf38edd5913d23da33a1fd3665bf59db338c3d7bdb33933d9bd8ab237b5564af62ed559d9d99596f6c83d37aa3b14dc6361bdb626cabb16dc6b61bdb616ca7b15dc6761bdb636cafb17dc62e31f6f8a038a27ca9b1cb8c5d6eec09c6ae3076a5b1ab8c5d6dec1a63d71abbced8f5c66e3076a3b103c60e1a3b64ecb0b123c6068d1d357693b163c68e1b7ba2b19b83e21d1e278d9d323664ecb4b15b8c9d31763628ce12d959213b0b64677dec2c8f9dd5b1b33876d6c6ced2d859193b0b63675dee0d8ab32a7676c4ce86d891703bf26d47baedc8f63382e2c8b51da97e76501c89b623cf76a4d98e2cdb91643b726c478aedc8b01d09b623bf76a4d78eecda915c3b726b476aedc8ac1d89b523af76a4d58eac3e1414474eed48a91d19b523a176e4d38e74da91cd8783e2c8a51da9b423937624d28e3cda91463bb2684712edc8a11d29b423837624d08efcd9913e3bb26747f2ecc89d1da9b323737624ee93c61e31f629639f36f619639f35f639639f37f685a098935f32f665635f31f655635f33f67563df30f64d63df32f66d63df31f65d63df33f67d633f30f643633f32f663633f31f653633f33f67363bf30f64b63bf32f66b63bf31f65b63bf33f67b637f30f647637f32f6e76064d41e3b8abfbb151a413e383c3c78f2f470ebf050ebc95b4f0c1f3f7de2ced6db8f0f1f6b1dba6df0ccd11343b7e387dfeaba261a1edf78e6ccc13b5b8f9f3a327847ebd0adc3ad43475b0f0ddd7aeac859fcd017dc87169c1bf1e09123f1c17e50f328487f5261d03fbacfd1c4c3ced26dfb4b2582fcad920fcda8adac4197b8330b7d2bbdac7815d77af6c4d0706bbef594f97bf084f9cce091b6567cefac11f9ec70ebd9e18367865b8f9e193ad9dade86dbbd7a4a058df87d4b051fcacd1c7bcb83ff079bac954d69010400", + "packedBytecode": "0x000000028df71de5000000475c1f8b08000000000000ffed9d77781447baee5b20821924c0395bd8de75c0c6428828018373ced818630c4260b001118d33ce2607e74cce194cc61830c6de9cbdbbde607b77bde1dce73ef7fe79ceb9f7f8deae99fa8e5e15d58346ee1a5e69aa9fa734d59faafbfbd5db5f57a7eaae82203dfd2b4c053adf3c4ce707474ef2ffa4fe2dfd6e539718d755ea92b3a09170366b249ccd1b09676123e16cd148385b3612ce568d84b37523e13c2e46ce02e073c5dba691f1261a196fdba071c46d5123e12c6e249ced1a0967fb46c2d9a191701edf48384f68249c273612ce931a09e7c98d84f39446c2796a23e13cad91709ede4838cf68249c673612ceb31a09e7d98d84f39c46c259d248383b3612ce731b09e779317276024eb997ff3dfdfb7dfd7b81febd50ff5ea47f2fd6bf9d741d0bf5fc2561ba344c9dc37499f13f258cbaa15f16a6aec6ffcac3d42d4cddc3d443ffaf44ffaf67987a85a977982ac25419a63e61ea1ba67e5a8ffe61ba3c4c5784e9ca305d15a6abc3744d98ae0dd37561ba3e4c3784e9c630dd14a69bc3744b986e0dd36d61ba3d4c7784e9ce300d08d35d61badb601918a67bc234284cf786697098ee0bd39030dd1fa6a1611a16a6aa300d0f53759846846964981e08d3a8308d0ed383617a284c63c234364ce3c25413a6f1619a10a689619a14a6c9619a12a687c334d5d0ec91303d1aa6c7c2f4b8c1f944989e0cd353619a16a6a7c3f44c989e0dd373617a3e4c2f84e9c530bd14a6e9619a11a699619a15a6d9619a13a6b9619a17a6f9615a10a697c3f44a985e0dd36b617a3d4c6f84e9cd30bd15a6b7c3f48e66911de1dd30bd17a6f7c3b4304c8bc2b4384c4bc2b4344ccbc2b43c4c2bc2b4324cabc2b43a4c6bc2b4364cebc2b43e4c1bc2b4314c9bc2b4394c5bc2b4354c1f84695b98b68769479876866957987687694f98f686e9c330ed0bd34761da1fa603613a18a68fc374284c9f84e970983e0dd36761fa41987e18a61f199aff384c3f09d34fc3f4336dfbb9fefd852e2bfbfc2ff5efaff4efaff5ef6ff4efe746f9df1af3bf33e67faf7fbfd0bf7fd0bf7fd4bf7fd2bf7fd6bf5feadfaff4efd7faf72ffaf7affaf76ffaf71bfdfb77fdfb0ffdfb4ffdab9effbdd2319d6f1dd44ec920a636a97cc43075ff5fc4369f2faa6757cdf5ffe4b744db0bf5bcfc16687b0b3ddfc2b0b7d4f32d8df5b4d6f3ad0d7bb19e2f36ecedf57c7bc37ebc9e3fdeb09fa8e74f34ec1df57c47b027f4ffd2154bff285b736d2a009bc46733b0b5d0b6e6606b29ab035b2b6d6b0136d9be2dc1769cb6b5025b1b6d6b0db684b61d275a86a9adb62583b862a574985a6f51dcebd5cf4c8ae3e7ad52eb6de788b77dfcbcc3d57a3b38e055f171bc5e5711c4cd09da560cb613b5ad1dd84ed2b6f6603b59db3a80ed146d3b1e6ca76adb09603b4ddb4e04dbe9da7612d8ced0b693c176a6b69d02b6b3b4ed54b09dad6da781ed1c6d3b1d6c25da7606d874931b9c09b673b5ed2cb09da76d6783ed7c6d3b076c728e57023639dfeb083639f73b176c721e789eb6a9b6e3b802f0a7edd26ea5fc499b0db6ef4b7b0db60ba4ad06db85d24e83ed22f02db68ba1ad115b276d93764bfdafb7ce2783b8f693b2d47e5211f77ac335abf5f6897fbda9e7777d835aad93e0a702b4eaa7f331f66de982bee5dc46fc88bd10f2d7435929277ac8b147d8d5b1a052e7fb6558aeb7b15c3194a9b4d43f19c45bff3e064f1f83b905e4ddc46cd7521fb3f59eb28ed98150d68c3d390f6a8a317b13703888d9721fb3f59eb28ed99150d68c3d39176e8a317b2f703888d99e6e62b6acd4c76cfade5810d8634fae879a62cc8e068ef863b69b8fd9fa4f59c7ecb350d68c3db9266e8a313b1538e28fd91e3dfdb941bda7ac63763e9435634feecf34c5987d01381cc4ec70dfced67bca3a66df87b266ecc9bdc2a618b3af0047fc31dbcb51cc76f5311ba49f7306813df6e4be75538cd9c5c0117fcc0ef7f767eb3f651db3bba1ac197bf20ca529c6ec469d57cf197eae9f339c09b65f68db59c01b7f6c5797398aed2e3eb6d3fd3f82c01ea3f23caf29c6f6473aafe2f857d01f416cbf96be0a60fb8db69d0bb6cfb5ed3ca897837da087df07ea5fa76cf7813f42593396e5d97253dc077e011c0e62b6a78fd9fad729db98fd37286bc69ef473688a31fb25703888d95e3e66eb5fa76c63f6dfa1ac197b17ea7c538cd9ffa9f3ea7ce10b7dbe7031d8fea06d9dc0f6476dbb046c7fd2b64bc1f6676deb0cb62fb5ed32b07da56da560fb5adbba80ed2fda5606b6bf6a5b57b0fd4ddbcac1f68db67503dbdfb5ad3bd8fea16d3dc0f64f6deb09b67f695b2f6d53fdf4a4efd5616d6b0dfcc920de6d2bfd2e65dd32df2507bedb19bedbe5d07707c377078bef3207be13e043a602633e09f932b73ca5c5c083becae3f7d555d5bd6b50ffba97034f3707754f808ffaf074039eeef1f3a48e9f3de25f6f6a1b7735344d80afae50af9e0eea5500be64dd322ffe8ac1866d6b4f0b63aff819cb0ac097ac5be67b01a3d8b0ad9777a964ff51c7c30b0a6a791dec4ba97322f127dfae128e72b04b998b3ad6b275d26c45f07f3cee75376c8ee2321517e24bd62df3e2af08ead33df78c65f565ec6630ba6a230ac097acdbfbaedd0e92c7e3b88b6b1d5b9b26be2b72e0bb97e1bbdcf08d6da74c998e6dbd8039f66b4e7d6cab8c7fbda5787d22d786e207cf1ff01a2eae3aa16fb936143f622f84fccd05b565a59ce821edb0b0ab58966d89ece6723d8de58aa14c85a5fec920defa571a3c9506b3da2657c0b1d0c1fe908a810a8343e6cb41bbca08ed2a403b29732168e7aa3deb6df0c87c77e09176ac07f0b8ba268ae2c9c5f5d8d17ce3392c5e3fcbfff13cc0d5f6ea6230cabc6d7bf50246dbb98a83eb998ce72add80516cbd81a7ab23cda2b66b5712df0e6225d51e890f393797fdb73bd8a54c2ffd429d6a2b1f84b6d2458c603cca54df6bdef8b75359ea1abc5b163cb8ed1c5c577571148fa578ffe6db20de5833dba56e865651f7785cb5e55d0d1e99177f9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec99f999f17912f6db9272dd4918cdfe6faeeef3a7be61a8d725eb57cf75fe8fd3fe6065a5d83f46fa415c6cd4b910ca1435ab2dfbffa03f98f99c0afb487677ab5d6a5b627fcc24cc8b3fec6b85db92a1bf53496cbed3dfa274f1bcad5d50b7af9cb99fa2a62efa3fa3a60586a6d81fff128347c56965f35a3617cffeb27d16895a493ece677bc5813dd6e3df2e65759e59370beab61f789c71d57f47da6a795e5e61f82e84326734abdd36d2b74ac699ed6a2c87fd7e64ddb2ccc560af34d6dd5e2f2b1c2d8cf5f78065a5ccd9d0a61e6856ab9983b6b22cdbbeebf8dc3cfee370fa397ed72c78ba008f8b76c6d1f9469defadc6fd1cdfec9f663b8f9132d8b7cf41bfca8cfd9dc49f67f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b667e66c5633e6bc5f76bcb491873d4f721f53c43be5526eb4f7d2fb859ad5fd7cfe1e4995327a3cef8eee8ff6e565b76abce170547f67788da96aebe4f11b52dc51f7e7b069f05b978ae5b00be64dd65162d245f129bef32676343c873fcae86aee5164d5dedaff88c1535c5fdb59bc183cf46a3beed5366d81cede319e342fce1be540636c9e3fbd12eb6331e4bcc7e3de20f9f5fff486bdb3e70b5edcb4a5db61bf8dd946470647ce3f7547e0e6ddf2f751efb7060df91af2dff9729d3736ad14fd5d9c1f7354b0b605db27d6ddff6ec0fac31f9ee82eb2ad0a9bfa14121e4bf6a565b56ca4959d15ad8d53e22df80417673b96ec672c550a6afa5fec920defa9bdf5aed6730ab6df21b88b3afe1f8efaa4dea1ba1d1c5a0919471fccd466bff4ab35f21b6a32d8d32b22c7e8bee5fd04645f51fb51d035c1fc764ddb6e398795ca84f3fcf7cefa7f51fd05ec4dd4feb3f2086b09f5660acbf13ac5fb85a06d1c71629f35fc6facd73725906fb81fdf77e02df7329d3f96ccec98fd5f595ed9c1c978baabb62c6efa0256364c69840163c4f90326db4d6b2cd2a23b87b59962d8a5856b432bf1556141ca99f9befaca5f7f97e465d24aef11be452e604a88b9bf396f439a0ab6fca25a14e2a5f66a9ab943915f6b5d3753e01db09f7db8b2cff9729d339208ee17e79fc754e6ddf2b8033097ed0f795c01a93ef2ee85bce01c58fd80b217f61f3dab2524ef410ad855ded23721e85ece67215c672c550a6bfa5fec920defa5f6ef05c6e30ab6d7216c4d945d00fdd555bdd3f42a34ea09194c17b8ab6ef80daee75b87a7f23ea5c0adf5f32cfaff038e9e6bcc97e1e6bde57b39d237432f8f11ca107b4b3094b59f37ea11c2fe3ec378cef4af400bff8ae84ab6f37f706dd92308fe705c7d2b78befd82a7f516326f4ce81efa8311372e1bb83e1bb430e7d7bcdbde64c9a3b188320f5fe197eb3544d99ce4b715c0259ae1930ba18cb2111d4fdf6f8d118717c0759ae3930ba383e64fbedf31ec028cb1502a38b774b71fc8dfa30e23786f1382f8c0ebe15dba5a1df8ac57b7a2d8191e99d4d7c36d50a185d9c1737f45d3d3c9f6f0dbfaec625ea9a05631930ca72c701a38b7be3782d531f46bc2e92e5da00a38b6758d98eef84df9ec77bcb2e19331ddb1df74529cbf6de4ba55b9e8ce71ae8dbc1b886292df03ee3d1b4e8e39627e3b90ffa7670df2fa5058e3378342df0d9a08b710f1341dde77047e3c1e797b2dcf1c09874c4d82f0bc62430fef7bd6260ecef88319905637f6014fb89c0e8e0fe6b8ab17f168c789f52963b0918af70c47879168c5700a32c773230bab8979a00bff561bc121865b95380f12a478c5766c1781530ca72a702e3d58e18afca82f16a6094e54e03c66b1c315e9d05e335c028cb9d0e8cd73a62bc260bc66b8151963b0318af73c4786d168cd701a32c7726305eef88f1ba2c18af074659ee2c60bcc111e3f55930de008cb2dcd9c078a323c61bb260bc111865b97380f126478c3766c1781330ca7225c078b323c69bb260bc191865b98ec0788b23c69bb360bc051865b97381f156478cb764c1782b30ca72e701e36d8e186fcd82f1366094e5ce07c6db1d31de9605e3edc028cb7d0f18ef70c4787b168c7700a32cf77d60bcd311e31d5930de098c775818073862bc330bc601c028cb5d028c77c5cf98ba961e9005e35dc07377fc3c29cdeeca82e76eb73ca9efeadd65f1754ffcbe52db626050ffbadf033c83e2e7496d8b7bb2e0118662580e35bb377ec6946683b260bc177806c7cf93d2ecde2c78068366f75a34bb2f7ec6946683b360bc0f7886c4cf93d2ecbe2c78868066f75934bb3f7ec6946643b260bc1f7886c6cf93d2ecfe2c788606b59add6fd16c58fc8c29cd8666c1380c78aae2e74969362c0b9e2ad06c9845b3e1f133a634abca827138f054c7cf93d26c78163cd5a0d9708b6623e2674c69569d05e308e019193f4f4ab31159f08c04cd4658347b207ec6946623b3607c007846c5cf93d2ec812c784681660f58341b1d3f634ab35159308e069e07e3e74969363a0b9e0741b3d116cd1e72c4f860168c0f5978e2fe4ef683165f631dd57d4c50ffba0b43312c87fd24c639621c9b05e3386094e5b09f448d23c6715930d600a32c9770cc98a99f440df81e1fbfef54bb5413d45f9ff16e7932f69340df131c69313ea8bf1613dcf264ec2781be273ad26242507f2d2602cf24075a24c0477d7884a11896c37e12931d314eca82713230ca72d84f628a23c6c959304e0146590efb493cec88714a168c0f03a32c87fd24a63a627c380bc6a9c028cb613f89471c314ecd82f1116094e5b09fc4a38e181fc982f1516094e5b09fc4638e181fcd82f1316094e5b09fc4e38e181fcb82f1716094e5b09fc4138e181fcf82f1096094e5b09fc4938e189fc882f1496094e5b09fc4538e189fcc82f1296094e5b09fc434478c4f65c1380d186539ec27f1b423c66959303e0d8cb21cf69378c611e3d359303e038cb2dc438e19335dbf3cd3c47d475dab3475df51d7254dddb78f731fe7f9e0dbc7b98ff37cf0ede3dcc7793ef8f671eee33c1f7cfb38f7719e0fbe7d9cfb38cf07df3ece7d9c33f97ed681ef04f890a9c0984f425e188a61b9873c639366449e92f8784ab1eee8eb3982ba3f67e129705477f4f53c41dd85a1b1313edb08181f6a048c5ec7741fc486302a9e17e0ffc918799ecf82e705e079d111cf0b59f0bc083c2fc5cf938aa917b3e011866258eea146c0f86c2360f43a7a1d9918bd8ef9a3a367f48c9ed1331e0bc6c6d0867bc646118f650d65543cd3e3e74969f652163cd3413359ee6eb78c650d65543c33e2e74969363d0b9e19a0d9748b660e18cb1acaa87866c6cf93d26c46163c3341b31916cd1c3096359451f1cc8a9f27a5d9cc2c78668166332d9a39602c6b28a3e2991d3f4f4ab35959f0cc06cd66593473c058d65046c533277e9e9466b3b3e099039acdb668e680b1aca18c8a676efc3c29cde664c13317349b63d1cc016359431915cfbcf879529acdcd82671e6836d7a29903c6b286322a9ef9f1f3a4349b9705cf7cd06c9e453356c6871a01e3b38d80d1b18e650d65543c0b1cf1cccf826701f0bcec886741163c2f03cf2bf1f3a462eae52c7884a118967ba811303edb0818bd8e5e472646af63fee8e8193da367cc8ef1b946c0e8b7b567646574707d95f11d9a979bb8efa877689abaefa877689aba6f1fe73ecef3c1b78f731fe7f9e0dbc7b98ff37cf0ede3dcc7793ef8f671eee33c1f7cfb38f7719e0fbe7d9cfb38cf07df3ece7d9ce7836f1fe73ecef3c1b78f731fe7f9e0dbc7b98ff37cf0ede3dcc7793ef8f671eee33c1f7cfb38f7719e0fbe7d9cfb38cf07df3ece7d9ce7836f1fe73ecef3c1b78f731fe7f9e0dbc7b98ff37cf0ede3dcc7793ef8f671eee33c1f7cfb38f7719e0fbe7d9cfb3867f2fd6afcbecbb2fdc6ccabc0e3e29b378eea59aad6fb9a5ed7b731eaa7b47addd0ea6543ab6228f31ae8f7ba03fd0ac0afac5be6c55fb6cc1710303bf25dd62ea8bb5f8b8f670d3d5499371cd53daaad7fa389fb8e6aeb9bbaefa8b6bea9fbf671eee33c1f7cfb38f7719e0fbe7d9cfb3867f18df91641ed79bb7cff54ade34d9d2fd4f352fe39b04b9949add2bfed03bf0fb9f0edf7217facc807df3ece7d9ce7836f1fe73ecef3c1b78f731fe7f9e0dbc7b98ff37cf0ede3dcc7793ef8f671eee33c1f7cfb38e78bf362f87f650e78028327c8c0339f8c670a19cf2c329e51643c83c9786e21e3b9828ce709329e72329ef1643cc3c978ee22e3b99e8ce732329ebe643c53c9787a91f1cc26e379908ce745329e21643cb791f15c45c6f314194f1919cf44329e11643cf790f1dc48c69324e379948ca70719cf45643c63c978e690f15c48c633948ce725329e3bc8788ac978da91f15c43c6f33c19cfa5643c15643c4f93f1cc23e3994cc6f30019cfbd643ca5643c3793f17426e3b99c8ce771329e6e643c73c9786ac878a693f15491f10c20e3b9988ce73a329ee6643c7dc8781690f13c4cc6d39b8c6734194f27329efbc8786e25e3b9928ce749329eae643c13c8786690f15493f10c24e3b9818ca71f19cf23643c3dc978c690f15c40c6733f19cfed643cb9f89e69363c6dc9788ac878ae26e379868c671a194f17329e49643c33c9784692f10c22e3b9898ca73f19cf63643cddc978c691f10c23e3b9938ce705329ef6643c1dc878ae25e32920e04904478e619280ffbf0ab666c6b2eab3af633ad6feff2d6d6f06cbbcadf3cd2deb7e0b6cf22dd9b72dcba24e6f415d923a5ffadda6944ee82b09f3e2af0838de26e1b9968ca703194f7b329e17c878ee24e31946c6338e8ca73b19cf63643cfdc9786e22e31944c633928c672619cf24329e2e643cd3c8789e21e3b99a8ca7888ca72d19cfab643cb793f1dc4fc6730119cf18329e9e643c8f90f1f423e3b9818c6720194f3519cf0c329e09643c5dc9789e24e3b9928ce756329efbc8783a91f18c26e3e94dc6f33019cf02329e3e643ccdc978ae23e3b9988c6700194f1519cf74329e1a329eb9643cddc8781e27e3b99c8ca73319cfcd643ca5643cf792f13c40c633998c671e19cfd3643c15643c9792f13c4fc6730d194f3b329e62329e3bc8785e22e3194ac6732119cf1c329eb1643c1791f1f420e379948c2749c6732319cf3d643c23c8782692f19491f13c45c6731519cf6d643c43c8785e24e379908c6736194f2f329ea9643c7dc9782e23e3b99e8ce72e329ee1643ce3c978cac9789e20e3b9828ce716329ec1643ca3c8786691f14c21e3994fc65369e179d5118fbcef2eeb96f957497c3bd80ea56abdef38aad3bb7a5d2df47a855ffc154299696dd2bfeafd705c56b8ccef13e0bb39ef8246ef3aaa8b6c8f0263fba0ef371df99677b464dd32ff6613f7ddcef0dd2e4f7c77307c77c813df3ece7d9ce7836f1fe73ecef3c1b78f731fe74cbe1d5c1b94e177d2642a30e69390c7eb0517df977354cf3ad789dfc6a89fd2ea3d432bf3daaa18cabc03fabde7403fdbb5a7cc8bbf6c992f2060c6b82809e28d8bf7e3af5359bba06e7bf1bea12fd66ba1234da38e210b9bb8efa8634853f71d750c69eabe7d9cfb38cf07df3ece7d9ce7836f1fe73ece997c2fd2f918af1b4bd1877abe28d7038bc0ef129d2f88d1af5ad762bdae42bd6ee158027629f39ff05cd3eff37e9f8fcbb73fb6f938cf07df3ece7d9ce7836f1fe73ecef3c1b78f731fe7f9e0dbc7b98ff37cf0cd1ce7665efa8b5f086caefaf347c5622ede253896bea362b1a9fb8e8ac5a6eedbc7b98f7326df4b1df84e800f9932f5f15b0a3c8b1df038aa67ead9c632a34eaf1a752a8632788c5fe6a09e05e057d62df3cb8047a64ae0711107f5d9e6c8339f8c670a19cf2c329e51643c83c9786e21e3b9828ce709329e72329ef1643cc3c978ee22e3b99e8ce732329ebe643c53c9787a91f1cc26e379908ce745329e21643cb791f15c45c6f314194f1919cf44329e11643cf790f1dc48c69324e379948ca70719cf45643c63c978e690f10c25e379898ce70e329e62329e76643cd790f13c4fc67329194f0519cfd3643cf3c8782693f13c40c6732f194f2919cf42329e9bc9783a93f15c4ec6f338194f37329eb9643c35643cd3c978aac8780690f15c4cc6731d194f73329e3e643c0bc8781e26e3e94dc6339a8ca71319cf7d643cb792f15c49c6f324194f57329e09643c33c878aac9780692f1bc47c67303194f3f329e47c8787a92f18c21e3b9808ce77e329edbc978da92f11491f15c4dc6f30c19cf34329e2e643c93c8786692f18c24e31944c67313194f7f329ec7c878ba93f18c23e31946c6732719cf0b643cedc9783a90f15c4bc65340c093088e7cf73f01ff7f0f6cf28efaab605baef38bc1d6cce2a3b9ce2f035ba1cecb3a5a85696ac723d78d3ab97a2f1f7d25615efc1501c772129e6bc9783a90f1b427e379818ce74e329e61643ce3c878ba93f13c46c6d39f8ce726329e41643c23c9786692f14c22e3e942c6338d8ce719329eabc9788ac878da92f1dc4ec6733f19cf05643c63c8787a92f13c42c6d38f8ce706329ef7c8780692f15493f1cc20e39940c6d3958ce749329e2bc9786e25e3b98f8ca71319cf68329ede643c0f93f12c20e3e943c6d39c8ce73a329e8bc9780690f15491f14c27e3a921e3994bc6d38d8ce771329ecbc9783a93f1dc4cc6b3908ca7948ce75e329e07c8782693f1cc23e3799a8ca7828ce752329ee7c978ae21e36947c6534cc6730719cf4b643c43c978e690f18c25e3b9888ca70719cfa3643c49329e1bc978ee21e31941c633918ca78c8ce729329eabc8786e23e31942c6f32219cf83643cb3c9787a91f14c25e3e94bc6731919cff5643c7791f10c27e3194fc6534ec6f30419cf15643cb790f10c26e31945c6338b8c670a19cf7c329eca1cf1a877dba5af75005c382521bf0c78163ae07154cf52fcaec1b731ae5769b5c2d0ea3d43ab6228b314f45be140bf02f02beb96f915c0f38ccedbbea9f00c09a3d8163ae649409d65cab40fac001e17fba4a37aa66275a551a7672cba4b198cd5950eea69db77647e25f03caff3c29a8072cf93308a6d99639e04d459a64cb1ba12785cec3b8eea998ad555469d9eb7e82e6530565739a8a76ddf91f955c0f382ce0b6b02cabd40c228b6156e79ca1350679932c5ea2ae071b1ef38aa672a56571b757ac1a2bb94c1585deda09eb67d47e657c376f0cc9ed9c6ac78e4febdb026a0dc8b248c625be994a7bc3401759629533bb61a785cb4f38e744fb5636b8c3abd68d15dca60acae71504fdbbe23f36b2cbe4b8278b5585b0f2dd65a78d6e6580bf1972df3d246c8ec75f63a47317b9dbdce51cc5e67af7314b3d7d9eb1cc5ec75f63a47317b9dbdce51cc5e67af7314b3d7d9eb1cc5ec75f63a47317b9dbdce51cc5e67af7314b3d7d9eb1cc5ec75f63a47317b9dbdce51cc5e67af7314b3d7d9eb1cc5ec75f63a47317b9dbdce51cc5e67af7314b3d7d9eb1cc5cca0b3e291ef130a6b02cabd44c228b6556e7952ef05bd14d49d0a8cf924e4d702cf6a07fa38aa67aa0ff93aa34e2f59749732b87fad73504fdbbe23f3eb603b64c3bca611327b9d1bc6ac78a6ebbcb026a0dc741246b1ad76cb936ac7a60775a74cedd83ae071d1ce3baa67aa1d5b6fd469ba45772983fbd77a07f5b4ed3b32bf1eb68367f6cc3666c53343e7853501e56690308a6dad539eb2d4fb8d3382ba53a6766c3df0b868e71de99e6ac73618759a61d15dca60ac6e70504fdbbe23f31b603b64c3bca611327b9dbdce51cc5e67af7314b3d7d9eb1cc5ec75f63a47317b9dbdce51cc5e67af7314b3d7d9eb1cc5ec75f63a47317b9dbdce51cc5ee7fcd159f1ccd479614d40b999248c625be794a76beab9c3cca0ee94e9b9c306e071f15cc691eea9e70e1b8d3acdb4e82e6570ffdae8a09eb67d47e637c27668eacc6b1a21b38f8ddc30fbd8f0cc51cc3e363c7314b38f0dcf1cc5ec63c3334731fbd8f0cc51cc3e363c7314b38f0dcf1cc5ec63c3334731fbd8f0cc51cc3e363c7314b38f0dcf1cc5ec63c3334731fbd8f0cc51cc3e363c731433436c289e593a2fac0928378b84516cebddf2a4be7b302ba83b65eab7b311783638d0c7513d53fd763619759a65d15dcae0feb5c9413d6dfb8ecc6f82ede0993db38d59f1ccd679614d40b9d9248c62dbe09627d58ecd0eea4e99dab14dc0e3a29d7754cf543bb6d9a8d36c8bee52066375b3837adaf61d99df0cdbc1337b661bb3e299a3f3c29a8072734818c5b6d12d4faa1d9b13d49d32b5639b81c7453befa89ea9766c8b51a73916dda50cc6ea1607f5b4ed3b32bf05b68367f6cc3666c53357e7853501e5e692308a6d93639e04d459a64cedd816e071d1ce3baa67aa1ddb6ad469ae45772983b1bad5413d6dfb8ecc6f059e793a2fac0928378f84516c9b1df324a0ce32658ad5adc0e362df7154cf54ac7e60d4699e45772983b1fa81837adaf61d99ff0078e6ebbcb026a0dc7c1246b16d71cc93803acb9429563f001e17fb8ea37aa662759b51a7f916dda50cc6ea3607f5b4ed3b32bf0d7816e8bcb026a0dc021246b1613bb6c0114f91c15364d1e258f9565a54e87c5bfd9b80ff5700a3abb66581c128f318e3622bca8166ed0c9e768666c7d2b7d2a212f26ac2ed55098c0cdbab5d0e34eb60f07430343b96be95167d74bebdfec5edd5071819b65707e071d03e97270c1e35653a766f73ac8fa37aa68edddb03bbee781c923278ecdeeea09eb6730999df0edbc1337b661bb3e219a0f3c29a8072034818c586e7fc3be2e7294f183c6acad48eed70ac8fa37aa6dab19d815df71da0bb94c158dde9a09e05e057d62df33b613b64c3bca611327b9d1bc6ac7806eabcb026a0dc401246b16d079e5df1f394270c1e35656ac77639d6c7513d53edd8eec0aefb2ed05dcae0feb5db413d0bc0afac5be677c376c886794d2364f63a378c59f10cd279614d40b941248c62db093c7b62e7498ff9823c6acad48eed71ac8f9b7aa6dbb1bd815df73da0bb94c1fd6baf837a16805f59b7ccef85ede0993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367f6cc9e999b59f10cd679614d40b9c1248c62db0d3c1fc6ce937eee803c6acaf4dce143c7fab8a967fab9c3bec0aefb87a0bb94c158dde7a09e05e057d62df3fb603b7866cfec993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367e666563c43745e5813506e0809a3d8f602cf47f1f394270c1e35657aeef091637d1cd533f5dc617f60d7fd23d05dca60acee7750cf02f02beb96f9fdb01df67b66cf6c61563c43755e5813506e2809a3d8f601cf81d879d2cf4f91474d99dab1038ef57153cf743b7630b0eb7e0074973218ab071dd4b300fccaba65fe206c876c98d7344266afb3d7398ad9ebec758e62f63a7b9da398bdce5ee72866afb3d7398ad9ebec758e62f63a7b9da398bdce5ee72866afb3d7398ad9eb9c3f3a2b9e2a9d17d60494ab226114db7ee0f938769eaea50983474d05c67c12f21f3bd6c74d3dd3cf1d0e0576dd3f06dda50cee5f871cd4b300fccaba65fe106c87a6cebca61132fbd8c80db38f0dcf1cc5ec63c3334731fbd8f0cc51cc3e363c7314b38f0dcf1cc5ec63c3334731fbd8f0cc51cc3e363c7314b38f0dcf1cc5ec63c3334731fbd8f0cc51cc3e363c7314b38f0dcf1cc5ec63c333473133c486e2a9d679614d40b96a1246b11d049e4fe2e7294f183c6a2a30e69390ffc4b13e8eea99eab77338b0ebfe09e82e6570ff3aeca09e05e057d62df387613b7866cf6c63563c23755e5813506e2409a3d80e01cfa70e7812068f9a32b5639f3ad6c7513d53edd867815df74f41772983b1fa99837a16805f59b7cc7f063ca3745e5813506e1409a3d80e038f8b58553c45068fcc7f4ae05b6951a3f36df52f6eaf1a6064d85e4539d0ac9dc1d3ced0ec58fa565a8c87bc9a707b8d074686edd52e079a7530783a189a1d4bdf4a8b093adf5effe2f69a008c0cdbab430e343b96ede1b1dcb78f659c7acd8f9de605c750f38263a87981d79c4a7307c797323c9605c0805312f29f01cf0fe3e749dde3fa2c0b9e1f02cf0fe2e7e9e2a89ea56abd3f02f6b8d6abb4fab1a1d5678656c55006197eec40bf02f02beb9679f1e7993d7314339edb0a6b02ca7d4ac228b61f008f8b7643d5fd52bd2e597f8b30ed3bb1d6af8b670f78dfb5855eaf7088bf4228735b496dd9839aad08fe2fdb4dd5e7906173f43e7017db333099177f4541eeee8366ba2f8b5ab8787693ed71ff9085e7dbf8784a713f475f071dd53d9be768072d3c31d6bd4bd433c403f1d73dd57e74d6eb92f5ab7df4f3139d6a5e8efb9eb41f9d8d3a1742994b4b6acb7e01ed87adad70bd6fca39b9b96f360b6adb33e12ad176f3f9cab7da2ee53e81f2d8e654e85fdc3f2ba0aeaedac5a87b4cd82e9a6db74bedcd677ca6ef62d0e51352cd6ccf2950c74a0b77250137c6632ef73359b7ed1959a5a1239b66b8ad3fb1e8d8c7c2dd87809b71bfee63e8c8a6d9d1f6eb0116ee0104dc8cfbf500434736cd8eb65f0fb4700f24e066dcaf071a3ab26976b4fd7a90857b100137e37e3dc8d0914db3a3edd7832ddc8309b819f7ebc1868e6c9a1d6dbf1e62e11e42c0cdb85f0f317464d3ec68fbf5500bf750026ec6fd7a6850574736cd8eb65f5759b8ab08b819f7eb2a434736cd8eb65f575bb8ab09b819f7eb6a434736cd8eb65f8fb4708f24e066dcaf471a3ab26976b4fd7a94857b140137e37e5ddf7efbacfb758d85bb86809b71bfae317464d3ec68fbf5780bf778026ec6fd7abca1239b6647dbaf2758b827107033eed7130c1dd934b3edd78edecb2bcbf63dc1c34ef5498fd77c380b9e8f81c7454c398a835247fd5c527d530f185a1d36b4c271300e827e0efac2647cbf5ffc7966cfec993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367e667c66f1ce2f31529f70909a3d8f099948bfbfcaaee97e975c9fa5b84a9cbc9b57e0fc6eeb7acb4c0f097040ef1570865fef3ecdab2dd345b5170e476c371ad715bee8fbd0ee96d69c6bfcc8bbf22a8cf01e071f07e7e8ae7a0c173d0a205be771a8fefb2e16e342e2b6d17d48dfdfd467d50d38f62f75f57d30243d38f1cfb4e0475b7a730e094843cf2b87836eca89ea9b6609f512753e362287301d4739f837a16805f59b7ccef031e999a018fab180c0c9ec0a28f4c95643c53c8784691f19c4fc633988ce754329e5bc8788e23e3b9828ce709329e72329ef1643cc3c978ce21e3b98b8ce704329eebc9782e23e32924e3e94bc633958ca71719cf83643cdf27e31942c6730919cfe9643cb791f124c878ae22e3798a8ca78c8c672219cf08329e8e643cf790f19c44c67323194f4b329e2419cfa3643c3dc8782e22e3194bc6732119cf50329e33c978ee20e32926e36947c6730d19cfd3643c15643c9792f14c26e379808ce73c329e7bc9784ac9784e21e3b9998ca73319cfe5643cadc9781e27e3e946c65343c65345c6733619cf00329e8bc9788e27e3b98e8ca739194f1f329e87c9787a93f18c26e3e944c6f33d329efbc8784e23e3b9958ca70d19cf95643c07c8789e24e3e94ac633818ca79a8ce710194f0919cf40329e13c9786e20e36941c6d38f8ce711329e9e643c63c8782e20e3b99f8ce70c329edbc978da92f11491f15c4dc6338d8ca70b19cf24329e91643ce792f10c22e339998ce726329e56643cfdc9781e23e3e94ec6338e8c671819cf59643c7792f1b427e3e940c6732d194f01014f2238f25b4c09f8ff41b0c937833e065b33cbfae439b59457c7c5673a1eb9ee6696757f6461409d3e84ba2475bef4bb4d299dd05712e6c55f11707c44c2732d194f07329ef6643c7792f19c45c6338c8c671c194f77329ec7c878fa93f1b422e3b9898ce764329e41643ce792f18c24e39944c6d3858c671a19cfd5643c45643c6dc9786e27e339838ce77e329e0bc878c690f1f424e379848ca71f194f0b329e1bc8784e24e31948c65342c673888ca79a8c6702194f57329e27c9780e90f15c49c6d3868ce756329ed3c878ee23e3f91e194f27329ed1643cbdc9781e26e3e943c6d39c8ce73a329ee3c9782e26e31940c67336194f15194f0d194f37329ec7c9785a93f15c4ec6d3998ce766329e53c8784ac978ee25e3398f8ce701329ec9643c9792f15490f13c4dc6730d194f3b329e62329e3bc878ce24e3194ac6732119cf58329e8bc8787a90f13c4ac69324e36949c6732319cf49643cf790f17424e31941c633918ca78c8ce729329eabc87812643cb791f19c4ec6730919cf10329eef93f13c48c6d38b8c672a194f5f329e42329ecbc878ae27e339818ce72e329e73c8788693f18c27e32927e379828ce70a329ee3c8786e21e339958c673019cff9643ca3c878a690f15492f1343378f0ffeaddb0033a2fdf0e2a84ffdfa53b97b7d7eb9232f28c58ddabd86bd8547df738aaefdea0764ac2fc1ea8afb0ef059ebd8e783e34784cdf4590af04cd761b36c5b8cb11e36e8351e67701a3e8b71b78763be2d963f098be8b20df0734db69d814e30e478c3b0d4699df018ca2df4ee0d9e9886797c163fa2e82fc00d06cbb61538cdb1c316e3718657e1b308a7edb8167bb239e1d068fe9bb08f20341b30f0c9b62dcea88f1038351e6b702a3e8f701f07ce088679bc163fa2e82fc20d06c8b61538c9b1d316e3118657e33308a7e5b80678b239ead068fe9bb08f28341b34d864d316e74c4b8c96094f98dc028fa6d029e4d8e78361b3ca6ef22c80f01cd361836c5b8de11e3068351e6d703a3e8b701783638e2d968f098be8b203f14345b67d814e35a478ceb0c46995f0b8ca2df3ae059e78867bdc163fa2e827c1568b6c6b029c6d58e18d7188c32bf1a1845bf35c0b3c611cf5a83c7f45d04f96ad06c9561538c2b1d31ae3218657e25308a7eab806795239ed5068fe9bb08f22341b315864d312e77c4b8c26094f9e5c028faad009e158e78561a3ca6ef22c88f02cd961936c5b8d411e3328351e69702a3e8b70c789639e2596ef098be8b205f039a2d316c8a71b123c62506a3cc2f0646d16f09f02c71c4b3d4e0317d17417e3c68b6c8b029c6858e1817198c32bf101845bf45c0b3c811cf6283c7f45d04f909a0d9fb864d31bee788f17d8351e6df0346d1ef7de079df11cf4283c7f45d04f93bc026bcbdc1f6aecef702db3b3adf136c6feb7c0fb0bda5f3ddc1f6a6ce7703db1b3a5f0eb6d775be2bd85ed3f932b0bdaaf35dc0f68acef705dbcb3adf0f6c0b743e09b6f93adf1f6cf374fe72b0cdd5f92bc03647e7af04db6c9dbf0a6cb374fe6ab0cdd4f96bc03643e7af05db749dbf0e6c2fe9fcf5607b51e76f00db0b3a7f23d89ed7f99bc0f69ccedf0cb66775fe16b03da3f3b782ed219dbf0d6c77ebfced603bacf37782ed539dbf0b6c9fe9fc3d60fb81cedf0bb61feafc7d60fb91cedf0fb61febfc30b0fd44e78783eda73a3f026c3fd3f907c0f6739d1f0db65fe8fc8360fba5ce8f01dbaf747e2cd87eadf3e3c0f61b9d9f08b6cf757e12d87eabf393c1f63b9d9f02b6dfebfcc360fb42e7a782ed0f3aff08d8fea8f38f82ed4f3aff18d8feacf38f83ed4b9d7f026c5fe9fc9360fb5ae79f02db5f747e1ad8feaaf34f83ed6f3a2fed9a6a67ffaef32541bcedec3741ed5402bec59f2af30f9d6f699491650ba14c1bdda1503de350ef2e493b2cedb2b2493bfc2ed8a41d7e076cd20ebf0d366987df029bb4c36f824ddae137c026edf0eb609376f835b0493bfc2ad8a41d7e056cd20ebf0cb6a4ce2f009bb4c3f3c126edf03cb0493b3c176cd20ecf019bb4c3b3c126edf02cb0493b3c136cd20ecf009bb4c3d3c126edf04b609376f845b0493bfc02d8a41d7e1e6cd20e3f073669879f059bb4c3cf804ddae187c026edf0dd6093fde51bb049db7c186cd2367f0a36699b3f039bb4cd3f009bb4cd3f049bb4cd3f029bb4cd3f069bb4cd3f019bb4cd3f059bb4cd3f039bb4cd3f079bb4cdbf009bb4cdbf049bb4cdbf02db389dff35d8a46dfe0dd8a46dfe1c6cd236ff166cd236ff0e6cd236ff1e6cd2367f0136699bff0036699bff0836699bff0436699bff0c36699bbf049bb4cd5f814ddae6afc1266df35fc0f6b4ce4b5bdd1a6cf2ac584da5df71c271789a812f614906f1b6fd3825218f7597a9928c673619cf28329e37c978ce27e3194cc6732a19cf71643cef93f18c27e35940c6b38c8c672919cf7b643ce790f16c22e3d948c6730219cf5e329e3d643c9791f11492f1cc24e3799d8c47defb64e11942c6730919cfe9643c09329e79643c4bc8781693f1bc43c6d3918c670319cf7a329e93c8787693f1ec22e36949c6f30d19cf74329e8bc8785e25e3b9908c672819cf99643cc5643cedc8782ac8782e25e39943c6b3888c672119cf5b643ce791f1ac23e3594bc6534ac6730a19cf4e329e1d643c9dc9785a93f1bc48c65343c6f332194f1519cfd9643c03c8782e26e3399e8ca739194f1f329ebbc9786691f1bc41c6d3898ce77b643c6bc8785693f1fc958ce734329eed643cdbc878da90f11c20e39940c6339f8ca79a8ce75d329e43643c25643c03c9784e24e36941c673988c670619cf6b643cabc8785692f19c41c6f30119cf56329eb6643c45643c73c9784692f1bc4dc6732e19cf20329e93c9785a91f1bc44c6f30a19cf0a329ee5643c6791f16c21e3d94cc6d39e8ca70319cf3e329e0fc9780a087812c011804dfedf1c6cf21d9e4360fb5ae70f804dbee1f33ed8bed2f9a7c1f6a4c5d6ccc2270cd3c026efca7e0d36b93ff314d8e49d89afc026e70de25fcdcfe878247f335846fc34b7f0a3bfaf2c5c92c7ed2dcb248378b737fa4a06f66fde15188cc79ae743329e7d643c1dc878da93f16c26e3d942c6731619cf72329e15643caf90f1bc44c6d38a8ce764329e41643ce792f1bc4dc633928c672e194f11194f5b329ead643c1f90f19c41c6b3928c671519cf6b643c33c8780e93f1b420e339918c6720194f0919cf21329e77c978aac978e693f14c20e33940c6d3868c671b19cf76329ed3c878fe4ac6b39a8c670d19cff7c8783a91f1bc41c6338b8ce76e329e3e643ccdc9788e27e3b9988c670019cfd9643c55643c2f93f1d490f1bc48c6d39a8ca73319cf0e329e9d643ca790f19492f1ac25e35947c6731e19cf5b643c0bc9781691f1cc21e3b9948ca7828ca71d194f3119cf99643c43c9782e24e379958ce722329ee9643cdf90f1b424e3d945c6b39b8ce724329ef5643c1bc8783a92f1bc43c6b3988c670919cf3c329e0419cfe9643c9790f10c21e3f93e19cfeb643c33c9780ac9782e23e3d943c6b3978ce704329e8d643c9bc878ce21e3798f8c672919cf32329e05643ce3c978de27e3398e8ce754329ec1643ce793f1bc49c6338a8c6736194f25194f330bcf21473cf2ad1859b7cc1f6ae2bef718bef7e489ef5d86ef5d79e27b87e17b479ef8de66f8de9627beb71abeb7e689efcd86efcd79e27ba3e17b639ef85e6ff85e9f27bed71abed7e689efd586efd579e27ba5e17b659ef85e6ef85e9e27be971abe97e689efc586efc579e27ba1e17b619ef866befe56fd70a5aff23efd9b80ff5700e3fb8e180f198c32ff3e308a0dbf475de18827eadabd82c0b7d242ee65c933cf04fcbf12185dc55485c128f3b698da033c958e78a2ee395412f8565ac8bbd8d2a73201ffc7f1975dc554a5c128f3b698da053c7d1cf144dd2be943e05b6921ef3ecb3b7f09f83f8eb7ee2aa6fa188c326f8ba91dc033c0114fd43d9e0104be9516f2ad30f9264d02fe8fe333ba8aa90106a3ccdb620ac7cf1de88827eaded44002df4a0bf9d6ae7cf33201ffc7f19b5cc5d4408351e66d3185e3c70d72c413754f6d10816fa5853c0b966fb427e0ff8381d1554c0d321865de165338decd60473c51f7020713f8565a0cd179e9639580ff0f0146573135d86094795b4c6d049e218e78a2ee610e21f0adb418aaf3f20e4702fe3f14185dc5d4108351e66d31b51e78863ae289baf73a94c0b7d2a24ae7e59dfe04fcbf0a185dc5d4508351e66d31b51678aa1cf144dd33ae22f0adb4a8d679f9e65c02fe8fe3bf0f75c4586530cafc506014db6ae0a976c41375afbb9ac0b7d242beedbf4aff26e0ff381eabab98aa361865de1653381ef448473c51f7e84712f8565a8cd27919132601ff1f058cae626aa4c128f3b698c2f12b4739e2897ab6308ac0b7d242becdb54cff26e0ff35c0e82aa646198c326f8ba9a5c053e38867b1c1b3d8a2c5b1f2adb490bedc4bf46f02fe3f1e185dc5548dc128f3b6985a0c3ce31df1443dcb194fe05b6921dfd65ea47f13f0ff09c0e82aa6c61b8c326f8ba985c033c1114fd433a80939f01df53c2517bea39e0de4c277d47dee5cf88eba679b0bdf51f71f73e13bea5e5a2e7c47dd17ca85efa87b1cb9f01d75bd9e0bdf51d79eb9f01d751d950bdf51d704b9f01d757e9b0bdf51e76ab9f01d75dee1db73df9ec7edfb589e3be46b7b7e2c8fa1c7f258e2af0dfcb541ae7cfb6389bf36c895ef7cbd36f0ed79eedb73b9fe2a08a2afc7963bf2bdd4f02df3f89c65a923df8b0ddf328fcf0c163bf2bdd0f02df378ff7ba123df45866f995f9803dfed0cdfed72e8bb83e1bb83c5b78bed9d08ea5e7f0b034e49c8630c2c72c0e3a89ea56abd4bf4babe8d71bdb6fb36e6fe520c6596807eaedb0e5977a6b6a3757cbe4b13e043bef1a56cf22cf65db0491bfa0ed8e419fbdb609376fe2db0c9f39d37c126cf7fde00db289d3f0c36790e8bfddfe559fa0eb055e93cf6bb1eaaf3dbc026fd92b0bfaff42ddb0a36e91f88fd4ca58fe766b0493f5decdf287dad37824dfacb63bf3a79e7613dd8e4bd15eccf25ef1ead05db019dc77e44f24d97d5609ba6f3abc0f6179d5f09b62774fe6eb07da9f3df80edcf3abf106c8febfc22b0fd49e79780ed319d7f1d6c7fd4f9d7c0f6a8cebf0ab647741edf0bfb83ce7f08b62f741edf479aaaf37bc0f67b9dc7f7601ed6f95d60fb9dcebf02b6293aff32d826ebfc02b0fd56e7e783ed739d9f07b6493a3f176cbfd1f939609ba8f3b3c1f66b9d9f05b6713a3f136cbfd2f919601babf3d3c13646e75f02db2f75fe45b0fd42e7ff0ab607757e31d89ae9fc52b0c9f88bd8e7a350e797834dc6a5c7be3cf2adfc09606ba5f3e3c1d65ae76bc026df591b0536195b7924d8123a5f0db6b63a5f053639d7190a36194b6408d8e4bc6430d8daebfc20b0c939c440b0c9d89003c026dff3ec03b61375be126cf29dfa0ab09dacf387c026e377bd0f36f906dc01b0c9b8c64f814dbefd3c0d6c67e8fc5fc026639a3c01b6b374fe4bb09dadf37f069b7c0ff371b095e8fc9fc0d651e71f03dbb93aff47b0c978538f82ed7c9d7f046c320eef1fc026df4efe026c17e8fc54b05da8f3bf079b8ccbf130d864accddf81ad93ce4f019b7cd37a32d82ed5f9df824dc6cefb1c6cf2bdde49609331d27e03b62e3a3f116c653aff6bb075d5f971602bd7f95f81ad9bce8f055b779d1f03b61e3aff4bb0f5d4f95f80ad97ce4b3ba3f667b59f1fd4f3c920def3ec8f83ba53a6f36c61409e38cf5b8b81077ded8fbdee65a97364d9ef9be9f54a0ced07dffb62f79d3e3fff48afab50af779fe1bb10cab4d68d835a4e8ef9cdf572078ce5f09e90ac5b96b90cec1f1aeb6eafebfb91a3faee3398841b7590326d35933a366ed4f9d6b04c8c6c656a1f90580b40439c92901706375a9595e2796f7d783e029efdb1f3a4af7d5dc404ee5b715ffb9af744cd582b8632fb40bf0f1de887fbbaac5be6c59f67f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b667e66c57350e7f1b9b2943b48c228b6fdc0e3e23e3f3e8795f5abe73aef9d53eb777fec7eeb3edf6ba1d75b6ad4b910cafc199e392dd6f922f8bf6cb7a86de9e03961c66d29fe8aa03ef82ce8a0239efd06cf7e8b16922f89cd77d970371a9795b60bea3e5bdc67d4073575b5bfeed7eb2a3034c5fdf56383079f8d1601ef27fa3701ebf904eae0601fcf1817e20ff7a5fd6093fcc7c0e8623be3b144da03791e8ecfa6a5cc2ee3b978fcdbbeacd465bbb117ea940c8e8cef4228b30fdabefd3a8f7d430e826e3fb3fc5fa64ccfa9453f55e7ddf1d739b57d77016712fca0ef9dc01a93ef3aefa314e8247ec45e08f99f427f0e29277a88d6c28e637f23bbb9dcc7c672c550668fa5fec920defaef3678761bcc6a9b7c0c71f63338febb6a93f644687419682465f68346071cf1ec37788443fca932b2fd5b1a6564d94228f35b68a3545da49d977a62df163c06b83a8e892f59b7ccdbce8d3f0246b38e2a3eba9c5ccbbb3f76dec6d5ffeb1fd05ec4ddffeb1f104305c01118eb2f85f50b57cb20fad82265fe87711c75718d81dbd2d413759632ff0bdaa1ef97a4f3d99ceb1fabebb6a873fd3d0e781241dd6b6f35653abee33166af031e47f52cb51dbb3e34ea540c652e807a3a388fc9f85eed6ef0ed629ba316720eb5cfd0a210ca1494a47fa5ed88d211af553fca495dcaace783a596ba48995625b575690df638995c6eb79d5027b5defd96ba4a99b625b5ba14eb7c02b613de3739cbf27f9932b50738aecdf6f8eb9cdabedb8033097ed0f707c01a93ef3adfd590f37df123f642c89f59525b56ca891ea2b5b0ab7d44def9437673b97dc672c5506687a5fec920defa6f3778b61bcc6a9b7428a9cd4b1cb96c37774468540a1a4919bc7f2cc7767cefce76dcdfef883beab8bf1f18cd7613cf5d5cb21d30d8cc7ba8b6f3412983e76452a65349fa57b5b3094bd91641dd7bc32eee63e23ba801d42330ea2a13c680836bc372bc7692764afc7406fb7e9d179d3b1bda1542996e25e95f87e7ddd67b97e6f51d5e5308b7b96fe1bb1fbd4b6ab9711cc2fdfab7086c9fea5f47d769e5b67b86c261bb67982ca965c76585ebb0a52ee63572b3e0c87beadf1a65f1be5ba6e5ccbc39a6a3d2f753a39ccd0f5ef3c4f6ae4697d252646a16d8ef177c6cb01704478e5f29fb01c69c791fa5b3b11ebc8f724b49fa57da24b3acdaf69f9f58ab8f6c47d10edb138cc98f8131a9f3a5df6dea62abbfcc8b3fc5f8895107376d57fa7da56cee031f001e176dbba336ba148fb1f17d9fa25795edf8ffb1a1550e9fd75a8ff9e633f7d6463e1edf65d5b6fb4f362df659785c3d4789d2629fc5777c5a741f6e3b7ed8b4c865df87282d3eb4f88e518b9178df3393167b2d3c2eee4565d262afc5777c5af428cdf45c03b5d863e17175ef214a0bf1972df38704ccad8d7c3cbecbab6cf7c96c5aecb6f0b8ba6e8ed262b7c5777c5a74e98ef7e83269b1cbc213fffdb9cc5aecb2f88e4f8b9ebdf01e5e262d765a785c3dd38dd262a7c5778c7131c2762fc7a6c50e0bcf8e1c6bb1c3e23bc6f3c3eeb67b6d362db65b781cdc77cda8c5768bef18b51886f75d3369b1cdc2b32dc75a6cb3f88e4f8baa6eb67bc2362d3eb0f0b8ba271ca5c50716dff16931aca7f2bdb51e5a6cb5f06ccdb1165b2dbe63bc864ac5c5967a68b1c5c2b325c75a6cb1f88e4f8bead4b9d6e67a68b1d9c2b339c75a6cb6f88e4f8bd2d43175533db4d864e1d994632d36597cc71817a9ebc98df5d062a38567638eb5d868f11de3712415171beaa1c5060bcf861c6bb1c1e23b3e2d46a6ee3fadaf8716eb2d3ceb73acc57a8bef18efb9a4e2625d3db45867e15997632dd6597cc7a745d7d431756d3db4586be1599b632dd65a7cc7a7c588d433b135f5d0628d85674d8eb55863f11de37967aabd585d0f2d565b7856e7588bd516df319e77a6ee5facaa8716ab2c3cab72acc52a8bef18dbced479e7ca7a68b1d2c2b332c75aacb4f88ef1bc33a5c58a7a68b1c2c2b322c75aacb0f88ef1bc33751c595e0f2d965b7896e7588be516df31c645aaed5c560f2d96597896e5588b6516df31ded74ab59d4beba1c5520b8fabf11aa2b4586af11de3f548ea1edf927a68b1c4c2b324c75a2cb1f88ef15951ea1c7c713db4586ce1599c632d1683ef03b1fb4ef7e7161fd217eb52438b4228f36d49fa57fa6245e928ebc07e65589745b1d725ddaf6c61445d16415da44c61c7dabab40e9c8cf753eea8aea998791feaa4d6fb89a5ae52e6b88eb5ba24743e01dbe430e876bae5ff321518f349c88b7eaaceefc65fe754acbe039c49f083bedf06d6987c7741df053a891fb11742feb48eb565a59ce8215a0bbbda47ded3796437975b6c2c570c65deb3d43f19c45bff770d9e770d66b54d8a21ce248edcb45d69a6f72234ba14349232d867ef13473c661f42e1107faa8c6cff964619ec432965ce85360afb954a3d13c191fd261db5655d905dd62df3e2af186c0780d1aca38a8f7dd0f753c68a907124944dc685e80aebe961d8545d7b3aaaabf89275cb7c4f6094712a7ae49eb1acbe8cdd0d46c5d3db816638f6864c998e17bd81a797031e47f54c1d872a8c3af534ea540c65f0ddc60a07f52c00bfb26e99af00df2eb6396a21c7e48b0c2d0ab1ded09e65d251d6a1e2b787a52e7d1dd745d62ded52df1cf8ae347c77337c2782badb390832ef5f95c0dcc701b35a6fbff8d75b8ae76d1253e2a71bd4a93f6810579d705d729ed7dfd0b610f203e03c4fca4959397e09bb8a65d996c86e2ed7db58ae18caf4b5d43f19c45bff7e064f3f83596d93ebe1dccec1fe908a81be0687cc7703edfa4568d717b4933278fcebee48bb3e068fcc77071e39c7a9009b9c2b087f02fedf3507dc66bb5761e1161b8e13d7ddc2d82d7ec6d4b94e778351e6bb01a3d8fa004fa523cdcc6d7d91a10f1e975b1a6564d94228f3201c1b1396b26abfbba0a0b65ecdb53db677c7749bded2815e384e6300fa04868601e825f56ce180a74d503b56e3a4c93513873d30e2f611e9478f82566860e26f81a51acdc086f9e6165b10d41d92b2106c3224650bb0353364c1a130a5bc0c69e7422ed443d65d6870b60696387de3709e32650a9d56c0e3229455e8c8909e3a74ee9e387af2088c8f160667436247fdaf79867251eb72b51dcc7d2209f3660c163af2df1cea9b8479f1a7b68d0cad3a7ed8f087fa4f7c60cad811e3264f42a1cc1d1bf30541dd0d60fe4609ee6aa7c300c00a63e3d0c2a8173618f23fd9306de2e72cc731734d6d02f027531bd0ed3807baa9f5cbd8b7c3878d1973eb94aa31a3875f3d65dcf0c9a36bc6e1d66c6d2817b5a5e5ff2dc1666be2b1ac9ab0d9c2655b596cb60947196e0d3639721d0736e16903b6e69097f2e6967112aee7c3fa659752ff53e2b4d0156f15d486801c8e55bbaaf65f752aa73e21ab4e85d4d0c66a73aaa18bd51d433534b1fa8a9d1a7a580d35ac86163e3d480f1dac860a3e2b480f05acbe765112a487f63d37a81dba574d8781f37b417a685e759be6c2207ddaa586d6ed14a487ce55b72e3b07e9cfbca977ebd5e9bbba2da04e79d5259e3afd54a79deaf242ddbe50b7b2d4299d3a5d56a782eaf44d5d8ef4d35af70fd3e561ba224c5786e9aa305d1da66bc2746d98ae0bd3f561ba214c3786e9a630dd1ca65bc2746b986e0bd3ed61ba234c7706e9e19def0ad2c3afabe19fef09d24343df1ba4878dbe2f480f297d7f901e6e7a58901e8a7a78901ea67a44901ec2fa81203dbcf5e8203d4cee43417aa85d3504efb8203d1cb61a265b0d9fad86f9554302ab2185d550c36a58623584b11a02590d8dfc58901e72590dd9fc64901ef6795a989e0ed333617a364ccf85e9f930bd10a4870757c3864f0fd2c38cabe1c76705e9e1cae704e9e1cdd5b0e76a3874354cba1a3e5d0dabae867957c3bfab61e1df08d39b617a2b483f92508f62d4230a75fb5f3d0653b7a81705e95be74b82f4236ef5c85f7581505d425417995541ba0b95ea52a6bad8a92e87aa0ba6ea92aabae8aa2ecbaa0bb7ead2aebaf8ab571ed42b20ea9518f58a907a654abd42a65ea953af18aad744d56b97ea3562f55af5fe207d5bfc60907e54aa6e87ab47032a1ed5edfbcfc2f48330fd304c3f0ad38fc3f49330fd344c3f0bd3cf83f4b0c66ab863355cb21a5a590dc3ac866c564339aba1a0d5b0d15f04e9a1a7d5d0d57f0ad243627f19a6afc2f475901e5efbaf61fa5b98be09d3dfc3f48f30fd334cff0a6a87d2c6c6e274ddc2e8ab9460d8e4c923c68e9f5c32b9a664ec943193478f1ff368c9d4d1934795d43c3c62e2c831355371e11fea85651cf0fe13270e7bb464f4b8ea118f94d44c995c5233b2a4aa66cab8ea3a07ea7fea85ce3cd2e3b0eaea6867fffe5d48ff6f039d1ea7db3e1961fdbacc756bdbbc01821cdf9085ba376f588526eaa3945ccede913ed72d9934a666724969c9b8f06f7870ad993aa2ba7309fe6f5228f2a4c92593260f9b38b964e4c49ab1255d3ae37a9f6ad3804afc471b3730c79dde30715ae96f293528c4769ed300053e3fa761a47fff2ea4ffd640a7a9036fb6356cd990852e2e6918617949a42c93a6544d9e386cf8e4e8857b7d9785fb35a49a3737b09affd51067cd3b3660a18e1d1b46d8af21ce4667e12cf8ff31433ebfd44d06009b2d6c6f00000027ca1f8b08000000000000ffed9d77701cc795c667911856581024981324db1423b8586430813953a6242b072650a44512140925cbb2244b72ce395b4e6739e77c9673ce39e7ecba2adf3f57bef255b9ae7bb69ff1a139b3c6aee6816fb06faa1eb6e76defbc5f7ff3a667b67b7690098acb9f8d655cb9d6d8638273177a7fc0bde61fddd29ee0b6f29c9c999470d6a484b336259c7529e1ac4f0967434a3827a58473724a38a724c899013e2edea929e3cda68cf782201d79db9812ce5c4a389b52c2392d259ccd29e19c9e12ce1929e16c4909e7cc9470ce4a09e7ec9470ce4909e7dc9470ce4b09e7fc94702e4809e7c294702e4a09e7e29470b6a684f3c294705e9420e70ae0a431f2c7bad7c7b9d725eef562f7bad4bd2e73afcb5d1bebdcbadde64a63ab8cb579efadb6ccc6ec6079c17bafc358a7b12e63ddeebd56f75e8fb15e637dc6fa8dad31b6d6d83a63eb8d6d709a6c34b6c9d866635b8c6d35b6cdd876633b8ced34b6cbd86e637b8ced35b6cfd825c61e6f6cbfb14b8d5d66ec72634f307685c772a5b1ab8c5d6dec1a63d71abbced8f5c66e3076a3b103c60e1a3b64ecb0b123c6068d1d357693b163c68e1b7ba2b19b8d9d3076d2d8296343c64e1bbbc5d81963678d0d1bbbd5d86d9e66b71bbbc3d89dc69ee471de65ecc9c6ee36f61463f718bbd7d87dc69e6aec7e630f187bd0d8d38c3dddd8338c3dd3d8b38c3ddbd8738c3dd7d8f38c3ddfd80b8cbdd0d88b8cbdd8d84b8cbdd4d8cb8cbddcd82b8cbdd2d8ab1c0b1d08af36f61a63af35f63a63af37f690b137187ba3b137197bb3b1b718fb0f636f35f6b0b1b7197bbbb177187ba7b177197bb7b1f7187bafb1f7197bbfb10f18fba0b10f19fbb0b18f18fba8b18f19fbb8b14f18fb4f639f34f688b14f19fbb4b1cf18fbacb1cf19fbbcb12f18fba2b12f19fbb2b1af18fbaaa7f9d78c7dddd8378c7dd3f9bee55ebfedead231ff1df7fa5df7fa3df7fa7df7fa03affe0fbdf51f79eb3f76af3f71af3f75af3f73af3f77afbf70afbf74afbf72afbf76afbf71afbf75afbf73afbf77af7f70af7f74af7f72af765e6dc5cc62797230b20c0409f5499d837d765c9dc4f6e7edec9c50ad7b8f5e5b9dbfceadd36bc6f9ebdd7abde76f70eb0dde7626bbf5c99e3fe7d6739e7f9a5b9fe6f9a7bbf5e99ebfc5adb778fe0bddfa85e0cfbaf78a0d2bbe585fad7365c047f95903be7ae7ab055f036d0e7c939caf1e7cb47f1bc037c5f926816faaf34d065fd6f9a69096c62e70be8120a95cc91fb4db6d4c7abb6e2e22973cef21bbdd2626de69c9f31eb6db6d66e0b5f931dd6dab11f26686f3e5c0d7e27c4de0735dd0bf8e39eb9be57ccde09bed7cd3c137c7f966806faef3b5806f9ef3cd04df7ce79b05be05ce371b7c0b9d6f0ef81639df5cf02d76be79e06b75bef9e0bbd0f91680ef22e75b083eea2f1781efb1ceb7187c746dd70a3ebacebb107c74cd7791f3d97e627206e2393ff551613cea9fc1f738ea9bc1b784fa65f05d4c7d32f896426cf22d837e857ccb9d8ffa28fb5ebf2b0f04491d1385f0185e93f476cd96ed76d725bfdd700e6c7d30a2f500c459035a6d70e504ef0f69c7d8741d4371c85f07e59d5097ea911e749e2176dbefaf75e50d253ed7ef7d2e0775d646b47f2048b6fdeb3c9e751e733db49f29678f6ace8e79293b67af84ba7eeed135cf44ccd93dc0917cce767468ce8e79293b6707a1ae9f7b74dd3b1173f61ae060c8d91e9e9c2de435678be36041109d7bf4dd6722e6ec31e0483e67bb3467c7be949db3f7415d3ff7e8fbef44ccd9db8023f99cede9d16b83312f65e7ecf3a1ae9f7b3416331173f601e060c8d943dacf8e79293b675f0b75fddca371c18998b32f028ee473b68f29673b346783e29c661044e71e8d514fc49c7d083892cfd9c33a3e3bf6a5ec9cfd18d4f5738fe64b2662cebedb95ed3cc3b7dc3cc302f07ddbf916026ff2b97da49d29b7db35b78bf77a0441748ed2dcdd44cced475cd9e6f177e1de03f27d8fee4b00dff79def22f0fdc0bb6783e918e8d66360ec6d2af718f819d4f57399e69127e231f06de060c8d91ecdd9b1b7a9dc9cfd0bd4f5738fee69988839fb4be060c8d95ecdd9b1b7a9dc9cfd3bd4f5736fa92b4fc49cfd2f57b6d70b3f71d70bcbc1f753e75b01be9f39df4af0fddcf95681ef17ced706be5f3adf6af0fdcaf9f2e0fbb5f3b583ef37ce5700df6f9daf037cbf73be4ef0fddef9bac0f707e7eb06df1f9daf077c7f72be5ef0fdd9f9fa9ccfde9347f75e7dd1f9ecbe258d068264f72ddd6349dba6f595e310bbc98bdd348eb19bbdd8cd11b15731c4ce420c5a32defa009457f1f2e473c083b156271fabc3b6bd2d187bdb57034f9ea1ed598831169e3cf0b427cf139e3f0bc96f37dcc76d9ea65988d506edea6068570662d1b6699de2e5c087fd7747046367f28c850cc4a26dd37a2730920fcf27745ea7e3c79e0f97644678198ea5f09a88e2d1f39f886335f8a9ce375b46d8963bb646781fcfaded9e8f292fc3bca058b46d5aa7788dd09ef6f1672c8c9531ef3172f511198845dbf663e3f1be6afc351bd37ecd81ef3cf449854afba446601b8feb94b87d2d2536c7f92a0331a86f23cd0be0a73ab3dc0f126cdfb61dfa5d86e3af50eef51bf607c9e771218fc7f558783a8087e3d8673a5ef378deff67906cae75795ab57b5ae5a04e27e8d7c5a05fa9eb108aa7cccaaccccaaccccaaccccaaccccaaccccaaccccaaccccaaccccaaccccaacccf299f1fe0b9cdfa47a2b853092af003c1ce3fce133a0dcb668fb765ee7c730af93fcbc45218f7396748fe132afcd7550e7af9991ba3f87f9747f6e10e73457f26a37a6fb2c1a8373e76239e710e3e681a3e62f5b138b5d38cc35dfd6e498db3c5d574668ca709fca284d339ea6789fe20a8fc7e6e9dcda11368eb9bf72e722512b2a2739b787f718f0ee9762ff41b950138cee3ff03cd39d78ecd17398345fdeedc5ae833aff9b19d937742f2afdaf3bff9e275ba7c7db367d6619f87bbc6d4f739f258e7a6ffb6df059aaf37fd0a7beae26f897661cf77f60bf1c405b71198032ce9b277f1e2ecee37794c1d3053c1cfd0cd3f5461e8f81a4e7f17b3cada2ae63a84e37e8d7c3a05fd4b528ad533c6556666556666556666556666556666556666556666556666556666556666596cf8cbf1525d62cd42b08611ca77b1fc2f90c7afe0b6ddfceeb3ca766242ef73c1ccd392df7da5c0775be513352f705aedc189c7bbf43dcbe6498cf2bb92f295e23b407e782b87ecfdde9f174466841e5d6c46217e7f193d778641ebfc3d3b510a129d7f18a73aca8291eafed1e0fce8d3606e7de5b9285ed8cc7bd43717941f1f058ea041f95f1f7d11cfb19cf25fe7d3d140fe7af1f76da4e0bb8f67d21cfd96ff4429b068273f3bb0eeabc0bfabef7b832dec381f78e3c12f13e2da5e6a9493fdbe6c49f65972fcefbae01ce018883b1d7026b42b1db3176c619c5217f1d943f59335297ea911ea435b1db63849e0986ecfee7dabdcfe5a04e5f44fb078264dbdfeff1f47bcc769fbc1ff2ec1138ff73f5497d311a2d038da80e5e0771dd93e7f791fefd8d78df5e835707af59a8ce17a18f8abb7f34ea9e43aef358dc3d8751d7c65dc0e8b7d1bfcfb3daefd3fa21f41749dfa7f543c821bc4f2bf0b6bf1cb64f5c0d41fcb985eafcd4dbbe7f4d4e9fc1fbc0a8ce2fa0bf6872f72c3606e75e7fe33d53e3f1fd2aee3e698a87d735786cffbbb65be65ea83f902033e604b2e07502d5f993b7cf7a62b857477cf6af319f25ade83954f8fdc5d7cfead0079f19484487e231dfefb585f2ba0fda4275fedbbb064cfebaa5780d987c5b475f93503fd019d156aaf33f70acfd1daef1683fe1f78e86da73dfa7a5d43520e967db3cdecf07c6d8129e0f5c5f3b52d77fce2f695deef381bbbdcf497c3ef03f20cf1ae03e74aebe7a6d8c46cb4123aa83bf0da2f3083ecb37ea1cc3756f7fdc3926ea1994d83f37d58e3f9b3fae16758d4075e8b3788dd0e298a7399dfdbafe78219d2f93bc6f187f2bd10671f1b7126d4c7ae641b70158c7eb82f3193bcf143bee99d3f971881df7cce9f188ddecc56e1ec7d8aab96a2e497386672287bf3fc36796daa5d4752931e4e073352960ac4d01635d0a18eb53c0d89002c64929609c9c02c62929609c9a02c62c309ecf733b833e854af5e1da5fa5ae353036c3ff2e2994fbff3b98ff974ac96b1f8ccdf09d2ed4625530762df07b1ec7b31fcafd5f2fc480ffbb607a0a1867a480b125058c3353c0382b058cb353c03827058c7353c0382f058cf353c0b820058c0b53c0b828058c8b53c0d89a02c60b53c078510a181f9302c6c7a680f17129605ca28c8930aee0652c54ca687938fee7dfa3f99f630c3cf9a87b4e997e7b52f6ff5b637e3e697ba5cf8dc37b4b78ff27dca37bb61dc7bd23e53edbaed4ff5b65622c54cac8751f3bfe8e672c3cf8bbc8a8dfd63030162a65e4fafd0bfe466f2c3cdda0595784660c8c854a19b9ee952bf75e4ebca7bf3b423306c642a58c785f75823ca1663d65f0f482663d119a3130162a65e4ba2f390b31c6c2d3079af54668c6c058a89491e9b76da1667d65f0e06fc0fa223463602c54ca6879d63069d65f06cf1ad0ac3f4233498cc893f473b2fb236271fc66b0dcb61303324e4901e3d41430e27d121cfd57a9fb24fa79f52954aa0fd7fe2a759f04c666f87d4ca805fe1ee2df69b18e97a7e47d12187b3d9316f87b957fa7c57ae0e1f8fd4c16628c85871872f0b9e929609c9102c6961430ce4c01e3ac1430ce4e01e39c1430ce4d01e3bc1430ce4f01e38214302e4c01e3a214302e4e01237e5765b8562cf9fd65fd048f1df75d65a2c78efb5e32d1636b9e6b9e57436ccd73cdf36a88ad79ae795e0db135cf35cfab21b6e6b9e67935c4d63cd73caf86d89ae79ae79262a7618c5f19271e23f2b426c793c7b663ac01016d1f88e0c930b51d636d14d07662481be3861430ae4901a3ea58bc07b11246cbb389896763193c9b80673313cfa632783603cf96e479c29cda5c060f31e4e0736b52c0b821058caaa3ea28895175ac1e1d955119955119cf07631afa70654c453e162a65b43c5b93e70935db5206cf56d08c3ed7cecb58a894d1f26c4b9e27d46c6b193cdb40b3ad119a3130162a65b43cdb93e70935db5606cf76d06c5b84660c8c854a192dcf8ee47942cdb697c1b30334db1ea1190363a15246cbb333799e50b31d65f0ec04cd764468c6c058a894d1f2ec4a9e27d46c67193cbb40b39d119a3130162a65b43cbb93e70935db5506cf6ed06c5784660c8c854a192dcf9ee47942cd7697c1b30734db1da1190363a15246cbb337799e50b33d65f0ec05cdf644682695714d0a1837a4809159c742a58c96671f13cfde3278f601cf254c3cfbcae0b904781e9f3c4f98539794c1430c39f8dc9a14306e4801a3eaa83a4a62541dab4747655446652c8f7120058cbaaf95512a23c3f7ab92bfa1b96482c76ef262375549ecb8dfd04cf4d89ae79ae7d5105bf35cf3bc1a626b9e6b9e57436ccd73cdf36a88ad79ae795e0db135cf35cfab21b6e6b9e67935c4d63cd73caf86d89ae79ae7d5105bf35cf3bc1a626b9e6b9e57436ccd73cdf36a88ad79ae795e0db135cf35cfab21b6e6b9e67935c4d63cd73caf86d89ae79ae7d5105bf35cf3bc1a626b9e6b9e57436ccd73cdf36a88ad79ae795e0db135cf35cfab21b6e6b9e6b9a4d8fb938f5d28f71933fb8187e399374cedccdbed5eeab6f5cf04f5b35a5de6697589a7550eea5c0afa5dc6a05f06e2d2b6699de295cb7cb10066a6d885a660f4714d3136787ad83a9733b53daeafbf7c82c78eebeb277aecb8be7ea2c7d63cd73caf86d89ae79ae7d5105bf35cf35c4a6c2cd70723d7edf4fc53bb8d27b8729d5b4756f2539dc74f2abe4e0bf418e288adc7909e2baa21b6e6b9e67935c4d63cd73caf86d89ae79ae7d5105bf35cf3bc1a626b9e6b9e57436ccd73cdf36a88ad792e2fcf73f07ecd38f0041e4f50826791309e39c278a60be399228c6799309e5a613ceb85f18cc7fd7ce5f0ec12c6b35d184faf309ec5c278960be3992b8ca7208c6786309e2e613c5385f16c11c653278c67a3309ebc309e3dc2789608e399278ca74518cf0a613c59613cf5c2783609e3592d8c67a9309ebdc278760be3e917c6b343184f9f309e6e613cf385f17408e399298ca74d18cf05c2781a85f16c15c6d3208c6795309e7dc278d60ae359208c6796309e9c309e26613c9384f1ac13c6b35318cf36613c3dc278160ae3e914c6335b18cf4a613cd384f1340be3d92c8c67b2309e8c009e6c70ee33c9b2f0fe7ef0d5789fb5d703cd3347debfc2f96be03357ba726dc4b6af001ffd36fcca88cfa24e57405b065c39ffe89650278c3500eb14af1138ae14c2335918cf66613ccdc278a609e359298c67b6309e4e613c0b85f1f408e3d9268c67a7309e75c2782609e36912c69313c6334b18cf02613c6b85f1ec13c6b34a184f83309eadc2781a85f15c208ca74d18cf4c613c1dc278e60be3e916c6d3278c6787309e7e613cbb85f1ec15c6b35418cf6a613c9b84f1d40be3c90ae359218ca74518cf3c613c4b84f1ec11c69317c6b351184f9d309e2dc278a60ae3e912c63343184f4118cf5c613ccb85f12c16c6d32b8c67bb309e5dc278f60be3592f8ca75618cf32613c5384f14c17c6334718cf22613c35113c0cffff32e4a1fbd768dbb4be5f486c86fd10fedfcfab98da74b5db56bddb2ef153bc3aa8738deb28ecfd55f859e2f2ef37c473d3d5a0d1d54c6da1fd91f1f60f776cbcaf320086c0d32788e0e1b81f95a99da3f230c1ff3f9bb75a5de369e5efbb1cd4b90af4bb8641bfa8dcfed731003c749d43ac59a8b75e0823f92e67e6c9429b6929750c5c033c1cc724533bc35cbdd66bd3fa08dda90ee6eab50ced8c3a7668fd5ae0d9e8cac49a857a1b853092ef6a669e2cb4999652b97a2df0701c3b4ced0c73f53aaf4d1b2374a73a98abd731b433ead8a1f5eb8067932b136b16ea6d12c248be6b78793ab3d0665a4ae5ea75c0c371ec30b533ccd5ebbd366d8ad09dea60ae5ecfd0cea86387d6af87fda0ccca1cc56c79e8773ac49a857a9b853092ef5a569ece7c16da4c4ba97eec7ae0e1e8e799740ffbb11bbc366d8ed09dea60aedec0d0cea86387d66f8888dd1a24abc58d63d0e2c6089e1bc7590b8a572ef3552964569d55e73866d559758e63569d55e73866d559758e63569d55e73866d559758e63569d55e73866d559758e63569dc7875975569de3985567d5398e5975569de3985567d5398e5975569de3985567d5398e5975569de3985567d5398e5975569de3985567d5398e5975569de39855e7ca982d0f3d178958b3506f8b1046f25dc7cb13fe2e684b307ac978eb0350be1178ae67d087a99de13de407bc366d89d09deae0f17580a19d51c70ead1f80fd70a00ce61b52c8ac3a57c66c79e8f9e3c49a857a5b853092ef7a5e9eb01fdb1a8c5e4af563078087a39f676a67d88f1df4dab4354277aa83c7d7418676461d3bb44ef1945999e3982d0ffd1f2062cd42bd6d4218c977232b4f21fc7de3b660f452aa1f3b083c0712e729f6630cba87fdd821af4ddb2274a73a98ab8718da1975ecd0fa21d80fe530df904266d559758e63569d55e73866d559758e63569d55e73866d559758e63569d55e73866d559758e63569d55e73866d559758e63569dab4767cb43ff0f8658b3506fbb1046f21d60e5e908e71db607a3978cb73e00e543c07330719ee2bc0383eee1bcc361af4ddb2374a73a787c1d666867d4b143eb87613f4c74e61b52c8acb9313ecc9a1bca1cc7acb9a1cc71cc9a1bca1cc7acb9a1cc71cc9a1bca1cc7acb9a1cc71cc9a1bca1cc7acb9a1cc71cc9a1bca1cc7acb9a1cc71cc9a1bca1cc7acb9a1cc71cc9a1bca1cc7acb9a1cc71cc1272c3f2ec706562cd42bd1d4218c9779097277ceec18e60f452eabe9dc3c07388411fa67686f7ed1cf1dab4234277aa83c7d7118676461d3bb47e04f683322b7314b3e5d9e9cac49a857a3b853092ef102f4fd88fed0c462fa5fab123c0c3d1cf33b533ecc706bd36ed8cd09dea60ae0e32b433ead8a1f541d80fcaaccc51cc9667972b136b16eaed12c248bec3bc3c613fb62b18bd94eac7068187a39f676a67d88f1df5dab42b4277aa83b97a94a19d51c70ead1f85fda0ccca1cc56c7976bb32b166a1de6e218ce43bc2cc938536d352aa1f3b0a3c1cfd3c533bc37eec26af4dbb2374a73a98ab3731b433ead8a1f59b80678f2b136b16eaed11c248be41669e2cb4999652b97a13f0701c3b4ced0c73f598d7a63d11ba531dccd5630ced8c3a7668fd18f0ec756562cd42bdbd4218c9779499270b6da6a554ae1e031e8e6387a99d61ae1ef7dab4374277aa83b97a9ca19d51c70ead1f079e7dae4cac59a8b74f0823f9b01fdbc7c4d3e8f13446683111633779b19baa2476b317bbb94a626b9e6b9e57436ccd73cdf36a88ad79ae795e0db1ab35d754f3ead43c731e35cf9c47cd33aab948cdff995cecae5c30b2d4402c86f1b9f6b18c3922cf22613c7384f14c17c6334518cf32613cb5c2787a85f12c16c6b35c18cf5c613c05613c3384f17409e3992a8ca74e184f5e18cf12613cf384f1b408e359218c272b8ca75e18cf6a613c4b85f1f40be3e913c6d32d8c67be309e0e613c3385f1b409e3b940184fa3309e06613cab84f1ac15c6b34018cf2c613c39613c4dc278f60be399248c679d309e1e613c0b85f1740ae3992d8c67a5309e69c2789a85f14c16c69311c0930dcefd6d07fe9ea0167c747fff3ef03dd195f783af2622066de738f8683c97b661cf570b669ecb50039fb93982eb8911f128cecd119f1d0fdd31d600ac53bc46e0b85908cf64613ccdc278a609e359298c67b6309e4e613c0b85f1f408e359278c6792309efdc2789a84f1e484f1cc12c6b34018cf5a613cab84f13408e36914c67381309e36613c3385f17408e3992f8ca75b184f9f309e7e613c4b85f1ac16c6532f8c272b8c6785309e16613cf384f12c11c69317c653278c67aa309e2e613c3384f11484f1cc15c6b35c18cf62613cbdc2786a85f12c13c6334518cf74613c7384f12c12c65313c1b39f8927ee790afb05c4b6e3de742d48636259787f3c7ea7b4df63a4f563c0483ebc4f37cfc413f70c8abc80d8568bd550b64b16dec7df9970e554de63a4f5a89cc2fb2c5733f1c43db763b580d8560b9a1ba07b00b2f03ede57cd9553ab3d465a8fcaa9665e9ef0ff07ac0a462fa5ee35c2638e631f32b5338fc75f82cfd0887c46f22a4fab1cd4198ffb8ae3fa038aa7ccca1cc76c7968ee8b58f17c361ebf5b1a0b63d4f9958127ec1fdb82d14ba9fef118f0709c3f98da19f66327bc36b545e84e7530574f30b433ead8a1f51311b15b8364b53839062d4e46f09c1c672d285eb9ccfb53c82c4167cb43f76a126b16eaad14c248be3c2f4fd83fae0c462fa5fac793c0c371fe606a67d8279cf2dab4324277aa83c7d7298676461d3bb47e0af64339cc2752c8ac3a57c66c79688e8658b350af2084917cc758790af92cb4999652fdd829e0e1e8e799740ffbb121af4d8508dda90e1e5f430ced8c3a76687d08f683322bb3322bb3322bb3322bb3322bb3322bb3322bb3322bb3322bb3322bb332cb66b63cf4db6162cd42bd0e218ce43bc9ca539c77e808462fa5e61d8680e754e23cc5790706ddc37987d35e9b3a2274a73a98aba719da1975ecd0fa69d80fcaaccccaaccccaaccccaaccccaaccccaaccccaaccccaaccccaaccccaacccca2c9bd9f2d033e489350bf53a853092ef142f4ff8bbadce60f4526adee134f070cccb30b5339c77b8c56b536784ee540773f5168676461d3bb47e0bec076556e62866cb43cf1e24d62cd4eb12c248be21569ee2fc6957307a29d58fdd023c1cfd3c93ee613f76c66b535784ee540773f50c433ba38e1d5a3f03fba11ce6132964569d55e73866d559758e63569d55e73866d559758e63569d55e73866d559758e63569d55e73866d559758e63569d55e73866d5b97a74b63cf43f0d89350bf5ba853092ef342b4f4738efd01d8c5e4acd3b9c011e8e791926ddc37987b35e9bba2374a73a787c9d656867d4b143eb67613f4c74e6132964d6dc181f66cd0d658e63d6dc50e63866cd0d658e63d6dc50e63866cd0d658e63d6dc50e63866cd0d658e63d6dc50e63866cd0d658e63d6dc50e63866cd0d658e63d6dc50e63866cd0d658e63d6dc50e6386609b961797a5c9958b350af470823f96ee1e5099f7bd0138c5e4addb7731678ce30e8c3d4cef0be9d61af4d3d11ba531d3cbe8619da1975ecd0fa30ec076556e62866cbd3ebcac49a857abd4218c9778699270b6da6a5543f360c3c1cfd3c533bc37eec56af4dbd11ba531dccd55b19da1975ecd0faadc0d3e7cac49a857a7d4218c987e7b83e269e468fa731428bf315db6ad1efca17b8d72cbcdf0f8c5c7d4b9fc748eb98e3e46b049e7e269e268fa729428bf315db6ab116ca76c9c2fb6b81912ba7fa3d465a8fcaa926e059cbc4d3ecf134476871be625b2dd6b9f234f79a85f7d70123574eadf518693d2aa79a81671d134f5c9fb46e1c62c71d5fe3113b2e57c623b66aae9aabe6aa39a7e699f3a879e63c6a9e51cd4569ce701d158e9d528c0018701980327e57e0b8f6646a673eeafbd83aaf4df87d0cc71cced7f70d6556e63866a6718bceac179bf4093c1e5a8699b518cf31c87eaf4dd2c620cb653e914266d5b932661bfbb6e4637766bdd8a44fe0f1d0721bb3164ced0cfb83db83688d295e0eea609edeced0ce0cc4a56dd3faedb01fca613e914266d5b932661bfb8ec463179fcd8eb1499fc0e3a1e50e662d78da59ec0fee0ca235a67839a883797a27433b331097b64deb77c27e5066655666655666655666655666655666655666655666655666655666655666d9cc36f693128f5d1cbfc7d8a44fe0f1d0f224662d78da591cbfbf2b88d698e2e5a00eeef3bb18da9981b8b46d5abf0bf683322bb3322bb3322bb3322bb3322bb3322bb3322bb3322bb3322bb3322bb332cb66b6b19f9c7cecf0f738189bf4093c1e5a9eccac05533bc3f1fbbb83688d295e0eeae03ebf9ba19d19884bdba6f5bb613f28b3324731dbd84f493c76713e0f63933e81c743cb5398b5e06967b13fb82788d698e2e5a00eeef37b18da9981b8b46d5abf07f64339cc2752c8ac3aabce71ccaab3ea1cc7ac3aabce71ccaab3ea1cc7ac3aabce71ccaab3ea1cc7ac3aabce71ccaab3ea1cc7ac3aabce71ccaa73f5e86c63df9b78ec8e70fc1e63933e81c743cbbdcc5af0b4b3387e7f5f10ad31c5cb411dccd3fb18da9981b8b46d5aa778d5c07c2285cc9a1be3c3acb9a1cc71cc9a1bca1cc7acb9a1cc71cc9a1bca1cc7acb9a1cc71cc9a1bca1cc7acb9a1cc71cc9a1bca1cc7acb9a1cc71cc9a1bca1cc7acb9a1cc71cc9a1bca1cc7acb9a1cc71cc9a1bca1cc72c21376ceca7261f3bfc3d3bc6267d028f8796a7326bc1d4cef0fe97fb83688d295e0eea609edecfd0ce0cc4a56dd3fafdb01f945999a3986dec07186267bdd8a44fe0f1d0f200b3164ced0cfb830783688d295e0eeae03e7f90a19d19884bdba6f5072136ea9d50ecf01e488a51e35eadef69ae5c0bbea7bb721df89ee1caf5e07ba62b3780ef59ae3c097ccf86f690ef39aebc027ccf75e575e07b9e2baf05dff35db91f7c2f70e53ef0bdd09587c1f72257be157c2f76e5dbc0f71257be1d7c2f75e53bc0f73257be137c2f77e52781ef15ae7c17f85ee9ca4f06dfab5cf96ef0bdda959f02bed7b8f23de07bad2bdf0bbed7b9f27de07bbd2b2f01df4311be37b8f253c1f74657be1f7c6f72e5fde07bb32b4f01df5b5c792af8fe03caf4fa5657be007c0fbb7223f8dee6ca39f0bddd959bc0f70e579e06be77ba7233f8dee5cad3c1f76e579e01bef7b8720bf8deebca33c1f73e579e05bef7bbf26cf07dc095e780ef83ae3c177c1f72e579e0fbb02bcf07df475c7901f83eeaca0bc1f731575e04be8fbbf262f07dc29571fffea72b3f003eea571e041ff52b4f031ff52b4f071ff52bcf001ff52bcf041ff52bcf021ff52bcf061fe5dd73c04779f75cf051de3d0f7c9477cf071fe5dd0bc04779f742f051debd087c94772f061fe5dd4bc04779f752f051debd0c7c94772f071fe5dd2bc04779f74af051debd0a7c9477af061fe5dd6bc04779f75af051debd0e7c9477af071fe5dd43e0a3bc7b03f828efde08be56577e13f82e74e53783ef22577e0bf81ee3cad8cf3cd695df0abec7b9f2c3e0a3bef06de0bbd895df0ebea5aefc0ef02d73e577826fb92bbf0b7c2b5cf9dde05be9caef01df2a577e2ff8da5cf97de05bedcaef075fde953f00be7657fe20f80aaefc21f075b8f287c1d7e9ca1f015f972b7f147cddaefc31f0f5b8f2c7c1d7ebca9f001f9dc7a99fb1c7b33d064907d2c8faa8cd6d116d21df6468cb4090ec351dc5a26dd37a0730d23e288c3f6361ac8ced1ea3e5e962d00cf38a9652df3fba80a7938187a99de1f78f6eaf4d1d5e9b7250e762686737433b331097b64debdd109b639fa316f56ebb4b3d2deaa0ce1fdc49ce9e3b4be948dbb0f95b88684b1f735b68dbd42ff58d43ec1e2f76de8b8dfd312da58eaf1e60ee6560b6dbed4f7ebbe1f1b5c66d8b728ae2e4a14d6b4183a4da84b133ce280ef9eba0fc8f9691ba548ff4a0f317b1db5ca67d89ecfee7babccfe5a04e5f44fb078264dbdfeff1f47bcc769ffcad658483e1780873a0cfe3a0f53c68d71fa35d1f684775f0fc5760d2aed7e3e9f5625b1ebac6e9061f5d2b103f5e67b58d03b7dfef75477093af0718a3ae75da93672c79add30e8ce4eb059e1e26cdfc7dbdd4d307cfcb0d5e1dfa6c1dd469725ff6a605a3bf7f505d7bdc2dc98cb48bbe83ff3348b64f6f60d00bc70702d027f0340c402f6a673d03cfd460648ce0ecf0d09983370d5e3a78f04806d0ea3c4c7ccd4434a3067c58ae8df005c1e8a1101c92a5a1101c92adf164c12118aa6fbf4ad966d170c3e0c9e3c34f383578eaf0993b4f0f0f1ed933741352d77bf4481ad70224451f2d938391419b8120d9e469f062954a9ec9f03a898187a99de1496f8ad7a606af4d39a8530fef4d61686706e2d2b6691d0780c987d949efe384418dd716cce229f0eaefdb441b44011f03dbcf3838fb5e9d13b6c1c193b8d463d851447b256777841d15b4bdb51df5b3879d1dd5b31746b623b7a3747654ce8ec2d951373bca6647d5ec289a1d35b3a3647654ac35288e7a5d043c5f04463baa6547b1eca895fd2669cf0a7614ca8e3ad951267b3561bfa5d833b0bde2b45747f68c68cf84f6db94fd666dcf30f6ec6dcf4cf66c62af8eec5591bd8ab55775766666bdb10d4eeb8dc63619db6c6c8bb1adc6b619db6e6c87b19dc67619db6d6c8fb1bdc6f619bbc4d8e383e288f2a5c62e3376b9b12718bbc2d895c6ae3276b5b16b8c5d6bec3a63d71bbbc1d88dc60e183b68ec90b1c3c68e181b3476d4d84dc68e193b6eec89c66e0e8a77789c3476cad890b1d3c66e3176c6d8d9a0384b646785ec2c909df5b1b33c7656c7cee2d8591b3b4b636765ec2c8c9d75b93728ceaad8d9113b1b6247c2edc8b71de9b623dbcf088a23d776a4fad9417124da8e3cdb91663bb26c4792edc8b11d29b623c37624d88efcda915e3bb26b4772edc8ad1da9b523b37624d68ebcda91563bb2fa50501c39b523a57664d48e84da914f3bd26947361f0e8a239776a4d28e4cda91483bf268471aedc8a21d49b4238776a4d08e0cda91403bf26747faecc89e1dc9b3237776a4ce8eccd991b84f1a7bc4d8a78c7ddad8678c7dd6d8e78c7dded81782624e7ec9d8978d7dc5d8578d7dcdd8d78d7dc3d8378d7dcbd8b78d7dc7d8778d7dcfd8f78dfdc0d80f8dfdc8d88f8dfdc4d84f8dfdccd8cf8dfdc2d82f8dfdcad8af8dfdc6d86f8dfdced8ef8dfdc1d81f8dfdc9d89f8391517bec28feee566804f9e0f0f0e0c9d3c3adc343ad276f3d317cfcf4893b5b6f3f3e7cac75e8b6c133474f0cdd8e1f7eabeb9a68787ce3993307ef6c3d7eeac8e01dad43b70eb70e1d6d3d3474eba92367f1435f701f5a706ec483478ec407fb41cda320fd498541ffe83e47130f3b4bb7ed2f9508f2b74a3e34a3b6b2065de2ce2cf4adf4b2e2555cebd91343c3adf9d653e6efc113e6338347da5af1bdb346e4b3c3ad67870f9e196e3d7a66e8646b7b1b6ef7ea291534e2f72d157c283773ec2d0ffe1f9f7a505f69010400", "privateFunctions": [ { "selector": { @@ -37,8 +37,8 @@ exports[`ContractClass creates a contract class from a contract compilation arti "isInternal": false } ], - "id": "0x25ff42e7b5351646829b6ce29c6a64660cbcc9d81954e67ab57d47dfbc096613", + "id": "0x265f4d2b1a243f7868c59d1dcb00058dc7fd0b689d1d67dab3619ed3adf80a87", "privateFunctionsRoot": "0x2dc1f38d7be98a8e72227d6f8aec393c60db813a1819c9c86b02a00cc18f6687", - "publicBytecodeCommitment": "0x2152b1029338584a8d43bbf80c6da9cf988c33c54e1f9b86741a2fa94986fe6b" + "publicBytecodeCommitment": "0x1e05dc06ee8c7237716649ec7d46ed61fee07383dd695a5b99d9048d54378e85" }" `; From 6fa3f56af95b03f859ca4de0876c793236f87b35 Mon Sep 17 00:00:00 2001 From: guipublic Date: Mon, 25 Mar 2024 11:28:41 +0000 Subject: [PATCH 22/98] update artifact hash --- yarn-project/circuits.js/src/contract/artifact_hash.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/yarn-project/circuits.js/src/contract/artifact_hash.test.ts b/yarn-project/circuits.js/src/contract/artifact_hash.test.ts index f4611d72b8c..19efb0643a0 100644 --- a/yarn-project/circuits.js/src/contract/artifact_hash.test.ts +++ b/yarn-project/circuits.js/src/contract/artifact_hash.test.ts @@ -5,7 +5,7 @@ describe('ArtifactHash', () => { it('calculates the artifact hash', () => { const artifact = getSampleContractArtifact(); expect(computeArtifactHash(artifact).toString()).toMatchInlineSnapshot( - `"0x19dcd971117d72ceed658023cf16036d912de56c75a54da414d2d6bd645c99f2"`, + `"0x2be6833e88c1468b0494419b538155465c63e66e5ad63f08e1e7861a6a096137"`, ); }); }); From ffe57120fc09235192f9ee7a4d7ffd4df3407717 Mon Sep 17 00:00:00 2001 From: Tom French Date: Mon, 25 Mar 2024 13:49:36 +0000 Subject: [PATCH 23/98] chore: move playwright install before building yarn packages --- noir/scripts/test_js_packages.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/noir/scripts/test_js_packages.sh b/noir/scripts/test_js_packages.sh index 687ab802fee..f7fa23301e2 100755 --- a/noir/scripts/test_js_packages.sh +++ b/noir/scripts/test_js_packages.sh @@ -4,6 +4,7 @@ set -eu cd $(dirname "$0")/../noir-repo ./.github/scripts/wasm-bindgen-install.sh +./.github/scripts/playwright-install.sh # Set build data manually. export SOURCE_DATE_EPOCH=$(date +%s) @@ -15,6 +16,5 @@ export PATH="${PATH}:/usr/src/noir/noir-repo/target/release/" yarn --immutable yarn build -./.github/scripts/playwright-install.sh yarn test From ab0a16d7d66aff3d25483cff0e3984372e136946 Mon Sep 17 00:00:00 2001 From: Tom French Date: Mon, 25 Mar 2024 19:49:47 +0000 Subject: [PATCH 24/98] chore: fix version of playwright --- noir/noir-repo/.github/scripts/playwright-install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/noir/noir-repo/.github/scripts/playwright-install.sh b/noir/noir-repo/.github/scripts/playwright-install.sh index 4072e996264..7e65021166c 100755 --- a/noir/noir-repo/.github/scripts/playwright-install.sh +++ b/noir/noir-repo/.github/scripts/playwright-install.sh @@ -1,4 +1,4 @@ #!/bin/bash set -eu -npx playwright install && npx playwright install-deps +npx -y playwright@1.42 install --with-deps From a3d3d6b4f1a76040e704e70216e898bf4c6c508b Mon Sep 17 00:00:00 2001 From: Tom French Date: Mon, 25 Mar 2024 20:24:51 +0000 Subject: [PATCH 25/98] chore: update playwright in yarn.lock --- noir/noir-repo/acvm-repo/acvm_js/package.json | 2 +- .../compiler/integration-tests/package.json | 2 +- .../tooling/noirc_abi_wasm/package.json | 2 +- noir/noir-repo/yarn.lock | 117 ++---------------- 4 files changed, 15 insertions(+), 108 deletions(-) diff --git a/noir/noir-repo/acvm-repo/acvm_js/package.json b/noir/noir-repo/acvm-repo/acvm_js/package.json index 2f444ba565a..65f165005cb 100644 --- a/noir/noir-repo/acvm-repo/acvm_js/package.json +++ b/noir/noir-repo/acvm-repo/acvm_js/package.json @@ -42,7 +42,7 @@ "@esm-bundle/chai": "^4.3.4-fix.0", "@web/dev-server-esbuild": "^0.3.6", "@web/test-runner": "^0.18.1", - "@web/test-runner-playwright": "^0.10.0", + "@web/test-runner-playwright": "^0.11.0", "chai": "^4.4.1", "eslint": "^8.57.0", "eslint-plugin-prettier": "^5.1.3", diff --git a/noir/noir-repo/compiler/integration-tests/package.json b/noir/noir-repo/compiler/integration-tests/package.json index 431fe408a8b..99066d27d3e 100644 --- a/noir/noir-repo/compiler/integration-tests/package.json +++ b/noir/noir-repo/compiler/integration-tests/package.json @@ -21,7 +21,7 @@ "@web/dev-server-esbuild": "^0.3.6", "@web/dev-server-import-maps": "^0.2.0", "@web/test-runner": "^0.18.1", - "@web/test-runner-playwright": "^0.10.0", + "@web/test-runner-playwright": "^0.11.0", "eslint": "^8.57.0", "eslint-plugin-prettier": "^5.1.3", "ethers": "^6.7.1", diff --git a/noir/noir-repo/tooling/noirc_abi_wasm/package.json b/noir/noir-repo/tooling/noirc_abi_wasm/package.json index a6cc5503242..a9dd0704a17 100644 --- a/noir/noir-repo/tooling/noirc_abi_wasm/package.json +++ b/noir/noir-repo/tooling/noirc_abi_wasm/package.json @@ -44,7 +44,7 @@ "@esm-bundle/chai": "^4.3.4-fix.0", "@web/dev-server-esbuild": "^0.3.6", "@web/test-runner": "^0.18.1", - "@web/test-runner-playwright": "^0.10.0", + "@web/test-runner-playwright": "^0.11.0", "eslint": "^8.57.0", "mocha": "^10.2.0" } diff --git a/noir/noir-repo/yarn.lock b/noir/noir-repo/yarn.lock index 3932935167d..f2d87520b8e 100644 --- a/noir/noir-repo/yarn.lock +++ b/noir/noir-repo/yarn.lock @@ -4381,7 +4381,7 @@ __metadata: "@esm-bundle/chai": ^4.3.4-fix.0 "@web/dev-server-esbuild": ^0.3.6 "@web/test-runner": ^0.18.1 - "@web/test-runner-playwright": ^0.10.0 + "@web/test-runner-playwright": ^0.11.0 chai: ^4.4.1 eslint: ^8.57.0 eslint-plugin-prettier: ^5.1.3 @@ -4515,7 +4515,7 @@ __metadata: "@noir-lang/types": "workspace:*" "@web/dev-server-esbuild": ^0.3.6 "@web/test-runner": ^0.18.1 - "@web/test-runner-playwright": ^0.10.0 + "@web/test-runner-playwright": ^0.11.0 eslint: ^8.57.0 mocha: ^10.2.0 languageName: unknown @@ -6464,15 +6464,6 @@ __metadata: languageName: node linkType: hard -"@web/browser-logs@npm:^0.3.4": - version: 0.3.4 - resolution: "@web/browser-logs@npm:0.3.4" - dependencies: - errorstacks: ^2.2.0 - checksum: fe212c91c26deada3458b6562a8d7d2ae98b7b51c7099e1cdb972e9f799c63f6cd170776b2eadbe43c47531cb6d9b06f48282113a5944f4394270a0076f8565e - languageName: node - linkType: hard - "@web/browser-logs@npm:^0.4.0": version: 0.4.0 resolution: "@web/browser-logs@npm:0.4.0" @@ -6515,32 +6506,6 @@ __metadata: languageName: node linkType: hard -"@web/dev-server-core@npm:^0.6.2": - version: 0.6.3 - resolution: "@web/dev-server-core@npm:0.6.3" - dependencies: - "@types/koa": ^2.11.6 - "@types/ws": ^7.4.0 - "@web/parse5-utils": ^2.0.2 - chokidar: ^3.4.3 - clone: ^2.1.2 - es-module-lexer: ^1.0.0 - get-stream: ^6.0.0 - is-stream: ^2.0.0 - isbinaryfile: ^5.0.0 - koa: ^2.13.0 - koa-etag: ^4.0.0 - koa-send: ^5.0.1 - koa-static: ^5.0.0 - lru-cache: ^8.0.4 - mime-types: ^2.1.27 - parse5: ^6.0.1 - picomatch: ^2.2.2 - ws: ^7.4.2 - checksum: 98ba42df5eb865828c223bd1de098d013efd8e89983efff28e26ecd9d08c8b35fd29b4c1256ed08b05ecb365abe1aa80d2854e1953bdebbbe230a7e2a597dd8f - languageName: node - linkType: hard - "@web/dev-server-core@npm:^0.7.0": version: 0.7.0 resolution: "@web/dev-server-core@npm:0.7.0" @@ -6643,7 +6608,7 @@ __metadata: languageName: node linkType: hard -"@web/parse5-utils@npm:^2.0.2, @web/parse5-utils@npm:^2.1.0": +"@web/parse5-utils@npm:^2.1.0": version: 2.1.0 resolution: "@web/parse5-utils@npm:2.1.0" dependencies: @@ -6676,40 +6641,6 @@ __metadata: languageName: node linkType: hard -"@web/test-runner-core@npm:^0.12.0": - version: 0.12.0 - resolution: "@web/test-runner-core@npm:0.12.0" - dependencies: - "@babel/code-frame": ^7.12.11 - "@types/babel__code-frame": ^7.0.2 - "@types/co-body": ^6.1.0 - "@types/convert-source-map": ^2.0.0 - "@types/debounce": ^1.2.0 - "@types/istanbul-lib-coverage": ^2.0.3 - "@types/istanbul-reports": ^3.0.0 - "@web/browser-logs": ^0.3.4 - "@web/dev-server-core": ^0.6.2 - chokidar: ^3.4.3 - cli-cursor: ^3.1.0 - co-body: ^6.1.0 - convert-source-map: ^2.0.0 - debounce: ^1.2.0 - dependency-graph: ^0.11.0 - globby: ^11.0.1 - ip: ^1.1.5 - istanbul-lib-coverage: ^3.0.0 - istanbul-lib-report: ^3.0.1 - istanbul-reports: ^3.0.2 - log-update: ^4.0.0 - nanocolors: ^0.2.1 - nanoid: ^3.1.25 - open: ^8.0.2 - picomatch: ^2.2.2 - source-map: ^0.7.3 - checksum: e71afa227f9dc2ea4ec67838b1bc4c8af2c61d3e6002b78e37724e3dc09be466e7f7aa5e6795d5431dca1a0b13b94765a880103f98c5497c97943c2f708327eb - languageName: node - linkType: hard - "@web/test-runner-core@npm:^0.13.0": version: 0.13.0 resolution: "@web/test-runner-core@npm:0.13.0" @@ -6744,19 +6675,6 @@ __metadata: languageName: node linkType: hard -"@web/test-runner-coverage-v8@npm:^0.7.3": - version: 0.7.3 - resolution: "@web/test-runner-coverage-v8@npm:0.7.3" - dependencies: - "@web/test-runner-core": ^0.12.0 - istanbul-lib-coverage: ^3.0.0 - lru-cache: ^8.0.4 - picomatch: ^2.2.2 - v8-to-istanbul: ^9.0.1 - checksum: 05d7a9a4df8ca30991307a8d69ac9388a6572a9c6585887a925e7bdb158a0430f213c81cb356b8dcb7bf9cd3423d0071030b481c29358562bd344da8ea814daa - languageName: node - linkType: hard - "@web/test-runner-coverage-v8@npm:^0.8.0": version: 0.8.0 resolution: "@web/test-runner-coverage-v8@npm:0.8.0" @@ -6779,17 +6697,6 @@ __metadata: languageName: node linkType: hard -"@web/test-runner-playwright@npm:^0.10.0": - version: 0.10.3 - resolution: "@web/test-runner-playwright@npm:0.10.3" - dependencies: - "@web/test-runner-core": ^0.12.0 - "@web/test-runner-coverage-v8": ^0.7.3 - playwright: ^1.22.2 - checksum: 7c765d34482f2e299742c3ffe80790229d0825569016ccfccbb1a0c915f89551a3cc14a1454ed7c6895aaa03605ea444f7c1846eeab82bf02702e87a60628b3c - languageName: node - linkType: hard - "@web/test-runner-playwright@npm:^0.11.0": version: 0.11.0 resolution: "@web/test-runner-playwright@npm:0.11.0" @@ -13118,7 +13025,7 @@ __metadata: "@web/dev-server-esbuild": ^0.3.6 "@web/dev-server-import-maps": ^0.2.0 "@web/test-runner": ^0.18.1 - "@web/test-runner-playwright": ^0.10.0 + "@web/test-runner-playwright": ^0.11.0 eslint: ^8.57.0 eslint-plugin-prettier: ^5.1.3 ethers: ^6.7.1 @@ -16928,27 +16835,27 @@ __metadata: languageName: node linkType: hard -"playwright-core@npm:1.40.1": - version: 1.40.1 - resolution: "playwright-core@npm:1.40.1" +"playwright-core@npm:1.42.1": + version: 1.42.1 + resolution: "playwright-core@npm:1.42.1" bin: playwright-core: cli.js - checksum: 84d92fb9b86e3c225b16b6886bf858eb5059b4e60fa1205ff23336e56a06dcb2eac62650992dede72f406c8e70a7b6a5303e511f9b4bc0b85022ede356a01ee0 + checksum: e7081ff0f43b4b9053255109eb1d82164b7c6b55c7d022e25fca935d0f4fc547cb2e02a7b64f0c2a9462729be7bb45edb082f8b038306415944f1061d00d9c90 languageName: node linkType: hard "playwright@npm:^1.22.2": - version: 1.40.1 - resolution: "playwright@npm:1.40.1" + version: 1.42.1 + resolution: "playwright@npm:1.42.1" dependencies: fsevents: 2.3.2 - playwright-core: 1.40.1 + playwright-core: 1.42.1 dependenciesMeta: fsevents: optional: true bin: playwright: cli.js - checksum: 9e36791c1b4a649c104aa365fdd9d049924eeb518c5967c0e921aa38b9b00994aa6ee54784d6c2af194b3b494b6f69772673081ef53c6c4a4b2065af9955c4ba + checksum: 06c16bcd07d03993126ee6c168bde28c59d3cab7f7d4721eaf57bd5c51e9c929e10a286758de062b5fc02874413ceae2684d14cbb7865c0a51fc8df6d9001ad1 languageName: node linkType: hard From bca49ef99b7461db39b7b54a8c584ea346998df0 Mon Sep 17 00:00:00 2001 From: TomAFrench Date: Mon, 25 Mar 2024 20:48:20 +0000 Subject: [PATCH 26/98] chore: fix formatting --- .../cpp/src/barretenberg/common/fuzzer.hpp | 126 +++++++++--------- .../src/barretenberg/eccvm/eccvm_composer.hpp | 3 +- .../cpp/src/barretenberg/relations/utils.hpp | 22 ++- .../hash/poseidon2/poseidon2_permutation.cpp | 23 ++-- .../circuit_builders/circuit_builders.hpp | 3 +- .../stdlib/primitives/group/cycle_group.cpp | 20 +-- .../stdlib/primitives/group/cycle_group.hpp | 28 ++-- .../sumcheck/instance/prover_instance.cpp | 3 +- .../sumcheck/instance/prover_instance.hpp | 6 +- 9 files changed, 121 insertions(+), 113 deletions(-) diff --git a/barretenberg/cpp/src/barretenberg/common/fuzzer.hpp b/barretenberg/cpp/src/barretenberg/common/fuzzer.hpp index d62eaecad5d..aaa2e71f676 100644 --- a/barretenberg/cpp/src/barretenberg/common/fuzzer.hpp +++ b/barretenberg/cpp/src/barretenberg/common/fuzzer.hpp @@ -89,41 +89,39 @@ class FastRandom { * @tparam T */ template -concept SimpleRng = requires(T a) -{ - { - a.next() - } -> std::convertible_to; -}; +concept SimpleRng = requires(T a) { + { + a.next() + } -> std::convertible_to; + }; /** * @brief Concept for forcing ArgumentSizes to be size_t * * @tparam T */ template -concept InstructionArgumentSizes = requires -{ - { - std::make_tuple(T::CONSTANT, - T::WITNESS, - T::CONSTANT_WITNESS, - T::ADD, - T::SUBTRACT, - T::MULTIPLY, - T::DIVIDE, - T::ADD_TWO, - T::MADD, - T::MULT_MADD, - T::MSUB_DIV, - T::SQR, - T::SQR_ADD, - T::SUBTRACT_WITH_CONSTRAINT, - T::DIVIDE_WITH_CONSTRAINTS, - T::SLICE, - T::ASSERT_ZERO, - T::ASSERT_NOT_ZERO) - } -> std::same_as>; -}; +concept InstructionArgumentSizes = requires { + { + std::make_tuple(T::CONSTANT, + T::WITNESS, + T::CONSTANT_WITNESS, + T::ADD, + T::SUBTRACT, + T::MULTIPLY, + T::DIVIDE, + T::ADD_TWO, + T::MADD, + T::MULT_MADD, + T::MSUB_DIV, + T::SQR, + T::SQR_ADD, + T::SUBTRACT_WITH_CONSTRAINT, + T::DIVIDE_WITH_CONSTRAINTS, + T::SLICE, + T::ASSERT_ZERO, + T::ASSERT_NOT_ZERO) + } -> std::same_as>; + }; /** * @brief Concept for Havoc Configurations @@ -131,27 +129,26 @@ concept InstructionArgumentSizes = requires * @tparam T */ template -concept HavocConfigConstraint = requires -{ - { - std::make_tuple(T::GEN_MUTATION_COUNT_LOG, T::GEN_STRUCTURAL_MUTATION_PROBABILITY) - } -> std::same_as>; - T::GEN_MUTATION_COUNT_LOG <= 7; -}; +concept HavocConfigConstraint = + requires { + { + std::make_tuple(T::GEN_MUTATION_COUNT_LOG, T::GEN_STRUCTURAL_MUTATION_PROBABILITY) + } -> std::same_as>; + T::GEN_MUTATION_COUNT_LOG <= 7; + }; /** * @brief Concept specifying the class used by the fuzzer * * @tparam T */ template -concept ArithmeticFuzzHelperConstraint = requires -{ - typename T::ArgSizes; - typename T::Instruction; - typename T::ExecutionState; - typename T::ExecutionHandler; - InstructionArgumentSizes; -}; +concept ArithmeticFuzzHelperConstraint = requires { + typename T::ArgSizes; + typename T::Instruction; + typename T::ExecutionState; + typename T::ExecutionHandler; + InstructionArgumentSizes; + }; /** * @brief Fuzzer uses only composers with check_circuit function @@ -159,12 +156,11 @@ concept ArithmeticFuzzHelperConstraint = requires * @tparam T */ template -concept CheckableComposer = requires(T a) -{ - { - CircuitChecker::check(a) - } -> std::same_as; -}; +concept CheckableComposer = requires(T a) { + { + CircuitChecker::check(a) + } -> std::same_as; + }; /** * @brief The fuzzer can use a postprocessing function that is specific to the type being fuzzed @@ -174,12 +170,11 @@ concept CheckableComposer = requires(T a) * @tparam Context The class containing the full context */ template -concept PostProcessingEnabled = requires(Composer composer, Context context) -{ - { - T::postProcess(&composer, context) - } -> std::same_as; -}; +concept PostProcessingEnabled = requires(Composer composer, Context context) { + { + T::postProcess(&composer, context) + } -> std::same_as; + }; /** * @brief This concept is used when we want to limit the number of executions of certain instructions (for example, @@ -188,11 +183,10 @@ concept PostProcessingEnabled = requires(Composer composer, Context context) * @tparam T */ template -concept InstructionWeightsEnabled = requires -{ - typename T::InstructionWeights; - T::InstructionWeights::_LIMIT; -}; +concept InstructionWeightsEnabled = requires { + typename T::InstructionWeights; + T::InstructionWeights::_LIMIT; + }; /** * @brief Mutate the value of a field element @@ -203,7 +197,9 @@ concept InstructionWeightsEnabled = requires * @param havoc_config Mutation configuration * @return Mutated element */ -template inline static FF mutateFieldElement(FF e, T& rng) requires SimpleRng +template +inline static FF mutateFieldElement(FF e, T& rng) + requires SimpleRng { // With a certain probability, we apply changes to the Montgomery form, rather than the plain form. This // has merit, since the computation is performed in montgomery form and comparisons are often performed @@ -294,7 +290,7 @@ template inline static FF mutateFieldElement(FF e, T& * @tparam T */ template -requires ArithmeticFuzzHelperConstraint + requires ArithmeticFuzzHelperConstraint class ArithmeticFuzzHelper { private: /** @@ -602,8 +598,8 @@ class ArithmeticFuzzHelper { template // TODO(@Rumata888)(from Zac: maybe try to fix? not comfortable refactoring this myself. Issue #1807) // NOLINTNEXTLINE(readability-function-size, google-readability-function-size) - inline static void executeInstructions(std::vector& instructions) requires - CheckableComposer + inline static void executeInstructions(std::vector& instructions) + requires CheckableComposer { typename T::ExecutionState state; Composer composer = Composer(); diff --git a/barretenberg/cpp/src/barretenberg/eccvm/eccvm_composer.hpp b/barretenberg/cpp/src/barretenberg/eccvm/eccvm_composer.hpp index 73280390275..750b579b9f9 100644 --- a/barretenberg/cpp/src/barretenberg/eccvm/eccvm_composer.hpp +++ b/barretenberg/cpp/src/barretenberg/eccvm/eccvm_composer.hpp @@ -34,7 +34,8 @@ template class ECCVMComposer_ { std::vector recursive_proof_public_input_indices; bool contains_recursive_proof = false; bool computed_witness = false; - ECCVMComposer_() requires(std::same_as) + ECCVMComposer_() + requires(std::same_as) { crs_factory_ = bb::srs::get_grumpkin_crs_factory(); }; diff --git a/barretenberg/cpp/src/barretenberg/relations/utils.hpp b/barretenberg/cpp/src/barretenberg/relations/utils.hpp index 50c2a04c79c..0eced14c195 100644 --- a/barretenberg/cpp/src/barretenberg/relations/utils.hpp +++ b/barretenberg/cpp/src/barretenberg/relations/utils.hpp @@ -71,9 +71,8 @@ template class RelationUtils { * scaled) * @param current_scalar power of the challenge */ - static void scale_univariates(auto& tuple, - const RelationSeparator& challenges, - FF& current_scalar) requires bb::IsFoldingFlavor + static void scale_univariates(auto& tuple, const RelationSeparator& challenges, FF& current_scalar) + requires bb::IsFoldingFlavor { size_t idx = 0; std::array tmp{ current_scalar }; @@ -92,9 +91,8 @@ template class RelationUtils { * @param challenge * @param current_scalar power of the challenge */ - static void scale_univariates(auto& tuple, - const RelationSeparator& challenge, - FF& current_scalar) requires(!bb::IsFoldingFlavor) + static void scale_univariates(auto& tuple, const RelationSeparator& challenge, FF& current_scalar) + requires(!bb::IsFoldingFlavor) { auto scale_by_consecutive_powers_of_challenge = [&](auto& element) { element *= current_scalar; @@ -194,7 +192,8 @@ template class RelationUtils { static void scale_and_batch_elements(auto& tuple, const RelationSeparator& challenges, FF current_scalar, - FF& result) requires bb::IsFoldingFlavor + FF& result) + requires bb::IsFoldingFlavor { size_t idx = 0; std::array tmp{ current_scalar }; @@ -227,7 +226,8 @@ template class RelationUtils { const RelationSeparator& challenges, FF current_scalar, FF& result, - FF& linearly_dependent_contribution) requires bb::IsFoldingFlavor + FF& linearly_dependent_contribution) + requires bb::IsFoldingFlavor { size_t idx = 0; std::array tmp{ current_scalar }; @@ -253,10 +253,8 @@ template class RelationUtils { * @brief Scale elements by consecutive powers of a given challenge then sum the result * @param result Batched result */ - static void scale_and_batch_elements(auto& tuple, - const RelationSeparator& challenge, - FF current_scalar, - FF& result) requires(!bb::IsFoldingFlavor) + static void scale_and_batch_elements(auto& tuple, const RelationSeparator& challenge, FF current_scalar, FF& result) + requires(!bb::IsFoldingFlavor) { auto scale_by_challenge_and_accumulate = [&](auto& element) { for (auto& entry : element) { diff --git a/barretenberg/cpp/src/barretenberg/stdlib/hash/poseidon2/poseidon2_permutation.cpp b/barretenberg/cpp/src/barretenberg/stdlib/hash/poseidon2/poseidon2_permutation.cpp index 97c997d381a..aa3392130f6 100644 --- a/barretenberg/cpp/src/barretenberg/stdlib/hash/poseidon2/poseidon2_permutation.cpp +++ b/barretenberg/cpp/src/barretenberg/stdlib/hash/poseidon2/poseidon2_permutation.cpp @@ -16,8 +16,8 @@ namespace bb::stdlib { */ template typename Poseidon2Permutation::State Poseidon2Permutation::permutation( - Builder* builder, - const typename Poseidon2Permutation::State& input) requires IsGoblinBuilder + Builder* builder, const typename Poseidon2Permutation::State& input) + requires IsGoblinBuilder { // deep copy State current_state(input); @@ -119,8 +119,8 @@ typename Poseidon2Permutation::State Poseidon2Permutation typename Poseidon2Permutation::State Poseidon2Permutation::permutation( - Builder* builder, - const typename Poseidon2Permutation::State& input) requires IsNotGoblinBuilder + Builder* builder, const typename Poseidon2Permutation::State& input) + requires IsNotGoblinBuilder { // deep copy State current_state(input); @@ -155,8 +155,8 @@ typename Poseidon2Permutation::State Poseidon2Permutation void Poseidon2Permutation::add_round_constants( - State& input, - const typename Poseidon2Permutation::RoundConstants& rc) requires IsNotGoblinBuilder + State& input, const typename Poseidon2Permutation::RoundConstants& rc) + requires IsNotGoblinBuilder { for (size_t i = 0; i < t; ++i) { @@ -165,7 +165,8 @@ void Poseidon2Permutation::add_round_constants( } template -void Poseidon2Permutation::apply_sbox(State& input) requires IsNotGoblinBuilder +void Poseidon2Permutation::apply_sbox(State& input) + requires IsNotGoblinBuilder { for (auto& in : input) { apply_single_sbox(in); @@ -173,8 +174,8 @@ void Poseidon2Permutation::apply_sbox(State& input) requires Is } template -void Poseidon2Permutation::apply_single_sbox(field_t& input) requires - IsNotGoblinBuilder +void Poseidon2Permutation::apply_single_sbox(field_t& input) + requires IsNotGoblinBuilder { // hardcoded assumption that d = 5. should fix this or not make d configurable auto xx = input.sqr(); @@ -183,8 +184,8 @@ void Poseidon2Permutation::apply_single_sbox(field_t& } template -void Poseidon2Permutation::matrix_multiplication_internal(State& input) requires - IsNotGoblinBuilder +void Poseidon2Permutation::matrix_multiplication_internal(State& input) + requires IsNotGoblinBuilder { // for t = 4 auto sum = input[0]; diff --git a/barretenberg/cpp/src/barretenberg/stdlib/primitives/circuit_builders/circuit_builders.hpp b/barretenberg/cpp/src/barretenberg/stdlib/primitives/circuit_builders/circuit_builders.hpp index 1a43702319a..60d564e52cd 100644 --- a/barretenberg/cpp/src/barretenberg/stdlib/primitives/circuit_builders/circuit_builders.hpp +++ b/barretenberg/cpp/src/barretenberg/stdlib/primitives/circuit_builders/circuit_builders.hpp @@ -18,4 +18,5 @@ concept IsUltraBuilder = bb::IsAnyOf concept IsGoblinBuilder = bb::IsAnyOf; template -concept IsNotGoblinBuilder = !IsGoblinBuilder; +concept IsNotGoblinBuilder = ! +IsGoblinBuilder; diff --git a/barretenberg/cpp/src/barretenberg/stdlib/primitives/group/cycle_group.cpp b/barretenberg/cpp/src/barretenberg/stdlib/primitives/group/cycle_group.cpp index e50289bf350..51cc5554ebc 100644 --- a/barretenberg/cpp/src/barretenberg/stdlib/primitives/group/cycle_group.cpp +++ b/barretenberg/cpp/src/barretenberg/stdlib/primitives/group/cycle_group.cpp @@ -173,7 +173,8 @@ template void cycle_group::validate_is_on_curve() * @return cycle_group */ template -cycle_group cycle_group::dbl() const requires IsNotUltraArithmetic +cycle_group cycle_group::dbl() const + requires IsNotUltraArithmetic { auto modified_y = field_t::conditional_assign(is_point_at_infinity(), 1, y); auto lambda = (x * x * 3) / (modified_y + modified_y); @@ -189,7 +190,8 @@ cycle_group cycle_group::dbl() const requires IsNotUltraArit * @return cycle_group */ template -cycle_group cycle_group::dbl() const requires IsUltraArithmetic +cycle_group cycle_group::dbl() const + requires IsUltraArithmetic { // ensure we use a value of y that is not zero. (only happens if point at infinity) // this costs 0 gates if `is_infinity` is a circuit constant @@ -231,8 +233,8 @@ cycle_group cycle_group::dbl() const requires IsUltraArithme * @return cycle_group */ template -cycle_group cycle_group::unconditional_add(const cycle_group& other) const requires - IsNotUltraArithmetic +cycle_group cycle_group::unconditional_add(const cycle_group& other) const + requires IsNotUltraArithmetic { auto x_diff = other.x - x; auto y_diff = other.y - y; @@ -256,8 +258,8 @@ cycle_group cycle_group::unconditional_add(const cycle_group * @return cycle_group */ template -cycle_group cycle_group::unconditional_add(const cycle_group& other) const requires - IsUltraArithmetic +cycle_group cycle_group::unconditional_add(const cycle_group& other) const + requires IsUltraArithmetic { auto context = get_context(other); @@ -1003,7 +1005,8 @@ template typename cycle_group::batch_mul_internal_output cycle_group::_fixed_base_batch_mul_internal( const std::span scalars, const std::span base_points, - const std::span /*unused*/) requires IsUltraArithmetic + const std::span /*unused*/) + requires IsUltraArithmetic { ASSERT(scalars.size() == base_points.size()); @@ -1075,7 +1078,8 @@ template typename cycle_group::batch_mul_internal_output cycle_group::_fixed_base_batch_mul_internal( const std::span scalars, const std::span base_points, - const std::span offset_generators) requires IsNotUltraArithmetic + const std::span offset_generators) + requires IsNotUltraArithmetic { ASSERT(scalars.size() == base_points.size()); diff --git a/barretenberg/cpp/src/barretenberg/stdlib/primitives/group/cycle_group.hpp b/barretenberg/cpp/src/barretenberg/stdlib/primitives/group/cycle_group.hpp index 7920d0a8ea6..f8baf4af0bd 100644 --- a/barretenberg/cpp/src/barretenberg/stdlib/primitives/group/cycle_group.hpp +++ b/barretenberg/cpp/src/barretenberg/stdlib/primitives/group/cycle_group.hpp @@ -180,10 +180,14 @@ template class cycle_group { bool_t is_point_at_infinity() const { return _is_infinity; } void set_point_at_infinity(const bool_t& is_infinity) { _is_infinity = is_infinity; } void validate_is_on_curve() const; - cycle_group dbl() const requires IsUltraArithmetic; - cycle_group dbl() const requires IsNotUltraArithmetic; - cycle_group unconditional_add(const cycle_group& other) const requires IsUltraArithmetic; - cycle_group unconditional_add(const cycle_group& other) const requires IsNotUltraArithmetic; + cycle_group dbl() const + requires IsUltraArithmetic; + cycle_group dbl() const + requires IsNotUltraArithmetic; + cycle_group unconditional_add(const cycle_group& other) const + requires IsUltraArithmetic; + cycle_group unconditional_add(const cycle_group& other) const + requires IsNotUltraArithmetic; cycle_group unconditional_subtract(const cycle_group& other) const; cycle_group checked_unconditional_add(const cycle_group& other) const; cycle_group checked_unconditional_subtract(const cycle_group& other) const; @@ -214,14 +218,14 @@ template class cycle_group { std::span offset_generators, bool unconditional_add); - static batch_mul_internal_output _fixed_base_batch_mul_internal( - std::span scalars, - std::span base_points, - std::span offset_generators) requires IsUltraArithmetic; - static batch_mul_internal_output _fixed_base_batch_mul_internal( - std::span scalars, - std::span base_points, - std::span offset_generators) requires IsNotUltraArithmetic; + static batch_mul_internal_output _fixed_base_batch_mul_internal(std::span scalars, + std::span base_points, + std::span offset_generators) + requires IsUltraArithmetic; + static batch_mul_internal_output _fixed_base_batch_mul_internal(std::span scalars, + std::span base_points, + std::span offset_generators) + requires IsNotUltraArithmetic; }; template diff --git a/barretenberg/cpp/src/barretenberg/sumcheck/instance/prover_instance.cpp b/barretenberg/cpp/src/barretenberg/sumcheck/instance/prover_instance.cpp index 8ab17ff3c97..9900d20b9de 100644 --- a/barretenberg/cpp/src/barretenberg/sumcheck/instance/prover_instance.cpp +++ b/barretenberg/cpp/src/barretenberg/sumcheck/instance/prover_instance.cpp @@ -38,7 +38,8 @@ template size_t ProverInstance_::compute_dyadic_size(Circ * @param circuit */ template -void ProverInstance_::construct_databus_polynomials(Circuit& circuit) requires IsGoblinFlavor +void ProverInstance_::construct_databus_polynomials(Circuit& circuit) + requires IsGoblinFlavor { Polynomial public_calldata{ dyadic_circuit_size }; Polynomial calldata_read_counts{ dyadic_circuit_size }; diff --git a/barretenberg/cpp/src/barretenberg/sumcheck/instance/prover_instance.hpp b/barretenberg/cpp/src/barretenberg/sumcheck/instance/prover_instance.hpp index 1bb54a49b68..6d8437530dc 100644 --- a/barretenberg/cpp/src/barretenberg/sumcheck/instance/prover_instance.hpp +++ b/barretenberg/cpp/src/barretenberg/sumcheck/instance/prover_instance.hpp @@ -85,7 +85,8 @@ template class ProverInstance_ { ProverInstance_() = default; ~ProverInstance_() = default; - void compute_databus_id() requires IsGoblinFlavor; + void compute_databus_id() + requires IsGoblinFlavor; private: static constexpr size_t num_zero_rows = Flavor::has_zero_row ? 1 : 0; @@ -94,7 +95,8 @@ template class ProverInstance_ { size_t compute_dyadic_size(Circuit&); - void construct_databus_polynomials(Circuit&) requires IsGoblinFlavor; + void construct_databus_polynomials(Circuit&) + requires IsGoblinFlavor; void construct_table_polynomials(Circuit&, size_t); }; From 713fa74d9f61e36a2a14826f44f0de9a1e51dec6 Mon Sep 17 00:00:00 2001 From: TomAFrench Date: Mon, 25 Mar 2024 20:49:51 +0000 Subject: [PATCH 27/98] chore: more formatting --- .../execution_trace/execution_trace.cpp | 8 ++++---- .../execution_trace/execution_trace.hpp | 14 +++++++------- .../ultra_circuit_builder.hpp | 5 +---- 3 files changed, 12 insertions(+), 15 deletions(-) diff --git a/barretenberg/cpp/src/barretenberg/execution_trace/execution_trace.cpp b/barretenberg/cpp/src/barretenberg/execution_trace/execution_trace.cpp index d0238d27aba..005b7d523c6 100644 --- a/barretenberg/cpp/src/barretenberg/execution_trace/execution_trace.cpp +++ b/barretenberg/cpp/src/barretenberg/execution_trace/execution_trace.cpp @@ -52,9 +52,8 @@ void ExecutionTrace_::add_wires_and_selectors_to_proving_key( template void ExecutionTrace_::add_memory_records_to_proving_key( - TraceData& trace_data, - Builder& builder, - const std::shared_ptr& proving_key) requires IsUltraPlonkOrHonk + TraceData& trace_data, Builder& builder, const std::shared_ptr& proving_key) + requires IsUltraPlonkOrHonk { ASSERT(proving_key->memory_read_records.empty() && proving_key->memory_write_records.empty()); @@ -137,7 +136,8 @@ template void ExecutionTrace_::populate_public_inputs_blo template void ExecutionTrace_::add_ecc_op_wires_to_proving_key( - Builder& builder, const std::shared_ptr& proving_key) requires IsGoblinFlavor + Builder& builder, const std::shared_ptr& proving_key) + requires IsGoblinFlavor { // Initialize the ecc op wire polynomials to zero on the whole domain std::array op_wire_polynomials; diff --git a/barretenberg/cpp/src/barretenberg/execution_trace/execution_trace.hpp b/barretenberg/cpp/src/barretenberg/execution_trace/execution_trace.hpp index 7844780373e..633dc618ff9 100644 --- a/barretenberg/cpp/src/barretenberg/execution_trace/execution_trace.hpp +++ b/barretenberg/cpp/src/barretenberg/execution_trace/execution_trace.hpp @@ -68,10 +68,10 @@ template class ExecutionTrace_ { * @param builder * @param proving_key */ - static void add_memory_records_to_proving_key( - TraceData& trace_data, - Builder& builder, - const std::shared_ptr& proving_key) requires IsUltraPlonkOrHonk; + static void add_memory_records_to_proving_key(TraceData& trace_data, + Builder& builder, + const std::shared_ptr& proving_key) + requires IsUltraPlonkOrHonk; /** * @brief Construct wire polynomials, selector polynomials and copy cycles from raw circuit data @@ -98,9 +98,9 @@ template class ExecutionTrace_ { * @param builder * @param proving_key */ - static void add_ecc_op_wires_to_proving_key( - Builder& builder, - const std::shared_ptr& proving_key) requires IsGoblinFlavor; + static void add_ecc_op_wires_to_proving_key(Builder& builder, + const std::shared_ptr& proving_key) + requires IsGoblinFlavor; }; } // namespace bb \ No newline at end of file diff --git a/barretenberg/cpp/src/barretenberg/stdlib_circuit_builders/ultra_circuit_builder.hpp b/barretenberg/cpp/src/barretenberg/stdlib_circuit_builders/ultra_circuit_builder.hpp index c50f98aa5da..feecbf0938d 100644 --- a/barretenberg/cpp/src/barretenberg/stdlib_circuit_builders/ultra_circuit_builder.hpp +++ b/barretenberg/cpp/src/barretenberg/stdlib_circuit_builders/ultra_circuit_builder.hpp @@ -484,10 +484,7 @@ class UltraCircuitBuilder_ : public CircuitBuilderBase Date: Mon, 25 Mar 2024 22:13:45 +0000 Subject: [PATCH 28/98] chore: fix acvm_js test --- .../acvm-repo/acvm_js/test/shared/black_box_solvers.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/noir/noir-repo/acvm-repo/acvm_js/test/shared/black_box_solvers.ts b/noir/noir-repo/acvm-repo/acvm_js/test/shared/black_box_solvers.ts index 397bf65ff94..22783a028ea 100644 --- a/noir/noir-repo/acvm-repo/acvm_js/test/shared/black_box_solvers.ts +++ b/noir/noir-repo/acvm-repo/acvm_js/test/shared/black_box_solvers.ts @@ -32,11 +32,11 @@ export const xor_test_cases: [[string, string], string][] = [ ], ]; -export const sha256_compression_test_cases: [Uint32Array, Uint8Array, Uint8Array][] = [ +export const sha256_compression_test_cases: [Uint32Array, Uint32Array, Uint32Array][] = [ [ Uint32Array.from([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]), - Uint8Array.from([1, 2, 3, 4, 5, 6, 7, 8]), - Uint8Array.from([1862536192, 526086805, 2067405084, 593147560, 726610467, 813867028, 4091010797, 3974542186]), + Uint32Array.from([1, 2, 3, 4, 5, 6, 7, 8]), + Uint32Array.from([1862536192, 526086805, 2067405084, 593147560, 726610467, 813867028, 4091010797, 3974542186]), ], ]; From 5aefff89e4be9bfd3625c947c3da49ae0f365e3e Mon Sep 17 00:00:00 2001 From: TomAFrench Date: Tue, 26 Mar 2024 16:17:32 +0000 Subject: [PATCH 29/98] chore: update serializer --- .../dsl/acir_format/serde/acir.hpp | 10 - .../noir-repo/acvm-repo/acir/codegen/acir.cpp | 13877 ++++++---------- 2 files changed, 5496 insertions(+), 8391 deletions(-) diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/serde/acir.hpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/serde/acir.hpp index 179707cc499..78bb1ec214b 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/serde/acir.hpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/serde/acir.hpp @@ -52,15 +52,6 @@ struct BlackBoxFuncCall { static RANGE bincodeDeserialize(std::vector); }; - struct SHA256 { - std::vector inputs; - std::vector outputs; - - friend bool operator==(const SHA256&, const SHA256&); - std::vector bincodeSerialize() const; - static SHA256 bincodeDeserialize(std::vector); - }; - struct Blake2s { std::vector inputs; std::vector outputs; @@ -278,7 +269,6 @@ struct BlackBoxFuncCall { std::variant bincodeSerialize() const; - static Add bincodeDeserialize(std::vector); - }; - - struct Sub { - friend bool operator==(const Sub &, const Sub &); - std::vector bincodeSerialize() const; - static Sub bincodeDeserialize(std::vector); - }; - - struct Mul { - friend bool operator==(const Mul &, const Mul &); - std::vector bincodeSerialize() const; - static Mul bincodeDeserialize(std::vector); - }; - - struct Div { - friend bool operator==(const Div &, const Div &); - std::vector bincodeSerialize() const; - static Div bincodeDeserialize(std::vector); - }; - - struct IntegerDiv { - friend bool operator==(const IntegerDiv &, const IntegerDiv &); - std::vector bincodeSerialize() const; - static IntegerDiv bincodeDeserialize(std::vector); - }; - - struct Equals { - friend bool operator==(const Equals &, const Equals &); - std::vector bincodeSerialize() const; - static Equals bincodeDeserialize(std::vector); - }; - - struct LessThan { - friend bool operator==(const LessThan &, const LessThan &); - std::vector bincodeSerialize() const; - static LessThan bincodeDeserialize(std::vector); - }; - - struct LessThanEquals { - friend bool operator==(const LessThanEquals &, const LessThanEquals &); - std::vector bincodeSerialize() const; - static LessThanEquals bincodeDeserialize(std::vector); - }; - - std::variant - value; - - friend bool operator==(const BinaryFieldOp &, const BinaryFieldOp &); - std::vector bincodeSerialize() const; - static BinaryFieldOp bincodeDeserialize(std::vector); -}; - -struct BinaryIntOp { - - struct Add { - friend bool operator==(const Add &, const Add &); - std::vector bincodeSerialize() const; - static Add bincodeDeserialize(std::vector); - }; - - struct Sub { - friend bool operator==(const Sub &, const Sub &); - std::vector bincodeSerialize() const; - static Sub bincodeDeserialize(std::vector); - }; - - struct Mul { - friend bool operator==(const Mul &, const Mul &); - std::vector bincodeSerialize() const; - static Mul bincodeDeserialize(std::vector); - }; - - struct Div { - friend bool operator==(const Div &, const Div &); - std::vector bincodeSerialize() const; - static Div bincodeDeserialize(std::vector); - }; - - struct Equals { - friend bool operator==(const Equals &, const Equals &); - std::vector bincodeSerialize() const; - static Equals bincodeDeserialize(std::vector); - }; - - struct LessThan { - friend bool operator==(const LessThan &, const LessThan &); - std::vector bincodeSerialize() const; - static LessThan bincodeDeserialize(std::vector); - }; - - struct LessThanEquals { - friend bool operator==(const LessThanEquals &, const LessThanEquals &); - std::vector bincodeSerialize() const; - static LessThanEquals bincodeDeserialize(std::vector); - }; - - struct And { - friend bool operator==(const And &, const And &); - std::vector bincodeSerialize() const; - static And bincodeDeserialize(std::vector); - }; - - struct Or { - friend bool operator==(const Or &, const Or &); - std::vector bincodeSerialize() const; - static Or bincodeDeserialize(std::vector); - }; - - struct Xor { - friend bool operator==(const Xor &, const Xor &); - std::vector bincodeSerialize() const; - static Xor bincodeDeserialize(std::vector); - }; - - struct Shl { - friend bool operator==(const Shl &, const Shl &); - std::vector bincodeSerialize() const; - static Shl bincodeDeserialize(std::vector); - }; - - struct Shr { - friend bool operator==(const Shr &, const Shr &); - std::vector bincodeSerialize() const; - static Shr bincodeDeserialize(std::vector); - }; - - std::variant - value; - - friend bool operator==(const BinaryIntOp &, const BinaryIntOp &); - std::vector bincodeSerialize() const; - static BinaryIntOp bincodeDeserialize(std::vector); -}; - -struct MemoryAddress { - uint64_t value; - - friend bool operator==(const MemoryAddress &, const MemoryAddress &); - std::vector bincodeSerialize() const; - static MemoryAddress bincodeDeserialize(std::vector); -}; - -struct HeapArray { - Program::MemoryAddress pointer; - uint64_t size; - - friend bool operator==(const HeapArray &, const HeapArray &); - std::vector bincodeSerialize() const; - static HeapArray bincodeDeserialize(std::vector); -}; - -struct HeapVector { - Program::MemoryAddress pointer; - Program::MemoryAddress size; - - friend bool operator==(const HeapVector &, const HeapVector &); - std::vector bincodeSerialize() const; - static HeapVector bincodeDeserialize(std::vector); -}; - -struct BlackBoxOp { - - struct Blake2s { - Program::HeapVector message; - Program::HeapArray output; - - friend bool operator==(const Blake2s &, const Blake2s &); - std::vector bincodeSerialize() const; - static Blake2s bincodeDeserialize(std::vector); - }; - - struct Blake3 { - Program::HeapVector message; - Program::HeapArray output; - - friend bool operator==(const Blake3 &, const Blake3 &); - std::vector bincodeSerialize() const; - static Blake3 bincodeDeserialize(std::vector); - }; - - struct Keccak256 { - Program::HeapVector message; - Program::HeapArray output; - - friend bool operator==(const Keccak256 &, const Keccak256 &); - std::vector bincodeSerialize() const; - static Keccak256 bincodeDeserialize(std::vector); - }; - - struct Keccakf1600 { - Program::HeapVector message; - Program::HeapArray output; - - friend bool operator==(const Keccakf1600 &, const Keccakf1600 &); - std::vector bincodeSerialize() const; - static Keccakf1600 bincodeDeserialize(std::vector); - }; - - struct EcdsaSecp256k1 { - Program::HeapVector hashed_msg; - Program::HeapArray public_key_x; - Program::HeapArray public_key_y; - Program::HeapArray signature; - Program::MemoryAddress result; - - friend bool operator==(const EcdsaSecp256k1 &, const EcdsaSecp256k1 &); - std::vector bincodeSerialize() const; - static EcdsaSecp256k1 bincodeDeserialize(std::vector); - }; - - struct EcdsaSecp256r1 { - Program::HeapVector hashed_msg; - Program::HeapArray public_key_x; - Program::HeapArray public_key_y; - Program::HeapArray signature; - Program::MemoryAddress result; - - friend bool operator==(const EcdsaSecp256r1 &, const EcdsaSecp256r1 &); - std::vector bincodeSerialize() const; - static EcdsaSecp256r1 bincodeDeserialize(std::vector); - }; - - struct SchnorrVerify { - Program::MemoryAddress public_key_x; - Program::MemoryAddress public_key_y; - Program::HeapVector message; - Program::HeapVector signature; - Program::MemoryAddress result; - - friend bool operator==(const SchnorrVerify &, const SchnorrVerify &); - std::vector bincodeSerialize() const; - static SchnorrVerify bincodeDeserialize(std::vector); - }; - - struct PedersenCommitment { - Program::HeapVector inputs; - Program::MemoryAddress domain_separator; - Program::HeapArray output; - - friend bool operator==(const PedersenCommitment &, - const PedersenCommitment &); - std::vector bincodeSerialize() const; - static PedersenCommitment bincodeDeserialize(std::vector); - }; - - struct PedersenHash { - Program::HeapVector inputs; - Program::MemoryAddress domain_separator; - Program::MemoryAddress output; - - friend bool operator==(const PedersenHash &, const PedersenHash &); - std::vector bincodeSerialize() const; - static PedersenHash bincodeDeserialize(std::vector); - }; - - struct FixedBaseScalarMul { - Program::MemoryAddress low; - Program::MemoryAddress high; - Program::HeapArray result; - - friend bool operator==(const FixedBaseScalarMul &, - const FixedBaseScalarMul &); - std::vector bincodeSerialize() const; - static FixedBaseScalarMul bincodeDeserialize(std::vector); - }; - - struct EmbeddedCurveAdd { - Program::MemoryAddress input1_x; - Program::MemoryAddress input1_y; - Program::MemoryAddress input2_x; - Program::MemoryAddress input2_y; - Program::HeapArray result; - - friend bool operator==(const EmbeddedCurveAdd &, const EmbeddedCurveAdd &); - std::vector bincodeSerialize() const; - static EmbeddedCurveAdd bincodeDeserialize(std::vector); - }; - - struct BigIntAdd { - Program::MemoryAddress lhs; - Program::MemoryAddress rhs; - Program::MemoryAddress output; - - friend bool operator==(const BigIntAdd &, const BigIntAdd &); - std::vector bincodeSerialize() const; - static BigIntAdd bincodeDeserialize(std::vector); - }; - - struct BigIntSub { - Program::MemoryAddress lhs; - Program::MemoryAddress rhs; - Program::MemoryAddress output; - - friend bool operator==(const BigIntSub &, const BigIntSub &); - std::vector bincodeSerialize() const; - static BigIntSub bincodeDeserialize(std::vector); - }; - - struct BigIntMul { - Program::MemoryAddress lhs; - Program::MemoryAddress rhs; - Program::MemoryAddress output; - - friend bool operator==(const BigIntMul &, const BigIntMul &); - std::vector bincodeSerialize() const; - static BigIntMul bincodeDeserialize(std::vector); - }; - - struct BigIntDiv { - Program::MemoryAddress lhs; - Program::MemoryAddress rhs; - Program::MemoryAddress output; - - friend bool operator==(const BigIntDiv &, const BigIntDiv &); - std::vector bincodeSerialize() const; - static BigIntDiv bincodeDeserialize(std::vector); - }; - - struct BigIntFromLeBytes { - Program::HeapVector inputs; - Program::HeapVector modulus; - Program::MemoryAddress output; - - friend bool operator==(const BigIntFromLeBytes &, - const BigIntFromLeBytes &); - std::vector bincodeSerialize() const; - static BigIntFromLeBytes bincodeDeserialize(std::vector); - }; - - struct BigIntToLeBytes { - Program::MemoryAddress input; - Program::HeapVector output; - - friend bool operator==(const BigIntToLeBytes &, const BigIntToLeBytes &); - std::vector bincodeSerialize() const; - static BigIntToLeBytes bincodeDeserialize(std::vector); - }; - - struct Poseidon2Permutation { - Program::HeapVector message; - Program::HeapArray output; - Program::MemoryAddress len; - - friend bool operator==(const Poseidon2Permutation &, - const Poseidon2Permutation &); - std::vector bincodeSerialize() const; - static Poseidon2Permutation bincodeDeserialize(std::vector); - }; - - struct Sha256Compression { - Program::HeapVector input; - Program::HeapVector hash_values; - Program::HeapArray output; - - friend bool operator==(const Sha256Compression &, - const Sha256Compression &); - std::vector bincodeSerialize() const; - static Sha256Compression bincodeDeserialize(std::vector); - }; - - std::variant - value; - - friend bool operator==(const BlackBoxOp &, const BlackBoxOp &); - std::vector bincodeSerialize() const; - static BlackBoxOp bincodeDeserialize(std::vector); -}; - -struct HeapValueType; - -struct HeapValueType { - - struct Simple { - friend bool operator==(const Simple &, const Simple &); - std::vector bincodeSerialize() const; - static Simple bincodeDeserialize(std::vector); - }; - - struct Array { - std::vector value_types; - uint64_t size; - - friend bool operator==(const Array &, const Array &); - std::vector bincodeSerialize() const; - static Array bincodeDeserialize(std::vector); - }; - - struct Vector { - std::vector value_types; - - friend bool operator==(const Vector &, const Vector &); - std::vector bincodeSerialize() const; - static Vector bincodeDeserialize(std::vector); - }; - - std::variant value; - - friend bool operator==(const HeapValueType &, const HeapValueType &); - std::vector bincodeSerialize() const; - static HeapValueType bincodeDeserialize(std::vector); -}; - -struct Value { - std::string inner; - - friend bool operator==(const Value &, const Value &); - std::vector bincodeSerialize() const; - static Value bincodeDeserialize(std::vector); -}; - -struct ValueOrArray { - - struct MemoryAddress { - Program::MemoryAddress value; - - friend bool operator==(const MemoryAddress &, const MemoryAddress &); - std::vector bincodeSerialize() const; - static MemoryAddress bincodeDeserialize(std::vector); - }; - - struct HeapArray { - Program::HeapArray value; - - friend bool operator==(const HeapArray &, const HeapArray &); - std::vector bincodeSerialize() const; - static HeapArray bincodeDeserialize(std::vector); - }; - - struct HeapVector { - Program::HeapVector value; - - friend bool operator==(const HeapVector &, const HeapVector &); - std::vector bincodeSerialize() const; - static HeapVector bincodeDeserialize(std::vector); - }; - - std::variant value; - - friend bool operator==(const ValueOrArray &, const ValueOrArray &); - std::vector bincodeSerialize() const; - static ValueOrArray bincodeDeserialize(std::vector); -}; - -struct BrilligOpcode { - - struct BinaryFieldOp { - Program::MemoryAddress destination; - Program::BinaryFieldOp op; - Program::MemoryAddress lhs; - Program::MemoryAddress rhs; - - friend bool operator==(const BinaryFieldOp &, const BinaryFieldOp &); - std::vector bincodeSerialize() const; - static BinaryFieldOp bincodeDeserialize(std::vector); - }; - - struct BinaryIntOp { - Program::MemoryAddress destination; - Program::BinaryIntOp op; - uint32_t bit_size; - Program::MemoryAddress lhs; - Program::MemoryAddress rhs; - - friend bool operator==(const BinaryIntOp &, const BinaryIntOp &); - std::vector bincodeSerialize() const; - static BinaryIntOp bincodeDeserialize(std::vector); - }; - - struct Cast { - Program::MemoryAddress destination; - Program::MemoryAddress source; - uint32_t bit_size; - - friend bool operator==(const Cast &, const Cast &); - std::vector bincodeSerialize() const; - static Cast bincodeDeserialize(std::vector); - }; - - struct JumpIfNot { - Program::MemoryAddress condition; - uint64_t location; - - friend bool operator==(const JumpIfNot &, const JumpIfNot &); - std::vector bincodeSerialize() const; - static JumpIfNot bincodeDeserialize(std::vector); - }; - - struct JumpIf { - Program::MemoryAddress condition; - uint64_t location; - - friend bool operator==(const JumpIf &, const JumpIf &); - std::vector bincodeSerialize() const; - static JumpIf bincodeDeserialize(std::vector); - }; - - struct Jump { - uint64_t location; - - friend bool operator==(const Jump &, const Jump &); - std::vector bincodeSerialize() const; - static Jump bincodeDeserialize(std::vector); - }; - - struct CalldataCopy { - Program::MemoryAddress destination_address; - uint64_t size; - uint64_t offset; - - friend bool operator==(const CalldataCopy &, const CalldataCopy &); - std::vector bincodeSerialize() const; - static CalldataCopy bincodeDeserialize(std::vector); - }; - - struct Call { - uint64_t location; - - friend bool operator==(const Call &, const Call &); - std::vector bincodeSerialize() const; - static Call bincodeDeserialize(std::vector); - }; - - struct Const { - Program::MemoryAddress destination; - uint32_t bit_size; - Program::Value value; - - friend bool operator==(const Const &, const Const &); - std::vector bincodeSerialize() const; - static Const bincodeDeserialize(std::vector); - }; - - struct Return { - friend bool operator==(const Return &, const Return &); - std::vector bincodeSerialize() const; - static Return bincodeDeserialize(std::vector); - }; - - struct ForeignCall { - std::string function; - std::vector destinations; - std::vector destination_value_types; - std::vector inputs; - std::vector input_value_types; - - friend bool operator==(const ForeignCall &, const ForeignCall &); - std::vector bincodeSerialize() const; - static ForeignCall bincodeDeserialize(std::vector); - }; - - struct Mov { - Program::MemoryAddress destination; - Program::MemoryAddress source; - - friend bool operator==(const Mov &, const Mov &); - std::vector bincodeSerialize() const; - static Mov bincodeDeserialize(std::vector); - }; - - struct ConditionalMov { - Program::MemoryAddress destination; - Program::MemoryAddress source_a; - Program::MemoryAddress source_b; - Program::MemoryAddress condition; - - friend bool operator==(const ConditionalMov &, const ConditionalMov &); - std::vector bincodeSerialize() const; - static ConditionalMov bincodeDeserialize(std::vector); - }; - - struct Load { - Program::MemoryAddress destination; - Program::MemoryAddress source_pointer; - - friend bool operator==(const Load &, const Load &); - std::vector bincodeSerialize() const; - static Load bincodeDeserialize(std::vector); - }; - - struct Store { - Program::MemoryAddress destination_pointer; - Program::MemoryAddress source; - - friend bool operator==(const Store &, const Store &); - std::vector bincodeSerialize() const; - static Store bincodeDeserialize(std::vector); - }; - - struct BlackBox { - Program::BlackBoxOp value; - - friend bool operator==(const BlackBox &, const BlackBox &); - std::vector bincodeSerialize() const; - static BlackBox bincodeDeserialize(std::vector); - }; - - struct Trap { - friend bool operator==(const Trap &, const Trap &); - std::vector bincodeSerialize() const; - static Trap bincodeDeserialize(std::vector); - }; - - struct Stop { - uint64_t return_data_offset; - uint64_t return_data_size; - - friend bool operator==(const Stop &, const Stop &); - std::vector bincodeSerialize() const; - static Stop bincodeDeserialize(std::vector); - }; - - std::variant - value; - - friend bool operator==(const BrilligOpcode &, const BrilligOpcode &); - std::vector bincodeSerialize() const; - static BrilligOpcode bincodeDeserialize(std::vector); -}; - -struct Witness { - uint32_t value; - - friend bool operator==(const Witness &, const Witness &); - std::vector bincodeSerialize() const; - static Witness bincodeDeserialize(std::vector); -}; - -struct FunctionInput { - Program::Witness witness; - uint32_t num_bits; - - friend bool operator==(const FunctionInput &, const FunctionInput &); - std::vector bincodeSerialize() const; - static FunctionInput bincodeDeserialize(std::vector); -}; - -struct BlackBoxFuncCall { - - struct AND { - Program::FunctionInput lhs; - Program::FunctionInput rhs; - Program::Witness output; - - friend bool operator==(const AND &, const AND &); - std::vector bincodeSerialize() const; - static AND bincodeDeserialize(std::vector); - }; - - struct XOR { - Program::FunctionInput lhs; - Program::FunctionInput rhs; - Program::Witness output; - - friend bool operator==(const XOR &, const XOR &); - std::vector bincodeSerialize() const; - static XOR bincodeDeserialize(std::vector); - }; - - struct RANGE { - Program::FunctionInput input; - - friend bool operator==(const RANGE &, const RANGE &); - std::vector bincodeSerialize() const; - static RANGE bincodeDeserialize(std::vector); - }; - - struct Blake2s { - std::vector inputs; - std::vector outputs; - - friend bool operator==(const Blake2s &, const Blake2s &); - std::vector bincodeSerialize() const; - static Blake2s bincodeDeserialize(std::vector); - }; - - struct Blake3 { - std::vector inputs; - std::vector outputs; - - friend bool operator==(const Blake3 &, const Blake3 &); - std::vector bincodeSerialize() const; - static Blake3 bincodeDeserialize(std::vector); - }; - - struct SchnorrVerify { - Program::FunctionInput public_key_x; - Program::FunctionInput public_key_y; - std::vector signature; - std::vector message; - Program::Witness output; - - friend bool operator==(const SchnorrVerify &, const SchnorrVerify &); - std::vector bincodeSerialize() const; - static SchnorrVerify bincodeDeserialize(std::vector); - }; - - struct PedersenCommitment { - std::vector inputs; - uint32_t domain_separator; - std::array outputs; - - friend bool operator==(const PedersenCommitment &, - const PedersenCommitment &); - std::vector bincodeSerialize() const; - static PedersenCommitment bincodeDeserialize(std::vector); - }; - - struct PedersenHash { - std::vector inputs; - uint32_t domain_separator; - Program::Witness output; - - friend bool operator==(const PedersenHash &, const PedersenHash &); - std::vector bincodeSerialize() const; - static PedersenHash bincodeDeserialize(std::vector); - }; - - struct EcdsaSecp256k1 { - std::vector public_key_x; - std::vector public_key_y; - std::vector signature; - std::vector hashed_message; - Program::Witness output; - - friend bool operator==(const EcdsaSecp256k1 &, const EcdsaSecp256k1 &); - std::vector bincodeSerialize() const; - static EcdsaSecp256k1 bincodeDeserialize(std::vector); - }; - - struct EcdsaSecp256r1 { - std::vector public_key_x; - std::vector public_key_y; - std::vector signature; - std::vector hashed_message; - Program::Witness output; - - friend bool operator==(const EcdsaSecp256r1 &, const EcdsaSecp256r1 &); - std::vector bincodeSerialize() const; - static EcdsaSecp256r1 bincodeDeserialize(std::vector); - }; - - struct FixedBaseScalarMul { - Program::FunctionInput low; - Program::FunctionInput high; - std::array outputs; - - friend bool operator==(const FixedBaseScalarMul &, - const FixedBaseScalarMul &); - std::vector bincodeSerialize() const; - static FixedBaseScalarMul bincodeDeserialize(std::vector); - }; - - struct EmbeddedCurveAdd { - Program::FunctionInput input1_x; - Program::FunctionInput input1_y; - Program::FunctionInput input2_x; - Program::FunctionInput input2_y; - std::array outputs; - - friend bool operator==(const EmbeddedCurveAdd &, const EmbeddedCurveAdd &); - std::vector bincodeSerialize() const; - static EmbeddedCurveAdd bincodeDeserialize(std::vector); - }; - - struct Keccak256 { - std::vector inputs; - std::vector outputs; - - friend bool operator==(const Keccak256 &, const Keccak256 &); - std::vector bincodeSerialize() const; - static Keccak256 bincodeDeserialize(std::vector); - }; - - struct Keccak256VariableLength { - std::vector inputs; - Program::FunctionInput var_message_size; - std::vector outputs; - - friend bool operator==(const Keccak256VariableLength &, - const Keccak256VariableLength &); - std::vector bincodeSerialize() const; - static Keccak256VariableLength bincodeDeserialize(std::vector); - }; - - struct Keccakf1600 { - std::vector inputs; - std::vector outputs; - - friend bool operator==(const Keccakf1600 &, const Keccakf1600 &); - std::vector bincodeSerialize() const; - static Keccakf1600 bincodeDeserialize(std::vector); - }; - - struct RecursiveAggregation { - std::vector verification_key; - std::vector proof; - std::vector public_inputs; - Program::FunctionInput key_hash; - - friend bool operator==(const RecursiveAggregation &, - const RecursiveAggregation &); - std::vector bincodeSerialize() const; - static RecursiveAggregation bincodeDeserialize(std::vector); - }; - - struct BigIntAdd { - uint32_t lhs; - uint32_t rhs; - uint32_t output; - - friend bool operator==(const BigIntAdd &, const BigIntAdd &); - std::vector bincodeSerialize() const; - static BigIntAdd bincodeDeserialize(std::vector); - }; - - struct BigIntSub { - uint32_t lhs; - uint32_t rhs; - uint32_t output; - - friend bool operator==(const BigIntSub &, const BigIntSub &); - std::vector bincodeSerialize() const; - static BigIntSub bincodeDeserialize(std::vector); - }; - - struct BigIntMul { - uint32_t lhs; - uint32_t rhs; - uint32_t output; - - friend bool operator==(const BigIntMul &, const BigIntMul &); - std::vector bincodeSerialize() const; - static BigIntMul bincodeDeserialize(std::vector); - }; - - struct BigIntDiv { - uint32_t lhs; - uint32_t rhs; - uint32_t output; - - friend bool operator==(const BigIntDiv &, const BigIntDiv &); - std::vector bincodeSerialize() const; - static BigIntDiv bincodeDeserialize(std::vector); - }; - - struct BigIntFromLeBytes { - std::vector inputs; - std::vector modulus; - uint32_t output; - - friend bool operator==(const BigIntFromLeBytes &, - const BigIntFromLeBytes &); - std::vector bincodeSerialize() const; - static BigIntFromLeBytes bincodeDeserialize(std::vector); - }; - - struct BigIntToLeBytes { - uint32_t input; - std::vector outputs; - - friend bool operator==(const BigIntToLeBytes &, const BigIntToLeBytes &); - std::vector bincodeSerialize() const; - static BigIntToLeBytes bincodeDeserialize(std::vector); - }; - - struct Poseidon2Permutation { - std::vector inputs; - std::vector outputs; - uint32_t len; - - friend bool operator==(const Poseidon2Permutation &, - const Poseidon2Permutation &); - std::vector bincodeSerialize() const; - static Poseidon2Permutation bincodeDeserialize(std::vector); - }; - - struct Sha256Compression { - std::vector inputs; - std::vector hash_values; - std::vector outputs; - - friend bool operator==(const Sha256Compression &, - const Sha256Compression &); - std::vector bincodeSerialize() const; - static Sha256Compression bincodeDeserialize(std::vector); - }; - - std::variant - value; - - friend bool operator==(const BlackBoxFuncCall &, const BlackBoxFuncCall &); - std::vector bincodeSerialize() const; - static BlackBoxFuncCall bincodeDeserialize(std::vector); -}; - -struct BlockId { - uint32_t value; - - friend bool operator==(const BlockId &, const BlockId &); - std::vector bincodeSerialize() const; - static BlockId bincodeDeserialize(std::vector); -}; - -struct Expression { - std::vector> - mul_terms; - std::vector> linear_combinations; - std::string q_c; - - friend bool operator==(const Expression &, const Expression &); - std::vector bincodeSerialize() const; - static Expression bincodeDeserialize(std::vector); -}; - -struct BrilligInputs { - - struct Single { - Program::Expression value; - - friend bool operator==(const Single &, const Single &); - std::vector bincodeSerialize() const; - static Single bincodeDeserialize(std::vector); - }; - - struct Array { - std::vector value; - - friend bool operator==(const Array &, const Array &); - std::vector bincodeSerialize() const; - static Array bincodeDeserialize(std::vector); - }; - - struct MemoryArray { - Program::BlockId value; - - friend bool operator==(const MemoryArray &, const MemoryArray &); - std::vector bincodeSerialize() const; - static MemoryArray bincodeDeserialize(std::vector); - }; - - std::variant value; - - friend bool operator==(const BrilligInputs &, const BrilligInputs &); - std::vector bincodeSerialize() const; - static BrilligInputs bincodeDeserialize(std::vector); -}; - -struct BrilligOutputs { - - struct Simple { - Program::Witness value; - - friend bool operator==(const Simple &, const Simple &); - std::vector bincodeSerialize() const; - static Simple bincodeDeserialize(std::vector); - }; - - struct Array { - std::vector value; - - friend bool operator==(const Array &, const Array &); - std::vector bincodeSerialize() const; - static Array bincodeDeserialize(std::vector); - }; - - std::variant value; - - friend bool operator==(const BrilligOutputs &, const BrilligOutputs &); - std::vector bincodeSerialize() const; - static BrilligOutputs bincodeDeserialize(std::vector); -}; - -struct Brillig { - std::vector inputs; - std::vector outputs; - std::vector bytecode; - std::optional predicate; - - friend bool operator==(const Brillig &, const Brillig &); - std::vector bincodeSerialize() const; - static Brillig bincodeDeserialize(std::vector); -}; - -struct Directive { - - struct ToLeRadix { - Program::Expression a; - std::vector b; - uint32_t radix; - - friend bool operator==(const ToLeRadix &, const ToLeRadix &); - std::vector bincodeSerialize() const; - static ToLeRadix bincodeDeserialize(std::vector); - }; - - namespace Program { - - struct Witness { - uint32_t value; - - friend bool operator==(const Witness &, const Witness &); - std::vector bincodeSerialize() const; - static Witness bincodeDeserialize(std::vector); - }; - - struct FunctionInput { - Program::Witness witness; - uint32_t num_bits; - - friend bool operator==(const FunctionInput &, const FunctionInput &); - std::vector bincodeSerialize() const; - static FunctionInput bincodeDeserialize(std::vector); - }; + struct Witness { + uint32_t value; - struct BlackBoxFuncCall { - - struct AND { - Program::FunctionInput lhs; - Program::FunctionInput rhs; - Program::Witness output; - - friend bool operator==(const AND &, const AND &); - std::vector bincodeSerialize() const; - static AND bincodeDeserialize(std::vector); + friend bool operator==(const Witness&, const Witness&); + std::vector bincodeSerialize() const; + static Witness bincodeDeserialize(std::vector); }; - struct XOR { - Program::FunctionInput lhs; - Program::FunctionInput rhs; - Program::Witness output; + struct FunctionInput { + Program::Witness witness; + uint32_t num_bits; - friend bool operator==(const XOR &, const XOR &); - std::vector bincodeSerialize() const; - static XOR bincodeDeserialize(std::vector); + friend bool operator==(const FunctionInput&, const FunctionInput&); + std::vector bincodeSerialize() const; + static FunctionInput bincodeDeserialize(std::vector); }; - struct RANGE { - Program::FunctionInput input; + struct BlackBoxFuncCall { - friend bool operator==(const RANGE &, const RANGE &); - std::vector bincodeSerialize() const; - static RANGE bincodeDeserialize(std::vector); + struct AND { + Program::FunctionInput lhs; + Program::FunctionInput rhs; + Program::Witness output; + + friend bool operator==(const AND&, const AND&); + std::vector bincodeSerialize() const; + static AND bincodeDeserialize(std::vector); + }; + + struct XOR { + Program::FunctionInput lhs; + Program::FunctionInput rhs; + Program::Witness output; + + friend bool operator==(const XOR&, const XOR&); + std::vector bincodeSerialize() const; + static XOR bincodeDeserialize(std::vector); + }; + + struct RANGE { + Program::FunctionInput input; + + friend bool operator==(const RANGE&, const RANGE&); + std::vector bincodeSerialize() const; + static RANGE bincodeDeserialize(std::vector); + }; + + struct Blake2s { + std::vector inputs; + std::vector outputs; + + friend bool operator==(const Blake2s&, const Blake2s&); + std::vector bincodeSerialize() const; + static Blake2s bincodeDeserialize(std::vector); + }; + + struct Blake3 { + std::vector inputs; + std::vector outputs; + + friend bool operator==(const Blake3&, const Blake3&); + std::vector bincodeSerialize() const; + static Blake3 bincodeDeserialize(std::vector); + }; + + struct SchnorrVerify { + Program::FunctionInput public_key_x; + Program::FunctionInput public_key_y; + std::vector signature; + std::vector message; + Program::Witness output; + + friend bool operator==(const SchnorrVerify&, const SchnorrVerify&); + std::vector bincodeSerialize() const; + static SchnorrVerify bincodeDeserialize(std::vector); + }; + + struct PedersenCommitment { + std::vector inputs; + uint32_t domain_separator; + std::array outputs; + + friend bool operator==(const PedersenCommitment&, const PedersenCommitment&); + std::vector bincodeSerialize() const; + static PedersenCommitment bincodeDeserialize(std::vector); + }; + + struct PedersenHash { + std::vector inputs; + uint32_t domain_separator; + Program::Witness output; + + friend bool operator==(const PedersenHash&, const PedersenHash&); + std::vector bincodeSerialize() const; + static PedersenHash bincodeDeserialize(std::vector); + }; + + struct EcdsaSecp256k1 { + std::vector public_key_x; + std::vector public_key_y; + std::vector signature; + std::vector hashed_message; + Program::Witness output; + + friend bool operator==(const EcdsaSecp256k1&, const EcdsaSecp256k1&); + std::vector bincodeSerialize() const; + static EcdsaSecp256k1 bincodeDeserialize(std::vector); + }; + + struct EcdsaSecp256r1 { + std::vector public_key_x; + std::vector public_key_y; + std::vector signature; + std::vector hashed_message; + Program::Witness output; + + friend bool operator==(const EcdsaSecp256r1&, const EcdsaSecp256r1&); + std::vector bincodeSerialize() const; + static EcdsaSecp256r1 bincodeDeserialize(std::vector); + }; + + struct FixedBaseScalarMul { + Program::FunctionInput low; + Program::FunctionInput high; + std::array outputs; + + friend bool operator==(const FixedBaseScalarMul&, const FixedBaseScalarMul&); + std::vector bincodeSerialize() const; + static FixedBaseScalarMul bincodeDeserialize(std::vector); + }; + + struct EmbeddedCurveAdd { + Program::FunctionInput input1_x; + Program::FunctionInput input1_y; + Program::FunctionInput input2_x; + Program::FunctionInput input2_y; + std::array outputs; + + friend bool operator==(const EmbeddedCurveAdd&, const EmbeddedCurveAdd&); + std::vector bincodeSerialize() const; + static EmbeddedCurveAdd bincodeDeserialize(std::vector); + }; + + struct Keccak256 { + std::vector inputs; + std::vector outputs; + + friend bool operator==(const Keccak256&, const Keccak256&); + std::vector bincodeSerialize() const; + static Keccak256 bincodeDeserialize(std::vector); + }; + + struct Keccak256VariableLength { + std::vector inputs; + Program::FunctionInput var_message_size; + std::vector outputs; + + friend bool operator==(const Keccak256VariableLength&, const Keccak256VariableLength&); + std::vector bincodeSerialize() const; + static Keccak256VariableLength bincodeDeserialize(std::vector); + }; + + struct Keccakf1600 { + std::vector inputs; + std::vector outputs; + + friend bool operator==(const Keccakf1600&, const Keccakf1600&); + std::vector bincodeSerialize() const; + static Keccakf1600 bincodeDeserialize(std::vector); + }; + + struct RecursiveAggregation { + std::vector verification_key; + std::vector proof; + std::vector public_inputs; + Program::FunctionInput key_hash; + + friend bool operator==(const RecursiveAggregation&, const RecursiveAggregation&); + std::vector bincodeSerialize() const; + static RecursiveAggregation bincodeDeserialize(std::vector); + }; + + struct BigIntAdd { + uint32_t lhs; + uint32_t rhs; + uint32_t output; + + friend bool operator==(const BigIntAdd&, const BigIntAdd&); + std::vector bincodeSerialize() const; + static BigIntAdd bincodeDeserialize(std::vector); + }; + + struct BigIntSub { + uint32_t lhs; + uint32_t rhs; + uint32_t output; + + friend bool operator==(const BigIntSub&, const BigIntSub&); + std::vector bincodeSerialize() const; + static BigIntSub bincodeDeserialize(std::vector); + }; + + struct BigIntMul { + uint32_t lhs; + uint32_t rhs; + uint32_t output; + + friend bool operator==(const BigIntMul&, const BigIntMul&); + std::vector bincodeSerialize() const; + static BigIntMul bincodeDeserialize(std::vector); + }; + + struct BigIntDiv { + uint32_t lhs; + uint32_t rhs; + uint32_t output; + + friend bool operator==(const BigIntDiv&, const BigIntDiv&); + std::vector bincodeSerialize() const; + static BigIntDiv bincodeDeserialize(std::vector); + }; + + struct BigIntFromLeBytes { + std::vector inputs; + std::vector modulus; + uint32_t output; + + friend bool operator==(const BigIntFromLeBytes&, const BigIntFromLeBytes&); + std::vector bincodeSerialize() const; + static BigIntFromLeBytes bincodeDeserialize(std::vector); + }; + + struct BigIntToLeBytes { + uint32_t input; + std::vector outputs; + + friend bool operator==(const BigIntToLeBytes&, const BigIntToLeBytes&); + std::vector bincodeSerialize() const; + static BigIntToLeBytes bincodeDeserialize(std::vector); + }; + + struct Poseidon2Permutation { + std::vector inputs; + std::vector outputs; + uint32_t len; + + friend bool operator==(const Poseidon2Permutation&, const Poseidon2Permutation&); + std::vector bincodeSerialize() const; + static Poseidon2Permutation bincodeDeserialize(std::vector); + }; + + struct Sha256Compression { + std::vector inputs; + std::vector hash_values; + std::vector outputs; + + friend bool operator==(const Sha256Compression&, const Sha256Compression&); + std::vector bincodeSerialize() const; + static Sha256Compression bincodeDeserialize(std::vector); + }; + + std::variant value; + + friend bool operator==(const BlackBoxFuncCall&, const BlackBoxFuncCall&); + std::vector bincodeSerialize() const; + static BlackBoxFuncCall bincodeDeserialize(std::vector); }; - struct Blake2s { - std::vector inputs; - std::vector outputs; + struct BlockId { + uint32_t value; - friend bool operator==(const Blake2s &, const Blake2s &); - std::vector bincodeSerialize() const; - static Blake2s bincodeDeserialize(std::vector); + friend bool operator==(const BlockId&, const BlockId&); + std::vector bincodeSerialize() const; + static BlockId bincodeDeserialize(std::vector); }; - struct Blake3 { - std::vector inputs; - std::vector outputs; + struct Expression { + std::vector> mul_terms; + std::vector> linear_combinations; + std::string q_c; - friend bool operator==(const Blake3 &, const Blake3 &); - std::vector bincodeSerialize() const; - static Blake3 bincodeDeserialize(std::vector); + friend bool operator==(const Expression&, const Expression&); + std::vector bincodeSerialize() const; + static Expression bincodeDeserialize(std::vector); }; - struct SchnorrVerify { - Program::FunctionInput public_key_x; - Program::FunctionInput public_key_y; - std::vector signature; - std::vector message; - Program::Witness output; - - friend bool operator==(const SchnorrVerify &, const SchnorrVerify &); - std::vector bincodeSerialize() const; - static SchnorrVerify bincodeDeserialize(std::vector); - }; + struct BrilligInputs { - struct PedersenCommitment { - std::vector inputs; - uint32_t domain_separator; - std::array outputs; + struct Single { + Program::Expression value; - friend bool operator==(const PedersenCommitment &, - const PedersenCommitment &); - std::vector bincodeSerialize() const; - static PedersenCommitment bincodeDeserialize(std::vector); - }; + friend bool operator==(const Single&, const Single&); + std::vector bincodeSerialize() const; + static Single bincodeDeserialize(std::vector); + }; - struct PedersenHash { - std::vector inputs; - uint32_t domain_separator; - Program::Witness output; + struct Array { + std::vector value; - friend bool operator==(const PedersenHash &, const PedersenHash &); - std::vector bincodeSerialize() const; - static PedersenHash bincodeDeserialize(std::vector); - }; + friend bool operator==(const Array&, const Array&); + std::vector bincodeSerialize() const; + static Array bincodeDeserialize(std::vector); + }; - struct EcdsaSecp256k1 { - std::vector public_key_x; - std::vector public_key_y; - std::vector signature; - std::vector hashed_message; - Program::Witness output; + struct MemoryArray { + Program::BlockId value; - friend bool operator==(const EcdsaSecp256k1 &, const EcdsaSecp256k1 &); - std::vector bincodeSerialize() const; - static EcdsaSecp256k1 bincodeDeserialize(std::vector); - }; + friend bool operator==(const MemoryArray&, const MemoryArray&); + std::vector bincodeSerialize() const; + static MemoryArray bincodeDeserialize(std::vector); + }; - struct EcdsaSecp256r1 { - std::vector public_key_x; - std::vector public_key_y; - std::vector signature; - std::vector hashed_message; - Program::Witness output; + std::variant value; - friend bool operator==(const EcdsaSecp256r1 &, const EcdsaSecp256r1 &); - std::vector bincodeSerialize() const; - static EcdsaSecp256r1 bincodeDeserialize(std::vector); + friend bool operator==(const BrilligInputs&, const BrilligInputs&); + std::vector bincodeSerialize() const; + static BrilligInputs bincodeDeserialize(std::vector); }; - struct FixedBaseScalarMul { - Program::FunctionInput low; - Program::FunctionInput high; - std::array outputs; - - friend bool operator==(const FixedBaseScalarMul &, - const FixedBaseScalarMul &); - std::vector bincodeSerialize() const; - static FixedBaseScalarMul bincodeDeserialize(std::vector); - }; + struct BinaryFieldOp { - struct EmbeddedCurveAdd { - Program::FunctionInput input1_x; - Program::FunctionInput input1_y; - Program::FunctionInput input2_x; - Program::FunctionInput input2_y; - std::array outputs; - - friend bool operator==(const EmbeddedCurveAdd &, - const EmbeddedCurveAdd &); - std::vector bincodeSerialize() const; - static EmbeddedCurveAdd bincodeDeserialize(std::vector); + struct Add { + friend bool operator==(const Add&, const Add&); + std::vector bincodeSerialize() const; + static Add bincodeDeserialize(std::vector); + }; + + struct Sub { + friend bool operator==(const Sub&, const Sub&); + std::vector bincodeSerialize() const; + static Sub bincodeDeserialize(std::vector); + }; + + struct Mul { + friend bool operator==(const Mul&, const Mul&); + std::vector bincodeSerialize() const; + static Mul bincodeDeserialize(std::vector); + }; + + struct Div { + friend bool operator==(const Div&, const Div&); + std::vector bincodeSerialize() const; + static Div bincodeDeserialize(std::vector); + }; + + struct IntegerDiv { + friend bool operator==(const IntegerDiv&, const IntegerDiv&); + std::vector bincodeSerialize() const; + static IntegerDiv bincodeDeserialize(std::vector); + }; + + struct Equals { + friend bool operator==(const Equals&, const Equals&); + std::vector bincodeSerialize() const; + static Equals bincodeDeserialize(std::vector); + }; + + struct LessThan { + friend bool operator==(const LessThan&, const LessThan&); + std::vector bincodeSerialize() const; + static LessThan bincodeDeserialize(std::vector); + }; + + struct LessThanEquals { + friend bool operator==(const LessThanEquals&, const LessThanEquals&); + std::vector bincodeSerialize() const; + static LessThanEquals bincodeDeserialize(std::vector); + }; + + std::variant value; + + friend bool operator==(const BinaryFieldOp&, const BinaryFieldOp&); + std::vector bincodeSerialize() const; + static BinaryFieldOp bincodeDeserialize(std::vector); }; - struct Keccak256 { - std::vector inputs; - std::vector outputs; + struct BinaryIntOp { - friend bool operator==(const Keccak256 &, const Keccak256 &); - std::vector bincodeSerialize() const; - static Keccak256 bincodeDeserialize(std::vector); + struct Add { + friend bool operator==(const Add&, const Add&); + std::vector bincodeSerialize() const; + static Add bincodeDeserialize(std::vector); + }; + + struct Sub { + friend bool operator==(const Sub&, const Sub&); + std::vector bincodeSerialize() const; + static Sub bincodeDeserialize(std::vector); + }; + + struct Mul { + friend bool operator==(const Mul&, const Mul&); + std::vector bincodeSerialize() const; + static Mul bincodeDeserialize(std::vector); + }; + + struct Div { + friend bool operator==(const Div&, const Div&); + std::vector bincodeSerialize() const; + static Div bincodeDeserialize(std::vector); + }; + + struct Equals { + friend bool operator==(const Equals&, const Equals&); + std::vector bincodeSerialize() const; + static Equals bincodeDeserialize(std::vector); + }; + + struct LessThan { + friend bool operator==(const LessThan&, const LessThan&); + std::vector bincodeSerialize() const; + static LessThan bincodeDeserialize(std::vector); + }; + + struct LessThanEquals { + friend bool operator==(const LessThanEquals&, const LessThanEquals&); + std::vector bincodeSerialize() const; + static LessThanEquals bincodeDeserialize(std::vector); + }; + + struct And { + friend bool operator==(const And&, const And&); + std::vector bincodeSerialize() const; + static And bincodeDeserialize(std::vector); + }; + + struct Or { + friend bool operator==(const Or&, const Or&); + std::vector bincodeSerialize() const; + static Or bincodeDeserialize(std::vector); + }; + + struct Xor { + friend bool operator==(const Xor&, const Xor&); + std::vector bincodeSerialize() const; + static Xor bincodeDeserialize(std::vector); + }; + + struct Shl { + friend bool operator==(const Shl&, const Shl&); + std::vector bincodeSerialize() const; + static Shl bincodeDeserialize(std::vector); + }; + + struct Shr { + friend bool operator==(const Shr&, const Shr&); + std::vector bincodeSerialize() const; + static Shr bincodeDeserialize(std::vector); + }; + + std::variant value; + + friend bool operator==(const BinaryIntOp&, const BinaryIntOp&); + std::vector bincodeSerialize() const; + static BinaryIntOp bincodeDeserialize(std::vector); }; - struct Keccak256VariableLength { - std::vector inputs; - Program::FunctionInput var_message_size; - std::vector outputs; + struct MemoryAddress { + uint64_t value; - friend bool operator==(const Keccak256VariableLength &, - const Keccak256VariableLength &); - std::vector bincodeSerialize() const; - static Keccak256VariableLength bincodeDeserialize(std::vector); + friend bool operator==(const MemoryAddress&, const MemoryAddress&); + std::vector bincodeSerialize() const; + static MemoryAddress bincodeDeserialize(std::vector); }; - struct Keccakf1600 { - std::vector inputs; - std::vector outputs; + struct HeapArray { + Program::MemoryAddress pointer; + uint64_t size; - friend bool operator==(const Keccakf1600 &, const Keccakf1600 &); - std::vector bincodeSerialize() const; - static Keccakf1600 bincodeDeserialize(std::vector); + friend bool operator==(const HeapArray&, const HeapArray&); + std::vector bincodeSerialize() const; + static HeapArray bincodeDeserialize(std::vector); }; - struct RecursiveAggregation { - std::vector verification_key; - std::vector proof; - std::vector public_inputs; - Program::FunctionInput key_hash; + struct HeapVector { + Program::MemoryAddress pointer; + Program::MemoryAddress size; - friend bool operator==(const RecursiveAggregation &, - const RecursiveAggregation &); - std::vector bincodeSerialize() const; - static RecursiveAggregation bincodeDeserialize(std::vector); + friend bool operator==(const HeapVector&, const HeapVector&); + std::vector bincodeSerialize() const; + static HeapVector bincodeDeserialize(std::vector); }; - struct BigIntAdd { - uint32_t lhs; - uint32_t rhs; - uint32_t output; - - friend bool operator==(const BigIntAdd &, const BigIntAdd &); - std::vector bincodeSerialize() const; - static BigIntAdd bincodeDeserialize(std::vector); + struct BlackBoxOp { + + struct Blake2s { + Program::HeapVector message; + Program::HeapArray output; + + friend bool operator==(const Blake2s&, const Blake2s&); + std::vector bincodeSerialize() const; + static Blake2s bincodeDeserialize(std::vector); + }; + + struct Blake3 { + Program::HeapVector message; + Program::HeapArray output; + + friend bool operator==(const Blake3&, const Blake3&); + std::vector bincodeSerialize() const; + static Blake3 bincodeDeserialize(std::vector); + }; + + struct Keccak256 { + Program::HeapVector message; + Program::HeapArray output; + + friend bool operator==(const Keccak256&, const Keccak256&); + std::vector bincodeSerialize() const; + static Keccak256 bincodeDeserialize(std::vector); + }; + + struct Keccakf1600 { + Program::HeapVector message; + Program::HeapArray output; + + friend bool operator==(const Keccakf1600&, const Keccakf1600&); + std::vector bincodeSerialize() const; + static Keccakf1600 bincodeDeserialize(std::vector); + }; + + struct EcdsaSecp256k1 { + Program::HeapVector hashed_msg; + Program::HeapArray public_key_x; + Program::HeapArray public_key_y; + Program::HeapArray signature; + Program::MemoryAddress result; + + friend bool operator==(const EcdsaSecp256k1&, const EcdsaSecp256k1&); + std::vector bincodeSerialize() const; + static EcdsaSecp256k1 bincodeDeserialize(std::vector); + }; + + struct EcdsaSecp256r1 { + Program::HeapVector hashed_msg; + Program::HeapArray public_key_x; + Program::HeapArray public_key_y; + Program::HeapArray signature; + Program::MemoryAddress result; + + friend bool operator==(const EcdsaSecp256r1&, const EcdsaSecp256r1&); + std::vector bincodeSerialize() const; + static EcdsaSecp256r1 bincodeDeserialize(std::vector); + }; + + struct SchnorrVerify { + Program::MemoryAddress public_key_x; + Program::MemoryAddress public_key_y; + Program::HeapVector message; + Program::HeapVector signature; + Program::MemoryAddress result; + + friend bool operator==(const SchnorrVerify&, const SchnorrVerify&); + std::vector bincodeSerialize() const; + static SchnorrVerify bincodeDeserialize(std::vector); + }; + + struct PedersenCommitment { + Program::HeapVector inputs; + Program::MemoryAddress domain_separator; + Program::HeapArray output; + + friend bool operator==(const PedersenCommitment&, const PedersenCommitment&); + std::vector bincodeSerialize() const; + static PedersenCommitment bincodeDeserialize(std::vector); + }; + + struct PedersenHash { + Program::HeapVector inputs; + Program::MemoryAddress domain_separator; + Program::MemoryAddress output; + + friend bool operator==(const PedersenHash&, const PedersenHash&); + std::vector bincodeSerialize() const; + static PedersenHash bincodeDeserialize(std::vector); + }; + + struct FixedBaseScalarMul { + Program::MemoryAddress low; + Program::MemoryAddress high; + Program::HeapArray result; + + friend bool operator==(const FixedBaseScalarMul&, const FixedBaseScalarMul&); + std::vector bincodeSerialize() const; + static FixedBaseScalarMul bincodeDeserialize(std::vector); + }; + + struct EmbeddedCurveAdd { + Program::MemoryAddress input1_x; + Program::MemoryAddress input1_y; + Program::MemoryAddress input2_x; + Program::MemoryAddress input2_y; + Program::HeapArray result; + + friend bool operator==(const EmbeddedCurveAdd&, const EmbeddedCurveAdd&); + std::vector bincodeSerialize() const; + static EmbeddedCurveAdd bincodeDeserialize(std::vector); + }; + + struct BigIntAdd { + Program::MemoryAddress lhs; + Program::MemoryAddress rhs; + Program::MemoryAddress output; + + friend bool operator==(const BigIntAdd&, const BigIntAdd&); + std::vector bincodeSerialize() const; + static BigIntAdd bincodeDeserialize(std::vector); + }; + + struct BigIntSub { + Program::MemoryAddress lhs; + Program::MemoryAddress rhs; + Program::MemoryAddress output; + + friend bool operator==(const BigIntSub&, const BigIntSub&); + std::vector bincodeSerialize() const; + static BigIntSub bincodeDeserialize(std::vector); + }; + + struct BigIntMul { + Program::MemoryAddress lhs; + Program::MemoryAddress rhs; + Program::MemoryAddress output; + + friend bool operator==(const BigIntMul&, const BigIntMul&); + std::vector bincodeSerialize() const; + static BigIntMul bincodeDeserialize(std::vector); + }; + + struct BigIntDiv { + Program::MemoryAddress lhs; + Program::MemoryAddress rhs; + Program::MemoryAddress output; + + friend bool operator==(const BigIntDiv&, const BigIntDiv&); + std::vector bincodeSerialize() const; + static BigIntDiv bincodeDeserialize(std::vector); + }; + + struct BigIntFromLeBytes { + Program::HeapVector inputs; + Program::HeapVector modulus; + Program::MemoryAddress output; + + friend bool operator==(const BigIntFromLeBytes&, const BigIntFromLeBytes&); + std::vector bincodeSerialize() const; + static BigIntFromLeBytes bincodeDeserialize(std::vector); + }; + + struct BigIntToLeBytes { + Program::MemoryAddress input; + Program::HeapVector output; + + friend bool operator==(const BigIntToLeBytes&, const BigIntToLeBytes&); + std::vector bincodeSerialize() const; + static BigIntToLeBytes bincodeDeserialize(std::vector); + }; + + struct Poseidon2Permutation { + Program::HeapVector message; + Program::HeapArray output; + Program::MemoryAddress len; + + friend bool operator==(const Poseidon2Permutation&, const Poseidon2Permutation&); + std::vector bincodeSerialize() const; + static Poseidon2Permutation bincodeDeserialize(std::vector); + }; + + struct Sha256Compression { + Program::HeapVector input; + Program::HeapVector hash_values; + Program::HeapArray output; + + friend bool operator==(const Sha256Compression&, const Sha256Compression&); + std::vector bincodeSerialize() const; + static Sha256Compression bincodeDeserialize(std::vector); + }; + + std::variant value; + + friend bool operator==(const BlackBoxOp&, const BlackBoxOp&); + std::vector bincodeSerialize() const; + static BlackBoxOp bincodeDeserialize(std::vector); }; - struct BigIntSub { - uint32_t lhs; - uint32_t rhs; - uint32_t output; + struct HeapValueType; - friend bool operator==(const BigIntSub &, const BigIntSub &); - std::vector bincodeSerialize() const; - static BigIntSub bincodeDeserialize(std::vector); - }; + struct HeapValueType { - struct BigIntMul { - uint32_t lhs; - uint32_t rhs; - uint32_t output; + struct Simple { + uint32_t value; - friend bool operator==(const BigIntMul &, const BigIntMul &); - std::vector bincodeSerialize() const; - static BigIntMul bincodeDeserialize(std::vector); - }; + friend bool operator==(const Simple&, const Simple&); + std::vector bincodeSerialize() const; + static Simple bincodeDeserialize(std::vector); + }; - struct BigIntDiv { - uint32_t lhs; - uint32_t rhs; - uint32_t output; + struct Array { + std::vector value_types; + uint64_t size; - friend bool operator==(const BigIntDiv &, const BigIntDiv &); - std::vector bincodeSerialize() const; - static BigIntDiv bincodeDeserialize(std::vector); - }; + friend bool operator==(const Array&, const Array&); + std::vector bincodeSerialize() const; + static Array bincodeDeserialize(std::vector); + }; - struct BigIntFromLeBytes { - std::vector inputs; - std::vector modulus; - uint32_t output; + struct Vector { + std::vector value_types; - friend bool operator==(const BigIntFromLeBytes &, - const BigIntFromLeBytes &); - std::vector bincodeSerialize() const; - static BigIntFromLeBytes bincodeDeserialize(std::vector); - }; + friend bool operator==(const Vector&, const Vector&); + std::vector bincodeSerialize() const; + static Vector bincodeDeserialize(std::vector); + }; - struct BigIntToLeBytes { - uint32_t input; - std::vector outputs; + std::variant value; - friend bool operator==(const BigIntToLeBytes &, const BigIntToLeBytes &); - std::vector bincodeSerialize() const; - static BigIntToLeBytes bincodeDeserialize(std::vector); + friend bool operator==(const HeapValueType&, const HeapValueType&); + std::vector bincodeSerialize() const; + static HeapValueType bincodeDeserialize(std::vector); }; - struct Poseidon2Permutation { - std::vector inputs; - std::vector outputs; - uint32_t len; + struct ValueOrArray { - friend bool operator==(const Poseidon2Permutation &, - const Poseidon2Permutation &); - std::vector bincodeSerialize() const; - static Poseidon2Permutation bincodeDeserialize(std::vector); - }; + struct MemoryAddress { + Program::MemoryAddress value; - struct Sha256Compression { - std::vector inputs; - std::vector hash_values; - std::vector outputs; + friend bool operator==(const MemoryAddress&, const MemoryAddress&); + std::vector bincodeSerialize() const; + static MemoryAddress bincodeDeserialize(std::vector); + }; - friend bool operator==(const Sha256Compression &, - const Sha256Compression &); - std::vector bincodeSerialize() const; - static Sha256Compression bincodeDeserialize(std::vector); - }; + struct HeapArray { + Program::HeapArray value; - std::variant - value; - - friend bool operator==(const BlackBoxFuncCall &, const BlackBoxFuncCall &); - std::vector bincodeSerialize() const; - static BlackBoxFuncCall bincodeDeserialize(std::vector); - }; - - struct BlockId { - uint32_t value; - - friend bool operator==(const BlockId &, const BlockId &); - std::vector bincodeSerialize() const; - static BlockId bincodeDeserialize(std::vector); - }; - - struct Expression { - std::vector> - mul_terms; - std::vector> linear_combinations; - std::string q_c; - - friend bool operator==(const Expression &, const Expression &); - std::vector bincodeSerialize() const; - static Expression bincodeDeserialize(std::vector); - }; - - struct BrilligInputs { - - struct Single { - Program::Expression value; - - friend bool operator==(const Single &, const Single &); - std::vector bincodeSerialize() const; - static Single bincodeDeserialize(std::vector); - }; + friend bool operator==(const HeapArray&, const HeapArray&); + std::vector bincodeSerialize() const; + static HeapArray bincodeDeserialize(std::vector); + }; - struct Array { - std::vector value; + struct HeapVector { + Program::HeapVector value; - friend bool operator==(const Array &, const Array &); - std::vector bincodeSerialize() const; - static Array bincodeDeserialize(std::vector); - }; + friend bool operator==(const HeapVector&, const HeapVector&); + std::vector bincodeSerialize() const; + static HeapVector bincodeDeserialize(std::vector); + }; - struct MemoryArray { - Program::BlockId value; + std::variant value; - friend bool operator==(const MemoryArray &, const MemoryArray &); - std::vector bincodeSerialize() const; - static MemoryArray bincodeDeserialize(std::vector); + friend bool operator==(const ValueOrArray&, const ValueOrArray&); + std::vector bincodeSerialize() const; + static ValueOrArray bincodeDeserialize(std::vector); }; - std::variant value; - - friend bool operator==(const BrilligInputs &, const BrilligInputs &); - std::vector bincodeSerialize() const; - static BrilligInputs bincodeDeserialize(std::vector); - }; - - struct BinaryFieldOp { - - struct Add { - friend bool operator==(const Add &, const Add &); - std::vector bincodeSerialize() const; - static Add bincodeDeserialize(std::vector); + struct BrilligOpcode { + + struct BinaryFieldOp { + Program::MemoryAddress destination; + Program::BinaryFieldOp op; + Program::MemoryAddress lhs; + Program::MemoryAddress rhs; + + friend bool operator==(const BinaryFieldOp&, const BinaryFieldOp&); + std::vector bincodeSerialize() const; + static BinaryFieldOp bincodeDeserialize(std::vector); + }; + + struct BinaryIntOp { + Program::MemoryAddress destination; + Program::BinaryIntOp op; + uint32_t bit_size; + Program::MemoryAddress lhs; + Program::MemoryAddress rhs; + + friend bool operator==(const BinaryIntOp&, const BinaryIntOp&); + std::vector bincodeSerialize() const; + static BinaryIntOp bincodeDeserialize(std::vector); + }; + + struct Cast { + Program::MemoryAddress destination; + Program::MemoryAddress source; + uint32_t bit_size; + + friend bool operator==(const Cast&, const Cast&); + std::vector bincodeSerialize() const; + static Cast bincodeDeserialize(std::vector); + }; + + struct JumpIfNot { + Program::MemoryAddress condition; + uint64_t location; + + friend bool operator==(const JumpIfNot&, const JumpIfNot&); + std::vector bincodeSerialize() const; + static JumpIfNot bincodeDeserialize(std::vector); + }; + + struct JumpIf { + Program::MemoryAddress condition; + uint64_t location; + + friend bool operator==(const JumpIf&, const JumpIf&); + std::vector bincodeSerialize() const; + static JumpIf bincodeDeserialize(std::vector); + }; + + struct Jump { + uint64_t location; + + friend bool operator==(const Jump&, const Jump&); + std::vector bincodeSerialize() const; + static Jump bincodeDeserialize(std::vector); + }; + + struct CalldataCopy { + Program::MemoryAddress destination_address; + uint64_t size; + uint64_t offset; + + friend bool operator==(const CalldataCopy&, const CalldataCopy&); + std::vector bincodeSerialize() const; + static CalldataCopy bincodeDeserialize(std::vector); + }; + + struct Call { + uint64_t location; + + friend bool operator==(const Call&, const Call&); + std::vector bincodeSerialize() const; + static Call bincodeDeserialize(std::vector); + }; + + struct Const { + Program::MemoryAddress destination; + uint32_t bit_size; + std::string value; + + friend bool operator==(const Const&, const Const&); + std::vector bincodeSerialize() const; + static Const bincodeDeserialize(std::vector); + }; + + struct Return { + friend bool operator==(const Return&, const Return&); + std::vector bincodeSerialize() const; + static Return bincodeDeserialize(std::vector); + }; + + struct ForeignCall { + std::string function; + std::vector destinations; + std::vector destination_value_types; + std::vector inputs; + std::vector input_value_types; + + friend bool operator==(const ForeignCall&, const ForeignCall&); + std::vector bincodeSerialize() const; + static ForeignCall bincodeDeserialize(std::vector); + }; + + struct Mov { + Program::MemoryAddress destination; + Program::MemoryAddress source; + + friend bool operator==(const Mov&, const Mov&); + std::vector bincodeSerialize() const; + static Mov bincodeDeserialize(std::vector); + }; + + struct ConditionalMov { + Program::MemoryAddress destination; + Program::MemoryAddress source_a; + Program::MemoryAddress source_b; + Program::MemoryAddress condition; + + friend bool operator==(const ConditionalMov&, const ConditionalMov&); + std::vector bincodeSerialize() const; + static ConditionalMov bincodeDeserialize(std::vector); + }; + + struct Load { + Program::MemoryAddress destination; + Program::MemoryAddress source_pointer; + + friend bool operator==(const Load&, const Load&); + std::vector bincodeSerialize() const; + static Load bincodeDeserialize(std::vector); + }; + + struct Store { + Program::MemoryAddress destination_pointer; + Program::MemoryAddress source; + + friend bool operator==(const Store&, const Store&); + std::vector bincodeSerialize() const; + static Store bincodeDeserialize(std::vector); + }; + + struct BlackBox { + Program::BlackBoxOp value; + + friend bool operator==(const BlackBox&, const BlackBox&); + std::vector bincodeSerialize() const; + static BlackBox bincodeDeserialize(std::vector); + }; + + struct Trap { + friend bool operator==(const Trap&, const Trap&); + std::vector bincodeSerialize() const; + static Trap bincodeDeserialize(std::vector); + }; + + struct Stop { + uint64_t return_data_offset; + uint64_t return_data_size; + + friend bool operator==(const Stop&, const Stop&); + std::vector bincodeSerialize() const; + static Stop bincodeDeserialize(std::vector); + }; + + std::variant value; + + friend bool operator==(const BrilligOpcode&, const BrilligOpcode&); + std::vector bincodeSerialize() const; + static BrilligOpcode bincodeDeserialize(std::vector); }; - struct Sub { - friend bool operator==(const Sub &, const Sub &); - std::vector bincodeSerialize() const; - static Sub bincodeDeserialize(std::vector); - }; + struct BrilligOutputs { - struct Mul { - friend bool operator==(const Mul &, const Mul &); - std::vector bincodeSerialize() const; - static Mul bincodeDeserialize(std::vector); - }; + struct Simple { + Program::Witness value; - struct Div { - friend bool operator==(const Div &, const Div &); - std::vector bincodeSerialize() const; - static Div bincodeDeserialize(std::vector); - }; + friend bool operator==(const Simple&, const Simple&); + std::vector bincodeSerialize() const; + static Simple bincodeDeserialize(std::vector); + }; - struct IntegerDiv { - friend bool operator==(const IntegerDiv &, const IntegerDiv &); - std::vector bincodeSerialize() const; - static IntegerDiv bincodeDeserialize(std::vector); - }; + struct Array { + std::vector value; - struct Equals { - friend bool operator==(const Equals &, const Equals &); - std::vector bincodeSerialize() const; - static Equals bincodeDeserialize(std::vector); - }; + friend bool operator==(const Array&, const Array&); + std::vector bincodeSerialize() const; + static Array bincodeDeserialize(std::vector); + }; - struct LessThan { - friend bool operator==(const LessThan &, const LessThan &); - std::vector bincodeSerialize() const; - static LessThan bincodeDeserialize(std::vector); - }; + std::variant value; - struct LessThanEquals { - friend bool operator==(const LessThanEquals &, const LessThanEquals &); - std::vector bincodeSerialize() const; - static LessThanEquals bincodeDeserialize(std::vector); + friend bool operator==(const BrilligOutputs&, const BrilligOutputs&); + std::vector bincodeSerialize() const; + static BrilligOutputs bincodeDeserialize(std::vector); }; - std::variant - value; - - friend bool operator==(const BinaryFieldOp &, const BinaryFieldOp &); - std::vector bincodeSerialize() const; - static BinaryFieldOp bincodeDeserialize(std::vector); - }; + struct Brillig { + std::vector inputs; + std::vector outputs; + std::vector bytecode; + std::optional predicate; + + friend bool operator==(const Brillig&, const Brillig&); + std::vector bincodeSerialize() const; + static Brillig bincodeDeserialize(std::vector); + }; - struct BinaryIntOp { + struct Directive { - struct Add { - friend bool operator==(const Add &, const Add &); - std::vector bincodeSerialize() const; - static Add bincodeDeserialize(std::vector); - }; + struct ToLeRadix { + Program::Expression a; + std::vector b; + uint32_t radix; - struct Sub { - friend bool operator==(const Sub &, const Sub &); - std::vector bincodeSerialize() const; - static Sub bincodeDeserialize(std::vector); - }; + friend bool operator==(const ToLeRadix&, const ToLeRadix&); + std::vector bincodeSerialize() const; + static ToLeRadix bincodeDeserialize(std::vector); + }; - struct Mul { - friend bool operator==(const Mul &, const Mul &); - std::vector bincodeSerialize() const; - static Mul bincodeDeserialize(std::vector); - }; + std::variant value; - struct Div { - friend bool operator==(const Div &, const Div &); - std::vector bincodeSerialize() const; - static Div bincodeDeserialize(std::vector); + friend bool operator==(const Directive&, const Directive&); + std::vector bincodeSerialize() const; + static Directive bincodeDeserialize(std::vector); }; - struct Equals { - friend bool operator==(const Equals &, const Equals &); - std::vector bincodeSerialize() const; - static Equals bincodeDeserialize(std::vector); - }; + struct MemOp { + Program::Expression operation; + Program::Expression index; + Program::Expression value; - struct LessThan { - friend bool operator==(const LessThan &, const LessThan &); - std::vector bincodeSerialize() const; - static LessThan bincodeDeserialize(std::vector); + friend bool operator==(const MemOp&, const MemOp&); + std::vector bincodeSerialize() const; + static MemOp bincodeDeserialize(std::vector); }; - struct LessThanEquals { - friend bool operator==(const LessThanEquals &, const LessThanEquals &); - std::vector bincodeSerialize() const; - static LessThanEquals bincodeDeserialize(std::vector); - }; + struct Opcode { - struct And { - friend bool operator==(const And &, const And &); - std::vector bincodeSerialize() const; - static And bincodeDeserialize(std::vector); - }; + struct AssertZero { + Program::Expression value; - struct Or { - friend bool operator==(const Or &, const Or &); - std::vector bincodeSerialize() const; - static Or bincodeDeserialize(std::vector); - }; + friend bool operator==(const AssertZero&, const AssertZero&); + std::vector bincodeSerialize() const; + static AssertZero bincodeDeserialize(std::vector); + }; - struct Xor { - friend bool operator==(const Xor &, const Xor &); - std::vector bincodeSerialize() const; - static Xor bincodeDeserialize(std::vector); - }; + struct BlackBoxFuncCall { + Program::BlackBoxFuncCall value; - struct Shl { - friend bool operator==(const Shl &, const Shl &); - std::vector bincodeSerialize() const; - static Shl bincodeDeserialize(std::vector); - }; + friend bool operator==(const BlackBoxFuncCall&, const BlackBoxFuncCall&); + std::vector bincodeSerialize() const; + static BlackBoxFuncCall bincodeDeserialize(std::vector); + }; - struct Shr { - friend bool operator==(const Shr &, const Shr &); - std::vector bincodeSerialize() const; - static Shr bincodeDeserialize(std::vector); - }; + struct Directive { + Program::Directive value; - std::variant - value; + friend bool operator==(const Directive&, const Directive&); + std::vector bincodeSerialize() const; + static Directive bincodeDeserialize(std::vector); + }; - friend bool operator==(const BinaryIntOp &, const BinaryIntOp &); - std::vector bincodeSerialize() const; - static BinaryIntOp bincodeDeserialize(std::vector); - }; + struct Brillig { + Program::Brillig value; - struct MemoryAddress { - uint64_t value; + friend bool operator==(const Brillig&, const Brillig&); + std::vector bincodeSerialize() const; + static Brillig bincodeDeserialize(std::vector); + }; - friend bool operator==(const MemoryAddress &, const MemoryAddress &); - std::vector bincodeSerialize() const; - static MemoryAddress bincodeDeserialize(std::vector); - }; + struct MemoryOp { + Program::BlockId block_id; + Program::MemOp op; + std::optional predicate; - struct HeapArray { - Program::MemoryAddress pointer; - uint64_t size; + friend bool operator==(const MemoryOp&, const MemoryOp&); + std::vector bincodeSerialize() const; + static MemoryOp bincodeDeserialize(std::vector); + }; - friend bool operator==(const HeapArray &, const HeapArray &); - std::vector bincodeSerialize() const; - static HeapArray bincodeDeserialize(std::vector); - }; + struct MemoryInit { + Program::BlockId block_id; + std::vector init; - struct HeapVector { - Program::MemoryAddress pointer; - Program::MemoryAddress size; + friend bool operator==(const MemoryInit&, const MemoryInit&); + std::vector bincodeSerialize() const; + static MemoryInit bincodeDeserialize(std::vector); + }; - friend bool operator==(const HeapVector &, const HeapVector &); - std::vector bincodeSerialize() const; - static HeapVector bincodeDeserialize(std::vector); - }; + struct Call { + uint32_t id; + std::vector inputs; + std::vector outputs; - struct BlackBoxOp { + friend bool operator==(const Call&, const Call&); + std::vector bincodeSerialize() const; + static Call bincodeDeserialize(std::vector); + }; - struct Sha256 { - Program::HeapVector message; - Program::HeapArray output; + std::variant value; - friend bool operator==(const Sha256 &, const Sha256 &); - std::vector bincodeSerialize() const; - static Sha256 bincodeDeserialize(std::vector); + friend bool operator==(const Opcode&, const Opcode&); + std::vector bincodeSerialize() const; + static Opcode bincodeDeserialize(std::vector); }; - struct Blake2s { - Program::HeapVector message; - Program::HeapArray output; + struct ExpressionWidth { - friend bool operator==(const Blake2s &, const Blake2s &); - std::vector bincodeSerialize() const; - static Blake2s bincodeDeserialize(std::vector); - }; + struct Unbounded { + friend bool operator==(const Unbounded&, const Unbounded&); + std::vector bincodeSerialize() const; + static Unbounded bincodeDeserialize(std::vector); + }; - struct Blake3 { - Program::HeapVector message; - Program::HeapArray output; + struct Bounded { + uint64_t width; - friend bool operator==(const Blake3 &, const Blake3 &); - std::vector bincodeSerialize() const; - static Blake3 bincodeDeserialize(std::vector); - }; + friend bool operator==(const Bounded&, const Bounded&); + std::vector bincodeSerialize() const; + static Bounded bincodeDeserialize(std::vector); + }; - struct Keccak256 { - Program::HeapVector message; - Program::HeapArray output; + std::variant value; - friend bool operator==(const Keccak256 &, const Keccak256 &); - std::vector bincodeSerialize() const; - static Keccak256 bincodeDeserialize(std::vector); + friend bool operator==(const ExpressionWidth&, const ExpressionWidth&); + std::vector bincodeSerialize() const; + static ExpressionWidth bincodeDeserialize(std::vector); }; - struct Keccakf1600 { - Program::HeapVector message; - Program::HeapArray output; + struct OpcodeLocation { - friend bool operator==(const Keccakf1600 &, const Keccakf1600 &); - std::vector bincodeSerialize() const; - static Keccakf1600 bincodeDeserialize(std::vector); - }; + struct Acir { + uint64_t value; - struct EcdsaSecp256k1 { - Program::HeapVector hashed_msg; - Program::HeapArray public_key_x; - Program::HeapArray public_key_y; - Program::HeapArray signature; - Program::MemoryAddress result; + friend bool operator==(const Acir&, const Acir&); + std::vector bincodeSerialize() const; + static Acir bincodeDeserialize(std::vector); + }; - friend bool operator==(const EcdsaSecp256k1 &, const EcdsaSecp256k1 &); - std::vector bincodeSerialize() const; - static EcdsaSecp256k1 bincodeDeserialize(std::vector); - }; + struct Brillig { + uint64_t acir_index; + uint64_t brillig_index; + + friend bool operator==(const Brillig&, const Brillig&); + std::vector bincodeSerialize() const; + static Brillig bincodeDeserialize(std::vector); + }; - struct EcdsaSecp256r1 { - Program::HeapVector hashed_msg; - Program::HeapArray public_key_x; - Program::HeapArray public_key_y; - Program::HeapArray signature; - Program::MemoryAddress result; + std::variant value; - friend bool operator==(const EcdsaSecp256r1 &, const EcdsaSecp256r1 &); - std::vector bincodeSerialize() const; - static EcdsaSecp256r1 bincodeDeserialize(std::vector); + friend bool operator==(const OpcodeLocation&, const OpcodeLocation&); + std::vector bincodeSerialize() const; + static OpcodeLocation bincodeDeserialize(std::vector); }; - struct SchnorrVerify { - Program::MemoryAddress public_key_x; - Program::MemoryAddress public_key_y; - Program::HeapVector message; - Program::HeapVector signature; - Program::MemoryAddress result; + struct PublicInputs { + std::vector value; - friend bool operator==(const SchnorrVerify &, const SchnorrVerify &); - std::vector bincodeSerialize() const; - static SchnorrVerify bincodeDeserialize(std::vector); + friend bool operator==(const PublicInputs&, const PublicInputs&); + std::vector bincodeSerialize() const; + static PublicInputs bincodeDeserialize(std::vector); }; - struct PedersenCommitment { - Program::HeapVector inputs; - Program::MemoryAddress domain_separator; - Program::HeapArray output; - - friend bool operator==(const PedersenCommitment &, - const PedersenCommitment &); - std::vector bincodeSerialize() const; - static PedersenCommitment bincodeDeserialize(std::vector); + struct Circuit { + uint32_t current_witness_index; + std::vector opcodes; + Program::ExpressionWidth expression_width; + std::vector private_parameters; + Program::PublicInputs public_parameters; + Program::PublicInputs return_values; + std::vector> assert_messages; + bool recursive; + + friend bool operator==(const Circuit&, const Circuit&); + std::vector bincodeSerialize() const; + static Circuit bincodeDeserialize(std::vector); }; - struct PedersenHash { - Program::HeapVector inputs; - Program::MemoryAddress domain_separator; - Program::MemoryAddress output; + struct Program { + std::vector functions; - friend bool operator==(const PedersenHash &, const PedersenHash &); - std::vector bincodeSerialize() const; - static PedersenHash bincodeDeserialize(std::vector); + friend bool operator==(const Program&, const Program&); + std::vector bincodeSerialize() const; + static Program bincodeDeserialize(std::vector); }; - struct FixedBaseScalarMul { - Program::MemoryAddress low; - Program::MemoryAddress high; - Program::HeapArray result; +} // end of namespace Program - friend bool operator==(const FixedBaseScalarMul &, - const FixedBaseScalarMul &); - std::vector bincodeSerialize() const; - static FixedBaseScalarMul bincodeDeserialize(std::vector); - }; - struct EmbeddedCurveAdd { - Program::MemoryAddress input1_x; - Program::MemoryAddress input1_y; - Program::MemoryAddress input2_x; - Program::MemoryAddress input2_y; - Program::HeapArray result; - - friend bool operator==(const EmbeddedCurveAdd &, - const EmbeddedCurveAdd &); - std::vector bincodeSerialize() const; - static EmbeddedCurveAdd bincodeDeserialize(std::vector); - }; +namespace Program { - struct BigIntAdd { - Program::MemoryAddress lhs; - Program::MemoryAddress rhs; - Program::MemoryAddress output; + inline bool operator==(const BinaryFieldOp &lhs, const BinaryFieldOp &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } - friend bool operator==(const BigIntAdd &, const BigIntAdd &); - std::vector bincodeSerialize() const; - static BigIntAdd bincodeDeserialize(std::vector); - }; + inline std::vector BinaryFieldOp::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - struct BigIntSub { - Program::MemoryAddress lhs; - Program::MemoryAddress rhs; - Program::MemoryAddress output; + inline BinaryFieldOp BinaryFieldOp::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } - friend bool operator==(const BigIntSub &, const BigIntSub &); - std::vector bincodeSerialize() const; - static BigIntSub bincodeDeserialize(std::vector); - }; +} // end of namespace Program - struct BigIntMul { - Program::MemoryAddress lhs; - Program::MemoryAddress rhs; - Program::MemoryAddress output; +template <> +template +void serde::Serializable::serialize(const Program::BinaryFieldOp &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.value, serializer); + serializer.decrease_container_depth(); +} - friend bool operator==(const BigIntMul &, const BigIntMul &); - std::vector bincodeSerialize() const; - static BigIntMul bincodeDeserialize(std::vector); - }; +template <> +template +Program::BinaryFieldOp serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::BinaryFieldOp obj; + obj.value = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; +} - struct BigIntDiv { - Program::MemoryAddress lhs; - Program::MemoryAddress rhs; - Program::MemoryAddress output; +namespace Program { - friend bool operator==(const BigIntDiv &, const BigIntDiv &); - std::vector bincodeSerialize() const; - static BigIntDiv bincodeDeserialize(std::vector); - }; + inline bool operator==(const BinaryFieldOp::Add &lhs, const BinaryFieldOp::Add &rhs) { + return true; + } - struct BigIntFromLeBytes { - Program::HeapVector inputs; - Program::HeapVector modulus; - Program::MemoryAddress output; + inline std::vector BinaryFieldOp::Add::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - friend bool operator==(const BigIntFromLeBytes &, - const BigIntFromLeBytes &); - std::vector bincodeSerialize() const; - static BigIntFromLeBytes bincodeDeserialize(std::vector); - }; + inline BinaryFieldOp::Add BinaryFieldOp::Add::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } - struct BigIntToLeBytes { - Program::MemoryAddress input; - Program::HeapVector output; +} // end of namespace Program - friend bool operator==(const BigIntToLeBytes &, const BigIntToLeBytes &); - std::vector bincodeSerialize() const; - static BigIntToLeBytes bincodeDeserialize(std::vector); - }; +template <> +template +void serde::Serializable::serialize(const Program::BinaryFieldOp::Add &obj, Serializer &serializer) { +} - struct Poseidon2Permutation { - Program::HeapVector message; - Program::HeapArray output; - Program::MemoryAddress len; +template <> +template +Program::BinaryFieldOp::Add serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryFieldOp::Add obj; + return obj; +} - friend bool operator==(const Poseidon2Permutation &, - const Poseidon2Permutation &); - std::vector bincodeSerialize() const; - static Poseidon2Permutation bincodeDeserialize(std::vector); - }; +namespace Program { - struct Sha256Compression { - Program::HeapVector input; - Program::HeapVector hash_values; - Program::HeapArray output; + inline bool operator==(const BinaryFieldOp::Sub &lhs, const BinaryFieldOp::Sub &rhs) { + return true; + } - friend bool operator==(const Sha256Compression &, - const Sha256Compression &); - std::vector bincodeSerialize() const; - static Sha256Compression bincodeDeserialize(std::vector); - }; + inline std::vector BinaryFieldOp::Sub::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - std::variant - value; + inline BinaryFieldOp::Sub BinaryFieldOp::Sub::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } - friend bool operator==(const BlackBoxOp &, const BlackBoxOp &); - std::vector bincodeSerialize() const; - static BlackBoxOp bincodeDeserialize(std::vector); - }; +} // end of namespace Program - struct HeapValueType; +template <> +template +void serde::Serializable::serialize(const Program::BinaryFieldOp::Sub &obj, Serializer &serializer) { +} - struct HeapValueType { +template <> +template +Program::BinaryFieldOp::Sub serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryFieldOp::Sub obj; + return obj; +} - struct Simple { - uint32_t value; +namespace Program { - friend bool operator==(const Simple &, const Simple &); - std::vector bincodeSerialize() const; - static Simple bincodeDeserialize(std::vector); - }; + inline bool operator==(const BinaryFieldOp::Mul &lhs, const BinaryFieldOp::Mul &rhs) { + return true; + } - struct Array { - std::vector value_types; - uint64_t size; + inline std::vector BinaryFieldOp::Mul::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - friend bool operator==(const Array &, const Array &); - std::vector bincodeSerialize() const; - static Array bincodeDeserialize(std::vector); - }; + inline BinaryFieldOp::Mul BinaryFieldOp::Mul::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } - struct Vector { - std::vector value_types; +} // end of namespace Program - friend bool operator==(const Vector &, const Vector &); - std::vector bincodeSerialize() const; - static Vector bincodeDeserialize(std::vector); - }; +template <> +template +void serde::Serializable::serialize(const Program::BinaryFieldOp::Mul &obj, Serializer &serializer) { +} - std::variant value; +template <> +template +Program::BinaryFieldOp::Mul serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryFieldOp::Mul obj; + return obj; +} - friend bool operator==(const HeapValueType &, const HeapValueType &); - std::vector bincodeSerialize() const; - static HeapValueType bincodeDeserialize(std::vector); - }; +namespace Program { - struct ValueOrArray { + inline bool operator==(const BinaryFieldOp::Div &lhs, const BinaryFieldOp::Div &rhs) { + return true; + } - struct MemoryAddress { - Program::MemoryAddress value; + inline std::vector BinaryFieldOp::Div::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - friend bool operator==(const MemoryAddress &, const MemoryAddress &); - std::vector bincodeSerialize() const; - static MemoryAddress bincodeDeserialize(std::vector); - }; + inline BinaryFieldOp::Div BinaryFieldOp::Div::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } - struct HeapArray { - Program::HeapArray value; +} // end of namespace Program - friend bool operator==(const HeapArray &, const HeapArray &); - std::vector bincodeSerialize() const; - static HeapArray bincodeDeserialize(std::vector); - }; +template <> +template +void serde::Serializable::serialize(const Program::BinaryFieldOp::Div &obj, Serializer &serializer) { +} - struct HeapVector { - Program::HeapVector value; +template <> +template +Program::BinaryFieldOp::Div serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryFieldOp::Div obj; + return obj; +} - friend bool operator==(const HeapVector &, const HeapVector &); - std::vector bincodeSerialize() const; - static HeapVector bincodeDeserialize(std::vector); - }; +namespace Program { - std::variant value; + inline bool operator==(const BinaryFieldOp::IntegerDiv &lhs, const BinaryFieldOp::IntegerDiv &rhs) { + return true; + } - friend bool operator==(const ValueOrArray &, const ValueOrArray &); - std::vector bincodeSerialize() const; - static ValueOrArray bincodeDeserialize(std::vector); - }; + inline std::vector BinaryFieldOp::IntegerDiv::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - struct BrilligOpcode { + inline BinaryFieldOp::IntegerDiv BinaryFieldOp::IntegerDiv::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } - struct BinaryFieldOp { - Program::MemoryAddress destination; - Program::BinaryFieldOp op; - Program::MemoryAddress lhs; - Program::MemoryAddress rhs; - - friend bool operator==(const BinaryFieldOp &, const BinaryFieldOp &); - std::vector bincodeSerialize() const; - static BinaryFieldOp bincodeDeserialize(std::vector); - }; +} // end of namespace Program - struct BinaryIntOp { - Program::MemoryAddress destination; - Program::BinaryIntOp op; - uint32_t bit_size; - Program::MemoryAddress lhs; - Program::MemoryAddress rhs; - - friend bool operator==(const BinaryIntOp &, const BinaryIntOp &); - std::vector bincodeSerialize() const; - static BinaryIntOp bincodeDeserialize(std::vector); - }; +template <> +template +void serde::Serializable::serialize(const Program::BinaryFieldOp::IntegerDiv &obj, Serializer &serializer) { +} - struct Cast { - Program::MemoryAddress destination; - Program::MemoryAddress source; - uint32_t bit_size; +template <> +template +Program::BinaryFieldOp::IntegerDiv serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryFieldOp::IntegerDiv obj; + return obj; +} - friend bool operator==(const Cast &, const Cast &); - std::vector bincodeSerialize() const; - static Cast bincodeDeserialize(std::vector); - }; +namespace Program { - struct JumpIfNot { - Program::MemoryAddress condition; - uint64_t location; + inline bool operator==(const BinaryFieldOp::Equals &lhs, const BinaryFieldOp::Equals &rhs) { + return true; + } - friend bool operator==(const JumpIfNot &, const JumpIfNot &); - std::vector bincodeSerialize() const; - static JumpIfNot bincodeDeserialize(std::vector); - }; + inline std::vector BinaryFieldOp::Equals::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - struct JumpIf { - Program::MemoryAddress condition; - uint64_t location; + inline BinaryFieldOp::Equals BinaryFieldOp::Equals::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } - friend bool operator==(const JumpIf &, const JumpIf &); - std::vector bincodeSerialize() const; - static JumpIf bincodeDeserialize(std::vector); - }; +} // end of namespace Program - struct Jump { - uint64_t location; +template <> +template +void serde::Serializable::serialize(const Program::BinaryFieldOp::Equals &obj, Serializer &serializer) { +} - friend bool operator==(const Jump &, const Jump &); - std::vector bincodeSerialize() const; - static Jump bincodeDeserialize(std::vector); - }; +template <> +template +Program::BinaryFieldOp::Equals serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryFieldOp::Equals obj; + return obj; +} - struct CalldataCopy { - Program::MemoryAddress destination_address; - uint64_t size; - uint64_t offset; +namespace Program { - friend bool operator==(const CalldataCopy &, const CalldataCopy &); - std::vector bincodeSerialize() const; - static CalldataCopy bincodeDeserialize(std::vector); - }; + inline bool operator==(const BinaryFieldOp::LessThan &lhs, const BinaryFieldOp::LessThan &rhs) { + return true; + } - struct Call { - uint64_t location; + inline std::vector BinaryFieldOp::LessThan::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - friend bool operator==(const Call &, const Call &); - std::vector bincodeSerialize() const; - static Call bincodeDeserialize(std::vector); - }; + inline BinaryFieldOp::LessThan BinaryFieldOp::LessThan::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } - struct Const { - Program::MemoryAddress destination; - uint32_t bit_size; - std::string value; +} // end of namespace Program - friend bool operator==(const Const &, const Const &); - std::vector bincodeSerialize() const; - static Const bincodeDeserialize(std::vector); - }; +template <> +template +void serde::Serializable::serialize(const Program::BinaryFieldOp::LessThan &obj, Serializer &serializer) { +} - struct Return { - friend bool operator==(const Return &, const Return &); - std::vector bincodeSerialize() const; - static Return bincodeDeserialize(std::vector); - }; +template <> +template +Program::BinaryFieldOp::LessThan serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryFieldOp::LessThan obj; + return obj; +} - struct ForeignCall { - std::string function; - std::vector destinations; - std::vector destination_value_types; - std::vector inputs; - std::vector input_value_types; +namespace Program { - friend bool operator==(const ForeignCall &, const ForeignCall &); - std::vector bincodeSerialize() const; - static ForeignCall bincodeDeserialize(std::vector); - }; + inline bool operator==(const BinaryFieldOp::LessThanEquals &lhs, const BinaryFieldOp::LessThanEquals &rhs) { + return true; + } - struct Mov { - Program::MemoryAddress destination; - Program::MemoryAddress source; + inline std::vector BinaryFieldOp::LessThanEquals::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - friend bool operator==(const Mov &, const Mov &); - std::vector bincodeSerialize() const; - static Mov bincodeDeserialize(std::vector); - }; + inline BinaryFieldOp::LessThanEquals BinaryFieldOp::LessThanEquals::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } - struct ConditionalMov { - Program::MemoryAddress destination; - Program::MemoryAddress source_a; - Program::MemoryAddress source_b; - Program::MemoryAddress condition; +} // end of namespace Program - friend bool operator==(const ConditionalMov &, const ConditionalMov &); - std::vector bincodeSerialize() const; - static ConditionalMov bincodeDeserialize(std::vector); - }; +template <> +template +void serde::Serializable::serialize(const Program::BinaryFieldOp::LessThanEquals &obj, Serializer &serializer) { +} - struct Load { - Program::MemoryAddress destination; - Program::MemoryAddress source_pointer; +template <> +template +Program::BinaryFieldOp::LessThanEquals serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryFieldOp::LessThanEquals obj; + return obj; +} - friend bool operator==(const Load &, const Load &); - std::vector bincodeSerialize() const; - static Load bincodeDeserialize(std::vector); - }; +namespace Program { - struct Store { - Program::MemoryAddress destination_pointer; - Program::MemoryAddress source; + inline bool operator==(const BinaryIntOp &lhs, const BinaryIntOp &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } - friend bool operator==(const Store &, const Store &); - std::vector bincodeSerialize() const; - static Store bincodeDeserialize(std::vector); - }; + inline std::vector BinaryIntOp::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - struct BlackBox { - Program::BlackBoxOp value; + inline BinaryIntOp BinaryIntOp::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } - friend bool operator==(const BlackBox &, const BlackBox &); - std::vector bincodeSerialize() const; - static BlackBox bincodeDeserialize(std::vector); - }; +} // end of namespace Program - struct Trap { - friend bool operator==(const Trap &, const Trap &); - std::vector bincodeSerialize() const; - static Trap bincodeDeserialize(std::vector); - }; +template <> +template +void serde::Serializable::serialize(const Program::BinaryIntOp &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.value, serializer); + serializer.decrease_container_depth(); +} - struct Stop { - uint64_t return_data_offset; - uint64_t return_data_size; +template <> +template +Program::BinaryIntOp serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::BinaryIntOp obj; + obj.value = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; +} - friend bool operator==(const Stop &, const Stop &); - std::vector bincodeSerialize() const; - static Stop bincodeDeserialize(std::vector); - }; +namespace Program { - std::variant - value; + inline bool operator==(const BinaryIntOp::Add &lhs, const BinaryIntOp::Add &rhs) { + return true; + } - friend bool operator==(const BrilligOpcode &, const BrilligOpcode &); - std::vector bincodeSerialize() const; - static BrilligOpcode bincodeDeserialize(std::vector); - }; + inline std::vector BinaryIntOp::Add::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - struct BrilligOutputs { + inline BinaryIntOp::Add BinaryIntOp::Add::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } - struct Simple { - Program::Witness value; +} // end of namespace Program - friend bool operator==(const Simple &, const Simple &); - std::vector bincodeSerialize() const; - static Simple bincodeDeserialize(std::vector); - }; +template <> +template +void serde::Serializable::serialize(const Program::BinaryIntOp::Add &obj, Serializer &serializer) { +} - struct Array { - std::vector value; +template <> +template +Program::BinaryIntOp::Add serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryIntOp::Add obj; + return obj; +} - friend bool operator==(const Array &, const Array &); - std::vector bincodeSerialize() const; - static Array bincodeDeserialize(std::vector); - }; +namespace Program { - std::variant value; + inline bool operator==(const BinaryIntOp::Sub &lhs, const BinaryIntOp::Sub &rhs) { + return true; + } - friend bool operator==(const BrilligOutputs &, const BrilligOutputs &); - std::vector bincodeSerialize() const; - static BrilligOutputs bincodeDeserialize(std::vector); - }; + inline std::vector BinaryIntOp::Sub::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - struct Brillig { - std::vector inputs; - std::vector outputs; - std::vector bytecode; - std::optional predicate; + inline BinaryIntOp::Sub BinaryIntOp::Sub::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } - friend bool operator==(const Brillig &, const Brillig &); - std::vector bincodeSerialize() const; - static Brillig bincodeDeserialize(std::vector); - }; +} // end of namespace Program - struct Directive { +template <> +template +void serde::Serializable::serialize(const Program::BinaryIntOp::Sub &obj, Serializer &serializer) { +} - struct ToLeRadix { - Program::Expression a; - std::vector b; - uint32_t radix; +template <> +template +Program::BinaryIntOp::Sub serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryIntOp::Sub obj; + return obj; +} - friend bool operator==(const ToLeRadix &, const ToLeRadix &); - std::vector bincodeSerialize() const; - static ToLeRadix bincodeDeserialize(std::vector); - }; +namespace Program { - std::variant value; + inline bool operator==(const BinaryIntOp::Mul &lhs, const BinaryIntOp::Mul &rhs) { + return true; + } - friend bool operator==(const Directive &, const Directive &); - std::vector bincodeSerialize() const; - static Directive bincodeDeserialize(std::vector); - }; + inline std::vector BinaryIntOp::Mul::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - struct MemOp { - Program::Expression operation; - Program::Expression index; - Program::Expression value; + inline BinaryIntOp::Mul BinaryIntOp::Mul::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } - friend bool operator==(const MemOp &, const MemOp &); - std::vector bincodeSerialize() const; - static MemOp bincodeDeserialize(std::vector); - }; +} // end of namespace Program - struct Opcode { +template <> +template +void serde::Serializable::serialize(const Program::BinaryIntOp::Mul &obj, Serializer &serializer) { +} - struct AssertZero { - Program::Expression value; +template <> +template +Program::BinaryIntOp::Mul serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryIntOp::Mul obj; + return obj; +} - friend bool operator==(const AssertZero &, const AssertZero &); - std::vector bincodeSerialize() const; - static AssertZero bincodeDeserialize(std::vector); - }; +namespace Program { - struct BlackBoxFuncCall { - Program::BlackBoxFuncCall value; + inline bool operator==(const BinaryIntOp::Div &lhs, const BinaryIntOp::Div &rhs) { + return true; + } - friend bool operator==(const BlackBoxFuncCall &, - const BlackBoxFuncCall &); - std::vector bincodeSerialize() const; - static BlackBoxFuncCall bincodeDeserialize(std::vector); - }; + inline std::vector BinaryIntOp::Div::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - struct Directive { - Program::Directive value; + inline BinaryIntOp::Div BinaryIntOp::Div::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } - friend bool operator==(const Directive &, const Directive &); - std::vector bincodeSerialize() const; - static Directive bincodeDeserialize(std::vector); - }; +} // end of namespace Program - struct Brillig { - Program::Brillig value; +template <> +template +void serde::Serializable::serialize(const Program::BinaryIntOp::Div &obj, Serializer &serializer) { +} - friend bool operator==(const Brillig &, const Brillig &); - std::vector bincodeSerialize() const; - static Brillig bincodeDeserialize(std::vector); - }; +template <> +template +Program::BinaryIntOp::Div serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryIntOp::Div obj; + return obj; +} - struct MemoryOp { - Program::BlockId block_id; - Program::MemOp op; - std::optional predicate; +namespace Program { - friend bool operator==(const MemoryOp &, const MemoryOp &); - std::vector bincodeSerialize() const; - static MemoryOp bincodeDeserialize(std::vector); - }; + inline bool operator==(const BinaryIntOp::Equals &lhs, const BinaryIntOp::Equals &rhs) { + return true; + } - struct MemoryInit { - Program::BlockId block_id; - std::vector init; + inline std::vector BinaryIntOp::Equals::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - friend bool operator==(const MemoryInit &, const MemoryInit &); - std::vector bincodeSerialize() const; - static MemoryInit bincodeDeserialize(std::vector); - }; + inline BinaryIntOp::Equals BinaryIntOp::Equals::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } - struct Call { - uint32_t id; - std::vector inputs; - std::vector outputs; +} // end of namespace Program - friend bool operator==(const Call &, const Call &); - std::vector bincodeSerialize() const; - static Call bincodeDeserialize(std::vector); - }; +template <> +template +void serde::Serializable::serialize(const Program::BinaryIntOp::Equals &obj, Serializer &serializer) { +} - std::variant - value; +template <> +template +Program::BinaryIntOp::Equals serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryIntOp::Equals obj; + return obj; +} - friend bool operator==(const Opcode &, const Opcode &); - std::vector bincodeSerialize() const; - static Opcode bincodeDeserialize(std::vector); - }; +namespace Program { - struct ExpressionWidth { + inline bool operator==(const BinaryIntOp::LessThan &lhs, const BinaryIntOp::LessThan &rhs) { + return true; + } - struct Unbounded { - friend bool operator==(const Unbounded &, const Unbounded &); - std::vector bincodeSerialize() const; - static Unbounded bincodeDeserialize(std::vector); - }; + inline std::vector BinaryIntOp::LessThan::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - struct Bounded { - uint64_t width; + inline BinaryIntOp::LessThan BinaryIntOp::LessThan::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } - friend bool operator==(const Bounded &, const Bounded &); - std::vector bincodeSerialize() const; - static Bounded bincodeDeserialize(std::vector); - }; +} // end of namespace Program - std::variant value; +template <> +template +void serde::Serializable::serialize(const Program::BinaryIntOp::LessThan &obj, Serializer &serializer) { +} - friend bool operator==(const ExpressionWidth &, const ExpressionWidth &); - std::vector bincodeSerialize() const; - static ExpressionWidth bincodeDeserialize(std::vector); - }; +template <> +template +Program::BinaryIntOp::LessThan serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryIntOp::LessThan obj; + return obj; +} - struct OpcodeLocation { +namespace Program { - struct Acir { - uint64_t value; + inline bool operator==(const BinaryIntOp::LessThanEquals &lhs, const BinaryIntOp::LessThanEquals &rhs) { + return true; + } - friend bool operator==(const Acir &, const Acir &); - std::vector bincodeSerialize() const; - static Acir bincodeDeserialize(std::vector); - }; + inline std::vector BinaryIntOp::LessThanEquals::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - struct Brillig { - uint64_t acir_index; - uint64_t brillig_index; + inline BinaryIntOp::LessThanEquals BinaryIntOp::LessThanEquals::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } - friend bool operator==(const Brillig &, const Brillig &); - std::vector bincodeSerialize() const; - static Brillig bincodeDeserialize(std::vector); - }; +} // end of namespace Program - std::variant value; - - friend bool operator==(const OpcodeLocation &, const OpcodeLocation &); - std::vector bincodeSerialize() const; - static OpcodeLocation bincodeDeserialize(std::vector); - }; - - struct PublicInputs { - std::vector value; - - friend bool operator==(const PublicInputs &, const PublicInputs &); - std::vector bincodeSerialize() const; - static PublicInputs bincodeDeserialize(std::vector); - }; - - struct Circuit { - uint32_t current_witness_index; - std::vector opcodes; - Program::ExpressionWidth expression_width; - std::vector private_parameters; - Program::PublicInputs public_parameters; - Program::PublicInputs return_values; - std::vector> - assert_messages; - bool recursive; - - friend bool operator==(const Circuit &, const Circuit &); - std::vector bincodeSerialize() const; - static Circuit bincodeDeserialize(std::vector); - }; - - struct Program { - std::vector functions; - - friend bool operator==(const Program &, const Program &); - std::vector bincodeSerialize() const; - static Program bincodeDeserialize(std::vector); - }; - - } // end of namespace Program - - namespace Program { - - inline bool operator==(const BinaryFieldOp &lhs, const BinaryFieldOp &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; - } - - inline std::vector BinaryFieldOp::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } - - inline BinaryFieldOp - BinaryFieldOp::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BinaryFieldOp &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.value, serializer); - serializer.decrease_container_depth(); - } +template <> +template +void serde::Serializable::serialize(const Program::BinaryIntOp::LessThanEquals &obj, Serializer &serializer) { +} - template <> - template - Program::BinaryFieldOp - serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::BinaryFieldOp obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); +template <> +template +Program::BinaryIntOp::LessThanEquals serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryIntOp::LessThanEquals obj; return obj; - } +} - namespace Program { +namespace Program { - inline bool operator==(const BinaryFieldOp::Add &lhs, - const BinaryFieldOp::Add &rhs) { - return true; - } + inline bool operator==(const BinaryIntOp::And &lhs, const BinaryIntOp::And &rhs) { + return true; + } - inline std::vector BinaryFieldOp::Add::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } + inline std::vector BinaryIntOp::And::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - inline BinaryFieldOp::Add - BinaryFieldOp::Add::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); + inline BinaryIntOp::And BinaryIntOp::And::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; } - return value; - } - } // end of namespace Program +} // end of namespace Program - template <> - template - void serde::Serializable::serialize( - const Program::BinaryFieldOp::Add &obj, Serializer &serializer) {} +template <> +template +void serde::Serializable::serialize(const Program::BinaryIntOp::And &obj, Serializer &serializer) { +} - template <> - template - Program::BinaryFieldOp::Add - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryFieldOp::Add obj; +template <> +template +Program::BinaryIntOp::And serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryIntOp::And obj; return obj; - } +} - namespace Program { +namespace Program { - inline bool operator==(const BinaryFieldOp::Sub &lhs, - const BinaryFieldOp::Sub &rhs) { - return true; - } + inline bool operator==(const BinaryIntOp::Or &lhs, const BinaryIntOp::Or &rhs) { + return true; + } - inline std::vector BinaryFieldOp::Sub::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } + inline std::vector BinaryIntOp::Or::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - inline BinaryFieldOp::Sub - BinaryFieldOp::Sub::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); + inline BinaryIntOp::Or BinaryIntOp::Or::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; } - return value; - } - } // end of namespace Program +} // end of namespace Program - template <> - template - void serde::Serializable::serialize( - const Program::BinaryFieldOp::Sub &obj, Serializer &serializer) {} +template <> +template +void serde::Serializable::serialize(const Program::BinaryIntOp::Or &obj, Serializer &serializer) { +} - template <> - template - Program::BinaryFieldOp::Sub - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryFieldOp::Sub obj; +template <> +template +Program::BinaryIntOp::Or serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryIntOp::Or obj; return obj; - } +} - namespace Program { +namespace Program { - inline bool operator==(const BinaryFieldOp::Mul &lhs, - const BinaryFieldOp::Mul &rhs) { - return true; - } + inline bool operator==(const BinaryIntOp::Xor &lhs, const BinaryIntOp::Xor &rhs) { + return true; + } - inline std::vector BinaryFieldOp::Mul::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } + inline std::vector BinaryIntOp::Xor::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - inline BinaryFieldOp::Mul - BinaryFieldOp::Mul::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); + inline BinaryIntOp::Xor BinaryIntOp::Xor::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; } - return value; - } - } // end of namespace Program +} // end of namespace Program - template <> - template - void serde::Serializable::serialize( - const Program::BinaryFieldOp::Mul &obj, Serializer &serializer) {} +template <> +template +void serde::Serializable::serialize(const Program::BinaryIntOp::Xor &obj, Serializer &serializer) { +} - template <> - template - Program::BinaryFieldOp::Mul - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryFieldOp::Mul obj; +template <> +template +Program::BinaryIntOp::Xor serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryIntOp::Xor obj; return obj; - } +} - namespace Program { +namespace Program { - inline bool operator==(const BinaryFieldOp::Div &lhs, - const BinaryFieldOp::Div &rhs) { - return true; - } + inline bool operator==(const BinaryIntOp::Shl &lhs, const BinaryIntOp::Shl &rhs) { + return true; + } - inline std::vector BinaryFieldOp::Div::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } + inline std::vector BinaryIntOp::Shl::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - inline BinaryFieldOp::Div - BinaryFieldOp::Div::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); + inline BinaryIntOp::Shl BinaryIntOp::Shl::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; } - return value; - } - } // end of namespace Program +} // end of namespace Program - template <> - template - void serde::Serializable::serialize( - const Program::BinaryFieldOp::Div &obj, Serializer &serializer) {} +template <> +template +void serde::Serializable::serialize(const Program::BinaryIntOp::Shl &obj, Serializer &serializer) { +} - template <> - template - Program::BinaryFieldOp::Div - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryFieldOp::Div obj; +template <> +template +Program::BinaryIntOp::Shl serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryIntOp::Shl obj; return obj; - } - - namespace Program { - - inline bool operator==(const BinaryFieldOp::IntegerDiv &lhs, - const BinaryFieldOp::IntegerDiv &rhs) { - return true; - } - - inline std::vector - BinaryFieldOp::IntegerDiv::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); - } - - inline BinaryFieldOp::IntegerDiv - BinaryFieldOp::IntegerDiv::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BinaryFieldOp::IntegerDiv &obj, Serializer &serializer) {} - - template <> - template - Program::BinaryFieldOp::IntegerDiv - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryFieldOp::IntegerDiv obj; - return obj; - } +} - namespace Program { +namespace Program { - inline bool operator==(const BinaryFieldOp::Equals &lhs, - const BinaryFieldOp::Equals &rhs) { - return true; - } + inline bool operator==(const BinaryIntOp::Shr &lhs, const BinaryIntOp::Shr &rhs) { + return true; + } - inline std::vector BinaryFieldOp::Equals::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } + inline std::vector BinaryIntOp::Shr::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - inline BinaryFieldOp::Equals - BinaryFieldOp::Equals::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); + inline BinaryIntOp::Shr BinaryIntOp::Shr::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; } - return value; - } - } // end of namespace Program +} // end of namespace Program - template <> - template - void serde::Serializable::serialize( - const Program::BinaryFieldOp::Equals &obj, Serializer &serializer) {} +template <> +template +void serde::Serializable::serialize(const Program::BinaryIntOp::Shr &obj, Serializer &serializer) { +} - template <> - template - Program::BinaryFieldOp::Equals - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryFieldOp::Equals obj; - return obj; - } - - namespace Program { - - inline bool operator==(const BinaryFieldOp::LessThan &lhs, - const BinaryFieldOp::LessThan &rhs) { - return true; - } - - inline std::vector - BinaryFieldOp::LessThan::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } - - inline BinaryFieldOp::LessThan - BinaryFieldOp::LessThan::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BinaryFieldOp::LessThan &obj, Serializer &serializer) {} - - template <> - template - Program::BinaryFieldOp::LessThan - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryFieldOp::LessThan obj; - return obj; - } - - namespace Program { - - inline bool operator==(const BinaryFieldOp::LessThanEquals &lhs, - const BinaryFieldOp::LessThanEquals &rhs) { - return true; - } - - inline std::vector - BinaryFieldOp::LessThanEquals::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); - } - - inline BinaryFieldOp::LessThanEquals - BinaryFieldOp::LessThanEquals::bincodeDeserialize( - std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BinaryFieldOp::LessThanEquals &obj, - Serializer &serializer) {} - - template <> - template - Program::BinaryFieldOp::LessThanEquals - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryFieldOp::LessThanEquals obj; +template <> +template +Program::BinaryIntOp::Shr serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryIntOp::Shr obj; return obj; - } +} - namespace Program { +namespace Program { - inline bool operator==(const BinaryIntOp &lhs, const BinaryIntOp &rhs) { - if (!(lhs.value == rhs.value)) { - return false; + inline bool operator==(const BlackBoxFuncCall &lhs, const BlackBoxFuncCall &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; } - return true; - } - inline std::vector BinaryIntOp::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } + inline std::vector BlackBoxFuncCall::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - inline BinaryIntOp - BinaryIntOp::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); + inline BlackBoxFuncCall BlackBoxFuncCall::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; } - return value; - } - } // end of namespace Program +} // end of namespace Program - template <> - template - void serde::Serializable::serialize( - const Program::BinaryIntOp &obj, Serializer &serializer) { +template <> +template +void serde::Serializable::serialize(const Program::BlackBoxFuncCall &obj, Serializer &serializer) { serializer.increase_container_depth(); serde::Serializable::serialize(obj.value, serializer); serializer.decrease_container_depth(); - } +} - template <> - template - Program::BinaryIntOp serde::Deserializable::deserialize( - Deserializer &deserializer) { +template <> +template +Program::BlackBoxFuncCall serde::Deserializable::deserialize(Deserializer &deserializer) { deserializer.increase_container_depth(); - Program::BinaryIntOp obj; - obj.value = - serde::Deserializable::deserialize(deserializer); + Program::BlackBoxFuncCall obj; + obj.value = serde::Deserializable::deserialize(deserializer); deserializer.decrease_container_depth(); return obj; - } +} - namespace Program { +namespace Program { - inline bool operator==(const BinaryIntOp::Add &lhs, - const BinaryIntOp::Add &rhs) { - return true; - } + inline bool operator==(const BlackBoxFuncCall::AND &lhs, const BlackBoxFuncCall::AND &rhs) { + if (!(lhs.lhs == rhs.lhs)) { return false; } + if (!(lhs.rhs == rhs.rhs)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } - inline std::vector BinaryIntOp::Add::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } + inline std::vector BlackBoxFuncCall::AND::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - inline BinaryIntOp::Add - BinaryIntOp::Add::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); + inline BlackBoxFuncCall::AND BlackBoxFuncCall::AND::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; } - return value; - } - } // end of namespace Program +} // end of namespace Program - template <> - template - void serde::Serializable::serialize( - const Program::BinaryIntOp::Add &obj, Serializer &serializer) {} +template <> +template +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::AND &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.lhs, serializer); + serde::Serializable::serialize(obj.rhs, serializer); + serde::Serializable::serialize(obj.output, serializer); +} - template <> - template - Program::BinaryIntOp::Add - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryIntOp::Add obj; +template <> +template +Program::BlackBoxFuncCall::AND serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::AND obj; + obj.lhs = serde::Deserializable::deserialize(deserializer); + obj.rhs = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); return obj; - } +} - namespace Program { +namespace Program { - inline bool operator==(const BinaryIntOp::Sub &lhs, - const BinaryIntOp::Sub &rhs) { - return true; - } + inline bool operator==(const BlackBoxFuncCall::XOR &lhs, const BlackBoxFuncCall::XOR &rhs) { + if (!(lhs.lhs == rhs.lhs)) { return false; } + if (!(lhs.rhs == rhs.rhs)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } - inline std::vector BinaryIntOp::Sub::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } + inline std::vector BlackBoxFuncCall::XOR::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - inline BinaryIntOp::Sub - BinaryIntOp::Sub::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); + inline BlackBoxFuncCall::XOR BlackBoxFuncCall::XOR::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; } - return value; - } - } // end of namespace Program +} // end of namespace Program - template <> - template - void serde::Serializable::serialize( - const Program::BinaryIntOp::Sub &obj, Serializer &serializer) {} +template <> +template +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::XOR &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.lhs, serializer); + serde::Serializable::serialize(obj.rhs, serializer); + serde::Serializable::serialize(obj.output, serializer); +} - template <> - template - Program::BinaryIntOp::Sub - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryIntOp::Sub obj; +template <> +template +Program::BlackBoxFuncCall::XOR serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::XOR obj; + obj.lhs = serde::Deserializable::deserialize(deserializer); + obj.rhs = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); return obj; - } +} - namespace Program { +namespace Program { - inline bool operator==(const BinaryIntOp::Mul &lhs, - const BinaryIntOp::Mul &rhs) { - return true; - } + inline bool operator==(const BlackBoxFuncCall::RANGE &lhs, const BlackBoxFuncCall::RANGE &rhs) { + if (!(lhs.input == rhs.input)) { return false; } + return true; + } - inline std::vector BinaryIntOp::Mul::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } + inline std::vector BlackBoxFuncCall::RANGE::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - inline BinaryIntOp::Mul - BinaryIntOp::Mul::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); + inline BlackBoxFuncCall::RANGE BlackBoxFuncCall::RANGE::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; } - return value; - } - } // end of namespace Program +} // end of namespace Program - template <> - template - void serde::Serializable::serialize( - const Program::BinaryIntOp::Mul &obj, Serializer &serializer) {} +template <> +template +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::RANGE &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.input, serializer); +} - template <> - template - Program::BinaryIntOp::Mul - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryIntOp::Mul obj; +template <> +template +Program::BlackBoxFuncCall::RANGE serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::RANGE obj; + obj.input = serde::Deserializable::deserialize(deserializer); return obj; - } +} - namespace Program { +namespace Program { - inline bool operator==(const BinaryIntOp::Div &lhs, - const BinaryIntOp::Div &rhs) { - return true; - } + inline bool operator==(const BlackBoxFuncCall::Blake2s &lhs, const BlackBoxFuncCall::Blake2s &rhs) { + if (!(lhs.inputs == rhs.inputs)) { return false; } + if (!(lhs.outputs == rhs.outputs)) { return false; } + return true; + } - inline std::vector BinaryIntOp::Div::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } + inline std::vector BlackBoxFuncCall::Blake2s::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - inline BinaryIntOp::Div - BinaryIntOp::Div::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); + inline BlackBoxFuncCall::Blake2s BlackBoxFuncCall::Blake2s::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; } - return value; - } - } // end of namespace Program +} // end of namespace Program - template <> - template - void serde::Serializable::serialize( - const Program::BinaryIntOp::Div &obj, Serializer &serializer) {} +template <> +template +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::Blake2s &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.inputs, serializer); + serde::Serializable::serialize(obj.outputs, serializer); +} - template <> - template - Program::BinaryIntOp::Div - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryIntOp::Div obj; +template <> +template +Program::BlackBoxFuncCall::Blake2s serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::Blake2s obj; + obj.inputs = serde::Deserializable::deserialize(deserializer); + obj.outputs = serde::Deserializable::deserialize(deserializer); return obj; - } +} - namespace Program { +namespace Program { - inline bool operator==(const BinaryIntOp::Equals &lhs, - const BinaryIntOp::Equals &rhs) { - return true; - } + inline bool operator==(const BlackBoxFuncCall::Blake3 &lhs, const BlackBoxFuncCall::Blake3 &rhs) { + if (!(lhs.inputs == rhs.inputs)) { return false; } + if (!(lhs.outputs == rhs.outputs)) { return false; } + return true; + } - inline std::vector BinaryIntOp::Equals::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } + inline std::vector BlackBoxFuncCall::Blake3::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - inline BinaryIntOp::Equals - BinaryIntOp::Equals::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); + inline BlackBoxFuncCall::Blake3 BlackBoxFuncCall::Blake3::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; } - return value; - } - } // end of namespace Program +} // end of namespace Program - template <> - template - void serde::Serializable::serialize( - const Program::BinaryIntOp::Equals &obj, Serializer &serializer) {} +template <> +template +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::Blake3 &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.inputs, serializer); + serde::Serializable::serialize(obj.outputs, serializer); +} - template <> - template - Program::BinaryIntOp::Equals - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryIntOp::Equals obj; +template <> +template +Program::BlackBoxFuncCall::Blake3 serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::Blake3 obj; + obj.inputs = serde::Deserializable::deserialize(deserializer); + obj.outputs = serde::Deserializable::deserialize(deserializer); + return obj; +} + +namespace Program { + + inline bool operator==(const BlackBoxFuncCall::SchnorrVerify &lhs, const BlackBoxFuncCall::SchnorrVerify &rhs) { + if (!(lhs.public_key_x == rhs.public_key_x)) { return false; } + if (!(lhs.public_key_y == rhs.public_key_y)) { return false; } + if (!(lhs.signature == rhs.signature)) { return false; } + if (!(lhs.message == rhs.message)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } + + inline std::vector BlackBoxFuncCall::SchnorrVerify::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BlackBoxFuncCall::SchnorrVerify BlackBoxFuncCall::SchnorrVerify::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::SchnorrVerify &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.public_key_x, serializer); + serde::Serializable::serialize(obj.public_key_y, serializer); + serde::Serializable::serialize(obj.signature, serializer); + serde::Serializable::serialize(obj.message, serializer); + serde::Serializable::serialize(obj.output, serializer); +} + +template <> +template +Program::BlackBoxFuncCall::SchnorrVerify serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::SchnorrVerify obj; + obj.public_key_x = serde::Deserializable::deserialize(deserializer); + obj.public_key_y = serde::Deserializable::deserialize(deserializer); + obj.signature = serde::Deserializable::deserialize(deserializer); + obj.message = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); return obj; - } +} - namespace Program { +namespace Program { - inline bool operator==(const BinaryIntOp::LessThan &lhs, - const BinaryIntOp::LessThan &rhs) { - return true; - } + inline bool operator==(const BlackBoxFuncCall::PedersenCommitment &lhs, const BlackBoxFuncCall::PedersenCommitment &rhs) { + if (!(lhs.inputs == rhs.inputs)) { return false; } + if (!(lhs.domain_separator == rhs.domain_separator)) { return false; } + if (!(lhs.outputs == rhs.outputs)) { return false; } + return true; + } - inline std::vector BinaryIntOp::LessThan::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } + inline std::vector BlackBoxFuncCall::PedersenCommitment::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - inline BinaryIntOp::LessThan - BinaryIntOp::LessThan::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); + inline BlackBoxFuncCall::PedersenCommitment BlackBoxFuncCall::PedersenCommitment::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; } - return value; - } - } // end of namespace Program +} // end of namespace Program - template <> - template - void serde::Serializable::serialize( - const Program::BinaryIntOp::LessThan &obj, Serializer &serializer) {} +template <> +template +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::PedersenCommitment &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.inputs, serializer); + serde::Serializable::serialize(obj.domain_separator, serializer); + serde::Serializable::serialize(obj.outputs, serializer); +} - template <> - template - Program::BinaryIntOp::LessThan - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryIntOp::LessThan obj; - return obj; - } - - namespace Program { - - inline bool operator==(const BinaryIntOp::LessThanEquals &lhs, - const BinaryIntOp::LessThanEquals &rhs) { - return true; - } - - inline std::vector - BinaryIntOp::LessThanEquals::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); - } - - inline BinaryIntOp::LessThanEquals - BinaryIntOp::LessThanEquals::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BinaryIntOp::LessThanEquals &obj, Serializer &serializer) { - } - - template <> - template - Program::BinaryIntOp::LessThanEquals - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryIntOp::LessThanEquals obj; +template <> +template +Program::BlackBoxFuncCall::PedersenCommitment serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::PedersenCommitment obj; + obj.inputs = serde::Deserializable::deserialize(deserializer); + obj.domain_separator = serde::Deserializable::deserialize(deserializer); + obj.outputs = serde::Deserializable::deserialize(deserializer); return obj; - } +} - namespace Program { +namespace Program { - inline bool operator==(const BinaryIntOp::And &lhs, - const BinaryIntOp::And &rhs) { - return true; - } + inline bool operator==(const BlackBoxFuncCall::PedersenHash &lhs, const BlackBoxFuncCall::PedersenHash &rhs) { + if (!(lhs.inputs == rhs.inputs)) { return false; } + if (!(lhs.domain_separator == rhs.domain_separator)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } - inline std::vector BinaryIntOp::And::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } + inline std::vector BlackBoxFuncCall::PedersenHash::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - inline BinaryIntOp::And - BinaryIntOp::And::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); + inline BlackBoxFuncCall::PedersenHash BlackBoxFuncCall::PedersenHash::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; } - return value; - } - } // end of namespace Program +} // end of namespace Program - template <> - template - void serde::Serializable::serialize( - const Program::BinaryIntOp::And &obj, Serializer &serializer) {} +template <> +template +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::PedersenHash &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.inputs, serializer); + serde::Serializable::serialize(obj.domain_separator, serializer); + serde::Serializable::serialize(obj.output, serializer); +} - template <> - template - Program::BinaryIntOp::And - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryIntOp::And obj; +template <> +template +Program::BlackBoxFuncCall::PedersenHash serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::PedersenHash obj; + obj.inputs = serde::Deserializable::deserialize(deserializer); + obj.domain_separator = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; +} + +namespace Program { + + inline bool operator==(const BlackBoxFuncCall::EcdsaSecp256k1 &lhs, const BlackBoxFuncCall::EcdsaSecp256k1 &rhs) { + if (!(lhs.public_key_x == rhs.public_key_x)) { return false; } + if (!(lhs.public_key_y == rhs.public_key_y)) { return false; } + if (!(lhs.signature == rhs.signature)) { return false; } + if (!(lhs.hashed_message == rhs.hashed_message)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } + + inline std::vector BlackBoxFuncCall::EcdsaSecp256k1::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BlackBoxFuncCall::EcdsaSecp256k1 BlackBoxFuncCall::EcdsaSecp256k1::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::EcdsaSecp256k1 &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.public_key_x, serializer); + serde::Serializable::serialize(obj.public_key_y, serializer); + serde::Serializable::serialize(obj.signature, serializer); + serde::Serializable::serialize(obj.hashed_message, serializer); + serde::Serializable::serialize(obj.output, serializer); +} + +template <> +template +Program::BlackBoxFuncCall::EcdsaSecp256k1 serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::EcdsaSecp256k1 obj; + obj.public_key_x = serde::Deserializable::deserialize(deserializer); + obj.public_key_y = serde::Deserializable::deserialize(deserializer); + obj.signature = serde::Deserializable::deserialize(deserializer); + obj.hashed_message = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; +} + +namespace Program { + + inline bool operator==(const BlackBoxFuncCall::EcdsaSecp256r1 &lhs, const BlackBoxFuncCall::EcdsaSecp256r1 &rhs) { + if (!(lhs.public_key_x == rhs.public_key_x)) { return false; } + if (!(lhs.public_key_y == rhs.public_key_y)) { return false; } + if (!(lhs.signature == rhs.signature)) { return false; } + if (!(lhs.hashed_message == rhs.hashed_message)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } + + inline std::vector BlackBoxFuncCall::EcdsaSecp256r1::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BlackBoxFuncCall::EcdsaSecp256r1 BlackBoxFuncCall::EcdsaSecp256r1::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::EcdsaSecp256r1 &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.public_key_x, serializer); + serde::Serializable::serialize(obj.public_key_y, serializer); + serde::Serializable::serialize(obj.signature, serializer); + serde::Serializable::serialize(obj.hashed_message, serializer); + serde::Serializable::serialize(obj.output, serializer); +} + +template <> +template +Program::BlackBoxFuncCall::EcdsaSecp256r1 serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::EcdsaSecp256r1 obj; + obj.public_key_x = serde::Deserializable::deserialize(deserializer); + obj.public_key_y = serde::Deserializable::deserialize(deserializer); + obj.signature = serde::Deserializable::deserialize(deserializer); + obj.hashed_message = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); return obj; - } +} - namespace Program { +namespace Program { - inline bool operator==(const BinaryIntOp::Or &lhs, - const BinaryIntOp::Or &rhs) { - return true; - } + inline bool operator==(const BlackBoxFuncCall::FixedBaseScalarMul &lhs, const BlackBoxFuncCall::FixedBaseScalarMul &rhs) { + if (!(lhs.low == rhs.low)) { return false; } + if (!(lhs.high == rhs.high)) { return false; } + if (!(lhs.outputs == rhs.outputs)) { return false; } + return true; + } - inline std::vector BinaryIntOp::Or::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } + inline std::vector BlackBoxFuncCall::FixedBaseScalarMul::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - inline BinaryIntOp::Or - BinaryIntOp::Or::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); + inline BlackBoxFuncCall::FixedBaseScalarMul BlackBoxFuncCall::FixedBaseScalarMul::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; } - return value; - } - } // end of namespace Program +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::FixedBaseScalarMul &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.low, serializer); + serde::Serializable::serialize(obj.high, serializer); + serde::Serializable::serialize(obj.outputs, serializer); +} - template <> - template - void serde::Serializable::serialize( - const Program::BinaryIntOp::Or &obj, Serializer &serializer) {} +template <> +template +Program::BlackBoxFuncCall::FixedBaseScalarMul serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::FixedBaseScalarMul obj; + obj.low = serde::Deserializable::deserialize(deserializer); + obj.high = serde::Deserializable::deserialize(deserializer); + obj.outputs = serde::Deserializable::deserialize(deserializer); + return obj; +} - template <> - template - Program::BinaryIntOp::Or - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryIntOp::Or obj; +namespace Program { + + inline bool operator==(const BlackBoxFuncCall::EmbeddedCurveAdd &lhs, const BlackBoxFuncCall::EmbeddedCurveAdd &rhs) { + if (!(lhs.input1_x == rhs.input1_x)) { return false; } + if (!(lhs.input1_y == rhs.input1_y)) { return false; } + if (!(lhs.input2_x == rhs.input2_x)) { return false; } + if (!(lhs.input2_y == rhs.input2_y)) { return false; } + if (!(lhs.outputs == rhs.outputs)) { return false; } + return true; + } + + inline std::vector BlackBoxFuncCall::EmbeddedCurveAdd::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BlackBoxFuncCall::EmbeddedCurveAdd BlackBoxFuncCall::EmbeddedCurveAdd::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::EmbeddedCurveAdd &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.input1_x, serializer); + serde::Serializable::serialize(obj.input1_y, serializer); + serde::Serializable::serialize(obj.input2_x, serializer); + serde::Serializable::serialize(obj.input2_y, serializer); + serde::Serializable::serialize(obj.outputs, serializer); +} + +template <> +template +Program::BlackBoxFuncCall::EmbeddedCurveAdd serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::EmbeddedCurveAdd obj; + obj.input1_x = serde::Deserializable::deserialize(deserializer); + obj.input1_y = serde::Deserializable::deserialize(deserializer); + obj.input2_x = serde::Deserializable::deserialize(deserializer); + obj.input2_y = serde::Deserializable::deserialize(deserializer); + obj.outputs = serde::Deserializable::deserialize(deserializer); return obj; - } +} - namespace Program { +namespace Program { - inline bool operator==(const BinaryIntOp::Xor &lhs, - const BinaryIntOp::Xor &rhs) { - return true; - } + inline bool operator==(const BlackBoxFuncCall::Keccak256 &lhs, const BlackBoxFuncCall::Keccak256 &rhs) { + if (!(lhs.inputs == rhs.inputs)) { return false; } + if (!(lhs.outputs == rhs.outputs)) { return false; } + return true; + } - inline std::vector BinaryIntOp::Xor::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } + inline std::vector BlackBoxFuncCall::Keccak256::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - inline BinaryIntOp::Xor - BinaryIntOp::Xor::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); + inline BlackBoxFuncCall::Keccak256 BlackBoxFuncCall::Keccak256::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; } - return value; - } - } // end of namespace Program +} // end of namespace Program - template <> - template - void serde::Serializable::serialize( - const Program::BinaryIntOp::Xor &obj, Serializer &serializer) {} +template <> +template +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::Keccak256 &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.inputs, serializer); + serde::Serializable::serialize(obj.outputs, serializer); +} - template <> - template - Program::BinaryIntOp::Xor - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryIntOp::Xor obj; +template <> +template +Program::BlackBoxFuncCall::Keccak256 serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::Keccak256 obj; + obj.inputs = serde::Deserializable::deserialize(deserializer); + obj.outputs = serde::Deserializable::deserialize(deserializer); return obj; - } +} - namespace Program { +namespace Program { - inline bool operator==(const BinaryIntOp::Shl &lhs, - const BinaryIntOp::Shl &rhs) { - return true; - } + inline bool operator==(const BlackBoxFuncCall::Keccak256VariableLength &lhs, const BlackBoxFuncCall::Keccak256VariableLength &rhs) { + if (!(lhs.inputs == rhs.inputs)) { return false; } + if (!(lhs.var_message_size == rhs.var_message_size)) { return false; } + if (!(lhs.outputs == rhs.outputs)) { return false; } + return true; + } - inline std::vector BinaryIntOp::Shl::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } + inline std::vector BlackBoxFuncCall::Keccak256VariableLength::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - inline BinaryIntOp::Shl - BinaryIntOp::Shl::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); + inline BlackBoxFuncCall::Keccak256VariableLength BlackBoxFuncCall::Keccak256VariableLength::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; } - return value; - } - } // end of namespace Program +} // end of namespace Program - template <> - template - void serde::Serializable::serialize( - const Program::BinaryIntOp::Shl &obj, Serializer &serializer) {} +template <> +template +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::Keccak256VariableLength &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.inputs, serializer); + serde::Serializable::serialize(obj.var_message_size, serializer); + serde::Serializable::serialize(obj.outputs, serializer); +} - template <> - template - Program::BinaryIntOp::Shl - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryIntOp::Shl obj; +template <> +template +Program::BlackBoxFuncCall::Keccak256VariableLength serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::Keccak256VariableLength obj; + obj.inputs = serde::Deserializable::deserialize(deserializer); + obj.var_message_size = serde::Deserializable::deserialize(deserializer); + obj.outputs = serde::Deserializable::deserialize(deserializer); return obj; - } +} - namespace Program { +namespace Program { - inline bool operator==(const BinaryIntOp::Shr &lhs, - const BinaryIntOp::Shr &rhs) { - return true; - } + inline bool operator==(const BlackBoxFuncCall::Keccakf1600 &lhs, const BlackBoxFuncCall::Keccakf1600 &rhs) { + if (!(lhs.inputs == rhs.inputs)) { return false; } + if (!(lhs.outputs == rhs.outputs)) { return false; } + return true; + } - inline std::vector BinaryIntOp::Shr::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } + inline std::vector BlackBoxFuncCall::Keccakf1600::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - inline BinaryIntOp::Shr - BinaryIntOp::Shr::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); + inline BlackBoxFuncCall::Keccakf1600 BlackBoxFuncCall::Keccakf1600::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; } - return value; - } - } // end of namespace Program +} // end of namespace Program - template <> - template - void serde::Serializable::serialize( - const Program::BinaryIntOp::Shr &obj, Serializer &serializer) {} +template <> +template +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::Keccakf1600 &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.inputs, serializer); + serde::Serializable::serialize(obj.outputs, serializer); +} - template <> - template - Program::BinaryIntOp::Shr - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryIntOp::Shr obj; +template <> +template +Program::BlackBoxFuncCall::Keccakf1600 serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::Keccakf1600 obj; + obj.inputs = serde::Deserializable::deserialize(deserializer); + obj.outputs = serde::Deserializable::deserialize(deserializer); return obj; - } +} - namespace Program { +namespace Program { - inline bool operator==(const BlackBoxFuncCall &lhs, - const BlackBoxFuncCall &rhs) { - if (!(lhs.value == rhs.value)) { - return false; + inline bool operator==(const BlackBoxFuncCall::RecursiveAggregation &lhs, const BlackBoxFuncCall::RecursiveAggregation &rhs) { + if (!(lhs.verification_key == rhs.verification_key)) { return false; } + if (!(lhs.proof == rhs.proof)) { return false; } + if (!(lhs.public_inputs == rhs.public_inputs)) { return false; } + if (!(lhs.key_hash == rhs.key_hash)) { return false; } + return true; } - return true; - } - inline std::vector BlackBoxFuncCall::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } + inline std::vector BlackBoxFuncCall::RecursiveAggregation::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - inline BlackBoxFuncCall - BlackBoxFuncCall::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); + inline BlackBoxFuncCall::RecursiveAggregation BlackBoxFuncCall::RecursiveAggregation::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; } - return value; - } - } // end of namespace Program +} // end of namespace Program - template <> - template - void serde::Serializable::serialize( - const Program::BlackBoxFuncCall &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.value, serializer); - serializer.decrease_container_depth(); - } +template <> +template +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::RecursiveAggregation &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.verification_key, serializer); + serde::Serializable::serialize(obj.proof, serializer); + serde::Serializable::serialize(obj.public_inputs, serializer); + serde::Serializable::serialize(obj.key_hash, serializer); +} - template <> - template - Program::BlackBoxFuncCall - serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::BlackBoxFuncCall obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); +template <> +template +Program::BlackBoxFuncCall::RecursiveAggregation serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::RecursiveAggregation obj; + obj.verification_key = serde::Deserializable::deserialize(deserializer); + obj.proof = serde::Deserializable::deserialize(deserializer); + obj.public_inputs = serde::Deserializable::deserialize(deserializer); + obj.key_hash = serde::Deserializable::deserialize(deserializer); return obj; - } +} - namespace Program { +namespace Program { - inline bool operator==(const BlackBoxFuncCall::AND &lhs, - const BlackBoxFuncCall::AND &rhs) { - if (!(lhs.lhs == rhs.lhs)) { - return false; - } - if (!(lhs.rhs == rhs.rhs)) { - return false; + inline bool operator==(const BlackBoxFuncCall::BigIntAdd &lhs, const BlackBoxFuncCall::BigIntAdd &rhs) { + if (!(lhs.lhs == rhs.lhs)) { return false; } + if (!(lhs.rhs == rhs.rhs)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; - } - inline std::vector BlackBoxFuncCall::AND::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } + inline std::vector BlackBoxFuncCall::BigIntAdd::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - inline BlackBoxFuncCall::AND - BlackBoxFuncCall::AND::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); + inline BlackBoxFuncCall::BigIntAdd BlackBoxFuncCall::BigIntAdd::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; } - return value; - } - } // end of namespace Program +} // end of namespace Program - template <> - template - void serde::Serializable::serialize( - const Program::BlackBoxFuncCall::AND &obj, Serializer &serializer) { +template <> +template +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::BigIntAdd &obj, Serializer &serializer) { serde::Serializable::serialize(obj.lhs, serializer); serde::Serializable::serialize(obj.rhs, serializer); - serde::Serializable::serialize(obj.output, - serializer); - } - - template <> - template - Program::BlackBoxFuncCall::AND - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxFuncCall::AND obj; - obj.lhs = - serde::Deserializable::deserialize(deserializer); - obj.rhs = - serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BlackBoxFuncCall::XOR &lhs, - const BlackBoxFuncCall::XOR &rhs) { - if (!(lhs.lhs == rhs.lhs)) { - return false; - } - if (!(lhs.rhs == rhs.rhs)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; - } - - inline std::vector BlackBoxFuncCall::XOR::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } - - inline BlackBoxFuncCall::XOR - BlackBoxFuncCall::XOR::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BlackBoxFuncCall::XOR &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.lhs, serializer); - serde::Serializable::serialize(obj.rhs, serializer); - serde::Serializable::serialize(obj.output, - serializer); - } - - template <> - template - Program::BlackBoxFuncCall::XOR - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxFuncCall::XOR obj; - obj.lhs = - serde::Deserializable::deserialize(deserializer); - obj.rhs = - serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BlackBoxFuncCall::RANGE &lhs, - const BlackBoxFuncCall::RANGE &rhs) { - if (!(lhs.input == rhs.input)) { - return false; - } - return true; - } - - inline std::vector - BlackBoxFuncCall::RANGE::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } - - inline BlackBoxFuncCall::RANGE - BlackBoxFuncCall::RANGE::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BlackBoxFuncCall::RANGE &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.input, serializer); - } + serde::Serializable::serialize(obj.output, serializer); +} - template <> - template - Program::BlackBoxFuncCall::RANGE - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxFuncCall::RANGE obj; - obj.input = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BlackBoxFuncCall::Blake2s &lhs, - const BlackBoxFuncCall::Blake2s &rhs) { - if (!(lhs.inputs == rhs.inputs)) { - return false; - } - if (!(lhs.outputs == rhs.outputs)) { - return false; - } - return true; - } - - inline std::vector - BlackBoxFuncCall::Blake2s::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); - } - - inline BlackBoxFuncCall::Blake2s - BlackBoxFuncCall::Blake2s::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BlackBoxFuncCall::Blake2s &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.inputs, - serializer); - serde::Serializable::serialize(obj.outputs, - serializer); - } - - template <> - template - Program::BlackBoxFuncCall::Blake2s - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxFuncCall::Blake2s obj; - obj.inputs = - serde::Deserializable::deserialize(deserializer); - obj.outputs = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BlackBoxFuncCall::Blake3 &lhs, - const BlackBoxFuncCall::Blake3 &rhs) { - if (!(lhs.inputs == rhs.inputs)) { - return false; - } - if (!(lhs.outputs == rhs.outputs)) { - return false; - } - return true; - } - - inline std::vector - BlackBoxFuncCall::Blake3::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } - - inline BlackBoxFuncCall::Blake3 - BlackBoxFuncCall::Blake3::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BlackBoxFuncCall::Blake3 &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.inputs, - serializer); - serde::Serializable::serialize(obj.outputs, - serializer); - } - - template <> - template - Program::BlackBoxFuncCall::Blake3 - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxFuncCall::Blake3 obj; - obj.inputs = - serde::Deserializable::deserialize(deserializer); - obj.outputs = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BlackBoxFuncCall::SchnorrVerify &lhs, - const BlackBoxFuncCall::SchnorrVerify &rhs) { - if (!(lhs.public_key_x == rhs.public_key_x)) { - return false; - } - if (!(lhs.public_key_y == rhs.public_key_y)) { - return false; - } - if (!(lhs.signature == rhs.signature)) { - return false; - } - if (!(lhs.message == rhs.message)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; - } - - inline std::vector - BlackBoxFuncCall::SchnorrVerify::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); - } - - inline BlackBoxFuncCall::SchnorrVerify - BlackBoxFuncCall::SchnorrVerify::bincodeDeserialize( - std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BlackBoxFuncCall::SchnorrVerify &obj, - Serializer &serializer) { - serde::Serializable::serialize(obj.public_key_x, - serializer); - serde::Serializable::serialize(obj.public_key_y, - serializer); - serde::Serializable::serialize(obj.signature, - serializer); - serde::Serializable::serialize(obj.message, - serializer); - serde::Serializable::serialize(obj.output, - serializer); - } - - template <> - template - Program::BlackBoxFuncCall::SchnorrVerify - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxFuncCall::SchnorrVerify obj; - obj.public_key_x = - serde::Deserializable::deserialize( - deserializer); - obj.public_key_y = - serde::Deserializable::deserialize( - deserializer); - obj.signature = serde::Deserializable::deserialize( - deserializer); - obj.message = - serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BlackBoxFuncCall::PedersenCommitment &lhs, - const BlackBoxFuncCall::PedersenCommitment &rhs) { - if (!(lhs.inputs == rhs.inputs)) { - return false; - } - if (!(lhs.domain_separator == rhs.domain_separator)) { - return false; - } - if (!(lhs.outputs == rhs.outputs)) { - return false; - } - return true; - } - - inline std::vector - BlackBoxFuncCall::PedersenCommitment::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize( - *this, serializer); - return std::move(serializer).bytes(); - } - - inline BlackBoxFuncCall::PedersenCommitment - BlackBoxFuncCall::PedersenCommitment::bincodeDeserialize( - std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable< - BlackBoxFuncCall::PedersenCommitment>::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void - serde::Serializable::serialize( - const Program::BlackBoxFuncCall::PedersenCommitment &obj, - Serializer &serializer) { - serde::Serializable::serialize(obj.inputs, - serializer); - serde::Serializable::serialize( - obj.domain_separator, serializer); - serde::Serializable::serialize(obj.outputs, - serializer); - } - - template <> - template - Program::BlackBoxFuncCall::PedersenCommitment - serde::Deserializable:: - deserialize(Deserializer &deserializer) { - Program::BlackBoxFuncCall::PedersenCommitment obj; - obj.inputs = - serde::Deserializable::deserialize(deserializer); - obj.domain_separator = - serde::Deserializable::deserialize( - deserializer); - obj.outputs = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BlackBoxFuncCall::PedersenHash &lhs, - const BlackBoxFuncCall::PedersenHash &rhs) { - if (!(lhs.inputs == rhs.inputs)) { - return false; - } - if (!(lhs.domain_separator == rhs.domain_separator)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; - } - - inline std::vector - BlackBoxFuncCall::PedersenHash::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); - } - - inline BlackBoxFuncCall::PedersenHash - BlackBoxFuncCall::PedersenHash::bincodeDeserialize( - std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BlackBoxFuncCall::PedersenHash &obj, - Serializer &serializer) { - serde::Serializable::serialize(obj.inputs, - serializer); - serde::Serializable::serialize( - obj.domain_separator, serializer); - serde::Serializable::serialize(obj.output, - serializer); - } - - template <> - template - Program::BlackBoxFuncCall::PedersenHash - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxFuncCall::PedersenHash obj; - obj.inputs = - serde::Deserializable::deserialize(deserializer); - obj.domain_separator = - serde::Deserializable::deserialize( - deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BlackBoxFuncCall::EcdsaSecp256k1 &lhs, - const BlackBoxFuncCall::EcdsaSecp256k1 &rhs) { - if (!(lhs.public_key_x == rhs.public_key_x)) { - return false; - } - if (!(lhs.public_key_y == rhs.public_key_y)) { - return false; - } - if (!(lhs.signature == rhs.signature)) { - return false; - } - if (!(lhs.hashed_message == rhs.hashed_message)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; - } - - inline std::vector - BlackBoxFuncCall::EcdsaSecp256k1::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize( - *this, serializer); - return std::move(serializer).bytes(); - } - - inline BlackBoxFuncCall::EcdsaSecp256k1 - BlackBoxFuncCall::EcdsaSecp256k1::bincodeDeserialize( - std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void - serde::Serializable::serialize( - const Program::BlackBoxFuncCall::EcdsaSecp256k1 &obj, - Serializer &serializer) { - serde::Serializable::serialize(obj.public_key_x, - serializer); - serde::Serializable::serialize(obj.public_key_y, - serializer); - serde::Serializable::serialize(obj.signature, - serializer); - serde::Serializable::serialize( - obj.hashed_message, serializer); - serde::Serializable::serialize(obj.output, - serializer); - } - - template <> - template - Program::BlackBoxFuncCall::EcdsaSecp256k1 - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxFuncCall::EcdsaSecp256k1 obj; - obj.public_key_x = - serde::Deserializable::deserialize( - deserializer); - obj.public_key_y = - serde::Deserializable::deserialize( - deserializer); - obj.signature = serde::Deserializable::deserialize( - deserializer); - obj.hashed_message = - serde::Deserializable::deserialize( - deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BlackBoxFuncCall::EcdsaSecp256r1 &lhs, - const BlackBoxFuncCall::EcdsaSecp256r1 &rhs) { - if (!(lhs.public_key_x == rhs.public_key_x)) { - return false; - } - if (!(lhs.public_key_y == rhs.public_key_y)) { - return false; - } - if (!(lhs.signature == rhs.signature)) { - return false; - } - if (!(lhs.hashed_message == rhs.hashed_message)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; - } - - inline std::vector - BlackBoxFuncCall::EcdsaSecp256r1::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize( - *this, serializer); - return std::move(serializer).bytes(); - } - - inline BlackBoxFuncCall::EcdsaSecp256r1 - BlackBoxFuncCall::EcdsaSecp256r1::bincodeDeserialize( - std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void - serde::Serializable::serialize( - const Program::BlackBoxFuncCall::EcdsaSecp256r1 &obj, - Serializer &serializer) { - serde::Serializable::serialize(obj.public_key_x, - serializer); - serde::Serializable::serialize(obj.public_key_y, - serializer); - serde::Serializable::serialize(obj.signature, - serializer); - serde::Serializable::serialize( - obj.hashed_message, serializer); - serde::Serializable::serialize(obj.output, - serializer); - } - - template <> - template - Program::BlackBoxFuncCall::EcdsaSecp256r1 - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxFuncCall::EcdsaSecp256r1 obj; - obj.public_key_x = - serde::Deserializable::deserialize( - deserializer); - obj.public_key_y = - serde::Deserializable::deserialize( - deserializer); - obj.signature = serde::Deserializable::deserialize( - deserializer); - obj.hashed_message = - serde::Deserializable::deserialize( - deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BlackBoxFuncCall::FixedBaseScalarMul &lhs, - const BlackBoxFuncCall::FixedBaseScalarMul &rhs) { - if (!(lhs.low == rhs.low)) { - return false; - } - if (!(lhs.high == rhs.high)) { - return false; - } - if (!(lhs.outputs == rhs.outputs)) { - return false; - } - return true; - } - - inline std::vector - BlackBoxFuncCall::FixedBaseScalarMul::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize( - *this, serializer); - return std::move(serializer).bytes(); - } - - inline BlackBoxFuncCall::FixedBaseScalarMul - BlackBoxFuncCall::FixedBaseScalarMul::bincodeDeserialize( - std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable< - BlackBoxFuncCall::FixedBaseScalarMul>::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void - serde::Serializable::serialize( - const Program::BlackBoxFuncCall::FixedBaseScalarMul &obj, - Serializer &serializer) { - serde::Serializable::serialize(obj.low, serializer); - serde::Serializable::serialize(obj.high, serializer); - serde::Serializable::serialize(obj.outputs, - serializer); - } - - template <> - template - Program::BlackBoxFuncCall::FixedBaseScalarMul - serde::Deserializable:: - deserialize(Deserializer &deserializer) { - Program::BlackBoxFuncCall::FixedBaseScalarMul obj; - obj.low = - serde::Deserializable::deserialize(deserializer); - obj.high = - serde::Deserializable::deserialize(deserializer); - obj.outputs = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BlackBoxFuncCall::EmbeddedCurveAdd &lhs, - const BlackBoxFuncCall::EmbeddedCurveAdd &rhs) { - if (!(lhs.input1_x == rhs.input1_x)) { - return false; - } - if (!(lhs.input1_y == rhs.input1_y)) { - return false; - } - if (!(lhs.input2_x == rhs.input2_x)) { - return false; - } - if (!(lhs.input2_y == rhs.input2_y)) { - return false; - } - if (!(lhs.outputs == rhs.outputs)) { - return false; - } - return true; - } - - inline std::vector - BlackBoxFuncCall::EmbeddedCurveAdd::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize( - *this, serializer); - return std::move(serializer).bytes(); - } - - inline BlackBoxFuncCall::EmbeddedCurveAdd - BlackBoxFuncCall::EmbeddedCurveAdd::bincodeDeserialize( - std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void - serde::Serializable::serialize( - const Program::BlackBoxFuncCall::EmbeddedCurveAdd &obj, - Serializer &serializer) { - serde::Serializable::serialize(obj.input1_x, - serializer); - serde::Serializable::serialize(obj.input1_y, - serializer); - serde::Serializable::serialize(obj.input2_x, - serializer); - serde::Serializable::serialize(obj.input2_y, - serializer); - serde::Serializable::serialize(obj.outputs, - serializer); - } - - template <> - template - Program::BlackBoxFuncCall::EmbeddedCurveAdd - serde::Deserializable:: - deserialize(Deserializer &deserializer) { - Program::BlackBoxFuncCall::EmbeddedCurveAdd obj; - obj.input1_x = serde::Deserializable::deserialize( - deserializer); - obj.input1_y = serde::Deserializable::deserialize( - deserializer); - obj.input2_x = serde::Deserializable::deserialize( - deserializer); - obj.input2_y = serde::Deserializable::deserialize( - deserializer); - obj.outputs = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BlackBoxFuncCall::Keccak256 &lhs, - const BlackBoxFuncCall::Keccak256 &rhs) { - if (!(lhs.inputs == rhs.inputs)) { - return false; - } - if (!(lhs.outputs == rhs.outputs)) { - return false; - } - return true; - } - - inline std::vector - BlackBoxFuncCall::Keccak256::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); - } - - inline BlackBoxFuncCall::Keccak256 - BlackBoxFuncCall::Keccak256::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BlackBoxFuncCall::Keccak256 &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.inputs, - serializer); - serde::Serializable::serialize(obj.outputs, - serializer); - } - - template <> - template - Program::BlackBoxFuncCall::Keccak256 - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxFuncCall::Keccak256 obj; - obj.inputs = - serde::Deserializable::deserialize(deserializer); - obj.outputs = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BlackBoxFuncCall::Keccak256VariableLength &lhs, - const BlackBoxFuncCall::Keccak256VariableLength &rhs) { - if (!(lhs.inputs == rhs.inputs)) { - return false; - } - if (!(lhs.var_message_size == rhs.var_message_size)) { - return false; - } - if (!(lhs.outputs == rhs.outputs)) { - return false; - } - return true; - } - - inline std::vector - BlackBoxFuncCall::Keccak256VariableLength::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize( - *this, serializer); - return std::move(serializer).bytes(); - } - - inline BlackBoxFuncCall::Keccak256VariableLength - BlackBoxFuncCall::Keccak256VariableLength::bincodeDeserialize( - std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable< - BlackBoxFuncCall::Keccak256VariableLength>::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable:: - serialize(const Program::BlackBoxFuncCall::Keccak256VariableLength &obj, - Serializer &serializer) { - serde::Serializable::serialize(obj.inputs, - serializer); - serde::Serializable::serialize( - obj.var_message_size, serializer); - serde::Serializable::serialize(obj.outputs, - serializer); - } - - template <> - template - Program::BlackBoxFuncCall::Keccak256VariableLength - serde::Deserializable:: - deserialize(Deserializer &deserializer) { - Program::BlackBoxFuncCall::Keccak256VariableLength obj; - obj.inputs = - serde::Deserializable::deserialize(deserializer); - obj.var_message_size = - serde::Deserializable::deserialize( - deserializer); - obj.outputs = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BlackBoxFuncCall::Keccakf1600 &lhs, - const BlackBoxFuncCall::Keccakf1600 &rhs) { - if (!(lhs.inputs == rhs.inputs)) { - return false; - } - if (!(lhs.outputs == rhs.outputs)) { - return false; - } - return true; - } - - inline std::vector - BlackBoxFuncCall::Keccakf1600::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); - } - - inline BlackBoxFuncCall::Keccakf1600 - BlackBoxFuncCall::Keccakf1600::bincodeDeserialize( - std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BlackBoxFuncCall::Keccakf1600 &obj, - Serializer &serializer) { - serde::Serializable::serialize(obj.inputs, - serializer); - serde::Serializable::serialize(obj.outputs, - serializer); - } - - template <> - template - Program::BlackBoxFuncCall::Keccakf1600 - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxFuncCall::Keccakf1600 obj; - obj.inputs = - serde::Deserializable::deserialize(deserializer); - obj.outputs = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BlackBoxFuncCall::RecursiveAggregation &lhs, - const BlackBoxFuncCall::RecursiveAggregation &rhs) { - if (!(lhs.verification_key == rhs.verification_key)) { - return false; - } - if (!(lhs.proof == rhs.proof)) { - return false; - } - if (!(lhs.public_inputs == rhs.public_inputs)) { - return false; - } - if (!(lhs.key_hash == rhs.key_hash)) { - return false; - } - return true; - } - - inline std::vector - BlackBoxFuncCall::RecursiveAggregation::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize( - *this, serializer); - return std::move(serializer).bytes(); - } - - inline BlackBoxFuncCall::RecursiveAggregation - BlackBoxFuncCall::RecursiveAggregation::bincodeDeserialize( - std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable< - BlackBoxFuncCall::RecursiveAggregation>::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable:: - serialize(const Program::BlackBoxFuncCall::RecursiveAggregation &obj, - Serializer &serializer) { - serde::Serializable::serialize( - obj.verification_key, serializer); - serde::Serializable::serialize(obj.proof, serializer); - serde::Serializable::serialize( - obj.public_inputs, serializer); - serde::Serializable::serialize(obj.key_hash, - serializer); - } - - template <> - template - Program::BlackBoxFuncCall::RecursiveAggregation - serde::Deserializable:: - deserialize(Deserializer &deserializer) { - Program::BlackBoxFuncCall::RecursiveAggregation obj; - obj.verification_key = - serde::Deserializable::deserialize( - deserializer); - obj.proof = - serde::Deserializable::deserialize(deserializer); - obj.public_inputs = - serde::Deserializable::deserialize( - deserializer); - obj.key_hash = serde::Deserializable::deserialize( - deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BlackBoxFuncCall::BigIntAdd &lhs, - const BlackBoxFuncCall::BigIntAdd &rhs) { - if (!(lhs.lhs == rhs.lhs)) { - return false; - } - if (!(lhs.rhs == rhs.rhs)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; - } - - inline std::vector - BlackBoxFuncCall::BigIntAdd::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); - } - - inline BlackBoxFuncCall::BigIntAdd - BlackBoxFuncCall::BigIntAdd::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BlackBoxFuncCall::BigIntAdd &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.lhs, serializer); - serde::Serializable::serialize(obj.rhs, serializer); - serde::Serializable::serialize(obj.output, - serializer); - } - - template <> - template - Program::BlackBoxFuncCall::BigIntAdd - serde::Deserializable::deserialize( - Deserializer &deserializer) { +template <> +template +Program::BlackBoxFuncCall::BigIntAdd serde::Deserializable::deserialize(Deserializer &deserializer) { Program::BlackBoxFuncCall::BigIntAdd obj; - obj.lhs = - serde::Deserializable::deserialize(deserializer); - obj.rhs = - serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BlackBoxFuncCall::BigIntSub &lhs, - const BlackBoxFuncCall::BigIntSub &rhs) { - if (!(lhs.lhs == rhs.lhs)) { - return false; - } - if (!(lhs.rhs == rhs.rhs)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; - } - - inline std::vector - BlackBoxFuncCall::BigIntSub::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); - } - - inline BlackBoxFuncCall::BigIntSub - BlackBoxFuncCall::BigIntSub::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BlackBoxFuncCall::BigIntSub &obj, Serializer &serializer) { + obj.lhs = serde::Deserializable::deserialize(deserializer); + obj.rhs = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; +} + +namespace Program { + + inline bool operator==(const BlackBoxFuncCall::BigIntSub &lhs, const BlackBoxFuncCall::BigIntSub &rhs) { + if (!(lhs.lhs == rhs.lhs)) { return false; } + if (!(lhs.rhs == rhs.rhs)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } + + inline std::vector BlackBoxFuncCall::BigIntSub::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BlackBoxFuncCall::BigIntSub BlackBoxFuncCall::BigIntSub::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::BigIntSub &obj, Serializer &serializer) { serde::Serializable::serialize(obj.lhs, serializer); serde::Serializable::serialize(obj.rhs, serializer); - serde::Serializable::serialize(obj.output, - serializer); - } - - template <> - template - Program::BlackBoxFuncCall::BigIntSub - serde::Deserializable::deserialize( - Deserializer &deserializer) { + serde::Serializable::serialize(obj.output, serializer); +} + +template <> +template +Program::BlackBoxFuncCall::BigIntSub serde::Deserializable::deserialize(Deserializer &deserializer) { Program::BlackBoxFuncCall::BigIntSub obj; - obj.lhs = - serde::Deserializable::deserialize(deserializer); - obj.rhs = - serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BlackBoxFuncCall::BigIntMul &lhs, - const BlackBoxFuncCall::BigIntMul &rhs) { - if (!(lhs.lhs == rhs.lhs)) { - return false; - } - if (!(lhs.rhs == rhs.rhs)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; - } - - inline std::vector - BlackBoxFuncCall::BigIntMul::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); - } - - inline BlackBoxFuncCall::BigIntMul - BlackBoxFuncCall::BigIntMul::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BlackBoxFuncCall::BigIntMul &obj, Serializer &serializer) { + obj.lhs = serde::Deserializable::deserialize(deserializer); + obj.rhs = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; +} + +namespace Program { + + inline bool operator==(const BlackBoxFuncCall::BigIntMul &lhs, const BlackBoxFuncCall::BigIntMul &rhs) { + if (!(lhs.lhs == rhs.lhs)) { return false; } + if (!(lhs.rhs == rhs.rhs)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } + + inline std::vector BlackBoxFuncCall::BigIntMul::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BlackBoxFuncCall::BigIntMul BlackBoxFuncCall::BigIntMul::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::BigIntMul &obj, Serializer &serializer) { serde::Serializable::serialize(obj.lhs, serializer); serde::Serializable::serialize(obj.rhs, serializer); - serde::Serializable::serialize(obj.output, - serializer); - } - - template <> - template - Program::BlackBoxFuncCall::BigIntMul - serde::Deserializable::deserialize( - Deserializer &deserializer) { + serde::Serializable::serialize(obj.output, serializer); +} + +template <> +template +Program::BlackBoxFuncCall::BigIntMul serde::Deserializable::deserialize(Deserializer &deserializer) { Program::BlackBoxFuncCall::BigIntMul obj; - obj.lhs = - serde::Deserializable::deserialize(deserializer); - obj.rhs = - serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BlackBoxFuncCall::BigIntDiv &lhs, - const BlackBoxFuncCall::BigIntDiv &rhs) { - if (!(lhs.lhs == rhs.lhs)) { - return false; - } - if (!(lhs.rhs == rhs.rhs)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; - } - - inline std::vector - BlackBoxFuncCall::BigIntDiv::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); - } - - inline BlackBoxFuncCall::BigIntDiv - BlackBoxFuncCall::BigIntDiv::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BlackBoxFuncCall::BigIntDiv &obj, Serializer &serializer) { + obj.lhs = serde::Deserializable::deserialize(deserializer); + obj.rhs = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; +} + +namespace Program { + + inline bool operator==(const BlackBoxFuncCall::BigIntDiv &lhs, const BlackBoxFuncCall::BigIntDiv &rhs) { + if (!(lhs.lhs == rhs.lhs)) { return false; } + if (!(lhs.rhs == rhs.rhs)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } + + inline std::vector BlackBoxFuncCall::BigIntDiv::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BlackBoxFuncCall::BigIntDiv BlackBoxFuncCall::BigIntDiv::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::BigIntDiv &obj, Serializer &serializer) { serde::Serializable::serialize(obj.lhs, serializer); serde::Serializable::serialize(obj.rhs, serializer); - serde::Serializable::serialize(obj.output, - serializer); - } - - template <> - template - Program::BlackBoxFuncCall::BigIntDiv - serde::Deserializable::deserialize( - Deserializer &deserializer) { + serde::Serializable::serialize(obj.output, serializer); +} + +template <> +template +Program::BlackBoxFuncCall::BigIntDiv serde::Deserializable::deserialize(Deserializer &deserializer) { Program::BlackBoxFuncCall::BigIntDiv obj; - obj.lhs = - serde::Deserializable::deserialize(deserializer); - obj.rhs = - serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BlackBoxFuncCall::BigIntFromLeBytes &lhs, - const BlackBoxFuncCall::BigIntFromLeBytes &rhs) { - if (!(lhs.inputs == rhs.inputs)) { - return false; - } - if (!(lhs.modulus == rhs.modulus)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; - } - - inline std::vector - BlackBoxFuncCall::BigIntFromLeBytes::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize( - *this, serializer); - return std::move(serializer).bytes(); - } - - inline BlackBoxFuncCall::BigIntFromLeBytes - BlackBoxFuncCall::BigIntFromLeBytes::bincodeDeserialize( - std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void - serde::Serializable::serialize( - const Program::BlackBoxFuncCall::BigIntFromLeBytes &obj, - Serializer &serializer) { - serde::Serializable::serialize(obj.inputs, - serializer); - serde::Serializable::serialize(obj.modulus, - serializer); - serde::Serializable::serialize(obj.output, - serializer); - } - - template <> - template - Program::BlackBoxFuncCall::BigIntFromLeBytes - serde::Deserializable:: - deserialize(Deserializer &deserializer) { + obj.lhs = serde::Deserializable::deserialize(deserializer); + obj.rhs = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; +} + +namespace Program { + + inline bool operator==(const BlackBoxFuncCall::BigIntFromLeBytes &lhs, const BlackBoxFuncCall::BigIntFromLeBytes &rhs) { + if (!(lhs.inputs == rhs.inputs)) { return false; } + if (!(lhs.modulus == rhs.modulus)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } + + inline std::vector BlackBoxFuncCall::BigIntFromLeBytes::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BlackBoxFuncCall::BigIntFromLeBytes BlackBoxFuncCall::BigIntFromLeBytes::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::BigIntFromLeBytes &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.inputs, serializer); + serde::Serializable::serialize(obj.modulus, serializer); + serde::Serializable::serialize(obj.output, serializer); +} + +template <> +template +Program::BlackBoxFuncCall::BigIntFromLeBytes serde::Deserializable::deserialize(Deserializer &deserializer) { Program::BlackBoxFuncCall::BigIntFromLeBytes obj; - obj.inputs = - serde::Deserializable::deserialize(deserializer); - obj.modulus = - serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BlackBoxFuncCall::BigIntToLeBytes &lhs, - const BlackBoxFuncCall::BigIntToLeBytes &rhs) { - if (!(lhs.input == rhs.input)) { - return false; - } - if (!(lhs.outputs == rhs.outputs)) { - return false; - } - return true; - } - - inline std::vector - BlackBoxFuncCall::BigIntToLeBytes::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize( - *this, serializer); - return std::move(serializer).bytes(); - } - - inline BlackBoxFuncCall::BigIntToLeBytes - BlackBoxFuncCall::BigIntToLeBytes::bincodeDeserialize( - std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void - serde::Serializable::serialize( - const Program::BlackBoxFuncCall::BigIntToLeBytes &obj, - Serializer &serializer) { + obj.inputs = serde::Deserializable::deserialize(deserializer); + obj.modulus = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; +} + +namespace Program { + + inline bool operator==(const BlackBoxFuncCall::BigIntToLeBytes &lhs, const BlackBoxFuncCall::BigIntToLeBytes &rhs) { + if (!(lhs.input == rhs.input)) { return false; } + if (!(lhs.outputs == rhs.outputs)) { return false; } + return true; + } + + inline std::vector BlackBoxFuncCall::BigIntToLeBytes::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BlackBoxFuncCall::BigIntToLeBytes BlackBoxFuncCall::BigIntToLeBytes::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::BigIntToLeBytes &obj, Serializer &serializer) { serde::Serializable::serialize(obj.input, serializer); - serde::Serializable::serialize(obj.outputs, - serializer); - } - - template <> - template - Program::BlackBoxFuncCall::BigIntToLeBytes - serde::Deserializable:: - deserialize(Deserializer &deserializer) { + serde::Serializable::serialize(obj.outputs, serializer); +} + +template <> +template +Program::BlackBoxFuncCall::BigIntToLeBytes serde::Deserializable::deserialize(Deserializer &deserializer) { Program::BlackBoxFuncCall::BigIntToLeBytes obj; - obj.input = - serde::Deserializable::deserialize(deserializer); - obj.outputs = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BlackBoxFuncCall::Poseidon2Permutation &lhs, - const BlackBoxFuncCall::Poseidon2Permutation &rhs) { - if (!(lhs.inputs == rhs.inputs)) { - return false; - } - if (!(lhs.outputs == rhs.outputs)) { - return false; - } - if (!(lhs.len == rhs.len)) { - return false; - } - return true; - } - - inline std::vector - BlackBoxFuncCall::Poseidon2Permutation::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize( - *this, serializer); - return std::move(serializer).bytes(); - } - - inline BlackBoxFuncCall::Poseidon2Permutation - BlackBoxFuncCall::Poseidon2Permutation::bincodeDeserialize( - std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable< - BlackBoxFuncCall::Poseidon2Permutation>::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable:: - serialize(const Program::BlackBoxFuncCall::Poseidon2Permutation &obj, - Serializer &serializer) { - serde::Serializable::serialize(obj.inputs, - serializer); - serde::Serializable::serialize(obj.outputs, - serializer); + obj.input = serde::Deserializable::deserialize(deserializer); + obj.outputs = serde::Deserializable::deserialize(deserializer); + return obj; +} + +namespace Program { + + inline bool operator==(const BlackBoxFuncCall::Poseidon2Permutation &lhs, const BlackBoxFuncCall::Poseidon2Permutation &rhs) { + if (!(lhs.inputs == rhs.inputs)) { return false; } + if (!(lhs.outputs == rhs.outputs)) { return false; } + if (!(lhs.len == rhs.len)) { return false; } + return true; + } + + inline std::vector BlackBoxFuncCall::Poseidon2Permutation::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BlackBoxFuncCall::Poseidon2Permutation BlackBoxFuncCall::Poseidon2Permutation::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::Poseidon2Permutation &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.inputs, serializer); + serde::Serializable::serialize(obj.outputs, serializer); serde::Serializable::serialize(obj.len, serializer); - } +} - template <> - template - Program::BlackBoxFuncCall::Poseidon2Permutation - serde::Deserializable:: - deserialize(Deserializer &deserializer) { +template <> +template +Program::BlackBoxFuncCall::Poseidon2Permutation serde::Deserializable::deserialize(Deserializer &deserializer) { Program::BlackBoxFuncCall::Poseidon2Permutation obj; - obj.inputs = - serde::Deserializable::deserialize(deserializer); - obj.outputs = - serde::Deserializable::deserialize(deserializer); - obj.len = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BlackBoxFuncCall::Sha256Compression &lhs, - const BlackBoxFuncCall::Sha256Compression &rhs) { - if (!(lhs.inputs == rhs.inputs)) { - return false; - } - if (!(lhs.hash_values == rhs.hash_values)) { - return false; - } - if (!(lhs.outputs == rhs.outputs)) { - return false; - } - return true; - } - - inline std::vector - BlackBoxFuncCall::Sha256Compression::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize( - *this, serializer); - return std::move(serializer).bytes(); - } - - inline BlackBoxFuncCall::Sha256Compression - BlackBoxFuncCall::Sha256Compression::bincodeDeserialize( - std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void - serde::Serializable::serialize( - const Program::BlackBoxFuncCall::Sha256Compression &obj, - Serializer &serializer) { - serde::Serializable::serialize(obj.inputs, - serializer); - serde::Serializable::serialize(obj.hash_values, - serializer); - serde::Serializable::serialize(obj.outputs, - serializer); - } - - template <> - template - Program::BlackBoxFuncCall::Sha256Compression - serde::Deserializable:: - deserialize(Deserializer &deserializer) { + obj.inputs = serde::Deserializable::deserialize(deserializer); + obj.outputs = serde::Deserializable::deserialize(deserializer); + obj.len = serde::Deserializable::deserialize(deserializer); + return obj; +} + +namespace Program { + + inline bool operator==(const BlackBoxFuncCall::Sha256Compression &lhs, const BlackBoxFuncCall::Sha256Compression &rhs) { + if (!(lhs.inputs == rhs.inputs)) { return false; } + if (!(lhs.hash_values == rhs.hash_values)) { return false; } + if (!(lhs.outputs == rhs.outputs)) { return false; } + return true; + } + + inline std::vector BlackBoxFuncCall::Sha256Compression::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BlackBoxFuncCall::Sha256Compression BlackBoxFuncCall::Sha256Compression::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::Sha256Compression &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.inputs, serializer); + serde::Serializable::serialize(obj.hash_values, serializer); + serde::Serializable::serialize(obj.outputs, serializer); +} + +template <> +template +Program::BlackBoxFuncCall::Sha256Compression serde::Deserializable::deserialize(Deserializer &deserializer) { Program::BlackBoxFuncCall::Sha256Compression obj; - obj.inputs = - serde::Deserializable::deserialize(deserializer); - obj.hash_values = - serde::Deserializable::deserialize( - deserializer); - obj.outputs = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BlackBoxOp &lhs, const BlackBoxOp &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; - } - - inline std::vector BlackBoxOp::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } - - inline BlackBoxOp BlackBoxOp::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BlackBoxOp &obj, Serializer &serializer) { + obj.inputs = serde::Deserializable::deserialize(deserializer); + obj.hash_values = serde::Deserializable::deserialize(deserializer); + obj.outputs = serde::Deserializable::deserialize(deserializer); + return obj; +} + +namespace Program { + + inline bool operator==(const BlackBoxOp &lhs, const BlackBoxOp &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } + + inline std::vector BlackBoxOp::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BlackBoxOp BlackBoxOp::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::BlackBoxOp &obj, Serializer &serializer) { serializer.increase_container_depth(); serde::Serializable::serialize(obj.value, serializer); serializer.decrease_container_depth(); - } +} - template <> - template - Program::BlackBoxOp serde::Deserializable::deserialize( - Deserializer &deserializer) { +template <> +template +Program::BlackBoxOp serde::Deserializable::deserialize(Deserializer &deserializer) { deserializer.increase_container_depth(); Program::BlackBoxOp obj; - obj.value = - serde::Deserializable::deserialize(deserializer); + obj.value = serde::Deserializable::deserialize(deserializer); deserializer.decrease_container_depth(); return obj; - } - - namespace Program { - - inline bool operator==(const BlackBoxOp::Blake2s &lhs, - const BlackBoxOp::Blake2s &rhs) { - if (!(lhs.message == rhs.message)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; - } - - inline std::vector BlackBoxOp::Blake2s::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } - - inline BlackBoxOp::Blake2s - BlackBoxOp::Blake2s::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BlackBoxOp::Blake2s &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.message, - serializer); - serde::Serializable::serialize(obj.output, - serializer); - } - - template <> - template - Program::BlackBoxOp::Blake2s - serde::Deserializable::deserialize( - Deserializer &deserializer) { +} + +namespace Program { + + inline bool operator==(const BlackBoxOp::Blake2s &lhs, const BlackBoxOp::Blake2s &rhs) { + if (!(lhs.message == rhs.message)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } + + inline std::vector BlackBoxOp::Blake2s::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BlackBoxOp::Blake2s BlackBoxOp::Blake2s::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::BlackBoxOp::Blake2s &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.message, serializer); + serde::Serializable::serialize(obj.output, serializer); +} + +template <> +template +Program::BlackBoxOp::Blake2s serde::Deserializable::deserialize(Deserializer &deserializer) { Program::BlackBoxOp::Blake2s obj; - obj.message = - serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BlackBoxOp::Blake3 &lhs, - const BlackBoxOp::Blake3 &rhs) { - if (!(lhs.message == rhs.message)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; - } - - inline std::vector BlackBoxOp::Blake3::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } - - inline BlackBoxOp::Blake3 - BlackBoxOp::Blake3::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BlackBoxOp::Blake3 &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.message, - serializer); - serde::Serializable::serialize(obj.output, - serializer); - } - - template <> - template - Program::BlackBoxOp::Blake3 - serde::Deserializable::deserialize( - Deserializer &deserializer) { + obj.message = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; +} + +namespace Program { + + inline bool operator==(const BlackBoxOp::Blake3 &lhs, const BlackBoxOp::Blake3 &rhs) { + if (!(lhs.message == rhs.message)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } + + inline std::vector BlackBoxOp::Blake3::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BlackBoxOp::Blake3 BlackBoxOp::Blake3::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::BlackBoxOp::Blake3 &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.message, serializer); + serde::Serializable::serialize(obj.output, serializer); +} + +template <> +template +Program::BlackBoxOp::Blake3 serde::Deserializable::deserialize(Deserializer &deserializer) { Program::BlackBoxOp::Blake3 obj; - obj.message = - serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BlackBoxOp::Keccak256 &lhs, - const BlackBoxOp::Keccak256 &rhs) { - if (!(lhs.message == rhs.message)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; - } - - inline std::vector BlackBoxOp::Keccak256::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } - - inline BlackBoxOp::Keccak256 - BlackBoxOp::Keccak256::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BlackBoxOp::Keccak256 &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.message, - serializer); - serde::Serializable::serialize(obj.output, - serializer); - } - - template <> - template - Program::BlackBoxOp::Keccak256 - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxOp::Keccak256 obj; - obj.message = - serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BlackBoxOp::Keccakf1600 &lhs, - const BlackBoxOp::Keccakf1600 &rhs) { - if (!(lhs.message == rhs.message)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; - } - - inline std::vector - BlackBoxOp::Keccakf1600::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } - - inline BlackBoxOp::Keccakf1600 - BlackBoxOp::Keccakf1600::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BlackBoxOp::Keccakf1600 &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.message, - serializer); - serde::Serializable::serialize(obj.output, - serializer); - } - - template <> - template - Program::BlackBoxOp::Keccakf1600 - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxOp::Keccakf1600 obj; - obj.message = - serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BlackBoxOp::EcdsaSecp256k1 &lhs, - const BlackBoxOp::EcdsaSecp256k1 &rhs) { - if (!(lhs.hashed_msg == rhs.hashed_msg)) { - return false; - } - if (!(lhs.public_key_x == rhs.public_key_x)) { - return false; - } - if (!(lhs.public_key_y == rhs.public_key_y)) { - return false; - } - if (!(lhs.signature == rhs.signature)) { - return false; - } - if (!(lhs.result == rhs.result)) { - return false; - } - return true; - } - - inline std::vector - BlackBoxOp::EcdsaSecp256k1::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); - } - - inline BlackBoxOp::EcdsaSecp256k1 - BlackBoxOp::EcdsaSecp256k1::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BlackBoxOp::EcdsaSecp256k1 &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.hashed_msg, - serializer); - serde::Serializable::serialize(obj.public_key_x, - serializer); - serde::Serializable::serialize(obj.public_key_y, - serializer); - serde::Serializable::serialize(obj.signature, - serializer); - serde::Serializable::serialize(obj.result, - serializer); - } - - template <> - template - Program::BlackBoxOp::EcdsaSecp256k1 - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxOp::EcdsaSecp256k1 obj; - obj.hashed_msg = - serde::Deserializable::deserialize( - deserializer); - obj.public_key_x = - serde::Deserializable::deserialize( - deserializer); - obj.public_key_y = - serde::Deserializable::deserialize( - deserializer); - obj.signature = serde::Deserializable::deserialize( - deserializer); - obj.result = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BlackBoxOp::EcdsaSecp256r1 &lhs, - const BlackBoxOp::EcdsaSecp256r1 &rhs) { - if (!(lhs.hashed_msg == rhs.hashed_msg)) { - return false; - } - if (!(lhs.public_key_x == rhs.public_key_x)) { - return false; - } - if (!(lhs.public_key_y == rhs.public_key_y)) { - return false; - } - if (!(lhs.signature == rhs.signature)) { - return false; - } - if (!(lhs.result == rhs.result)) { - return false; - } - return true; - } - - inline std::vector - BlackBoxOp::EcdsaSecp256r1::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); - } - - inline BlackBoxOp::EcdsaSecp256r1 - BlackBoxOp::EcdsaSecp256r1::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BlackBoxOp::EcdsaSecp256r1 &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.hashed_msg, - serializer); - serde::Serializable::serialize(obj.public_key_x, - serializer); - serde::Serializable::serialize(obj.public_key_y, - serializer); - serde::Serializable::serialize(obj.signature, - serializer); - serde::Serializable::serialize(obj.result, - serializer); - } - - template <> - template - Program::BlackBoxOp::EcdsaSecp256r1 - serde::Deserializable::deserialize( - Deserializer &deserializer) { + obj.message = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; +} + +namespace Program { + + inline bool operator==(const BlackBoxOp::Keccak256 &lhs, const BlackBoxOp::Keccak256 &rhs) { + if (!(lhs.message == rhs.message)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } + + inline std::vector BlackBoxOp::Keccak256::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BlackBoxOp::Keccak256 BlackBoxOp::Keccak256::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::BlackBoxOp::Keccak256 &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.message, serializer); + serde::Serializable::serialize(obj.output, serializer); +} + +template <> +template +Program::BlackBoxOp::Keccak256 serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxOp::Keccak256 obj; + obj.message = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; +} + +namespace Program { + + inline bool operator==(const BlackBoxOp::Keccakf1600 &lhs, const BlackBoxOp::Keccakf1600 &rhs) { + if (!(lhs.message == rhs.message)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } + + inline std::vector BlackBoxOp::Keccakf1600::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BlackBoxOp::Keccakf1600 BlackBoxOp::Keccakf1600::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::BlackBoxOp::Keccakf1600 &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.message, serializer); + serde::Serializable::serialize(obj.output, serializer); +} + +template <> +template +Program::BlackBoxOp::Keccakf1600 serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxOp::Keccakf1600 obj; + obj.message = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; +} + +namespace Program { + + inline bool operator==(const BlackBoxOp::EcdsaSecp256k1 &lhs, const BlackBoxOp::EcdsaSecp256k1 &rhs) { + if (!(lhs.hashed_msg == rhs.hashed_msg)) { return false; } + if (!(lhs.public_key_x == rhs.public_key_x)) { return false; } + if (!(lhs.public_key_y == rhs.public_key_y)) { return false; } + if (!(lhs.signature == rhs.signature)) { return false; } + if (!(lhs.result == rhs.result)) { return false; } + return true; + } + + inline std::vector BlackBoxOp::EcdsaSecp256k1::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BlackBoxOp::EcdsaSecp256k1 BlackBoxOp::EcdsaSecp256k1::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::BlackBoxOp::EcdsaSecp256k1 &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.hashed_msg, serializer); + serde::Serializable::serialize(obj.public_key_x, serializer); + serde::Serializable::serialize(obj.public_key_y, serializer); + serde::Serializable::serialize(obj.signature, serializer); + serde::Serializable::serialize(obj.result, serializer); +} + +template <> +template +Program::BlackBoxOp::EcdsaSecp256k1 serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxOp::EcdsaSecp256k1 obj; + obj.hashed_msg = serde::Deserializable::deserialize(deserializer); + obj.public_key_x = serde::Deserializable::deserialize(deserializer); + obj.public_key_y = serde::Deserializable::deserialize(deserializer); + obj.signature = serde::Deserializable::deserialize(deserializer); + obj.result = serde::Deserializable::deserialize(deserializer); + return obj; +} + +namespace Program { + + inline bool operator==(const BlackBoxOp::EcdsaSecp256r1 &lhs, const BlackBoxOp::EcdsaSecp256r1 &rhs) { + if (!(lhs.hashed_msg == rhs.hashed_msg)) { return false; } + if (!(lhs.public_key_x == rhs.public_key_x)) { return false; } + if (!(lhs.public_key_y == rhs.public_key_y)) { return false; } + if (!(lhs.signature == rhs.signature)) { return false; } + if (!(lhs.result == rhs.result)) { return false; } + return true; + } + + inline std::vector BlackBoxOp::EcdsaSecp256r1::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BlackBoxOp::EcdsaSecp256r1 BlackBoxOp::EcdsaSecp256r1::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::BlackBoxOp::EcdsaSecp256r1 &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.hashed_msg, serializer); + serde::Serializable::serialize(obj.public_key_x, serializer); + serde::Serializable::serialize(obj.public_key_y, serializer); + serde::Serializable::serialize(obj.signature, serializer); + serde::Serializable::serialize(obj.result, serializer); +} + +template <> +template +Program::BlackBoxOp::EcdsaSecp256r1 serde::Deserializable::deserialize(Deserializer &deserializer) { Program::BlackBoxOp::EcdsaSecp256r1 obj; - obj.hashed_msg = - serde::Deserializable::deserialize( - deserializer); - obj.public_key_x = - serde::Deserializable::deserialize( - deserializer); - obj.public_key_y = - serde::Deserializable::deserialize( - deserializer); - obj.signature = serde::Deserializable::deserialize( - deserializer); - obj.result = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BlackBoxOp::SchnorrVerify &lhs, - const BlackBoxOp::SchnorrVerify &rhs) { - if (!(lhs.public_key_x == rhs.public_key_x)) { - return false; - } - if (!(lhs.public_key_y == rhs.public_key_y)) { - return false; - } - if (!(lhs.message == rhs.message)) { - return false; - } - if (!(lhs.signature == rhs.signature)) { - return false; - } - if (!(lhs.result == rhs.result)) { - return false; - } - return true; - } - - inline std::vector - BlackBoxOp::SchnorrVerify::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); - } - - inline BlackBoxOp::SchnorrVerify - BlackBoxOp::SchnorrVerify::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BlackBoxOp::SchnorrVerify &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.public_key_x, - serializer); - serde::Serializable::serialize(obj.public_key_y, - serializer); - serde::Serializable::serialize(obj.message, - serializer); - serde::Serializable::serialize(obj.signature, - serializer); - serde::Serializable::serialize(obj.result, - serializer); - } - - template <> - template - Program::BlackBoxOp::SchnorrVerify - serde::Deserializable::deserialize( - Deserializer &deserializer) { + obj.hashed_msg = serde::Deserializable::deserialize(deserializer); + obj.public_key_x = serde::Deserializable::deserialize(deserializer); + obj.public_key_y = serde::Deserializable::deserialize(deserializer); + obj.signature = serde::Deserializable::deserialize(deserializer); + obj.result = serde::Deserializable::deserialize(deserializer); + return obj; +} + +namespace Program { + + inline bool operator==(const BlackBoxOp::SchnorrVerify &lhs, const BlackBoxOp::SchnorrVerify &rhs) { + if (!(lhs.public_key_x == rhs.public_key_x)) { return false; } + if (!(lhs.public_key_y == rhs.public_key_y)) { return false; } + if (!(lhs.message == rhs.message)) { return false; } + if (!(lhs.signature == rhs.signature)) { return false; } + if (!(lhs.result == rhs.result)) { return false; } + return true; + } + + inline std::vector BlackBoxOp::SchnorrVerify::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BlackBoxOp::SchnorrVerify BlackBoxOp::SchnorrVerify::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::BlackBoxOp::SchnorrVerify &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.public_key_x, serializer); + serde::Serializable::serialize(obj.public_key_y, serializer); + serde::Serializable::serialize(obj.message, serializer); + serde::Serializable::serialize(obj.signature, serializer); + serde::Serializable::serialize(obj.result, serializer); +} + +template <> +template +Program::BlackBoxOp::SchnorrVerify serde::Deserializable::deserialize(Deserializer &deserializer) { Program::BlackBoxOp::SchnorrVerify obj; - obj.public_key_x = - serde::Deserializable::deserialize( - deserializer); - obj.public_key_y = - serde::Deserializable::deserialize( - deserializer); - obj.message = - serde::Deserializable::deserialize(deserializer); - obj.signature = serde::Deserializable::deserialize( - deserializer); - obj.result = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BlackBoxOp::PedersenCommitment &lhs, - const BlackBoxOp::PedersenCommitment &rhs) { - if (!(lhs.inputs == rhs.inputs)) { - return false; - } - if (!(lhs.domain_separator == rhs.domain_separator)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; - } - - inline std::vector - BlackBoxOp::PedersenCommitment::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); - } - - inline BlackBoxOp::PedersenCommitment - BlackBoxOp::PedersenCommitment::bincodeDeserialize( - std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BlackBoxOp::PedersenCommitment &obj, - Serializer &serializer) { - serde::Serializable::serialize(obj.inputs, - serializer); - serde::Serializable::serialize( - obj.domain_separator, serializer); - serde::Serializable::serialize(obj.output, - serializer); - } - - template <> - template - Program::BlackBoxOp::PedersenCommitment - serde::Deserializable::deserialize( - Deserializer &deserializer) { + obj.public_key_x = serde::Deserializable::deserialize(deserializer); + obj.public_key_y = serde::Deserializable::deserialize(deserializer); + obj.message = serde::Deserializable::deserialize(deserializer); + obj.signature = serde::Deserializable::deserialize(deserializer); + obj.result = serde::Deserializable::deserialize(deserializer); + return obj; +} + +namespace Program { + + inline bool operator==(const BlackBoxOp::PedersenCommitment &lhs, const BlackBoxOp::PedersenCommitment &rhs) { + if (!(lhs.inputs == rhs.inputs)) { return false; } + if (!(lhs.domain_separator == rhs.domain_separator)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } + + inline std::vector BlackBoxOp::PedersenCommitment::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BlackBoxOp::PedersenCommitment BlackBoxOp::PedersenCommitment::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::BlackBoxOp::PedersenCommitment &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.inputs, serializer); + serde::Serializable::serialize(obj.domain_separator, serializer); + serde::Serializable::serialize(obj.output, serializer); +} + +template <> +template +Program::BlackBoxOp::PedersenCommitment serde::Deserializable::deserialize(Deserializer &deserializer) { Program::BlackBoxOp::PedersenCommitment obj; - obj.inputs = - serde::Deserializable::deserialize(deserializer); - obj.domain_separator = - serde::Deserializable::deserialize( - deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BlackBoxOp::PedersenHash &lhs, - const BlackBoxOp::PedersenHash &rhs) { - if (!(lhs.inputs == rhs.inputs)) { - return false; - } - if (!(lhs.domain_separator == rhs.domain_separator)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; - } - - inline std::vector - BlackBoxOp::PedersenHash::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } - - inline BlackBoxOp::PedersenHash - BlackBoxOp::PedersenHash::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BlackBoxOp::PedersenHash &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.inputs, - serializer); - serde::Serializable::serialize( - obj.domain_separator, serializer); - serde::Serializable::serialize(obj.output, - serializer); - } - - template <> - template - Program::BlackBoxOp::PedersenHash - serde::Deserializable::deserialize( - Deserializer &deserializer) { + obj.inputs = serde::Deserializable::deserialize(deserializer); + obj.domain_separator = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; +} + +namespace Program { + + inline bool operator==(const BlackBoxOp::PedersenHash &lhs, const BlackBoxOp::PedersenHash &rhs) { + if (!(lhs.inputs == rhs.inputs)) { return false; } + if (!(lhs.domain_separator == rhs.domain_separator)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } + + inline std::vector BlackBoxOp::PedersenHash::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BlackBoxOp::PedersenHash BlackBoxOp::PedersenHash::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::BlackBoxOp::PedersenHash &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.inputs, serializer); + serde::Serializable::serialize(obj.domain_separator, serializer); + serde::Serializable::serialize(obj.output, serializer); +} + +template <> +template +Program::BlackBoxOp::PedersenHash serde::Deserializable::deserialize(Deserializer &deserializer) { Program::BlackBoxOp::PedersenHash obj; - obj.inputs = - serde::Deserializable::deserialize(deserializer); - obj.domain_separator = - serde::Deserializable::deserialize( - deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BlackBoxOp::FixedBaseScalarMul &lhs, - const BlackBoxOp::FixedBaseScalarMul &rhs) { - if (!(lhs.low == rhs.low)) { - return false; - } - if (!(lhs.high == rhs.high)) { - return false; - } - if (!(lhs.result == rhs.result)) { - return false; - } - return true; - } - - inline std::vector - BlackBoxOp::FixedBaseScalarMul::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); - } - - inline BlackBoxOp::FixedBaseScalarMul - BlackBoxOp::FixedBaseScalarMul::bincodeDeserialize( - std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BlackBoxOp::FixedBaseScalarMul &obj, - Serializer &serializer) { + obj.inputs = serde::Deserializable::deserialize(deserializer); + obj.domain_separator = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; +} + +namespace Program { + + inline bool operator==(const BlackBoxOp::FixedBaseScalarMul &lhs, const BlackBoxOp::FixedBaseScalarMul &rhs) { + if (!(lhs.low == rhs.low)) { return false; } + if (!(lhs.high == rhs.high)) { return false; } + if (!(lhs.result == rhs.result)) { return false; } + return true; + } + + inline std::vector BlackBoxOp::FixedBaseScalarMul::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BlackBoxOp::FixedBaseScalarMul BlackBoxOp::FixedBaseScalarMul::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::BlackBoxOp::FixedBaseScalarMul &obj, Serializer &serializer) { serde::Serializable::serialize(obj.low, serializer); serde::Serializable::serialize(obj.high, serializer); - serde::Serializable::serialize(obj.result, - serializer); - } - - template <> - template - Program::BlackBoxOp::FixedBaseScalarMul - serde::Deserializable::deserialize( - Deserializer &deserializer) { + serde::Serializable::serialize(obj.result, serializer); +} + +template <> +template +Program::BlackBoxOp::FixedBaseScalarMul serde::Deserializable::deserialize(Deserializer &deserializer) { Program::BlackBoxOp::FixedBaseScalarMul obj; - obj.low = - serde::Deserializable::deserialize(deserializer); - obj.high = - serde::Deserializable::deserialize(deserializer); - obj.result = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BlackBoxOp::EmbeddedCurveAdd &lhs, - const BlackBoxOp::EmbeddedCurveAdd &rhs) { - if (!(lhs.input1_x == rhs.input1_x)) { - return false; - } - if (!(lhs.input1_y == rhs.input1_y)) { - return false; - } - if (!(lhs.input2_x == rhs.input2_x)) { - return false; - } - if (!(lhs.input2_y == rhs.input2_y)) { - return false; - } - if (!(lhs.result == rhs.result)) { - return false; - } - return true; - } - - inline std::vector - BlackBoxOp::EmbeddedCurveAdd::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); - } - - inline BlackBoxOp::EmbeddedCurveAdd - BlackBoxOp::EmbeddedCurveAdd::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BlackBoxOp::EmbeddedCurveAdd &obj, - Serializer &serializer) { - serde::Serializable::serialize(obj.input1_x, - serializer); - serde::Serializable::serialize(obj.input1_y, - serializer); - serde::Serializable::serialize(obj.input2_x, - serializer); - serde::Serializable::serialize(obj.input2_y, - serializer); - serde::Serializable::serialize(obj.result, - serializer); - } - - template <> - template - Program::BlackBoxOp::EmbeddedCurveAdd - serde::Deserializable::deserialize( - Deserializer &deserializer) { + obj.low = serde::Deserializable::deserialize(deserializer); + obj.high = serde::Deserializable::deserialize(deserializer); + obj.result = serde::Deserializable::deserialize(deserializer); + return obj; +} + +namespace Program { + + inline bool operator==(const BlackBoxOp::EmbeddedCurveAdd &lhs, const BlackBoxOp::EmbeddedCurveAdd &rhs) { + if (!(lhs.input1_x == rhs.input1_x)) { return false; } + if (!(lhs.input1_y == rhs.input1_y)) { return false; } + if (!(lhs.input2_x == rhs.input2_x)) { return false; } + if (!(lhs.input2_y == rhs.input2_y)) { return false; } + if (!(lhs.result == rhs.result)) { return false; } + return true; + } + + inline std::vector BlackBoxOp::EmbeddedCurveAdd::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BlackBoxOp::EmbeddedCurveAdd BlackBoxOp::EmbeddedCurveAdd::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::BlackBoxOp::EmbeddedCurveAdd &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.input1_x, serializer); + serde::Serializable::serialize(obj.input1_y, serializer); + serde::Serializable::serialize(obj.input2_x, serializer); + serde::Serializable::serialize(obj.input2_y, serializer); + serde::Serializable::serialize(obj.result, serializer); +} + +template <> +template +Program::BlackBoxOp::EmbeddedCurveAdd serde::Deserializable::deserialize(Deserializer &deserializer) { Program::BlackBoxOp::EmbeddedCurveAdd obj; - obj.input1_x = serde::Deserializable::deserialize( - deserializer); - obj.input1_y = serde::Deserializable::deserialize( - deserializer); - obj.input2_x = serde::Deserializable::deserialize( - deserializer); - obj.input2_y = serde::Deserializable::deserialize( - deserializer); - obj.result = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BlackBoxOp::BigIntAdd &lhs, - const BlackBoxOp::BigIntAdd &rhs) { - if (!(lhs.lhs == rhs.lhs)) { - return false; - } - if (!(lhs.rhs == rhs.rhs)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; - } - - inline std::vector BlackBoxOp::BigIntAdd::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } - - inline BlackBoxOp::BigIntAdd - BlackBoxOp::BigIntAdd::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BlackBoxOp::BigIntAdd &obj, Serializer &serializer) { + obj.input1_x = serde::Deserializable::deserialize(deserializer); + obj.input1_y = serde::Deserializable::deserialize(deserializer); + obj.input2_x = serde::Deserializable::deserialize(deserializer); + obj.input2_y = serde::Deserializable::deserialize(deserializer); + obj.result = serde::Deserializable::deserialize(deserializer); + return obj; +} + +namespace Program { + + inline bool operator==(const BlackBoxOp::BigIntAdd &lhs, const BlackBoxOp::BigIntAdd &rhs) { + if (!(lhs.lhs == rhs.lhs)) { return false; } + if (!(lhs.rhs == rhs.rhs)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } + + inline std::vector BlackBoxOp::BigIntAdd::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BlackBoxOp::BigIntAdd BlackBoxOp::BigIntAdd::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::BlackBoxOp::BigIntAdd &obj, Serializer &serializer) { serde::Serializable::serialize(obj.lhs, serializer); serde::Serializable::serialize(obj.rhs, serializer); - serde::Serializable::serialize(obj.output, - serializer); - } - - template <> - template - Program::BlackBoxOp::BigIntAdd - serde::Deserializable::deserialize( - Deserializer &deserializer) { + serde::Serializable::serialize(obj.output, serializer); +} + +template <> +template +Program::BlackBoxOp::BigIntAdd serde::Deserializable::deserialize(Deserializer &deserializer) { Program::BlackBoxOp::BigIntAdd obj; - obj.lhs = - serde::Deserializable::deserialize(deserializer); - obj.rhs = - serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BlackBoxOp::BigIntSub &lhs, - const BlackBoxOp::BigIntSub &rhs) { - if (!(lhs.lhs == rhs.lhs)) { - return false; - } - if (!(lhs.rhs == rhs.rhs)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; - } - - inline std::vector BlackBoxOp::BigIntSub::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } - - inline BlackBoxOp::BigIntSub - BlackBoxOp::BigIntSub::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BlackBoxOp::BigIntSub &obj, Serializer &serializer) { + obj.lhs = serde::Deserializable::deserialize(deserializer); + obj.rhs = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; +} + +namespace Program { + + inline bool operator==(const BlackBoxOp::BigIntSub &lhs, const BlackBoxOp::BigIntSub &rhs) { + if (!(lhs.lhs == rhs.lhs)) { return false; } + if (!(lhs.rhs == rhs.rhs)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } + + inline std::vector BlackBoxOp::BigIntSub::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BlackBoxOp::BigIntSub BlackBoxOp::BigIntSub::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::BlackBoxOp::BigIntSub &obj, Serializer &serializer) { serde::Serializable::serialize(obj.lhs, serializer); serde::Serializable::serialize(obj.rhs, serializer); - serde::Serializable::serialize(obj.output, - serializer); - } - - template <> - template - Program::BlackBoxOp::BigIntSub - serde::Deserializable::deserialize( - Deserializer &deserializer) { + serde::Serializable::serialize(obj.output, serializer); +} + +template <> +template +Program::BlackBoxOp::BigIntSub serde::Deserializable::deserialize(Deserializer &deserializer) { Program::BlackBoxOp::BigIntSub obj; - obj.lhs = - serde::Deserializable::deserialize(deserializer); - obj.rhs = - serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BlackBoxOp::BigIntMul &lhs, - const BlackBoxOp::BigIntMul &rhs) { - if (!(lhs.lhs == rhs.lhs)) { - return false; - } - if (!(lhs.rhs == rhs.rhs)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; - } - - inline std::vector BlackBoxOp::BigIntMul::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } - - inline BlackBoxOp::BigIntMul - BlackBoxOp::BigIntMul::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BlackBoxOp::BigIntMul &obj, Serializer &serializer) { + obj.lhs = serde::Deserializable::deserialize(deserializer); + obj.rhs = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; +} + +namespace Program { + + inline bool operator==(const BlackBoxOp::BigIntMul &lhs, const BlackBoxOp::BigIntMul &rhs) { + if (!(lhs.lhs == rhs.lhs)) { return false; } + if (!(lhs.rhs == rhs.rhs)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } + + inline std::vector BlackBoxOp::BigIntMul::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BlackBoxOp::BigIntMul BlackBoxOp::BigIntMul::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::BlackBoxOp::BigIntMul &obj, Serializer &serializer) { serde::Serializable::serialize(obj.lhs, serializer); serde::Serializable::serialize(obj.rhs, serializer); - serde::Serializable::serialize(obj.output, - serializer); - } - - template <> - template - Program::BlackBoxOp::BigIntMul - serde::Deserializable::deserialize( - Deserializer &deserializer) { + serde::Serializable::serialize(obj.output, serializer); +} + +template <> +template +Program::BlackBoxOp::BigIntMul serde::Deserializable::deserialize(Deserializer &deserializer) { Program::BlackBoxOp::BigIntMul obj; - obj.lhs = - serde::Deserializable::deserialize(deserializer); - obj.rhs = - serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BlackBoxOp::BigIntDiv &lhs, - const BlackBoxOp::BigIntDiv &rhs) { - if (!(lhs.lhs == rhs.lhs)) { - return false; - } - if (!(lhs.rhs == rhs.rhs)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; - } - - inline std::vector BlackBoxOp::BigIntDiv::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } - - inline BlackBoxOp::BigIntDiv - BlackBoxOp::BigIntDiv::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BlackBoxOp::BigIntDiv &obj, Serializer &serializer) { + obj.lhs = serde::Deserializable::deserialize(deserializer); + obj.rhs = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; +} + +namespace Program { + + inline bool operator==(const BlackBoxOp::BigIntDiv &lhs, const BlackBoxOp::BigIntDiv &rhs) { + if (!(lhs.lhs == rhs.lhs)) { return false; } + if (!(lhs.rhs == rhs.rhs)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } + + inline std::vector BlackBoxOp::BigIntDiv::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BlackBoxOp::BigIntDiv BlackBoxOp::BigIntDiv::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::BlackBoxOp::BigIntDiv &obj, Serializer &serializer) { serde::Serializable::serialize(obj.lhs, serializer); serde::Serializable::serialize(obj.rhs, serializer); - serde::Serializable::serialize(obj.output, - serializer); - } - - template <> - template - Program::BlackBoxOp::BigIntDiv - serde::Deserializable::deserialize( - Deserializer &deserializer) { + serde::Serializable::serialize(obj.output, serializer); +} + +template <> +template +Program::BlackBoxOp::BigIntDiv serde::Deserializable::deserialize(Deserializer &deserializer) { Program::BlackBoxOp::BigIntDiv obj; - obj.lhs = - serde::Deserializable::deserialize(deserializer); - obj.rhs = - serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BlackBoxOp::BigIntFromLeBytes &lhs, - const BlackBoxOp::BigIntFromLeBytes &rhs) { - if (!(lhs.inputs == rhs.inputs)) { - return false; - } - if (!(lhs.modulus == rhs.modulus)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; - } - - inline std::vector - BlackBoxOp::BigIntFromLeBytes::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); - } - - inline BlackBoxOp::BigIntFromLeBytes - BlackBoxOp::BigIntFromLeBytes::bincodeDeserialize( - std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BlackBoxOp::BigIntFromLeBytes &obj, - Serializer &serializer) { - serde::Serializable::serialize(obj.inputs, - serializer); - serde::Serializable::serialize(obj.modulus, - serializer); - serde::Serializable::serialize(obj.output, - serializer); - } - - template <> - template - Program::BlackBoxOp::BigIntFromLeBytes - serde::Deserializable::deserialize( - Deserializer &deserializer) { + obj.lhs = serde::Deserializable::deserialize(deserializer); + obj.rhs = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; +} + +namespace Program { + + inline bool operator==(const BlackBoxOp::BigIntFromLeBytes &lhs, const BlackBoxOp::BigIntFromLeBytes &rhs) { + if (!(lhs.inputs == rhs.inputs)) { return false; } + if (!(lhs.modulus == rhs.modulus)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } + + inline std::vector BlackBoxOp::BigIntFromLeBytes::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BlackBoxOp::BigIntFromLeBytes BlackBoxOp::BigIntFromLeBytes::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::BlackBoxOp::BigIntFromLeBytes &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.inputs, serializer); + serde::Serializable::serialize(obj.modulus, serializer); + serde::Serializable::serialize(obj.output, serializer); +} + +template <> +template +Program::BlackBoxOp::BigIntFromLeBytes serde::Deserializable::deserialize(Deserializer &deserializer) { Program::BlackBoxOp::BigIntFromLeBytes obj; - obj.inputs = - serde::Deserializable::deserialize(deserializer); - obj.modulus = - serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BlackBoxOp::BigIntToLeBytes &lhs, - const BlackBoxOp::BigIntToLeBytes &rhs) { - if (!(lhs.input == rhs.input)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; - } - - inline std::vector - BlackBoxOp::BigIntToLeBytes::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); - } - - inline BlackBoxOp::BigIntToLeBytes - BlackBoxOp::BigIntToLeBytes::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BlackBoxOp::BigIntToLeBytes &obj, Serializer &serializer) { + obj.inputs = serde::Deserializable::deserialize(deserializer); + obj.modulus = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; +} + +namespace Program { + + inline bool operator==(const BlackBoxOp::BigIntToLeBytes &lhs, const BlackBoxOp::BigIntToLeBytes &rhs) { + if (!(lhs.input == rhs.input)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } + + inline std::vector BlackBoxOp::BigIntToLeBytes::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BlackBoxOp::BigIntToLeBytes BlackBoxOp::BigIntToLeBytes::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::BlackBoxOp::BigIntToLeBytes &obj, Serializer &serializer) { serde::Serializable::serialize(obj.input, serializer); - serde::Serializable::serialize(obj.output, - serializer); - } - - template <> - template - Program::BlackBoxOp::BigIntToLeBytes - serde::Deserializable::deserialize( - Deserializer &deserializer) { + serde::Serializable::serialize(obj.output, serializer); +} + +template <> +template +Program::BlackBoxOp::BigIntToLeBytes serde::Deserializable::deserialize(Deserializer &deserializer) { Program::BlackBoxOp::BigIntToLeBytes obj; - obj.input = - serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BlackBoxOp::Poseidon2Permutation &lhs, - const BlackBoxOp::Poseidon2Permutation &rhs) { - if (!(lhs.message == rhs.message)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - if (!(lhs.len == rhs.len)) { - return false; - } - return true; - } - - inline std::vector - BlackBoxOp::Poseidon2Permutation::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize( - *this, serializer); - return std::move(serializer).bytes(); - } - - inline BlackBoxOp::Poseidon2Permutation - BlackBoxOp::Poseidon2Permutation::bincodeDeserialize( - std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void - serde::Serializable::serialize( - const Program::BlackBoxOp::Poseidon2Permutation &obj, - Serializer &serializer) { - serde::Serializable::serialize(obj.message, - serializer); - serde::Serializable::serialize(obj.output, - serializer); + obj.input = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; +} + +namespace Program { + + inline bool operator==(const BlackBoxOp::Poseidon2Permutation &lhs, const BlackBoxOp::Poseidon2Permutation &rhs) { + if (!(lhs.message == rhs.message)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + if (!(lhs.len == rhs.len)) { return false; } + return true; + } + + inline std::vector BlackBoxOp::Poseidon2Permutation::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BlackBoxOp::Poseidon2Permutation BlackBoxOp::Poseidon2Permutation::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::BlackBoxOp::Poseidon2Permutation &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.message, serializer); + serde::Serializable::serialize(obj.output, serializer); serde::Serializable::serialize(obj.len, serializer); - } +} + +template <> +template +Program::BlackBoxOp::Poseidon2Permutation serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxOp::Poseidon2Permutation obj; + obj.message = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + obj.len = serde::Deserializable::deserialize(deserializer); + return obj; +} + +namespace Program { + + inline bool operator==(const BlackBoxOp::Sha256Compression &lhs, const BlackBoxOp::Sha256Compression &rhs) { + if (!(lhs.input == rhs.input)) { return false; } + if (!(lhs.hash_values == rhs.hash_values)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } + + inline std::vector BlackBoxOp::Sha256Compression::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BlackBoxOp::Sha256Compression BlackBoxOp::Sha256Compression::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::BlackBoxOp::Sha256Compression &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.input, serializer); + serde::Serializable::serialize(obj.hash_values, serializer); + serde::Serializable::serialize(obj.output, serializer); +} + +template <> +template +Program::BlackBoxOp::Sha256Compression serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxOp::Sha256Compression obj; + obj.input = serde::Deserializable::deserialize(deserializer); + obj.hash_values = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; +} + +namespace Program { + + inline bool operator==(const BlockId &lhs, const BlockId &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } + + inline std::vector BlockId::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BlockId BlockId::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::BlockId &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.value, serializer); + serializer.decrease_container_depth(); +} + +template <> +template +Program::BlockId serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::BlockId obj; + obj.value = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; +} + +namespace Program { + + inline bool operator==(const Brillig &lhs, const Brillig &rhs) { + if (!(lhs.inputs == rhs.inputs)) { return false; } + if (!(lhs.outputs == rhs.outputs)) { return false; } + if (!(lhs.bytecode == rhs.bytecode)) { return false; } + if (!(lhs.predicate == rhs.predicate)) { return false; } + return true; + } + + inline std::vector Brillig::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline Brillig Brillig::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::Brillig &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.inputs, serializer); + serde::Serializable::serialize(obj.outputs, serializer); + serde::Serializable::serialize(obj.bytecode, serializer); + serde::Serializable::serialize(obj.predicate, serializer); + serializer.decrease_container_depth(); +} + +template <> +template +Program::Brillig serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::Brillig obj; + obj.inputs = serde::Deserializable::deserialize(deserializer); + obj.outputs = serde::Deserializable::deserialize(deserializer); + obj.bytecode = serde::Deserializable::deserialize(deserializer); + obj.predicate = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; +} + +namespace Program { + + inline bool operator==(const BrilligInputs &lhs, const BrilligInputs &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } + + inline std::vector BrilligInputs::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BrilligInputs BrilligInputs::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::BrilligInputs &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.value, serializer); + serializer.decrease_container_depth(); +} + +template <> +template +Program::BrilligInputs serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::BrilligInputs obj; + obj.value = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; +} + +namespace Program { + + inline bool operator==(const BrilligInputs::Single &lhs, const BrilligInputs::Single &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } + + inline std::vector BrilligInputs::Single::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BrilligInputs::Single BrilligInputs::Single::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::BrilligInputs::Single &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.value, serializer); +} + +template <> +template +Program::BrilligInputs::Single serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligInputs::Single obj; + obj.value = serde::Deserializable::deserialize(deserializer); + return obj; +} + +namespace Program { + + inline bool operator==(const BrilligInputs::Array &lhs, const BrilligInputs::Array &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } + + inline std::vector BrilligInputs::Array::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BrilligInputs::Array BrilligInputs::Array::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::BrilligInputs::Array &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.value, serializer); +} + +template <> +template +Program::BrilligInputs::Array serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligInputs::Array obj; + obj.value = serde::Deserializable::deserialize(deserializer); + return obj; +} + +namespace Program { + + inline bool operator==(const BrilligInputs::MemoryArray &lhs, const BrilligInputs::MemoryArray &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } + + inline std::vector BrilligInputs::MemoryArray::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BrilligInputs::MemoryArray BrilligInputs::MemoryArray::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::BrilligInputs::MemoryArray &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.value, serializer); +} + +template <> +template +Program::BrilligInputs::MemoryArray serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligInputs::MemoryArray obj; + obj.value = serde::Deserializable::deserialize(deserializer); + return obj; +} + +namespace Program { + + inline bool operator==(const BrilligOpcode &lhs, const BrilligOpcode &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } + + inline std::vector BrilligOpcode::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BrilligOpcode BrilligOpcode::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::BrilligOpcode &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.value, serializer); + serializer.decrease_container_depth(); +} + +template <> +template +Program::BrilligOpcode serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::BrilligOpcode obj; + obj.value = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; +} + +namespace Program { + + inline bool operator==(const BrilligOpcode::BinaryFieldOp &lhs, const BrilligOpcode::BinaryFieldOp &rhs) { + if (!(lhs.destination == rhs.destination)) { return false; } + if (!(lhs.op == rhs.op)) { return false; } + if (!(lhs.lhs == rhs.lhs)) { return false; } + if (!(lhs.rhs == rhs.rhs)) { return false; } + return true; + } + + inline std::vector BrilligOpcode::BinaryFieldOp::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BrilligOpcode::BinaryFieldOp BrilligOpcode::BinaryFieldOp::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::BrilligOpcode::BinaryFieldOp &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.destination, serializer); + serde::Serializable::serialize(obj.op, serializer); + serde::Serializable::serialize(obj.lhs, serializer); + serde::Serializable::serialize(obj.rhs, serializer); +} + +template <> +template +Program::BrilligOpcode::BinaryFieldOp serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOpcode::BinaryFieldOp obj; + obj.destination = serde::Deserializable::deserialize(deserializer); + obj.op = serde::Deserializable::deserialize(deserializer); + obj.lhs = serde::Deserializable::deserialize(deserializer); + obj.rhs = serde::Deserializable::deserialize(deserializer); + return obj; +} + +namespace Program { + + inline bool operator==(const BrilligOpcode::BinaryIntOp &lhs, const BrilligOpcode::BinaryIntOp &rhs) { + if (!(lhs.destination == rhs.destination)) { return false; } + if (!(lhs.op == rhs.op)) { return false; } + if (!(lhs.bit_size == rhs.bit_size)) { return false; } + if (!(lhs.lhs == rhs.lhs)) { return false; } + if (!(lhs.rhs == rhs.rhs)) { return false; } + return true; + } + + inline std::vector BrilligOpcode::BinaryIntOp::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BrilligOpcode::BinaryIntOp BrilligOpcode::BinaryIntOp::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::BrilligOpcode::BinaryIntOp &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.destination, serializer); + serde::Serializable::serialize(obj.op, serializer); + serde::Serializable::serialize(obj.bit_size, serializer); + serde::Serializable::serialize(obj.lhs, serializer); + serde::Serializable::serialize(obj.rhs, serializer); +} + +template <> +template +Program::BrilligOpcode::BinaryIntOp serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOpcode::BinaryIntOp obj; + obj.destination = serde::Deserializable::deserialize(deserializer); + obj.op = serde::Deserializable::deserialize(deserializer); + obj.bit_size = serde::Deserializable::deserialize(deserializer); + obj.lhs = serde::Deserializable::deserialize(deserializer); + obj.rhs = serde::Deserializable::deserialize(deserializer); + return obj; +} + +namespace Program { + + inline bool operator==(const BrilligOpcode::Cast &lhs, const BrilligOpcode::Cast &rhs) { + if (!(lhs.destination == rhs.destination)) { return false; } + if (!(lhs.source == rhs.source)) { return false; } + if (!(lhs.bit_size == rhs.bit_size)) { return false; } + return true; + } + + inline std::vector BrilligOpcode::Cast::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BrilligOpcode::Cast BrilligOpcode::Cast::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::BrilligOpcode::Cast &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.destination, serializer); + serde::Serializable::serialize(obj.source, serializer); + serde::Serializable::serialize(obj.bit_size, serializer); +} + +template <> +template +Program::BrilligOpcode::Cast serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOpcode::Cast obj; + obj.destination = serde::Deserializable::deserialize(deserializer); + obj.source = serde::Deserializable::deserialize(deserializer); + obj.bit_size = serde::Deserializable::deserialize(deserializer); + return obj; +} + +namespace Program { + + inline bool operator==(const BrilligOpcode::JumpIfNot &lhs, const BrilligOpcode::JumpIfNot &rhs) { + if (!(lhs.condition == rhs.condition)) { return false; } + if (!(lhs.location == rhs.location)) { return false; } + return true; + } + + inline std::vector BrilligOpcode::JumpIfNot::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BrilligOpcode::JumpIfNot BrilligOpcode::JumpIfNot::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::BrilligOpcode::JumpIfNot &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.condition, serializer); + serde::Serializable::serialize(obj.location, serializer); +} + +template <> +template +Program::BrilligOpcode::JumpIfNot serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOpcode::JumpIfNot obj; + obj.condition = serde::Deserializable::deserialize(deserializer); + obj.location = serde::Deserializable::deserialize(deserializer); + return obj; +} + +namespace Program { + + inline bool operator==(const BrilligOpcode::JumpIf &lhs, const BrilligOpcode::JumpIf &rhs) { + if (!(lhs.condition == rhs.condition)) { return false; } + if (!(lhs.location == rhs.location)) { return false; } + return true; + } + + inline std::vector BrilligOpcode::JumpIf::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BrilligOpcode::JumpIf BrilligOpcode::JumpIf::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::BrilligOpcode::JumpIf &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.condition, serializer); + serde::Serializable::serialize(obj.location, serializer); +} + +template <> +template +Program::BrilligOpcode::JumpIf serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOpcode::JumpIf obj; + obj.condition = serde::Deserializable::deserialize(deserializer); + obj.location = serde::Deserializable::deserialize(deserializer); + return obj; +} + +namespace Program { + + inline bool operator==(const BrilligOpcode::Jump &lhs, const BrilligOpcode::Jump &rhs) { + if (!(lhs.location == rhs.location)) { return false; } + return true; + } + + inline std::vector BrilligOpcode::Jump::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BrilligOpcode::Jump BrilligOpcode::Jump::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::BrilligOpcode::Jump &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.location, serializer); +} + +template <> +template +Program::BrilligOpcode::Jump serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOpcode::Jump obj; + obj.location = serde::Deserializable::deserialize(deserializer); + return obj; +} + +namespace Program { + + inline bool operator==(const BrilligOpcode::CalldataCopy &lhs, const BrilligOpcode::CalldataCopy &rhs) { + if (!(lhs.destination_address == rhs.destination_address)) { return false; } + if (!(lhs.size == rhs.size)) { return false; } + if (!(lhs.offset == rhs.offset)) { return false; } + return true; + } + + inline std::vector BrilligOpcode::CalldataCopy::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BrilligOpcode::CalldataCopy BrilligOpcode::CalldataCopy::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::BrilligOpcode::CalldataCopy &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.destination_address, serializer); + serde::Serializable::serialize(obj.size, serializer); + serde::Serializable::serialize(obj.offset, serializer); +} + +template <> +template +Program::BrilligOpcode::CalldataCopy serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOpcode::CalldataCopy obj; + obj.destination_address = serde::Deserializable::deserialize(deserializer); + obj.size = serde::Deserializable::deserialize(deserializer); + obj.offset = serde::Deserializable::deserialize(deserializer); + return obj; +} + +namespace Program { + + inline bool operator==(const BrilligOpcode::Call &lhs, const BrilligOpcode::Call &rhs) { + if (!(lhs.location == rhs.location)) { return false; } + return true; + } + + inline std::vector BrilligOpcode::Call::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BrilligOpcode::Call BrilligOpcode::Call::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::BrilligOpcode::Call &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.location, serializer); +} + +template <> +template +Program::BrilligOpcode::Call serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOpcode::Call obj; + obj.location = serde::Deserializable::deserialize(deserializer); + return obj; +} + +namespace Program { - template <> - template - Program::BlackBoxOp::Poseidon2Permutation - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxOp::Poseidon2Permutation obj; - obj.message = - serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - obj.len = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BlackBoxOp::Sha256Compression &lhs, - const BlackBoxOp::Sha256Compression &rhs) { - if (!(lhs.input == rhs.input)) { - return false; - } - if (!(lhs.hash_values == rhs.hash_values)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; - } - - inline std::vector - BlackBoxOp::Sha256Compression::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); - } - - inline BlackBoxOp::Sha256Compression - BlackBoxOp::Sha256Compression::bincodeDeserialize( - std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BlackBoxOp::Sha256Compression &obj, - Serializer &serializer) { - serde::Serializable::serialize(obj.input, serializer); - serde::Serializable::serialize(obj.hash_values, - serializer); - serde::Serializable::serialize(obj.output, - serializer); - } - - template <> - template - Program::BlackBoxOp::Sha256Compression - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxOp::Sha256Compression obj; - obj.input = - serde::Deserializable::deserialize(deserializer); - obj.hash_values = - serde::Deserializable::deserialize( - deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BlockId &lhs, const BlockId &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; - } - - inline std::vector BlockId::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } - - inline BlockId BlockId::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void - serde::Serializable::serialize(const Program::BlockId &obj, - Serializer &serializer) { - serializer.increase_container_depth(); + inline bool operator==(const BrilligOpcode::Const &lhs, const BrilligOpcode::Const &rhs) { + if (!(lhs.destination == rhs.destination)) { return false; } + if (!(lhs.bit_size == rhs.bit_size)) { return false; } + if (!(lhs.value == rhs.value)) { return false; } + return true; + } + + inline std::vector BrilligOpcode::Const::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BrilligOpcode::Const BrilligOpcode::Const::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::BrilligOpcode::Const &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.destination, serializer); + serde::Serializable::serialize(obj.bit_size, serializer); serde::Serializable::serialize(obj.value, serializer); - serializer.decrease_container_depth(); - } +} - template <> - template - Program::BlockId serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::BlockId obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); +template <> +template +Program::BrilligOpcode::Const serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOpcode::Const obj; + obj.destination = serde::Deserializable::deserialize(deserializer); + obj.bit_size = serde::Deserializable::deserialize(deserializer); + obj.value = serde::Deserializable::deserialize(deserializer); return obj; - } +} - namespace Program { +namespace Program { - inline bool operator==(const Brillig &lhs, const Brillig &rhs) { - if (!(lhs.inputs == rhs.inputs)) { - return false; + inline bool operator==(const BrilligOpcode::Return &lhs, const BrilligOpcode::Return &rhs) { + return true; } - if (!(lhs.outputs == rhs.outputs)) { - return false; + + inline std::vector BrilligOpcode::Return::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); } - if (!(lhs.bytecode == rhs.bytecode)) { - return false; + + inline BrilligOpcode::Return BrilligOpcode::Return::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; } - if (!(lhs.predicate == rhs.predicate)) { - return false; + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::BrilligOpcode::Return &obj, Serializer &serializer) { +} + +template <> +template +Program::BrilligOpcode::Return serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOpcode::Return obj; + return obj; +} + +namespace Program { + + inline bool operator==(const BrilligOpcode::ForeignCall &lhs, const BrilligOpcode::ForeignCall &rhs) { + if (!(lhs.function == rhs.function)) { return false; } + if (!(lhs.destinations == rhs.destinations)) { return false; } + if (!(lhs.destination_value_types == rhs.destination_value_types)) { return false; } + if (!(lhs.inputs == rhs.inputs)) { return false; } + if (!(lhs.input_value_types == rhs.input_value_types)) { return false; } + return true; + } + + inline std::vector BrilligOpcode::ForeignCall::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BrilligOpcode::ForeignCall BrilligOpcode::ForeignCall::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::BrilligOpcode::ForeignCall &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.function, serializer); + serde::Serializable::serialize(obj.destinations, serializer); + serde::Serializable::serialize(obj.destination_value_types, serializer); + serde::Serializable::serialize(obj.inputs, serializer); + serde::Serializable::serialize(obj.input_value_types, serializer); +} + +template <> +template +Program::BrilligOpcode::ForeignCall serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOpcode::ForeignCall obj; + obj.function = serde::Deserializable::deserialize(deserializer); + obj.destinations = serde::Deserializable::deserialize(deserializer); + obj.destination_value_types = serde::Deserializable::deserialize(deserializer); + obj.inputs = serde::Deserializable::deserialize(deserializer); + obj.input_value_types = serde::Deserializable::deserialize(deserializer); + return obj; +} + +namespace Program { + + inline bool operator==(const BrilligOpcode::Mov &lhs, const BrilligOpcode::Mov &rhs) { + if (!(lhs.destination == rhs.destination)) { return false; } + if (!(lhs.source == rhs.source)) { return false; } + return true; } - return true; - } - inline std::vector Brillig::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } + inline std::vector BrilligOpcode::Mov::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - inline Brillig Brillig::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); + inline BrilligOpcode::Mov BrilligOpcode::Mov::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; } - return value; - } - } // end of namespace Program +} // end of namespace Program - template <> - template - void - serde::Serializable::serialize(const Program::Brillig &obj, - Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.inputs, - serializer); - serde::Serializable::serialize(obj.outputs, - serializer); - serde::Serializable::serialize(obj.bytecode, - serializer); - serde::Serializable::serialize(obj.predicate, - serializer); - serializer.decrease_container_depth(); - } +template <> +template +void serde::Serializable::serialize(const Program::BrilligOpcode::Mov &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.destination, serializer); + serde::Serializable::serialize(obj.source, serializer); +} - template <> - template - Program::Brillig serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::Brillig obj; - obj.inputs = - serde::Deserializable::deserialize(deserializer); - obj.outputs = - serde::Deserializable::deserialize(deserializer); - obj.bytecode = serde::Deserializable::deserialize( - deserializer); - obj.predicate = serde::Deserializable::deserialize( - deserializer); - deserializer.decrease_container_depth(); +template <> +template +Program::BrilligOpcode::Mov serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOpcode::Mov obj; + obj.destination = serde::Deserializable::deserialize(deserializer); + obj.source = serde::Deserializable::deserialize(deserializer); return obj; - } +} - namespace Program { +namespace Program { - inline bool operator==(const BrilligInputs &lhs, const BrilligInputs &rhs) { - if (!(lhs.value == rhs.value)) { - return false; + inline bool operator==(const BrilligOpcode::ConditionalMov &lhs, const BrilligOpcode::ConditionalMov &rhs) { + if (!(lhs.destination == rhs.destination)) { return false; } + if (!(lhs.source_a == rhs.source_a)) { return false; } + if (!(lhs.source_b == rhs.source_b)) { return false; } + if (!(lhs.condition == rhs.condition)) { return false; } + return true; } - return true; - } - inline std::vector BrilligInputs::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } + inline std::vector BrilligOpcode::ConditionalMov::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - inline BrilligInputs - BrilligInputs::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); + inline BrilligOpcode::ConditionalMov BrilligOpcode::ConditionalMov::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; } - return value; - } - } // end of namespace Program +} // end of namespace Program - template <> - template - void serde::Serializable::serialize( - const Program::BrilligInputs &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.value, serializer); - serializer.decrease_container_depth(); - } +template <> +template +void serde::Serializable::serialize(const Program::BrilligOpcode::ConditionalMov &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.destination, serializer); + serde::Serializable::serialize(obj.source_a, serializer); + serde::Serializable::serialize(obj.source_b, serializer); + serde::Serializable::serialize(obj.condition, serializer); +} - template <> - template - Program::BrilligInputs - serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::BrilligInputs obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); +template <> +template +Program::BrilligOpcode::ConditionalMov serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOpcode::ConditionalMov obj; + obj.destination = serde::Deserializable::deserialize(deserializer); + obj.source_a = serde::Deserializable::deserialize(deserializer); + obj.source_b = serde::Deserializable::deserialize(deserializer); + obj.condition = serde::Deserializable::deserialize(deserializer); return obj; - } +} - namespace Program { +namespace Program { - inline bool operator==(const BrilligInputs::Single &lhs, - const BrilligInputs::Single &rhs) { - if (!(lhs.value == rhs.value)) { - return false; + inline bool operator==(const BrilligOpcode::Load &lhs, const BrilligOpcode::Load &rhs) { + if (!(lhs.destination == rhs.destination)) { return false; } + if (!(lhs.source_pointer == rhs.source_pointer)) { return false; } + return true; } - return true; - } - inline std::vector BrilligInputs::Single::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } + inline std::vector BrilligOpcode::Load::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - inline BrilligInputs::Single - BrilligInputs::Single::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); + inline BrilligOpcode::Load BrilligOpcode::Load::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; } - return value; - } - } // end of namespace Program +} // end of namespace Program - template <> - template - void serde::Serializable::serialize( - const Program::BrilligInputs::Single &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.value, serializer); - } +template <> +template +void serde::Serializable::serialize(const Program::BrilligOpcode::Load &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.destination, serializer); + serde::Serializable::serialize(obj.source_pointer, serializer); +} - template <> - template - Program::BrilligInputs::Single - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligInputs::Single obj; - obj.value = - serde::Deserializable::deserialize(deserializer); +template <> +template +Program::BrilligOpcode::Load serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOpcode::Load obj; + obj.destination = serde::Deserializable::deserialize(deserializer); + obj.source_pointer = serde::Deserializable::deserialize(deserializer); return obj; - } +} - namespace Program { +namespace Program { - inline bool operator==(const BrilligInputs::Array &lhs, - const BrilligInputs::Array &rhs) { - if (!(lhs.value == rhs.value)) { - return false; + inline bool operator==(const BrilligOpcode::Store &lhs, const BrilligOpcode::Store &rhs) { + if (!(lhs.destination_pointer == rhs.destination_pointer)) { return false; } + if (!(lhs.source == rhs.source)) { return false; } + return true; } - return true; - } - - inline std::vector BrilligInputs::Array::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } - inline BrilligInputs::Array - BrilligInputs::Array::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); + inline std::vector BrilligOpcode::Store::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); } - return value; - } - } // end of namespace Program + inline BrilligOpcode::Store BrilligOpcode::Store::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } - template <> - template - void serde::Serializable::serialize( - const Program::BrilligInputs::Array &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.value, serializer); - } +} // end of namespace Program - template <> - template - Program::BrilligInputs::Array - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligInputs::Array obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BrilligInputs::MemoryArray &lhs, - const BrilligInputs::MemoryArray &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; - } - - inline std::vector - BrilligInputs::MemoryArray::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); - } - - inline BrilligInputs::MemoryArray - BrilligInputs::MemoryArray::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BrilligInputs::MemoryArray &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.value, serializer); - } +template <> +template +void serde::Serializable::serialize(const Program::BrilligOpcode::Store &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.destination_pointer, serializer); + serde::Serializable::serialize(obj.source, serializer); +} - template <> - template - Program::BrilligInputs::MemoryArray - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligInputs::MemoryArray obj; - obj.value = - serde::Deserializable::deserialize(deserializer); +template <> +template +Program::BrilligOpcode::Store serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOpcode::Store obj; + obj.destination_pointer = serde::Deserializable::deserialize(deserializer); + obj.source = serde::Deserializable::deserialize(deserializer); return obj; - } +} - namespace Program { +namespace Program { - inline bool operator==(const BrilligOpcode &lhs, const BrilligOpcode &rhs) { - if (!(lhs.value == rhs.value)) { - return false; + inline bool operator==(const BrilligOpcode::BlackBox &lhs, const BrilligOpcode::BlackBox &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; } - return true; - } - inline std::vector BrilligOpcode::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } + inline std::vector BrilligOpcode::BlackBox::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - inline BrilligOpcode - BrilligOpcode::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); + inline BrilligOpcode::BlackBox BrilligOpcode::BlackBox::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; } - return value; - } - } // end of namespace Program +} // end of namespace Program - template <> - template - void serde::Serializable::serialize( - const Program::BrilligOpcode &obj, Serializer &serializer) { - serializer.increase_container_depth(); +template <> +template +void serde::Serializable::serialize(const Program::BrilligOpcode::BlackBox &obj, Serializer &serializer) { serde::Serializable::serialize(obj.value, serializer); - serializer.decrease_container_depth(); - } +} - template <> - template - Program::BrilligOpcode - serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::BrilligOpcode obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); +template <> +template +Program::BrilligOpcode::BlackBox serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOpcode::BlackBox obj; + obj.value = serde::Deserializable::deserialize(deserializer); return obj; - } +} - namespace Program { +namespace Program { - inline bool operator==(const BrilligOpcode::BinaryFieldOp &lhs, - const BrilligOpcode::BinaryFieldOp &rhs) { - if (!(lhs.destination == rhs.destination)) { - return false; - } - if (!(lhs.op == rhs.op)) { - return false; + inline bool operator==(const BrilligOpcode::Trap &lhs, const BrilligOpcode::Trap &rhs) { + return true; } - if (!(lhs.lhs == rhs.lhs)) { - return false; + + inline std::vector BrilligOpcode::Trap::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); } - if (!(lhs.rhs == rhs.rhs)) { - return false; + + inline BrilligOpcode::Trap BrilligOpcode::Trap::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; } - return true; - } - inline std::vector - BrilligOpcode::BinaryFieldOp::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); - } +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::BrilligOpcode::Trap &obj, Serializer &serializer) { +} + +template <> +template +Program::BrilligOpcode::Trap serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOpcode::Trap obj; + return obj; +} + +namespace Program { - inline BrilligOpcode::BinaryFieldOp - BrilligOpcode::BinaryFieldOp::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); + inline bool operator==(const BrilligOpcode::Stop &lhs, const BrilligOpcode::Stop &rhs) { + if (!(lhs.return_data_offset == rhs.return_data_offset)) { return false; } + if (!(lhs.return_data_size == rhs.return_data_size)) { return false; } + return true; } - return value; - } - } // end of namespace Program + inline std::vector BrilligOpcode::Stop::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - template <> - template - void serde::Serializable::serialize( - const Program::BrilligOpcode::BinaryFieldOp &obj, - Serializer &serializer) { - serde::Serializable::serialize(obj.destination, - serializer); - serde::Serializable::serialize(obj.op, serializer); - serde::Serializable::serialize(obj.lhs, serializer); - serde::Serializable::serialize(obj.rhs, serializer); - } + inline BrilligOpcode::Stop BrilligOpcode::Stop::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } - template <> - template - Program::BrilligOpcode::BinaryFieldOp - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOpcode::BinaryFieldOp obj; - obj.destination = - serde::Deserializable::deserialize( - deserializer); - obj.op = serde::Deserializable::deserialize(deserializer); - obj.lhs = - serde::Deserializable::deserialize(deserializer); - obj.rhs = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BrilligOpcode::BinaryIntOp &lhs, - const BrilligOpcode::BinaryIntOp &rhs) { - if (!(lhs.destination == rhs.destination)) { - return false; - } - if (!(lhs.op == rhs.op)) { - return false; - } - if (!(lhs.bit_size == rhs.bit_size)) { - return false; - } - if (!(lhs.lhs == rhs.lhs)) { - return false; - } - if (!(lhs.rhs == rhs.rhs)) { - return false; - } - return true; - } - - inline std::vector - BrilligOpcode::BinaryIntOp::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); - } - - inline BrilligOpcode::BinaryIntOp - BrilligOpcode::BinaryIntOp::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BrilligOpcode::BinaryIntOp &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.destination, - serializer); - serde::Serializable::serialize(obj.op, serializer); - serde::Serializable::serialize(obj.bit_size, - serializer); - serde::Serializable::serialize(obj.lhs, serializer); - serde::Serializable::serialize(obj.rhs, serializer); - } +} // end of namespace Program - template <> - template - Program::BrilligOpcode::BinaryIntOp - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOpcode::BinaryIntOp obj; - obj.destination = - serde::Deserializable::deserialize( - deserializer); - obj.op = serde::Deserializable::deserialize(deserializer); - obj.bit_size = serde::Deserializable::deserialize( - deserializer); - obj.lhs = - serde::Deserializable::deserialize(deserializer); - obj.rhs = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BrilligOpcode::Cast &lhs, - const BrilligOpcode::Cast &rhs) { - if (!(lhs.destination == rhs.destination)) { - return false; - } - if (!(lhs.source == rhs.source)) { - return false; - } - if (!(lhs.bit_size == rhs.bit_size)) { - return false; - } - return true; - } - - inline std::vector BrilligOpcode::Cast::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } - - inline BrilligOpcode::Cast - BrilligOpcode::Cast::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BrilligOpcode::Cast &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.destination, - serializer); - serde::Serializable::serialize(obj.source, - serializer); - serde::Serializable::serialize(obj.bit_size, - serializer); - } - - template <> - template - Program::BrilligOpcode::Cast - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOpcode::Cast obj; - obj.destination = - serde::Deserializable::deserialize( - deserializer); - obj.source = - serde::Deserializable::deserialize(deserializer); - obj.bit_size = serde::Deserializable::deserialize( - deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BrilligOpcode::JumpIfNot &lhs, - const BrilligOpcode::JumpIfNot &rhs) { - if (!(lhs.condition == rhs.condition)) { - return false; - } - if (!(lhs.location == rhs.location)) { - return false; - } - return true; - } - - inline std::vector - BrilligOpcode::JumpIfNot::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } - - inline BrilligOpcode::JumpIfNot - BrilligOpcode::JumpIfNot::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BrilligOpcode::JumpIfNot &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.condition, - serializer); - serde::Serializable::serialize(obj.location, - serializer); - } - - template <> - template - Program::BrilligOpcode::JumpIfNot - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOpcode::JumpIfNot obj; - obj.condition = serde::Deserializable::deserialize( - deserializer); - obj.location = serde::Deserializable::deserialize( - deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BrilligOpcode::JumpIf &lhs, - const BrilligOpcode::JumpIf &rhs) { - if (!(lhs.condition == rhs.condition)) { - return false; - } - if (!(lhs.location == rhs.location)) { - return false; - } - return true; - } - - inline std::vector BrilligOpcode::JumpIf::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } - - inline BrilligOpcode::JumpIf - BrilligOpcode::JumpIf::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BrilligOpcode::JumpIf &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.condition, - serializer); - serde::Serializable::serialize(obj.location, - serializer); - } - - template <> - template - Program::BrilligOpcode::JumpIf - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOpcode::JumpIf obj; - obj.condition = serde::Deserializable::deserialize( - deserializer); - obj.location = serde::Deserializable::deserialize( - deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BrilligOpcode::Jump &lhs, - const BrilligOpcode::Jump &rhs) { - if (!(lhs.location == rhs.location)) { - return false; - } - return true; - } - - inline std::vector BrilligOpcode::Jump::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } - - inline BrilligOpcode::Jump - BrilligOpcode::Jump::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BrilligOpcode::Jump &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.location, - serializer); - } - - template <> - template - Program::BrilligOpcode::Jump - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOpcode::Jump obj; - obj.location = serde::Deserializable::deserialize( - deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BrilligOpcode::CalldataCopy &lhs, - const BrilligOpcode::CalldataCopy &rhs) { - if (!(lhs.destination_address == rhs.destination_address)) { - return false; - } - if (!(lhs.size == rhs.size)) { - return false; - } - if (!(lhs.offset == rhs.offset)) { - return false; - } - return true; - } - - inline std::vector - BrilligOpcode::CalldataCopy::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); - } - - inline BrilligOpcode::CalldataCopy - BrilligOpcode::CalldataCopy::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BrilligOpcode::CalldataCopy &obj, Serializer &serializer) { - serde::Serializable::serialize( - obj.destination_address, serializer); - serde::Serializable::serialize(obj.size, serializer); - serde::Serializable::serialize(obj.offset, - serializer); - } - - template <> - template - Program::BrilligOpcode::CalldataCopy - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOpcode::CalldataCopy obj; - obj.destination_address = - serde::Deserializable::deserialize( - deserializer); - obj.size = - serde::Deserializable::deserialize(deserializer); - obj.offset = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BrilligOpcode::Call &lhs, - const BrilligOpcode::Call &rhs) { - if (!(lhs.location == rhs.location)) { - return false; - } - return true; - } - - inline std::vector BrilligOpcode::Call::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } - - inline BrilligOpcode::Call - BrilligOpcode::Call::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BrilligOpcode::Call &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.location, - serializer); - } - - template <> - template - Program::BrilligOpcode::Call - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOpcode::Call obj; - obj.location = serde::Deserializable::deserialize( - deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BrilligOpcode::Const &lhs, - const BrilligOpcode::Const &rhs) { - if (!(lhs.destination == rhs.destination)) { - return false; - } - if (!(lhs.bit_size == rhs.bit_size)) { - return false; - } - if (!(lhs.value == rhs.value)) { - return false; - } - return true; - } - - inline std::vector BrilligOpcode::Const::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } - - inline BrilligOpcode::Const - BrilligOpcode::Const::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BrilligOpcode::Const &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.destination, - serializer); - serde::Serializable::serialize(obj.bit_size, - serializer); - serde::Serializable::serialize(obj.value, serializer); - } +template <> +template +void serde::Serializable::serialize(const Program::BrilligOpcode::Stop &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.return_data_offset, serializer); + serde::Serializable::serialize(obj.return_data_size, serializer); +} - template <> - template - Program::BrilligOpcode::Const - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOpcode::Const obj; - obj.destination = - serde::Deserializable::deserialize( - deserializer); - obj.bit_size = serde::Deserializable::deserialize( - deserializer); - obj.value = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BrilligOpcode::Return &lhs, - const BrilligOpcode::Return &rhs) { - return true; - } - - inline std::vector BrilligOpcode::Return::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } - - inline BrilligOpcode::Return - BrilligOpcode::Return::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BrilligOpcode::Return &obj, Serializer &serializer) {} - - template <> - template - Program::BrilligOpcode::Return - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOpcode::Return obj; +template <> +template +Program::BrilligOpcode::Stop serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOpcode::Stop obj; + obj.return_data_offset = serde::Deserializable::deserialize(deserializer); + obj.return_data_size = serde::Deserializable::deserialize(deserializer); return obj; - } - - namespace Program { - - inline bool operator==(const BrilligOpcode::ForeignCall &lhs, - const BrilligOpcode::ForeignCall &rhs) { - if (!(lhs.function == rhs.function)) { - return false; - } - if (!(lhs.destinations == rhs.destinations)) { - return false; - } - if (!(lhs.destination_value_types == rhs.destination_value_types)) { - return false; - } - if (!(lhs.inputs == rhs.inputs)) { - return false; - } - if (!(lhs.input_value_types == rhs.input_value_types)) { - return false; - } - return true; - } - - inline std::vector - BrilligOpcode::ForeignCall::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); - } - - inline BrilligOpcode::ForeignCall - BrilligOpcode::ForeignCall::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BrilligOpcode::ForeignCall &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.function, - serializer); - serde::Serializable::serialize(obj.destinations, - serializer); - serde::Serializable::serialize( - obj.destination_value_types, serializer); - serde::Serializable::serialize(obj.inputs, - serializer); - serde::Serializable::serialize( - obj.input_value_types, serializer); - } - - template <> - template - Program::BrilligOpcode::ForeignCall - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOpcode::ForeignCall obj; - obj.function = serde::Deserializable::deserialize( - deserializer); - obj.destinations = - serde::Deserializable::deserialize( - deserializer); - obj.destination_value_types = serde::Deserializable< - decltype(obj.destination_value_types)>::deserialize(deserializer); - obj.inputs = - serde::Deserializable::deserialize(deserializer); - obj.input_value_types = - serde::Deserializable::deserialize( - deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BrilligOpcode::Mov &lhs, - const BrilligOpcode::Mov &rhs) { - if (!(lhs.destination == rhs.destination)) { - return false; - } - if (!(lhs.source == rhs.source)) { - return false; - } - return true; - } - - inline std::vector BrilligOpcode::Mov::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } - - inline BrilligOpcode::Mov - BrilligOpcode::Mov::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BrilligOpcode::Mov &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.destination, - serializer); - serde::Serializable::serialize(obj.source, - serializer); - } - - template <> - template - Program::BrilligOpcode::Mov - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOpcode::Mov obj; - obj.destination = - serde::Deserializable::deserialize( - deserializer); - obj.source = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BrilligOpcode::ConditionalMov &lhs, - const BrilligOpcode::ConditionalMov &rhs) { - if (!(lhs.destination == rhs.destination)) { - return false; - } - if (!(lhs.source_a == rhs.source_a)) { - return false; - } - if (!(lhs.source_b == rhs.source_b)) { - return false; - } - if (!(lhs.condition == rhs.condition)) { - return false; - } - return true; - } - - inline std::vector - BrilligOpcode::ConditionalMov::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); - } - - inline BrilligOpcode::ConditionalMov - BrilligOpcode::ConditionalMov::bincodeDeserialize( - std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BrilligOpcode::ConditionalMov &obj, - Serializer &serializer) { - serde::Serializable::serialize(obj.destination, - serializer); - serde::Serializable::serialize(obj.source_a, - serializer); - serde::Serializable::serialize(obj.source_b, - serializer); - serde::Serializable::serialize(obj.condition, - serializer); - } - - template <> - template - Program::BrilligOpcode::ConditionalMov - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOpcode::ConditionalMov obj; - obj.destination = - serde::Deserializable::deserialize( - deserializer); - obj.source_a = serde::Deserializable::deserialize( - deserializer); - obj.source_b = serde::Deserializable::deserialize( - deserializer); - obj.condition = serde::Deserializable::deserialize( - deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BrilligOpcode::Load &lhs, - const BrilligOpcode::Load &rhs) { - if (!(lhs.destination == rhs.destination)) { - return false; - } - if (!(lhs.source_pointer == rhs.source_pointer)) { - return false; - } - return true; - } - - inline std::vector BrilligOpcode::Load::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } - - inline BrilligOpcode::Load - BrilligOpcode::Load::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BrilligOpcode::Load &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.destination, - serializer); - serde::Serializable::serialize( - obj.source_pointer, serializer); - } - - template <> - template - Program::BrilligOpcode::Load - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOpcode::Load obj; - obj.destination = - serde::Deserializable::deserialize( - deserializer); - obj.source_pointer = - serde::Deserializable::deserialize( - deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BrilligOpcode::Store &lhs, - const BrilligOpcode::Store &rhs) { - if (!(lhs.destination_pointer == rhs.destination_pointer)) { - return false; - } - if (!(lhs.source == rhs.source)) { - return false; - } - return true; - } - - inline std::vector BrilligOpcode::Store::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } - - inline BrilligOpcode::Store - BrilligOpcode::Store::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BrilligOpcode::Store &obj, Serializer &serializer) { - serde::Serializable::serialize( - obj.destination_pointer, serializer); - serde::Serializable::serialize(obj.source, - serializer); - } - - template <> - template - Program::BrilligOpcode::Store - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOpcode::Store obj; - obj.destination_pointer = - serde::Deserializable::deserialize( - deserializer); - obj.source = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BrilligOpcode::BlackBox &lhs, - const BrilligOpcode::BlackBox &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; - } - - inline std::vector - BrilligOpcode::BlackBox::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } - - inline BrilligOpcode::BlackBox - BrilligOpcode::BlackBox::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BrilligOpcode::BlackBox &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.value, serializer); - } +} - template <> - template - Program::BrilligOpcode::BlackBox - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOpcode::BlackBox obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BrilligOpcode::Trap &lhs, - const BrilligOpcode::Trap &rhs) { - return true; - } - - inline std::vector BrilligOpcode::Trap::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } - - inline BrilligOpcode::Trap - BrilligOpcode::Trap::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BrilligOpcode::Trap &obj, Serializer &serializer) {} - - template <> - template - Program::BrilligOpcode::Trap - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOpcode::Trap obj; - return obj; - } - - namespace Program { - - inline bool operator==(const BrilligOpcode::Stop &lhs, - const BrilligOpcode::Stop &rhs) { - if (!(lhs.return_data_offset == rhs.return_data_offset)) { - return false; - } - if (!(lhs.return_data_size == rhs.return_data_size)) { - return false; - } - return true; - } - - inline std::vector BrilligOpcode::Stop::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } - - inline BrilligOpcode::Stop - BrilligOpcode::Stop::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BrilligOpcode::Stop &obj, Serializer &serializer) { - serde::Serializable::serialize( - obj.return_data_offset, serializer); - serde::Serializable::serialize( - obj.return_data_size, serializer); - } - - template <> - template - Program::BrilligOpcode::Stop - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOpcode::Stop obj; - obj.return_data_offset = - serde::Deserializable::deserialize( - deserializer); - obj.return_data_size = - serde::Deserializable::deserialize( - deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BrilligOutputs &lhs, const BrilligOutputs &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; - } - - inline std::vector BrilligOutputs::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } - - inline BrilligOutputs - BrilligOutputs::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BrilligOutputs &obj, Serializer &serializer) { +namespace Program { + + inline bool operator==(const BrilligOutputs &lhs, const BrilligOutputs &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } + + inline std::vector BrilligOutputs::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BrilligOutputs BrilligOutputs::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::BrilligOutputs &obj, Serializer &serializer) { serializer.increase_container_depth(); serde::Serializable::serialize(obj.value, serializer); serializer.decrease_container_depth(); - } +} - template <> - template - Program::BrilligOutputs - serde::Deserializable::deserialize( - Deserializer &deserializer) { +template <> +template +Program::BrilligOutputs serde::Deserializable::deserialize(Deserializer &deserializer) { deserializer.increase_container_depth(); Program::BrilligOutputs obj; - obj.value = - serde::Deserializable::deserialize(deserializer); + obj.value = serde::Deserializable::deserialize(deserializer); deserializer.decrease_container_depth(); return obj; - } +} - namespace Program { +namespace Program { - inline bool operator==(const BrilligOutputs::Simple &lhs, - const BrilligOutputs::Simple &rhs) { - if (!(lhs.value == rhs.value)) { - return false; + inline bool operator==(const BrilligOutputs::Simple &lhs, const BrilligOutputs::Simple &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; } - return true; - } - inline std::vector BrilligOutputs::Simple::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } + inline std::vector BrilligOutputs::Simple::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - inline BrilligOutputs::Simple - BrilligOutputs::Simple::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); + inline BrilligOutputs::Simple BrilligOutputs::Simple::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; } - return value; - } - } // end of namespace Program +} // end of namespace Program - template <> - template - void serde::Serializable::serialize( - const Program::BrilligOutputs::Simple &obj, Serializer &serializer) { +template <> +template +void serde::Serializable::serialize(const Program::BrilligOutputs::Simple &obj, Serializer &serializer) { serde::Serializable::serialize(obj.value, serializer); - } +} - template <> - template - Program::BrilligOutputs::Simple - serde::Deserializable::deserialize( - Deserializer &deserializer) { +template <> +template +Program::BrilligOutputs::Simple serde::Deserializable::deserialize(Deserializer &deserializer) { Program::BrilligOutputs::Simple obj; - obj.value = - serde::Deserializable::deserialize(deserializer); + obj.value = serde::Deserializable::deserialize(deserializer); return obj; - } +} - namespace Program { +namespace Program { - inline bool operator==(const BrilligOutputs::Array &lhs, - const BrilligOutputs::Array &rhs) { - if (!(lhs.value == rhs.value)) { - return false; + inline bool operator==(const BrilligOutputs::Array &lhs, const BrilligOutputs::Array &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; } - return true; - } - inline std::vector BrilligOutputs::Array::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } + inline std::vector BrilligOutputs::Array::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - inline BrilligOutputs::Array - BrilligOutputs::Array::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); + inline BrilligOutputs::Array BrilligOutputs::Array::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; } - return value; - } - } // end of namespace Program +} // end of namespace Program - template <> - template - void serde::Serializable::serialize( - const Program::BrilligOutputs::Array &obj, Serializer &serializer) { +template <> +template +void serde::Serializable::serialize(const Program::BrilligOutputs::Array &obj, Serializer &serializer) { serde::Serializable::serialize(obj.value, serializer); - } +} - template <> - template - Program::BrilligOutputs::Array - serde::Deserializable::deserialize( - Deserializer &deserializer) { +template <> +template +Program::BrilligOutputs::Array serde::Deserializable::deserialize(Deserializer &deserializer) { Program::BrilligOutputs::Array obj; - obj.value = - serde::Deserializable::deserialize(deserializer); + obj.value = serde::Deserializable::deserialize(deserializer); return obj; - } +} - namespace Program { +namespace Program { - inline bool operator==(const Circuit &lhs, const Circuit &rhs) { - if (!(lhs.current_witness_index == rhs.current_witness_index)) { - return false; - } - if (!(lhs.opcodes == rhs.opcodes)) { - return false; + inline bool operator==(const Circuit &lhs, const Circuit &rhs) { + if (!(lhs.current_witness_index == rhs.current_witness_index)) { return false; } + if (!(lhs.opcodes == rhs.opcodes)) { return false; } + if (!(lhs.expression_width == rhs.expression_width)) { return false; } + if (!(lhs.private_parameters == rhs.private_parameters)) { return false; } + if (!(lhs.public_parameters == rhs.public_parameters)) { return false; } + if (!(lhs.return_values == rhs.return_values)) { return false; } + if (!(lhs.assert_messages == rhs.assert_messages)) { return false; } + if (!(lhs.recursive == rhs.recursive)) { return false; } + return true; } - if (!(lhs.expression_width == rhs.expression_width)) { - return false; - } - if (!(lhs.private_parameters == rhs.private_parameters)) { - return false; - } - if (!(lhs.public_parameters == rhs.public_parameters)) { - return false; - } - if (!(lhs.return_values == rhs.return_values)) { - return false; - } - if (!(lhs.assert_messages == rhs.assert_messages)) { - return false; - } - if (!(lhs.recursive == rhs.recursive)) { - return false; - } - return true; - } - inline std::vector Circuit::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } + inline std::vector Circuit::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - inline Circuit Circuit::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); + inline Circuit Circuit::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; } - return value; - } - } // end of namespace Program +} // end of namespace Program - template <> - template - void - serde::Serializable::serialize(const Program::Circuit &obj, - Serializer &serializer) { +template <> +template +void serde::Serializable::serialize(const Program::Circuit &obj, Serializer &serializer) { serializer.increase_container_depth(); - serde::Serializable::serialize( - obj.current_witness_index, serializer); - serde::Serializable::serialize(obj.opcodes, - serializer); - serde::Serializable::serialize( - obj.expression_width, serializer); - serde::Serializable::serialize( - obj.private_parameters, serializer); - serde::Serializable::serialize( - obj.public_parameters, serializer); - serde::Serializable::serialize( - obj.return_values, serializer); - serde::Serializable::serialize( - obj.assert_messages, serializer); - serde::Serializable::serialize(obj.recursive, - serializer); + serde::Serializable::serialize(obj.current_witness_index, serializer); + serde::Serializable::serialize(obj.opcodes, serializer); + serde::Serializable::serialize(obj.expression_width, serializer); + serde::Serializable::serialize(obj.private_parameters, serializer); + serde::Serializable::serialize(obj.public_parameters, serializer); + serde::Serializable::serialize(obj.return_values, serializer); + serde::Serializable::serialize(obj.assert_messages, serializer); + serde::Serializable::serialize(obj.recursive, serializer); serializer.decrease_container_depth(); - } +} - template <> - template - Program::Circuit serde::Deserializable::deserialize( - Deserializer &deserializer) { +template <> +template +Program::Circuit serde::Deserializable::deserialize(Deserializer &deserializer) { deserializer.increase_container_depth(); Program::Circuit obj; - obj.current_witness_index = - serde::Deserializable::deserialize( - deserializer); - obj.opcodes = - serde::Deserializable::deserialize(deserializer); - obj.expression_width = - serde::Deserializable::deserialize( - deserializer); - obj.private_parameters = - serde::Deserializable::deserialize( - deserializer); - obj.public_parameters = - serde::Deserializable::deserialize( - deserializer); - obj.return_values = - serde::Deserializable::deserialize( - deserializer); - obj.assert_messages = - serde::Deserializable::deserialize( - deserializer); - obj.recursive = serde::Deserializable::deserialize( - deserializer); + obj.current_witness_index = serde::Deserializable::deserialize(deserializer); + obj.opcodes = serde::Deserializable::deserialize(deserializer); + obj.expression_width = serde::Deserializable::deserialize(deserializer); + obj.private_parameters = serde::Deserializable::deserialize(deserializer); + obj.public_parameters = serde::Deserializable::deserialize(deserializer); + obj.return_values = serde::Deserializable::deserialize(deserializer); + obj.assert_messages = serde::Deserializable::deserialize(deserializer); + obj.recursive = serde::Deserializable::deserialize(deserializer); deserializer.decrease_container_depth(); return obj; - } +} - namespace Program { +namespace Program { - inline bool operator==(const Directive &lhs, const Directive &rhs) { - if (!(lhs.value == rhs.value)) { - return false; + inline bool operator==(const Directive &lhs, const Directive &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; } - return true; - } - inline std::vector Directive::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } + inline std::vector Directive::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - inline Directive Directive::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); + inline Directive Directive::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; } - return value; - } - } // end of namespace Program +} // end of namespace Program - template <> - template - void serde::Serializable::serialize( - const Program::Directive &obj, Serializer &serializer) { +template <> +template +void serde::Serializable::serialize(const Program::Directive &obj, Serializer &serializer) { serializer.increase_container_depth(); serde::Serializable::serialize(obj.value, serializer); serializer.decrease_container_depth(); - } +} - template <> - template - Program::Directive serde::Deserializable::deserialize( - Deserializer &deserializer) { +template <> +template +Program::Directive serde::Deserializable::deserialize(Deserializer &deserializer) { deserializer.increase_container_depth(); Program::Directive obj; - obj.value = - serde::Deserializable::deserialize(deserializer); + obj.value = serde::Deserializable::deserialize(deserializer); deserializer.decrease_container_depth(); return obj; - } +} - namespace Program { +namespace Program { - inline bool operator==(const Directive::ToLeRadix &lhs, - const Directive::ToLeRadix &rhs) { - if (!(lhs.a == rhs.a)) { - return false; - } - if (!(lhs.b == rhs.b)) { - return false; - } - if (!(lhs.radix == rhs.radix)) { - return false; + inline bool operator==(const Directive::ToLeRadix &lhs, const Directive::ToLeRadix &rhs) { + if (!(lhs.a == rhs.a)) { return false; } + if (!(lhs.b == rhs.b)) { return false; } + if (!(lhs.radix == rhs.radix)) { return false; } + return true; } - return true; - } - inline std::vector Directive::ToLeRadix::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } + inline std::vector Directive::ToLeRadix::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - inline Directive::ToLeRadix - Directive::ToLeRadix::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); + inline Directive::ToLeRadix Directive::ToLeRadix::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; } - return value; - } - } // end of namespace Program +} // end of namespace Program - template <> - template - void serde::Serializable::serialize( - const Program::Directive::ToLeRadix &obj, Serializer &serializer) { +template <> +template +void serde::Serializable::serialize(const Program::Directive::ToLeRadix &obj, Serializer &serializer) { serde::Serializable::serialize(obj.a, serializer); serde::Serializable::serialize(obj.b, serializer); serde::Serializable::serialize(obj.radix, serializer); - } +} - template <> - template - Program::Directive::ToLeRadix - serde::Deserializable::deserialize( - Deserializer &deserializer) { +template <> +template +Program::Directive::ToLeRadix serde::Deserializable::deserialize(Deserializer &deserializer) { Program::Directive::ToLeRadix obj; obj.a = serde::Deserializable::deserialize(deserializer); obj.b = serde::Deserializable::deserialize(deserializer); - obj.radix = - serde::Deserializable::deserialize(deserializer); + obj.radix = serde::Deserializable::deserialize(deserializer); return obj; - } +} - namespace Program { +namespace Program { - inline bool operator==(const Expression &lhs, const Expression &rhs) { - if (!(lhs.mul_terms == rhs.mul_terms)) { - return false; - } - if (!(lhs.linear_combinations == rhs.linear_combinations)) { - return false; - } - if (!(lhs.q_c == rhs.q_c)) { - return false; + inline bool operator==(const Expression &lhs, const Expression &rhs) { + if (!(lhs.mul_terms == rhs.mul_terms)) { return false; } + if (!(lhs.linear_combinations == rhs.linear_combinations)) { return false; } + if (!(lhs.q_c == rhs.q_c)) { return false; } + return true; } - return true; - } - inline std::vector Expression::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } + inline std::vector Expression::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - inline Expression Expression::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); + inline Expression Expression::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; } - return value; - } - } // end of namespace Program +} // end of namespace Program - template <> - template - void serde::Serializable::serialize( - const Program::Expression &obj, Serializer &serializer) { +template <> +template +void serde::Serializable::serialize(const Program::Expression &obj, Serializer &serializer) { serializer.increase_container_depth(); - serde::Serializable::serialize(obj.mul_terms, - serializer); - serde::Serializable::serialize( - obj.linear_combinations, serializer); + serde::Serializable::serialize(obj.mul_terms, serializer); + serde::Serializable::serialize(obj.linear_combinations, serializer); serde::Serializable::serialize(obj.q_c, serializer); serializer.decrease_container_depth(); - } +} - template <> - template - Program::Expression serde::Deserializable::deserialize( - Deserializer &deserializer) { +template <> +template +Program::Expression serde::Deserializable::deserialize(Deserializer &deserializer) { deserializer.increase_container_depth(); Program::Expression obj; - obj.mul_terms = serde::Deserializable::deserialize( - deserializer); - obj.linear_combinations = - serde::Deserializable::deserialize( - deserializer); - obj.q_c = - serde::Deserializable::deserialize(deserializer); + obj.mul_terms = serde::Deserializable::deserialize(deserializer); + obj.linear_combinations = serde::Deserializable::deserialize(deserializer); + obj.q_c = serde::Deserializable::deserialize(deserializer); deserializer.decrease_container_depth(); return obj; - } +} - namespace Program { +namespace Program { - inline bool operator==(const ExpressionWidth &lhs, - const ExpressionWidth &rhs) { - if (!(lhs.value == rhs.value)) { - return false; + inline bool operator==(const ExpressionWidth &lhs, const ExpressionWidth &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; } - return true; - } - inline std::vector ExpressionWidth::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } + inline std::vector ExpressionWidth::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - inline ExpressionWidth - ExpressionWidth::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); + inline ExpressionWidth ExpressionWidth::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; } - return value; - } - } // end of namespace Program +} // end of namespace Program - template <> - template - void serde::Serializable::serialize( - const Program::ExpressionWidth &obj, Serializer &serializer) { +template <> +template +void serde::Serializable::serialize(const Program::ExpressionWidth &obj, Serializer &serializer) { serializer.increase_container_depth(); serde::Serializable::serialize(obj.value, serializer); serializer.decrease_container_depth(); - } +} - template <> - template - Program::ExpressionWidth - serde::Deserializable::deserialize( - Deserializer &deserializer) { +template <> +template +Program::ExpressionWidth serde::Deserializable::deserialize(Deserializer &deserializer) { deserializer.increase_container_depth(); Program::ExpressionWidth obj; - obj.value = - serde::Deserializable::deserialize(deserializer); + obj.value = serde::Deserializable::deserialize(deserializer); deserializer.decrease_container_depth(); return obj; - } - - namespace Program { - - inline bool operator==(const ExpressionWidth::Unbounded &lhs, - const ExpressionWidth::Unbounded &rhs) { - return true; - } - - inline std::vector - ExpressionWidth::Unbounded::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); - } - - inline ExpressionWidth::Unbounded - ExpressionWidth::Unbounded::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::ExpressionWidth::Unbounded &obj, Serializer &serializer) {} - - template <> - template - Program::ExpressionWidth::Unbounded - serde::Deserializable::deserialize( - Deserializer &deserializer) { +} + +namespace Program { + + inline bool operator==(const ExpressionWidth::Unbounded &lhs, const ExpressionWidth::Unbounded &rhs) { + return true; + } + + inline std::vector ExpressionWidth::Unbounded::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline ExpressionWidth::Unbounded ExpressionWidth::Unbounded::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::ExpressionWidth::Unbounded &obj, Serializer &serializer) { +} + +template <> +template +Program::ExpressionWidth::Unbounded serde::Deserializable::deserialize(Deserializer &deserializer) { Program::ExpressionWidth::Unbounded obj; return obj; - } +} - namespace Program { +namespace Program { - inline bool operator==(const ExpressionWidth::Bounded &lhs, - const ExpressionWidth::Bounded &rhs) { - if (!(lhs.width == rhs.width)) { - return false; + inline bool operator==(const ExpressionWidth::Bounded &lhs, const ExpressionWidth::Bounded &rhs) { + if (!(lhs.width == rhs.width)) { return false; } + return true; } - return true; - } - inline std::vector - ExpressionWidth::Bounded::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } + inline std::vector ExpressionWidth::Bounded::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - inline ExpressionWidth::Bounded - ExpressionWidth::Bounded::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); + inline ExpressionWidth::Bounded ExpressionWidth::Bounded::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; } - return value; - } - } // end of namespace Program +} // end of namespace Program - template <> - template - void serde::Serializable::serialize( - const Program::ExpressionWidth::Bounded &obj, Serializer &serializer) { +template <> +template +void serde::Serializable::serialize(const Program::ExpressionWidth::Bounded &obj, Serializer &serializer) { serde::Serializable::serialize(obj.width, serializer); - } +} - template <> - template - Program::ExpressionWidth::Bounded - serde::Deserializable::deserialize( - Deserializer &deserializer) { +template <> +template +Program::ExpressionWidth::Bounded serde::Deserializable::deserialize(Deserializer &deserializer) { Program::ExpressionWidth::Bounded obj; - obj.width = - serde::Deserializable::deserialize(deserializer); + obj.width = serde::Deserializable::deserialize(deserializer); return obj; - } +} - namespace Program { +namespace Program { - inline bool operator==(const FunctionInput &lhs, const FunctionInput &rhs) { - if (!(lhs.witness == rhs.witness)) { - return false; - } - if (!(lhs.num_bits == rhs.num_bits)) { - return false; + inline bool operator==(const FunctionInput &lhs, const FunctionInput &rhs) { + if (!(lhs.witness == rhs.witness)) { return false; } + if (!(lhs.num_bits == rhs.num_bits)) { return false; } + return true; } - return true; - } - inline std::vector FunctionInput::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } + inline std::vector FunctionInput::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - inline FunctionInput - FunctionInput::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); + inline FunctionInput FunctionInput::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; } - return value; - } - } // end of namespace Program +} // end of namespace Program - template <> - template - void serde::Serializable::serialize( - const Program::FunctionInput &obj, Serializer &serializer) { +template <> +template +void serde::Serializable::serialize(const Program::FunctionInput &obj, Serializer &serializer) { serializer.increase_container_depth(); - serde::Serializable::serialize(obj.witness, - serializer); - serde::Serializable::serialize(obj.num_bits, - serializer); + serde::Serializable::serialize(obj.witness, serializer); + serde::Serializable::serialize(obj.num_bits, serializer); serializer.decrease_container_depth(); - } +} - template <> - template - Program::FunctionInput - serde::Deserializable::deserialize( - Deserializer &deserializer) { +template <> +template +Program::FunctionInput serde::Deserializable::deserialize(Deserializer &deserializer) { deserializer.increase_container_depth(); Program::FunctionInput obj; - obj.witness = - serde::Deserializable::deserialize(deserializer); - obj.num_bits = serde::Deserializable::deserialize( - deserializer); + obj.witness = serde::Deserializable::deserialize(deserializer); + obj.num_bits = serde::Deserializable::deserialize(deserializer); deserializer.decrease_container_depth(); return obj; - } +} - namespace Program { +namespace Program { - inline bool operator==(const HeapArray &lhs, const HeapArray &rhs) { - if (!(lhs.pointer == rhs.pointer)) { - return false; + inline bool operator==(const HeapArray &lhs, const HeapArray &rhs) { + if (!(lhs.pointer == rhs.pointer)) { return false; } + if (!(lhs.size == rhs.size)) { return false; } + return true; } - if (!(lhs.size == rhs.size)) { - return false; - } - return true; - } - inline std::vector HeapArray::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } + inline std::vector HeapArray::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - inline HeapArray HeapArray::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); + inline HeapArray HeapArray::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; } - return value; - } - } // end of namespace Program +} // end of namespace Program - template <> - template - void serde::Serializable::serialize( - const Program::HeapArray &obj, Serializer &serializer) { +template <> +template +void serde::Serializable::serialize(const Program::HeapArray &obj, Serializer &serializer) { serializer.increase_container_depth(); - serde::Serializable::serialize(obj.pointer, - serializer); + serde::Serializable::serialize(obj.pointer, serializer); serde::Serializable::serialize(obj.size, serializer); serializer.decrease_container_depth(); - } +} - template <> - template - Program::HeapArray serde::Deserializable::deserialize( - Deserializer &deserializer) { +template <> +template +Program::HeapArray serde::Deserializable::deserialize(Deserializer &deserializer) { deserializer.increase_container_depth(); Program::HeapArray obj; - obj.pointer = - serde::Deserializable::deserialize(deserializer); - obj.size = - serde::Deserializable::deserialize(deserializer); + obj.pointer = serde::Deserializable::deserialize(deserializer); + obj.size = serde::Deserializable::deserialize(deserializer); deserializer.decrease_container_depth(); return obj; - } +} - namespace Program { +namespace Program { - inline bool operator==(const HeapValueType &lhs, const HeapValueType &rhs) { - if (!(lhs.value == rhs.value)) { - return false; + inline bool operator==(const HeapValueType &lhs, const HeapValueType &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; } - return true; - } - inline std::vector HeapValueType::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } + inline std::vector HeapValueType::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - inline HeapValueType - HeapValueType::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); + inline HeapValueType HeapValueType::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; } - return value; - } - } // end of namespace Program +} // end of namespace Program - template <> - template - void serde::Serializable::serialize( - const Program::HeapValueType &obj, Serializer &serializer) { +template <> +template +void serde::Serializable::serialize(const Program::HeapValueType &obj, Serializer &serializer) { serializer.increase_container_depth(); serde::Serializable::serialize(obj.value, serializer); serializer.decrease_container_depth(); - } +} - template <> - template - Program::HeapValueType - serde::Deserializable::deserialize( - Deserializer &deserializer) { +template <> +template +Program::HeapValueType serde::Deserializable::deserialize(Deserializer &deserializer) { deserializer.increase_container_depth(); Program::HeapValueType obj; - obj.value = - serde::Deserializable::deserialize(deserializer); + obj.value = serde::Deserializable::deserialize(deserializer); deserializer.decrease_container_depth(); return obj; - } +} - namespace Program { +namespace Program { - inline bool operator==(const HeapValueType::Simple &lhs, - const HeapValueType::Simple &rhs) { - if (!(lhs.value == rhs.value)) { - return false; + inline bool operator==(const HeapValueType::Simple &lhs, const HeapValueType::Simple &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; } - return true; - } - inline std::vector HeapValueType::Simple::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } + inline std::vector HeapValueType::Simple::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - inline HeapValueType::Simple - HeapValueType::Simple::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); + inline HeapValueType::Simple HeapValueType::Simple::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; } - return value; - } - } // end of namespace Program +} // end of namespace Program - template <> - template - void serde::Serializable::serialize( - const Program::HeapValueType::Simple &obj, Serializer &serializer) { +template <> +template +void serde::Serializable::serialize(const Program::HeapValueType::Simple &obj, Serializer &serializer) { serde::Serializable::serialize(obj.value, serializer); - } +} - template <> - template - Program::HeapValueType::Simple - serde::Deserializable::deserialize( - Deserializer &deserializer) { +template <> +template +Program::HeapValueType::Simple serde::Deserializable::deserialize(Deserializer &deserializer) { Program::HeapValueType::Simple obj; - obj.value = - serde::Deserializable::deserialize(deserializer); + obj.value = serde::Deserializable::deserialize(deserializer); return obj; - } +} - namespace Program { +namespace Program { - inline bool operator==(const HeapValueType::Array &lhs, - const HeapValueType::Array &rhs) { - if (!(lhs.value_types == rhs.value_types)) { - return false; - } - if (!(lhs.size == rhs.size)) { - return false; + inline bool operator==(const HeapValueType::Array &lhs, const HeapValueType::Array &rhs) { + if (!(lhs.value_types == rhs.value_types)) { return false; } + if (!(lhs.size == rhs.size)) { return false; } + return true; } - return true; - } - inline std::vector HeapValueType::Array::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } + inline std::vector HeapValueType::Array::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - inline HeapValueType::Array - HeapValueType::Array::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); + inline HeapValueType::Array HeapValueType::Array::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; } - return value; - } - } // end of namespace Program +} // end of namespace Program - template <> - template - void serde::Serializable::serialize( - const Program::HeapValueType::Array &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.value_types, - serializer); +template <> +template +void serde::Serializable::serialize(const Program::HeapValueType::Array &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.value_types, serializer); serde::Serializable::serialize(obj.size, serializer); - } +} - template <> - template - Program::HeapValueType::Array - serde::Deserializable::deserialize( - Deserializer &deserializer) { +template <> +template +Program::HeapValueType::Array serde::Deserializable::deserialize(Deserializer &deserializer) { Program::HeapValueType::Array obj; - obj.value_types = - serde::Deserializable::deserialize( - deserializer); - obj.size = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const HeapValueType::Vector &lhs, - const HeapValueType::Vector &rhs) { - if (!(lhs.value_types == rhs.value_types)) { - return false; - } - return true; - } - - inline std::vector HeapValueType::Vector::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } - - inline HeapValueType::Vector - HeapValueType::Vector::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::HeapValueType::Vector &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.value_types, - serializer); - } - - template <> - template - Program::HeapValueType::Vector - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::HeapValueType::Vector obj; - obj.value_types = - serde::Deserializable::deserialize( - deserializer); + obj.value_types = serde::Deserializable::deserialize(deserializer); + obj.size = serde::Deserializable::deserialize(deserializer); return obj; - } +} + +namespace Program { - namespace Program { + inline bool operator==(const HeapValueType::Vector &lhs, const HeapValueType::Vector &rhs) { + if (!(lhs.value_types == rhs.value_types)) { return false; } + return true; + } + + inline std::vector HeapValueType::Vector::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - inline bool operator==(const HeapVector &lhs, const HeapVector &rhs) { - if (!(lhs.pointer == rhs.pointer)) { - return false; + inline HeapValueType::Vector HeapValueType::Vector::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; } - if (!(lhs.size == rhs.size)) { - return false; + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::HeapValueType::Vector &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.value_types, serializer); +} + +template <> +template +Program::HeapValueType::Vector serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::HeapValueType::Vector obj; + obj.value_types = serde::Deserializable::deserialize(deserializer); + return obj; +} + +namespace Program { + + inline bool operator==(const HeapVector &lhs, const HeapVector &rhs) { + if (!(lhs.pointer == rhs.pointer)) { return false; } + if (!(lhs.size == rhs.size)) { return false; } + return true; } - return true; - } - inline std::vector HeapVector::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } + inline std::vector HeapVector::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - inline HeapVector HeapVector::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); + inline HeapVector HeapVector::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; } - return value; - } - } // end of namespace Program +} // end of namespace Program - template <> - template - void serde::Serializable::serialize( - const Program::HeapVector &obj, Serializer &serializer) { +template <> +template +void serde::Serializable::serialize(const Program::HeapVector &obj, Serializer &serializer) { serializer.increase_container_depth(); - serde::Serializable::serialize(obj.pointer, - serializer); + serde::Serializable::serialize(obj.pointer, serializer); serde::Serializable::serialize(obj.size, serializer); serializer.decrease_container_depth(); - } +} - template <> - template - Program::HeapVector serde::Deserializable::deserialize( - Deserializer &deserializer) { +template <> +template +Program::HeapVector serde::Deserializable::deserialize(Deserializer &deserializer) { deserializer.increase_container_depth(); Program::HeapVector obj; - obj.pointer = - serde::Deserializable::deserialize(deserializer); - obj.size = - serde::Deserializable::deserialize(deserializer); + obj.pointer = serde::Deserializable::deserialize(deserializer); + obj.size = serde::Deserializable::deserialize(deserializer); deserializer.decrease_container_depth(); return obj; - } +} - namespace Program { +namespace Program { - inline bool operator==(const MemOp &lhs, const MemOp &rhs) { - if (!(lhs.operation == rhs.operation)) { - return false; - } - if (!(lhs.index == rhs.index)) { - return false; + inline bool operator==(const MemOp &lhs, const MemOp &rhs) { + if (!(lhs.operation == rhs.operation)) { return false; } + if (!(lhs.index == rhs.index)) { return false; } + if (!(lhs.value == rhs.value)) { return false; } + return true; } - if (!(lhs.value == rhs.value)) { - return false; - } - return true; - } - inline std::vector MemOp::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } + inline std::vector MemOp::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - inline MemOp MemOp::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); + inline MemOp MemOp::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; } - return value; - } - } // end of namespace Program +} // end of namespace Program - template <> - template - void serde::Serializable::serialize(const Program::MemOp &obj, - Serializer &serializer) { +template <> +template +void serde::Serializable::serialize(const Program::MemOp &obj, Serializer &serializer) { serializer.increase_container_depth(); - serde::Serializable::serialize(obj.operation, - serializer); + serde::Serializable::serialize(obj.operation, serializer); serde::Serializable::serialize(obj.index, serializer); serde::Serializable::serialize(obj.value, serializer); serializer.decrease_container_depth(); - } +} - template <> - template - Program::MemOp serde::Deserializable::deserialize( - Deserializer &deserializer) { +template <> +template +Program::MemOp serde::Deserializable::deserialize(Deserializer &deserializer) { deserializer.increase_container_depth(); Program::MemOp obj; - obj.operation = serde::Deserializable::deserialize( - deserializer); - obj.index = - serde::Deserializable::deserialize(deserializer); - obj.value = - serde::Deserializable::deserialize(deserializer); + obj.operation = serde::Deserializable::deserialize(deserializer); + obj.index = serde::Deserializable::deserialize(deserializer); + obj.value = serde::Deserializable::deserialize(deserializer); deserializer.decrease_container_depth(); return obj; - } +} - namespace Program { +namespace Program { - inline bool operator==(const MemoryAddress &lhs, const MemoryAddress &rhs) { - if (!(lhs.value == rhs.value)) { - return false; + inline bool operator==(const MemoryAddress &lhs, const MemoryAddress &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; } - return true; - } - inline std::vector MemoryAddress::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } + inline std::vector MemoryAddress::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - inline MemoryAddress - MemoryAddress::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); + inline MemoryAddress MemoryAddress::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; } - return value; - } - } // end of namespace Program +} // end of namespace Program - template <> - template - void serde::Serializable::serialize( - const Program::MemoryAddress &obj, Serializer &serializer) { +template <> +template +void serde::Serializable::serialize(const Program::MemoryAddress &obj, Serializer &serializer) { serializer.increase_container_depth(); serde::Serializable::serialize(obj.value, serializer); serializer.decrease_container_depth(); - } +} - template <> - template - Program::MemoryAddress - serde::Deserializable::deserialize( - Deserializer &deserializer) { +template <> +template +Program::MemoryAddress serde::Deserializable::deserialize(Deserializer &deserializer) { deserializer.increase_container_depth(); Program::MemoryAddress obj; - obj.value = - serde::Deserializable::deserialize(deserializer); + obj.value = serde::Deserializable::deserialize(deserializer); deserializer.decrease_container_depth(); return obj; - } +} - namespace Program { +namespace Program { - inline bool operator==(const Opcode &lhs, const Opcode &rhs) { - if (!(lhs.value == rhs.value)) { - return false; + inline bool operator==(const Opcode &lhs, const Opcode &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; } - return true; - } - inline std::vector Opcode::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } + inline std::vector Opcode::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - inline Opcode Opcode::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); + inline Opcode Opcode::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; } - return value; - } - } // end of namespace Program +} // end of namespace Program - template <> - template - void - serde::Serializable::serialize(const Program::Opcode &obj, - Serializer &serializer) { +template <> +template +void serde::Serializable::serialize(const Program::Opcode &obj, Serializer &serializer) { serializer.increase_container_depth(); serde::Serializable::serialize(obj.value, serializer); serializer.decrease_container_depth(); - } +} - template <> - template - Program::Opcode serde::Deserializable::deserialize( - Deserializer &deserializer) { +template <> +template +Program::Opcode serde::Deserializable::deserialize(Deserializer &deserializer) { deserializer.increase_container_depth(); Program::Opcode obj; - obj.value = - serde::Deserializable::deserialize(deserializer); + obj.value = serde::Deserializable::deserialize(deserializer); deserializer.decrease_container_depth(); return obj; - } +} - namespace Program { +namespace Program { - inline bool operator==(const Opcode::AssertZero &lhs, - const Opcode::AssertZero &rhs) { - if (!(lhs.value == rhs.value)) { - return false; + inline bool operator==(const Opcode::AssertZero &lhs, const Opcode::AssertZero &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; } - return true; - } - inline std::vector Opcode::AssertZero::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } + inline std::vector Opcode::AssertZero::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - inline Opcode::AssertZero - Opcode::AssertZero::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); + inline Opcode::AssertZero Opcode::AssertZero::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; } - return value; - } - } // end of namespace Program +} // end of namespace Program - template <> - template - void serde::Serializable::serialize( - const Program::Opcode::AssertZero &obj, Serializer &serializer) { +template <> +template +void serde::Serializable::serialize(const Program::Opcode::AssertZero &obj, Serializer &serializer) { serde::Serializable::serialize(obj.value, serializer); - } +} - template <> - template - Program::Opcode::AssertZero - serde::Deserializable::deserialize( - Deserializer &deserializer) { +template <> +template +Program::Opcode::AssertZero serde::Deserializable::deserialize(Deserializer &deserializer) { Program::Opcode::AssertZero obj; - obj.value = - serde::Deserializable::deserialize(deserializer); + obj.value = serde::Deserializable::deserialize(deserializer); return obj; - } +} - namespace Program { +namespace Program { - inline bool operator==(const Opcode::BlackBoxFuncCall &lhs, - const Opcode::BlackBoxFuncCall &rhs) { - if (!(lhs.value == rhs.value)) { - return false; + inline bool operator==(const Opcode::BlackBoxFuncCall &lhs, const Opcode::BlackBoxFuncCall &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; } - return true; - } - inline std::vector - Opcode::BlackBoxFuncCall::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } + inline std::vector Opcode::BlackBoxFuncCall::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - inline Opcode::BlackBoxFuncCall - Opcode::BlackBoxFuncCall::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); + inline Opcode::BlackBoxFuncCall Opcode::BlackBoxFuncCall::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; } - return value; - } - } // end of namespace Program +} // end of namespace Program - template <> - template - void serde::Serializable::serialize( - const Program::Opcode::BlackBoxFuncCall &obj, Serializer &serializer) { +template <> +template +void serde::Serializable::serialize(const Program::Opcode::BlackBoxFuncCall &obj, Serializer &serializer) { serde::Serializable::serialize(obj.value, serializer); - } +} - template <> - template - Program::Opcode::BlackBoxFuncCall - serde::Deserializable::deserialize( - Deserializer &deserializer) { +template <> +template +Program::Opcode::BlackBoxFuncCall serde::Deserializable::deserialize(Deserializer &deserializer) { Program::Opcode::BlackBoxFuncCall obj; - obj.value = - serde::Deserializable::deserialize(deserializer); + obj.value = serde::Deserializable::deserialize(deserializer); return obj; - } +} - namespace Program { +namespace Program { - inline bool operator==(const Opcode::Directive &lhs, - const Opcode::Directive &rhs) { - if (!(lhs.value == rhs.value)) { - return false; + inline bool operator==(const Opcode::Directive &lhs, const Opcode::Directive &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; } - return true; - } - inline std::vector Opcode::Directive::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } + inline std::vector Opcode::Directive::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - inline Opcode::Directive - Opcode::Directive::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); + inline Opcode::Directive Opcode::Directive::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; } - return value; - } - } // end of namespace Program +} // end of namespace Program - template <> - template - void serde::Serializable::serialize( - const Program::Opcode::Directive &obj, Serializer &serializer) { +template <> +template +void serde::Serializable::serialize(const Program::Opcode::Directive &obj, Serializer &serializer) { serde::Serializable::serialize(obj.value, serializer); - } +} - template <> - template - Program::Opcode::Directive - serde::Deserializable::deserialize( - Deserializer &deserializer) { +template <> +template +Program::Opcode::Directive serde::Deserializable::deserialize(Deserializer &deserializer) { Program::Opcode::Directive obj; - obj.value = - serde::Deserializable::deserialize(deserializer); + obj.value = serde::Deserializable::deserialize(deserializer); return obj; - } +} - namespace Program { +namespace Program { - inline bool operator==(const Opcode::Brillig &lhs, - const Opcode::Brillig &rhs) { - if (!(lhs.value == rhs.value)) { - return false; + inline bool operator==(const Opcode::Brillig &lhs, const Opcode::Brillig &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; } - return true; - } - inline std::vector Opcode::Brillig::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } + inline std::vector Opcode::Brillig::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - inline Opcode::Brillig - Opcode::Brillig::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); + inline Opcode::Brillig Opcode::Brillig::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; } - return value; - } - } // end of namespace Program +} // end of namespace Program - template <> - template - void serde::Serializable::serialize( - const Program::Opcode::Brillig &obj, Serializer &serializer) { +template <> +template +void serde::Serializable::serialize(const Program::Opcode::Brillig &obj, Serializer &serializer) { serde::Serializable::serialize(obj.value, serializer); - } +} - template <> - template - Program::Opcode::Brillig - serde::Deserializable::deserialize( - Deserializer &deserializer) { +template <> +template +Program::Opcode::Brillig serde::Deserializable::deserialize(Deserializer &deserializer) { Program::Opcode::Brillig obj; - obj.value = - serde::Deserializable::deserialize(deserializer); + obj.value = serde::Deserializable::deserialize(deserializer); return obj; - } +} - namespace Program { +namespace Program { - inline bool operator==(const Opcode::MemoryOp &lhs, - const Opcode::MemoryOp &rhs) { - if (!(lhs.block_id == rhs.block_id)) { - return false; - } - if (!(lhs.op == rhs.op)) { - return false; + inline bool operator==(const Opcode::MemoryOp &lhs, const Opcode::MemoryOp &rhs) { + if (!(lhs.block_id == rhs.block_id)) { return false; } + if (!(lhs.op == rhs.op)) { return false; } + if (!(lhs.predicate == rhs.predicate)) { return false; } + return true; } - if (!(lhs.predicate == rhs.predicate)) { - return false; - } - return true; - } - inline std::vector Opcode::MemoryOp::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } + inline std::vector Opcode::MemoryOp::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - inline Opcode::MemoryOp - Opcode::MemoryOp::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); + inline Opcode::MemoryOp Opcode::MemoryOp::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; } - return value; - } - } // end of namespace Program +} // end of namespace Program - template <> - template - void serde::Serializable::serialize( - const Program::Opcode::MemoryOp &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.block_id, - serializer); +template <> +template +void serde::Serializable::serialize(const Program::Opcode::MemoryOp &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.block_id, serializer); serde::Serializable::serialize(obj.op, serializer); - serde::Serializable::serialize(obj.predicate, - serializer); - } - - template <> - template - Program::Opcode::MemoryOp - serde::Deserializable::deserialize( - Deserializer &deserializer) { + serde::Serializable::serialize(obj.predicate, serializer); +} + +template <> +template +Program::Opcode::MemoryOp serde::Deserializable::deserialize(Deserializer &deserializer) { Program::Opcode::MemoryOp obj; - obj.block_id = serde::Deserializable::deserialize( - deserializer); + obj.block_id = serde::Deserializable::deserialize(deserializer); obj.op = serde::Deserializable::deserialize(deserializer); - obj.predicate = serde::Deserializable::deserialize( - deserializer); + obj.predicate = serde::Deserializable::deserialize(deserializer); return obj; - } +} - namespace Program { +namespace Program { - inline bool operator==(const Opcode::MemoryInit &lhs, - const Opcode::MemoryInit &rhs) { - if (!(lhs.block_id == rhs.block_id)) { - return false; + inline bool operator==(const Opcode::MemoryInit &lhs, const Opcode::MemoryInit &rhs) { + if (!(lhs.block_id == rhs.block_id)) { return false; } + if (!(lhs.init == rhs.init)) { return false; } + return true; } - if (!(lhs.init == rhs.init)) { - return false; - } - return true; - } - inline std::vector Opcode::MemoryInit::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } + inline std::vector Opcode::MemoryInit::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - inline Opcode::MemoryInit - Opcode::MemoryInit::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); + inline Opcode::MemoryInit Opcode::MemoryInit::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; } - return value; - } - } // end of namespace Program +} // end of namespace Program - template <> - template - void serde::Serializable::serialize( - const Program::Opcode::MemoryInit &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.block_id, - serializer); +template <> +template +void serde::Serializable::serialize(const Program::Opcode::MemoryInit &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.block_id, serializer); serde::Serializable::serialize(obj.init, serializer); - } +} - template <> - template - Program::Opcode::MemoryInit - serde::Deserializable::deserialize( - Deserializer &deserializer) { +template <> +template +Program::Opcode::MemoryInit serde::Deserializable::deserialize(Deserializer &deserializer) { Program::Opcode::MemoryInit obj; - obj.block_id = serde::Deserializable::deserialize( - deserializer); - obj.init = - serde::Deserializable::deserialize(deserializer); + obj.block_id = serde::Deserializable::deserialize(deserializer); + obj.init = serde::Deserializable::deserialize(deserializer); return obj; - } +} - namespace Program { +namespace Program { - inline bool operator==(const Opcode::Call &lhs, const Opcode::Call &rhs) { - if (!(lhs.id == rhs.id)) { - return false; - } - if (!(lhs.inputs == rhs.inputs)) { - return false; + inline bool operator==(const Opcode::Call &lhs, const Opcode::Call &rhs) { + if (!(lhs.id == rhs.id)) { return false; } + if (!(lhs.inputs == rhs.inputs)) { return false; } + if (!(lhs.outputs == rhs.outputs)) { return false; } + return true; } - if (!(lhs.outputs == rhs.outputs)) { - return false; - } - return true; - } - inline std::vector Opcode::Call::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } + inline std::vector Opcode::Call::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - inline Opcode::Call - Opcode::Call::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); + inline Opcode::Call Opcode::Call::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; } - return value; - } - } // end of namespace Program +} // end of namespace Program - template <> - template - void serde::Serializable::serialize( - const Program::Opcode::Call &obj, Serializer &serializer) { +template <> +template +void serde::Serializable::serialize(const Program::Opcode::Call &obj, Serializer &serializer) { serde::Serializable::serialize(obj.id, serializer); - serde::Serializable::serialize(obj.inputs, - serializer); - serde::Serializable::serialize(obj.outputs, - serializer); - } - - template <> - template - Program::Opcode::Call - serde::Deserializable::deserialize( - Deserializer &deserializer) { + serde::Serializable::serialize(obj.inputs, serializer); + serde::Serializable::serialize(obj.outputs, serializer); +} + +template <> +template +Program::Opcode::Call serde::Deserializable::deserialize(Deserializer &deserializer) { Program::Opcode::Call obj; obj.id = serde::Deserializable::deserialize(deserializer); - obj.inputs = - serde::Deserializable::deserialize(deserializer); - obj.outputs = - serde::Deserializable::deserialize(deserializer); + obj.inputs = serde::Deserializable::deserialize(deserializer); + obj.outputs = serde::Deserializable::deserialize(deserializer); return obj; - } +} - namespace Program { +namespace Program { - inline bool operator==(const OpcodeLocation &lhs, const OpcodeLocation &rhs) { - if (!(lhs.value == rhs.value)) { - return false; + inline bool operator==(const OpcodeLocation &lhs, const OpcodeLocation &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; } - return true; - } - inline std::vector OpcodeLocation::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } + inline std::vector OpcodeLocation::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - inline OpcodeLocation - OpcodeLocation::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); + inline OpcodeLocation OpcodeLocation::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; } - return value; - } - } // end of namespace Program +} // end of namespace Program - template <> - template - void serde::Serializable::serialize( - const Program::OpcodeLocation &obj, Serializer &serializer) { +template <> +template +void serde::Serializable::serialize(const Program::OpcodeLocation &obj, Serializer &serializer) { serializer.increase_container_depth(); serde::Serializable::serialize(obj.value, serializer); serializer.decrease_container_depth(); - } +} - template <> - template - Program::OpcodeLocation - serde::Deserializable::deserialize( - Deserializer &deserializer) { +template <> +template +Program::OpcodeLocation serde::Deserializable::deserialize(Deserializer &deserializer) { deserializer.increase_container_depth(); Program::OpcodeLocation obj; - obj.value = - serde::Deserializable::deserialize(deserializer); + obj.value = serde::Deserializable::deserialize(deserializer); deserializer.decrease_container_depth(); return obj; - } +} - namespace Program { +namespace Program { - inline bool operator==(const OpcodeLocation::Acir &lhs, - const OpcodeLocation::Acir &rhs) { - if (!(lhs.value == rhs.value)) { - return false; + inline bool operator==(const OpcodeLocation::Acir &lhs, const OpcodeLocation::Acir &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; } - return true; - } - inline std::vector OpcodeLocation::Acir::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } + inline std::vector OpcodeLocation::Acir::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - inline OpcodeLocation::Acir - OpcodeLocation::Acir::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); + inline OpcodeLocation::Acir OpcodeLocation::Acir::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; } - return value; - } - } // end of namespace Program +} // end of namespace Program - template <> - template - void serde::Serializable::serialize( - const Program::OpcodeLocation::Acir &obj, Serializer &serializer) { +template <> +template +void serde::Serializable::serialize(const Program::OpcodeLocation::Acir &obj, Serializer &serializer) { serde::Serializable::serialize(obj.value, serializer); - } +} - template <> - template - Program::OpcodeLocation::Acir - serde::Deserializable::deserialize( - Deserializer &deserializer) { +template <> +template +Program::OpcodeLocation::Acir serde::Deserializable::deserialize(Deserializer &deserializer) { Program::OpcodeLocation::Acir obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const OpcodeLocation::Brillig &lhs, - const OpcodeLocation::Brillig &rhs) { - if (!(lhs.acir_index == rhs.acir_index)) { - return false; - } - if (!(lhs.brillig_index == rhs.brillig_index)) { - return false; - } - return true; - } - - inline std::vector - OpcodeLocation::Brillig::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } - - inline OpcodeLocation::Brillig - OpcodeLocation::Brillig::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::OpcodeLocation::Brillig &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.acir_index, - serializer); - serde::Serializable::serialize( - obj.brillig_index, serializer); - } - - template <> - template - Program::OpcodeLocation::Brillig - serde::Deserializable::deserialize( - Deserializer &deserializer) { + obj.value = serde::Deserializable::deserialize(deserializer); + return obj; +} + +namespace Program { + + inline bool operator==(const OpcodeLocation::Brillig &lhs, const OpcodeLocation::Brillig &rhs) { + if (!(lhs.acir_index == rhs.acir_index)) { return false; } + if (!(lhs.brillig_index == rhs.brillig_index)) { return false; } + return true; + } + + inline std::vector OpcodeLocation::Brillig::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline OpcodeLocation::Brillig OpcodeLocation::Brillig::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::OpcodeLocation::Brillig &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.acir_index, serializer); + serde::Serializable::serialize(obj.brillig_index, serializer); +} + +template <> +template +Program::OpcodeLocation::Brillig serde::Deserializable::deserialize(Deserializer &deserializer) { Program::OpcodeLocation::Brillig obj; - obj.acir_index = - serde::Deserializable::deserialize( - deserializer); - obj.brillig_index = - serde::Deserializable::deserialize( - deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const Program &lhs, const Program &rhs) { - if (!(lhs.functions == rhs.functions)) { - return false; - } - return true; - } - - inline std::vector Program::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } - - inline Program Program::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void - serde::Serializable::serialize(const Program::Program &obj, - Serializer &serializer) { + obj.acir_index = serde::Deserializable::deserialize(deserializer); + obj.brillig_index = serde::Deserializable::deserialize(deserializer); + return obj; +} + +namespace Program { + + inline bool operator==(const Program &lhs, const Program &rhs) { + if (!(lhs.functions == rhs.functions)) { return false; } + return true; + } + + inline std::vector Program::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline Program Program::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::Program &obj, Serializer &serializer) { serializer.increase_container_depth(); - serde::Serializable::serialize(obj.functions, - serializer); + serde::Serializable::serialize(obj.functions, serializer); serializer.decrease_container_depth(); - } +} - template <> - template - Program::Program serde::Deserializable::deserialize( - Deserializer &deserializer) { +template <> +template +Program::Program serde::Deserializable::deserialize(Deserializer &deserializer) { deserializer.increase_container_depth(); Program::Program obj; - obj.functions = serde::Deserializable::deserialize( - deserializer); + obj.functions = serde::Deserializable::deserialize(deserializer); deserializer.decrease_container_depth(); return obj; - } +} - namespace Program { +namespace Program { - inline bool operator==(const PublicInputs &lhs, const PublicInputs &rhs) { - if (!(lhs.value == rhs.value)) { - return false; + inline bool operator==(const PublicInputs &lhs, const PublicInputs &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; } - return true; - } - inline std::vector PublicInputs::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } + inline std::vector PublicInputs::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - inline PublicInputs - PublicInputs::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); + inline PublicInputs PublicInputs::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; } - return value; - } - } // end of namespace Program +} // end of namespace Program - template <> - template - void serde::Serializable::serialize( - const Program::PublicInputs &obj, Serializer &serializer) { +template <> +template +void serde::Serializable::serialize(const Program::PublicInputs &obj, Serializer &serializer) { serializer.increase_container_depth(); serde::Serializable::serialize(obj.value, serializer); serializer.decrease_container_depth(); - } +} - template <> - template - Program::PublicInputs - serde::Deserializable::deserialize( - Deserializer &deserializer) { +template <> +template +Program::PublicInputs serde::Deserializable::deserialize(Deserializer &deserializer) { deserializer.increase_container_depth(); Program::PublicInputs obj; - obj.value = - serde::Deserializable::deserialize(deserializer); + obj.value = serde::Deserializable::deserialize(deserializer); deserializer.decrease_container_depth(); return obj; - } +} - namespace Program { +namespace Program { - inline bool operator==(const ValueOrArray &lhs, const ValueOrArray &rhs) { - if (!(lhs.value == rhs.value)) { - return false; + inline bool operator==(const ValueOrArray &lhs, const ValueOrArray &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; } - return true; - } - inline std::vector ValueOrArray::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } + inline std::vector ValueOrArray::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - inline ValueOrArray - ValueOrArray::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); + inline ValueOrArray ValueOrArray::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; } - return value; - } - } // end of namespace Program +} // end of namespace Program - template <> - template - void serde::Serializable::serialize( - const Program::ValueOrArray &obj, Serializer &serializer) { +template <> +template +void serde::Serializable::serialize(const Program::ValueOrArray &obj, Serializer &serializer) { serializer.increase_container_depth(); serde::Serializable::serialize(obj.value, serializer); serializer.decrease_container_depth(); - } +} - template <> - template - Program::ValueOrArray - serde::Deserializable::deserialize( - Deserializer &deserializer) { +template <> +template +Program::ValueOrArray serde::Deserializable::deserialize(Deserializer &deserializer) { deserializer.increase_container_depth(); Program::ValueOrArray obj; - obj.value = - serde::Deserializable::deserialize(deserializer); + obj.value = serde::Deserializable::deserialize(deserializer); deserializer.decrease_container_depth(); return obj; - } +} - namespace Program { +namespace Program { - inline bool operator==(const ValueOrArray::MemoryAddress &lhs, - const ValueOrArray::MemoryAddress &rhs) { - if (!(lhs.value == rhs.value)) { - return false; + inline bool operator==(const ValueOrArray::MemoryAddress &lhs, const ValueOrArray::MemoryAddress &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; } - return true; - } - inline std::vector - ValueOrArray::MemoryAddress::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); - } + inline std::vector ValueOrArray::MemoryAddress::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - inline ValueOrArray::MemoryAddress - ValueOrArray::MemoryAddress::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); + inline ValueOrArray::MemoryAddress ValueOrArray::MemoryAddress::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; } - return value; - } - } // end of namespace Program +} // end of namespace Program - template <> - template - void serde::Serializable::serialize( - const Program::ValueOrArray::MemoryAddress &obj, Serializer &serializer) { +template <> +template +void serde::Serializable::serialize(const Program::ValueOrArray::MemoryAddress &obj, Serializer &serializer) { serde::Serializable::serialize(obj.value, serializer); - } +} - template <> - template - Program::ValueOrArray::MemoryAddress - serde::Deserializable::deserialize( - Deserializer &deserializer) { +template <> +template +Program::ValueOrArray::MemoryAddress serde::Deserializable::deserialize(Deserializer &deserializer) { Program::ValueOrArray::MemoryAddress obj; - obj.value = - serde::Deserializable::deserialize(deserializer); + obj.value = serde::Deserializable::deserialize(deserializer); return obj; - } +} - namespace Program { +namespace Program { - inline bool operator==(const ValueOrArray::HeapArray &lhs, - const ValueOrArray::HeapArray &rhs) { - if (!(lhs.value == rhs.value)) { - return false; + inline bool operator==(const ValueOrArray::HeapArray &lhs, const ValueOrArray::HeapArray &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; } - return true; - } - inline std::vector - ValueOrArray::HeapArray::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } + inline std::vector ValueOrArray::HeapArray::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - inline ValueOrArray::HeapArray - ValueOrArray::HeapArray::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); + inline ValueOrArray::HeapArray ValueOrArray::HeapArray::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; } - return value; - } - } // end of namespace Program +} // end of namespace Program - template <> - template - void serde::Serializable::serialize( - const Program::ValueOrArray::HeapArray &obj, Serializer &serializer) { +template <> +template +void serde::Serializable::serialize(const Program::ValueOrArray::HeapArray &obj, Serializer &serializer) { serde::Serializable::serialize(obj.value, serializer); - } +} - template <> - template - Program::ValueOrArray::HeapArray - serde::Deserializable::deserialize( - Deserializer &deserializer) { +template <> +template +Program::ValueOrArray::HeapArray serde::Deserializable::deserialize(Deserializer &deserializer) { Program::ValueOrArray::HeapArray obj; - obj.value = - serde::Deserializable::deserialize(deserializer); + obj.value = serde::Deserializable::deserialize(deserializer); return obj; - } +} - namespace Program { +namespace Program { - inline bool operator==(const ValueOrArray::HeapVector &lhs, - const ValueOrArray::HeapVector &rhs) { - if (!(lhs.value == rhs.value)) { - return false; + inline bool operator==(const ValueOrArray::HeapVector &lhs, const ValueOrArray::HeapVector &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; } - return true; - } - inline std::vector - ValueOrArray::HeapVector::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } + inline std::vector ValueOrArray::HeapVector::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - inline ValueOrArray::HeapVector - ValueOrArray::HeapVector::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); + inline ValueOrArray::HeapVector ValueOrArray::HeapVector::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; } - return value; - } - } // end of namespace Program +} // end of namespace Program - template <> - template - void serde::Serializable::serialize( - const Program::ValueOrArray::HeapVector &obj, Serializer &serializer) { +template <> +template +void serde::Serializable::serialize(const Program::ValueOrArray::HeapVector &obj, Serializer &serializer) { serde::Serializable::serialize(obj.value, serializer); - } +} - template <> - template - Program::ValueOrArray::HeapVector - serde::Deserializable::deserialize( - Deserializer &deserializer) { +template <> +template +Program::ValueOrArray::HeapVector serde::Deserializable::deserialize(Deserializer &deserializer) { Program::ValueOrArray::HeapVector obj; - obj.value = - serde::Deserializable::deserialize(deserializer); + obj.value = serde::Deserializable::deserialize(deserializer); return obj; - } +} - namespace Program { +namespace Program { - inline bool operator==(const Witness &lhs, const Witness &rhs) { - if (!(lhs.value == rhs.value)) { - return false; + inline bool operator==(const Witness &lhs, const Witness &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; } - return true; - } - inline std::vector Witness::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } + inline std::vector Witness::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - inline Witness Witness::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); + inline Witness Witness::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; } - return value; - } - } // end of namespace Program +} // end of namespace Program - template <> - template - void - serde::Serializable::serialize(const Program::Witness &obj, - Serializer &serializer) { +template <> +template +void serde::Serializable::serialize(const Program::Witness &obj, Serializer &serializer) { serializer.increase_container_depth(); serde::Serializable::serialize(obj.value, serializer); serializer.decrease_container_depth(); - } +} - template <> - template - Program::Witness serde::Deserializable::deserialize( - Deserializer &deserializer) { +template <> +template +Program::Witness serde::Deserializable::deserialize(Deserializer &deserializer) { deserializer.increase_container_depth(); Program::Witness obj; - obj.value = - serde::Deserializable::deserialize(deserializer); + obj.value = serde::Deserializable::deserialize(deserializer); deserializer.decrease_container_depth(); return obj; - } +} From 627ba74ba2336617a4ed364a1d5a91acb1ece41d Mon Sep 17 00:00:00 2001 From: guipublic Date: Tue, 26 Mar 2024 17:40:28 +0000 Subject: [PATCH 30/98] update acvm_js test serialization --- .../acir/tests/test_program_serialization.rs | 16 ++++++++-------- .../test/shared/fixed_base_scalar_mul.ts | 7 ++----- .../acvm-repo/acvm_js/test/shared/pedersen.ts | 6 ++---- .../acvm_js/test/shared/schnorr_verify.ts | 17 +++-------------- 4 files changed, 15 insertions(+), 31 deletions(-) diff --git a/noir/noir-repo/acvm-repo/acir/tests/test_program_serialization.rs b/noir/noir-repo/acvm-repo/acir/tests/test_program_serialization.rs index 8b04292dfaa..ed5959636d2 100644 --- a/noir/noir-repo/acvm-repo/acir/tests/test_program_serialization.rs +++ b/noir/noir-repo/acvm-repo/acir/tests/test_program_serialization.rs @@ -77,9 +77,9 @@ fn fixed_base_scalar_mul_circuit() { let bytes = Program::serialize_program(&program); let expected_serialization: Vec = vec![ - 31, 139, 8, 0, 0, 0, 0, 0, 0, 255, 77, 138, 81, 10, 0, 48, 8, 66, 87, 219, 190, 118, 233, + 31, 139, 8, 0, 0, 0, 0, 0, 0, 255, 77, 138, 81, 10, 0, 48, 8, 66, 87, 219, 126, 118, 234, 29, 61, 43, 3, 5, 121, 34, 207, 86, 231, 162, 198, 157, 124, 228, 71, 157, 220, 232, 161, - 227, 226, 206, 214, 95, 221, 74, 0, 116, 58, 13, 182, 105, 0, 0, 0, + 227, 226, 206, 214, 95, 221, 74, 0, 7, 249, 204, 219, 105, 0, 0, 0, ]; assert_eq!(bytes, expected_serialization) @@ -105,9 +105,9 @@ fn pedersen_circuit() { let bytes = Program::serialize_program(&program); let expected_serialization: Vec = vec![ - 31, 139, 8, 0, 0, 0, 0, 0, 0, 255, 93, 74, 7, 6, 0, 0, 8, 108, 209, 255, 63, 156, 54, 233, - 56, 55, 17, 26, 18, 196, 241, 169, 250, 178, 141, 167, 32, 159, 254, 234, 238, 255, 87, - 112, 52, 63, 63, 101, 105, 0, 0, 0, + 31, 139, 8, 0, 0, 0, 0, 0, 0, 255, 93, 74, 133, 9, 0, 0, 8, 179, 240, 255, 139, 197, 6, + 113, 48, 150, 8, 13, 9, 226, 248, 84, 125, 217, 198, 83, 144, 79, 127, 117, 247, 255, 43, + 56, 71, 252, 254, 8, 105, 0, 0, 0, ]; assert_eq!(bytes, expected_serialization) @@ -149,7 +149,7 @@ fn schnorr_verify_circuit() { let expected_serialization: Vec = vec![ 31, 139, 8, 0, 0, 0, 0, 0, 0, 255, 77, 210, 7, 78, 2, 1, 20, 69, 81, 236, 189, 247, 222, 123, 239, 93, 177, 33, 34, 238, 194, 253, 47, 193, 200, 147, 67, 194, 36, 147, 163, 33, 33, - 228, 191, 219, 82, 168, 63, 63, 181, 183, 197, 223, 177, 147, 191, 181, 183, 149, 69, 159, + 228, 191, 219, 82, 168, 63, 63, 181, 183, 197, 223, 177, 131, 191, 181, 183, 149, 69, 159, 183, 213, 222, 238, 218, 219, 206, 14, 118, 178, 139, 141, 183, 135, 189, 236, 99, 63, 7, 56, 200, 33, 14, 115, 132, 163, 28, 227, 56, 39, 56, 201, 41, 78, 115, 134, 179, 156, 227, 60, 23, 184, 200, 37, 46, 115, 133, 171, 92, 227, 58, 55, 184, 201, 45, 110, 115, 135, 187, @@ -161,8 +161,8 @@ fn schnorr_verify_circuit() { 45, 164, 131, 52, 144, 253, 151, 11, 245, 221, 179, 121, 246, 206, 214, 217, 57, 27, 103, 223, 109, 187, 238, 218, 115, 223, 142, 135, 246, 59, 182, 219, 169, 189, 206, 237, 116, 105, 159, 107, 187, 220, 218, 227, 222, 14, 143, 238, 95, 116, 247, 23, 119, 126, 115, 223, - 146, 187, 150, 221, 179, 226, 142, 141, 155, 53, 238, 86, 104, 186, 231, 255, 243, 7, 100, - 141, 232, 192, 233, 3, 0, 0, + 146, 187, 150, 221, 179, 226, 142, 141, 155, 53, 238, 86, 104, 186, 231, 255, 243, 7, 66, + 5, 194, 255, 233, 3, 0, 0, ]; assert_eq!(bytes, expected_serialization) diff --git a/noir/noir-repo/acvm-repo/acvm_js/test/shared/fixed_base_scalar_mul.ts b/noir/noir-repo/acvm-repo/acvm_js/test/shared/fixed_base_scalar_mul.ts index 5aef521f231..46666861e8c 100644 --- a/noir/noir-repo/acvm-repo/acvm_js/test/shared/fixed_base_scalar_mul.ts +++ b/noir/noir-repo/acvm-repo/acvm_js/test/shared/fixed_base_scalar_mul.ts @@ -1,9 +1,6 @@ // See `fixed_base_scalar_mul_circuit` integration test in `acir/tests/test_program_serialization.rs`. -export const bytecode = Uint8Array.from([ - 31, 139, 8, 0, 0, 0, 0, 0, 0, 255, 77, 138, 81, 10, 0, 48, 8, 66, 87, 219, 190, 118, 233, 29, 61, 43, 3, 5, 121, 34, - 207, 86, 231, 162, 198, 157, 124, 228, 71, 157, 220, 232, 161, 227, 226, 206, 214, 95, 221, 74, 0, 116, 58, 13, 182, - 105, 0, 0, 0, -]); +export const bytecode = Uint8Array.from([31, 139, 8, 0, 0, 0, 0, 0, 0, 255, 77, 138, 81, 10, 0, 48, 8, 66, 87, 219, 126, 118, 234, 29, 61, 43, 3, 5, 121, 34, 207, 86, 231, 162, 198, 157, 124, 228, + 71, 157, 220, 232, 161, 227, 226, 206, 214, 95, 221, 74, 0, 7, 249, 204, 219, 105, 0, 0, 0]); export const initialWitnessMap = new Map([ [1, '0x0000000000000000000000000000000000000000000000000000000000000001'], [2, '0x0000000000000000000000000000000000000000000000000000000000000000'], diff --git a/noir/noir-repo/acvm-repo/acvm_js/test/shared/pedersen.ts b/noir/noir-repo/acvm-repo/acvm_js/test/shared/pedersen.ts index 00d207053d8..6569c885465 100644 --- a/noir/noir-repo/acvm-repo/acvm_js/test/shared/pedersen.ts +++ b/noir/noir-repo/acvm-repo/acvm_js/test/shared/pedersen.ts @@ -1,8 +1,6 @@ // See `pedersen_circuit` integration test in `acir/tests/test_program_serialization.rs`. -export const bytecode = Uint8Array.from([ - 31, 139, 8, 0, 0, 0, 0, 0, 0, 255, 93, 74, 7, 6, 0, 0, 8, 108, 209, 255, 63, 156, 54, 233, 56, 55, 17, 26, 18, 196, - 241, 169, 250, 178, 141, 167, 32, 159, 254, 234, 238, 255, 87, 112, 52, 63, 63, 101, 105, 0, 0, 0, -]); +export const bytecode = Uint8Array.from([31, 139, 8, 0, 0, 0, 0, 0, 0, 255, 93, 74, 133, 9, 0, 0, 8, 179, 240, 255, 139, 197, 6, 113, 48, 150, 8, 13, 9, 226, 248, 84, 125, 217, 198, 83, 144, 79, 127, 117, 247, 255, 43, 56, 71, 252, 254, 8, 105, 0, 0, 0] +); export const initialWitnessMap = new Map([[1, '0x0000000000000000000000000000000000000000000000000000000000000001']]); diff --git a/noir/noir-repo/acvm-repo/acvm_js/test/shared/schnorr_verify.ts b/noir/noir-repo/acvm-repo/acvm_js/test/shared/schnorr_verify.ts index 14c32c615c8..6a1238bf439 100644 --- a/noir/noir-repo/acvm-repo/acvm_js/test/shared/schnorr_verify.ts +++ b/noir/noir-repo/acvm-repo/acvm_js/test/shared/schnorr_verify.ts @@ -1,18 +1,7 @@ // See `schnorr_verify_circuit` integration test in `acir/tests/test_program_serialization.rs`. -export const bytecode = Uint8Array.from([ - 31, 139, 8, 0, 0, 0, 0, 0, 0, 255, 77, 210, 7, 78, 2, 1, 20, 69, 81, 236, 189, 247, 222, 123, 239, 93, 177, 33, 34, - 238, 194, 253, 47, 193, 200, 147, 67, 194, 36, 147, 163, 33, 33, 228, 191, 219, 82, 168, 63, 63, 181, 183, 197, 223, - 177, 147, 191, 181, 183, 149, 69, 159, 183, 213, 222, 238, 218, 219, 206, 14, 118, 178, 139, 141, 183, 135, 189, 236, - 99, 63, 7, 56, 200, 33, 14, 115, 132, 163, 28, 227, 56, 39, 56, 201, 41, 78, 115, 134, 179, 156, 227, 60, 23, 184, - 200, 37, 46, 115, 133, 171, 92, 227, 58, 55, 184, 201, 45, 110, 115, 135, 187, 220, 227, 62, 15, 120, 200, 35, 30, - 243, 132, 167, 60, 227, 57, 47, 120, 201, 43, 94, 243, 134, 183, 188, 227, 61, 31, 248, 200, 39, 22, 249, 204, 151, - 166, 29, 243, 188, 250, 255, 141, 239, 44, 241, 131, 101, 126, 178, 194, 47, 86, 249, 237, 123, 171, 76, 127, 105, 47, - 189, 165, 181, 116, 150, 198, 26, 125, 245, 248, 45, 233, 41, 45, 165, 163, 52, 148, 126, 210, 78, 186, 73, 51, 233, - 37, 173, 164, 147, 52, 146, 62, 210, 70, 186, 72, 19, 233, 33, 45, 164, 131, 52, 144, 253, 151, 11, 245, 221, 179, - 121, 246, 206, 214, 217, 57, 27, 103, 223, 109, 187, 238, 218, 115, 223, 142, 135, 246, 59, 182, 219, 169, 189, 206, - 237, 116, 105, 159, 107, 187, 220, 218, 227, 222, 14, 143, 238, 95, 116, 247, 23, 119, 126, 115, 223, 146, 187, 150, - 221, 179, 226, 142, 141, 155, 53, 238, 86, 104, 186, 231, 255, 243, 7, 100, 141, 232, 192, 233, 3, 0, 0, -]); +export const bytecode = Uint8Array.from( + [31, 139, 8, 0, 0, 0, 0, 0, 0, 255, 77, 210, 7, 78, 2, 1, 20, 69, 81, 236, 189, 247, 222, 123, 239, 93, 177, 33, 34, 238, 194, 253, 47, 193, 200, 147, 67, 194, 36, 147, 163, 33, 33, 228, 191, 219, 82, 168, 63, 63, 181, 183, 197, 223, 177, 131, 191, 181, 183, 149, 69, 159, 183, 213, 222, 238, 218, 219, 206, 14, 118, 178, 139, 141, 183, 135, 189, 236, 99, 63, 7, 56, 200, 33, 14, 115, 132, 163, 28, 227, 56, 39, 56, 201, 41, 78, 115, 134, 179, 156, 227, 60, 23, 184, 200, 37, 46, 115, 133, 171, 92, 227, 58, 55, 184, 201, 45, 110, 115, 135, 187, 220, 227, 62, 15, 120, 200, 35, 30, 243, 132, 167, 60, 227, 57, 47, 120, 201, 43, 94, 243, 134, 183, 188, 227, 61, 31, 248, 200, 39, 22, 249, 204, 151, 166, 29, 243, 188, 250, 255, 141, 239, 44, 241, 131, 101, 126, 178, 194, 47, 86, 249, 237, 123, 171, 76, 127, 105, 47, 189, 165, 181, 116, 150, 198, 26, 125, 245, 248, 45, 233, 41, 45, 165, 163, 52, 148, 126, 210, 78, 186, 73, 51, 233, 37, 173, 164, 147, 52, 146, 62, 210, 70, 186, 72, 19, 233, 33, 45, 164, 131, 52, 144, 253, 151, 11, 245, 221, 179, 121, 246, 206, 214, 217, 57, 27, 103, 223, 109, 187, 238, 218, 115, 223, 142, 135, 246, 59, 182, 219, 169, 189, 206, 237, 116, 105, 159, 107, 187, 220, 218, 227, 222, 14, 143, 238, 95, 116, 247, 23, 119, 126, 115, 223, 146, 187, 150, 221, 179, 226, 142, 141, 155, 53, 238, 86, 104, 186, 231, 255, 243, 7, 66, 5, 194, 255, 233, 3, 0, 0] +); export const initialWitnessMap = new Map([ [1, '0x04b260954662e97f00cab9adb773a259097f7a274b83b113532bce27fa3fb96a'], From ba4f9170f9c32e303affe99a6b3ad380b3122eae Mon Sep 17 00:00:00 2001 From: TomAFrench Date: Wed, 27 Mar 2024 11:19:38 +0000 Subject: [PATCH 31/98] chore: update hash --- yarn-project/circuits.js/src/contract/artifact_hash.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/yarn-project/circuits.js/src/contract/artifact_hash.test.ts b/yarn-project/circuits.js/src/contract/artifact_hash.test.ts index a2742bdef8a..18605ca161e 100644 --- a/yarn-project/circuits.js/src/contract/artifact_hash.test.ts +++ b/yarn-project/circuits.js/src/contract/artifact_hash.test.ts @@ -5,7 +5,7 @@ describe('ArtifactHash', () => { it('calculates the artifact hash', () => { const artifact = getBenchmarkContractArtifact(); expect(computeArtifactHash(artifact).toString()).toMatchInlineSnapshot( - `"0x1c4308cf4acda970916ac5dd5ae32106bd782b17d2da4f50090ff5b77032ad02"`, + `"0x1edcb70c5bfeb1ca7337334b33ac3a7e92499670e2249258a7e1e7114961271b"`, ); }); }); From 52b3b0463d477787879cd8b4112f9372e0857237 Mon Sep 17 00:00:00 2001 From: TomAFrench Date: Wed, 27 Mar 2024 11:27:19 +0000 Subject: [PATCH 32/98] chore: update deployer address --- l1-contracts/src/core/libraries/ConstantsGen.sol | 2 +- .../noir-protocol-circuits/crates/types/src/constants.nr | 2 +- yarn-project/circuits.js/src/constants.gen.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/l1-contracts/src/core/libraries/ConstantsGen.sol b/l1-contracts/src/core/libraries/ConstantsGen.sol index 1c31e002eb4..884b982712c 100644 --- a/l1-contracts/src/core/libraries/ConstantsGen.sol +++ b/l1-contracts/src/core/libraries/ConstantsGen.sol @@ -91,7 +91,7 @@ library Constants { uint256 internal constant DEPLOYER_CONTRACT_INSTANCE_DEPLOYED_MAGIC_VALUE = 0x85864497636cf755ae7bde03f267ce01a520981c21c3682aaf82a631; uint256 internal constant DEPLOYER_CONTRACT_ADDRESS = - 0x1ad693effc2a4a40fdf5911ff29e19d2b6cd3cf73e6c3685519a6fb783144dcb; + 0x2a50b736a4bf1f39751dfad0302fe11acb92288f7d88cc6fba823cca165037da; uint256 internal constant L1_TO_L2_MESSAGE_ORACLE_CALL_LENGTH = 17; uint256 internal constant MAX_NOTE_FIELDS_LENGTH = 20; uint256 internal constant GET_NOTE_ORACLE_RETURN_LENGTH = 23; diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/constants.nr b/noir-projects/noir-protocol-circuits/crates/types/src/constants.nr index 2fec9bce466..64ff1652ebe 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/constants.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/constants.nr @@ -131,7 +131,7 @@ global REGISTERER_UNCONSTRAINED_FUNCTION_BROADCASTED_MAGIC_VALUE = 0xe7af8166354 // CONTRACT INSTANCE CONSTANTS // sha224sum 'struct ContractInstanceDeployed' global DEPLOYER_CONTRACT_INSTANCE_DEPLOYED_MAGIC_VALUE = 0x85864497636cf755ae7bde03f267ce01a520981c21c3682aaf82a631; -global DEPLOYER_CONTRACT_ADDRESS = 0x1ad693effc2a4a40fdf5911ff29e19d2b6cd3cf73e6c3685519a6fb783144dcb; +global DEPLOYER_CONTRACT_ADDRESS = 0x2a50b736a4bf1f39751dfad0302fe11acb92288f7d88cc6fba823cca165037da; // NOIR CONSTANTS - constants used only in yarn-packages/noir-contracts // Some are defined here because Noir doesn't yet support globals referencing other globals yet. diff --git a/yarn-project/circuits.js/src/constants.gen.ts b/yarn-project/circuits.js/src/constants.gen.ts index e2144817194..855200e7d21 100644 --- a/yarn-project/circuits.js/src/constants.gen.ts +++ b/yarn-project/circuits.js/src/constants.gen.ts @@ -76,7 +76,7 @@ export const REGISTERER_UNCONSTRAINED_FUNCTION_BROADCASTED_MAGIC_VALUE = 0xe7af816635466f128568edb04c9fa024f6c87fb9010fdbffa68b3d99n; export const DEPLOYER_CONTRACT_INSTANCE_DEPLOYED_MAGIC_VALUE = 0x85864497636cf755ae7bde03f267ce01a520981c21c3682aaf82a631n; -export const DEPLOYER_CONTRACT_ADDRESS = 0x1ad693effc2a4a40fdf5911ff29e19d2b6cd3cf73e6c3685519a6fb783144dcbn; +export const DEPLOYER_CONTRACT_ADDRESS = 0x2a50b736a4bf1f39751dfad0302fe11acb92288f7d88cc6fba823cca165037da; export const L1_TO_L2_MESSAGE_ORACLE_CALL_LENGTH = 17; export const MAX_NOTE_FIELDS_LENGTH = 20; export const GET_NOTE_ORACLE_RETURN_LENGTH = 23; From f57cdc976e58ef1ee803774da64a54b81c31901c Mon Sep 17 00:00:00 2001 From: TomAFrench Date: Wed, 27 Mar 2024 11:44:09 +0000 Subject: [PATCH 33/98] chore: fix deployer address --- yarn-project/circuits.js/src/constants.gen.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/yarn-project/circuits.js/src/constants.gen.ts b/yarn-project/circuits.js/src/constants.gen.ts index 855200e7d21..2741857e8cc 100644 --- a/yarn-project/circuits.js/src/constants.gen.ts +++ b/yarn-project/circuits.js/src/constants.gen.ts @@ -76,7 +76,7 @@ export const REGISTERER_UNCONSTRAINED_FUNCTION_BROADCASTED_MAGIC_VALUE = 0xe7af816635466f128568edb04c9fa024f6c87fb9010fdbffa68b3d99n; export const DEPLOYER_CONTRACT_INSTANCE_DEPLOYED_MAGIC_VALUE = 0x85864497636cf755ae7bde03f267ce01a520981c21c3682aaf82a631n; -export const DEPLOYER_CONTRACT_ADDRESS = 0x2a50b736a4bf1f39751dfad0302fe11acb92288f7d88cc6fba823cca165037da; +export const DEPLOYER_CONTRACT_ADDRESS = 0x2a50b736a4bf1f39751dfad0302fe11acb92288f7d88cc6fba823cca165037dan; export const L1_TO_L2_MESSAGE_ORACLE_CALL_LENGTH = 17; export const MAX_NOTE_FIELDS_LENGTH = 20; export const GET_NOTE_ORACLE_RETURN_LENGTH = 23; From 4dd3b01c3393bb171dc300e642e6fa5b4503604e Mon Sep 17 00:00:00 2001 From: guipublic Date: Wed, 27 Mar 2024 14:35:22 +0000 Subject: [PATCH 34/98] Code review --- .../contracts/card_game_contract/src/cards.nr | 11 ++++++++++- .../ecdsa_account_contract/src/main.nr | 15 ++++++++++++++- noir/noir-repo/noir_stdlib/src/field.nr | 18 ------------------ 3 files changed, 24 insertions(+), 20 deletions(-) diff --git a/noir-projects/noir-contracts/contracts/card_game_contract/src/cards.nr b/noir-projects/noir-contracts/contracts/card_game_contract/src/cards.nr index 3eceaa016db..52d7c1f887c 100644 --- a/noir-projects/noir-contracts/contracts/card_game_contract/src/cards.nr +++ b/noir-projects/noir-contracts/contracts/card_game_contract/src/cards.nr @@ -165,6 +165,15 @@ impl Deck { global PACK_CARDS = 3; // Limited by number of write requests (max 4) +pub fn to_le_32_bytes(a: Field) -> [u8; 32] { + let bytes = a.to_le_bytes(32); + let mut result = [0; 32]; + for i in 0..32 { + result[i] = bytes[i]; + } + result +} + pub fn get_pack_cards( seed: Field, owner: AztecAddress, @@ -173,7 +182,7 @@ pub fn get_pack_cards( // generate pseudo randomness deterministically from 'seed' and user secret let secret = context.request_nullifier_secret_key(owner); let mix = secret.high + secret.low + seed; - let random_bytes = std::hash::sha256(mix.to_le_32_bytes()); + let random_bytes = std::hash::sha256(to_le_32_bytes(mix)); let mut cards = [Card::from_field(0); PACK_CARDS]; // we generate PACK_CARDS cards diff --git a/noir-projects/noir-contracts/contracts/ecdsa_account_contract/src/main.nr b/noir-projects/noir-contracts/contracts/ecdsa_account_contract/src/main.nr index cd2bd1d39a3..0f4cc395516 100644 --- a/noir-projects/noir-contracts/contracts/ecdsa_account_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/ecdsa_account_contract/src/main.nr @@ -78,10 +78,23 @@ contract EcdsaAccount { // Verify payload signature using Ethereum's signing scheme // Note that noir expects the hash of the message/challenge as input to the ECDSA verification. - let hashed_message: [u8; 32] = std::hash::sha256(outer_hash.to_be_32_bytes()); + let hashed_message: [u8; 32] = std::hash::sha256(to_be_32_bytes(outer_hash)); let verification = std::ecdsa_secp256k1::verify_signature(public_key.x, public_key.y, signature, hashed_message); assert(verification == true); true } + + #[contract_library_method] + fn to_be_32_bytes(a: Field) -> [u8; 32] { + let bytes = a.to_be_bytes(32); + let mut result = [0; 32]; + for i in 0..32 { + result[i] = bytes[i]; + } + result + } } + + + \ No newline at end of file diff --git a/noir/noir-repo/noir_stdlib/src/field.nr b/noir/noir-repo/noir_stdlib/src/field.nr index ed63fdb5706..b876bcc967b 100644 --- a/noir/noir-repo/noir_stdlib/src/field.nr +++ b/noir/noir-repo/noir_stdlib/src/field.nr @@ -47,24 +47,6 @@ impl Field { self.__to_be_radix(radix, result_len) } - pub fn to_le_32_bytes(self: Self) -> [u8; 32] { - let bytes = self.to_le_bytes(32); - let mut result = [0; 32]; - for i in 0..32 { - result[i] = bytes[i]; - } - result - } - - pub fn to_be_32_bytes(self: Self) -> [u8; 32] { - let bytes = self.to_be_bytes(32); - let mut result = [0; 32]; - for i in 0..32 { - result[i] = bytes[i]; - } - result - } - // decompose `_self` into a `_result_len` vector over the `_radix` basis // `_radix` must be less than 256 #[builtin(to_le_radix)] From 0d863d5f39a2b6897daeea09ded4ba31ec7ebe35 Mon Sep 17 00:00:00 2001 From: guipublic Date: Mon, 15 Apr 2024 10:37:46 +0000 Subject: [PATCH 35/98] fix merge issue --- .../compiler/noirc_evaluator/src/ssa/ir/instruction.rs | 6 ------ 1 file changed, 6 deletions(-) diff --git a/noir/noir-repo/compiler/noirc_evaluator/src/ssa/ir/instruction.rs b/noir/noir-repo/compiler/noirc_evaluator/src/ssa/ir/instruction.rs index 42a83b5b71e..4a97b346a90 100644 --- a/noir/noir-repo/compiler/noirc_evaluator/src/ssa/ir/instruction.rs +++ b/noir/noir-repo/compiler/noirc_evaluator/src/ssa/ir/instruction.rs @@ -268,12 +268,6 @@ impl Instruction { | DecrementRc { .. } | RangeCheck { .. } => false, - // These can have different behavior depending on the EnableSideEffectsIf context. - // Enabling constant folding for these potentially enables replacing an enabled - // array get with one that was disabled. See - // https://github.com/noir-lang/noir/pull/4716#issuecomment-2047846328. - ArrayGet { .. } | ArraySet { .. } => false, - Call { func, .. } => match dfg[*func] { Value::Intrinsic(intrinsic) => !intrinsic.has_side_effects(), _ => false, From a8f0db2572a8fd0762fa43c685a384384bcb764a Mon Sep 17 00:00:00 2001 From: Tom French Date: Thu, 25 Apr 2024 13:48:22 +0100 Subject: [PATCH 36/98] chore: remove sha256 from avm-transpiler --- avm-transpiler/src/transpile.rs | 23 ----------------------- 1 file changed, 23 deletions(-) diff --git a/avm-transpiler/src/transpile.rs b/avm-transpiler/src/transpile.rs index e3141da53cd..c82a6f1b661 100644 --- a/avm-transpiler/src/transpile.rs +++ b/avm-transpiler/src/transpile.rs @@ -854,29 +854,6 @@ fn generate_mov_instruction(indirect: Option, source: u32, dest: u32) -> Avm /// (array goes in -> field element comes out) fn handle_black_box_function(avm_instrs: &mut Vec, operation: &BlackBoxOp) { match operation { - BlackBoxOp::Sha256 { message, output } => { - let message_offset = message.pointer.0; - let message_size_offset = message.size.0; - let dest_offset = output.pointer.0; - assert_eq!(output.size, 32, "SHA256 output size must be 32!"); - - avm_instrs.push(AvmInstruction { - opcode: AvmOpcode::SHA256, - indirect: Some(ZEROTH_OPERAND_INDIRECT | FIRST_OPERAND_INDIRECT), - operands: vec![ - AvmOperand::U32 { - value: dest_offset as u32, - }, - AvmOperand::U32 { - value: message_offset as u32, - }, - AvmOperand::U32 { - value: message_size_offset as u32, - }, - ], - ..Default::default() - }); - } BlackBoxOp::PedersenHash { inputs, domain_separator, From c548f5cf0297f63e3cef64018e04d9b0126f8692 Mon Sep 17 00:00:00 2001 From: Tom French <15848336+TomAFrench@users.noreply.github.com> Date: Thu, 25 Apr 2024 13:58:52 +0100 Subject: [PATCH 37/98] Apply suggestions from code review --- .../src/barretenberg/sumcheck/instance/prover_instance.hpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/barretenberg/cpp/src/barretenberg/sumcheck/instance/prover_instance.hpp b/barretenberg/cpp/src/barretenberg/sumcheck/instance/prover_instance.hpp index 696a9ea696b..d17f45ce595 100644 --- a/barretenberg/cpp/src/barretenberg/sumcheck/instance/prover_instance.hpp +++ b/barretenberg/cpp/src/barretenberg/sumcheck/instance/prover_instance.hpp @@ -85,7 +85,8 @@ template class ProverInstance_ { ProverInstance_() = default; ~ProverInstance_() = default; - void compute_databus_id() requires IsGoblinFlavor; + void compute_databus_id() + requires IsGoblinFlavor; private: static constexpr size_t num_zero_rows = Flavor::has_zero_row ? 1 : 0; @@ -94,7 +95,8 @@ template class ProverInstance_ { size_t compute_dyadic_size(Circuit&); - void construct_databus_polynomials(Circuit&) requires IsGoblinFlavor; + void construct_databus_polynomials(Circuit&) + requires IsGoblinFlavor; void construct_table_polynomials(Circuit&, size_t); }; From 95a1a21c8da609fcb11041c0e65399009e3200b6 Mon Sep 17 00:00:00 2001 From: dbanks12 Date: Fri, 26 Apr 2024 19:42:41 +0000 Subject: [PATCH 38/98] chore(avm-simulator): sha256 -> sha256compression --- avm-transpiler/src/instructions.rs | 1 + avm-transpiler/src/opcodes.rs | 4 +- avm-transpiler/src/transpile.rs | 38 ++++- .../src/crypto/sha256/index.test.ts | 46 +++++- .../foundation/src/crypto/sha256/index.ts | 141 +++++++++++++++++- yarn-project/simulator/src/avm/avm_gas.ts | 2 +- .../simulator/src/avm/fixtures/index.ts | 6 +- .../simulator/src/avm/opcodes/hashing.test.ts | 134 +++++++++++------ .../simulator/src/avm/opcodes/hashing.ts | 52 ++++--- .../serialization/bytecode_serialization.ts | 4 +- .../instruction_serialization.ts | 2 +- 11 files changed, 344 insertions(+), 86 deletions(-) diff --git a/avm-transpiler/src/instructions.rs b/avm-transpiler/src/instructions.rs index 4a51dad5570..838b020257e 100644 --- a/avm-transpiler/src/instructions.rs +++ b/avm-transpiler/src/instructions.rs @@ -8,6 +8,7 @@ pub const ALL_DIRECT: u8 = 0b00000000; pub const ZEROTH_OPERAND_INDIRECT: u8 = 0b00000001; pub const FIRST_OPERAND_INDIRECT: u8 = 0b00000010; pub const SECOND_OPERAND_INDIRECT: u8 = 0b00000100; +pub const THIRD_OPERAND_INDIRECT: u8 = 0b00001000; /// A simple representation of an AVM instruction for the purpose /// of generating an AVM bytecode from Brillig. diff --git a/avm-transpiler/src/opcodes.rs b/avm-transpiler/src/opcodes.rs index 60bdbc87a4e..6ad40df6bb2 100644 --- a/avm-transpiler/src/opcodes.rs +++ b/avm-transpiler/src/opcodes.rs @@ -69,7 +69,7 @@ pub enum AvmOpcode { // Gadgets KECCAK, POSEIDON2, - SHA256, // temp - may be removed, but alot of contracts rely on it + SHA256COMPRESSION, PEDERSEN, // temp - may be removed, but alot of contracts rely on it } @@ -157,7 +157,7 @@ impl AvmOpcode { // Gadgets AvmOpcode::KECCAK => "KECCAK", AvmOpcode::POSEIDON2 => "POSEIDON2", - AvmOpcode::SHA256 => "SHA256 ", + AvmOpcode::SHA256COMPRESSION => "SHA256COMPRESSION", AvmOpcode::PEDERSEN => "PEDERSEN", } } diff --git a/avm-transpiler/src/transpile.rs b/avm-transpiler/src/transpile.rs index c82a6f1b661..5c9814cfbcb 100644 --- a/avm-transpiler/src/transpile.rs +++ b/avm-transpiler/src/transpile.rs @@ -7,7 +7,7 @@ use acvm::FieldElement; use crate::instructions::{ AvmInstruction, AvmOperand, AvmTypeTag, ALL_DIRECT, FIRST_OPERAND_INDIRECT, - SECOND_OPERAND_INDIRECT, ZEROTH_OPERAND_INDIRECT, + SECOND_OPERAND_INDIRECT, THIRD_OPERAND_INDIRECT, ZEROTH_OPERAND_INDIRECT, }; use crate::opcodes::AvmOpcode; use crate::utils::{dbg_print_avm_program, dbg_print_brillig_program}; @@ -854,6 +854,42 @@ fn generate_mov_instruction(indirect: Option, source: u32, dest: u32) -> Avm /// (array goes in -> field element comes out) fn handle_black_box_function(avm_instrs: &mut Vec, operation: &BlackBoxOp) { match operation { + BlackBoxOp::Sha256Compression { + input, + hash_values, + output, + } => { + let inputs_offset = input.pointer.0; + let inputs_size_offset = input.size.0; + let state_offset = hash_values.pointer.0; + let state_size_offset = hash_values.size.0; + let output_offset = output.pointer.0; + + avm_instrs.push(AvmInstruction { + opcode: AvmOpcode::SHA256COMPRESSION, + indirect: Some( + ZEROTH_OPERAND_INDIRECT | FIRST_OPERAND_INDIRECT | THIRD_OPERAND_INDIRECT, + ), + operands: vec![ + AvmOperand::U32 { + value: output_offset as u32, + }, + AvmOperand::U32 { + value: state_offset as u32, + }, + AvmOperand::U32 { + value: state_size_offset as u32, + }, + AvmOperand::U32 { + value: inputs_offset as u32, + }, + AvmOperand::U32 { + value: inputs_size_offset as u32, + }, + ], + ..Default::default() + }); + } BlackBoxOp::PedersenHash { inputs, domain_separator, diff --git a/yarn-project/foundation/src/crypto/sha256/index.test.ts b/yarn-project/foundation/src/crypto/sha256/index.test.ts index 8b30661302a..f350bc035df 100644 --- a/yarn-project/foundation/src/crypto/sha256/index.test.ts +++ b/yarn-project/foundation/src/crypto/sha256/index.test.ts @@ -1,14 +1,46 @@ -import { createHash, randomBytes } from 'crypto'; +import { createHash, randomBytes, randomInt } from 'crypto'; -import { sha256 } from './index.js'; +import { sha256, sha256Compression } from './index.js'; describe('sha256', () => { - it('should correctly hash data using hash.js', () => { - const data = randomBytes(67); + describe('sha256 hash', () => { + it('should correctly hash data using hash.js', () => { + const data = randomBytes(67); - const expected = createHash('sha256').update(data).digest(); + const expected = createHash('sha256').update(data).digest(); - const result = sha256(data); - expect(result).toEqual(expected); + const result = sha256(data); + expect(result).toEqual(expected); + }); + }); + + describe('sha256 compression', () => { + it('sha256Compression works', () => { + const state = Uint32Array.from(Array.from({ length: 8 }, () => randomInt(2 ** 32))); + const inputs = Uint32Array.from(Array.from({ length: 16 }, () => randomInt(2 ** 32))); + + const output = sha256Compression(state, inputs); + expect(output.length).toEqual(8); + }); + it('sha256 compression does not work on state.length < 8', () => { + const state = Uint32Array.from(Array.from({ length: 7 }, () => randomInt(2 ** 32))); + const inputs = Uint32Array.from(Array.from({ length: 16 }, () => randomInt(2 ** 32))); + expect(() => sha256Compression(state, inputs)).toThrowError(); + }); + it('sha256 compression does not work on state.length > 8', () => { + const state = Uint32Array.from(Array.from({ length: 9 }, () => randomInt(2 ** 32))); + const inputs = Uint32Array.from(Array.from({ length: 16 }, () => randomInt(2 ** 32))); + expect(() => sha256Compression(state, inputs)).toThrowError(); + }); + it('sha256 compression does not work on inputs.length < 16', () => { + const state = Uint32Array.from(Array.from({ length: 8 }, () => randomInt(2 ** 32))); + const inputs = Uint32Array.from(Array.from({ length: 15 }, () => randomInt(2 ** 32))); + expect(() => sha256Compression(state, inputs)).toThrowError(); + }); + it('sha256 compression does not work on inputs.length > 16', () => { + const state = Uint32Array.from(Array.from({ length: 8 }, () => randomInt(2 ** 32))); + const inputs = Uint32Array.from(Array.from({ length: 17 }, () => randomInt(2 ** 32))); + expect(() => sha256Compression(state, inputs)).toThrowError(); + }); }); }); diff --git a/yarn-project/foundation/src/crypto/sha256/index.ts b/yarn-project/foundation/src/crypto/sha256/index.ts index 1ff89efda47..528adf850f1 100644 --- a/yarn-project/foundation/src/crypto/sha256/index.ts +++ b/yarn-project/foundation/src/crypto/sha256/index.ts @@ -1,14 +1,147 @@ +/* eslint-disable camelcase */ import { default as hash } from 'hash.js'; import { Fr } from '../../fields/fields.js'; import { truncateAndPad } from '../../serialize/free_funcs.js'; import { type Bufferable, serializeToBuffer } from '../../serialize/serialize.js'; -export const sha256 = (data: Buffer) => Buffer.from(hash.sha256().update(data).digest()); +export function sha256(data: Buffer) { + return Buffer.from(hash.sha256().update(data).digest()); +} -export const sha256Trunc = (data: Buffer) => truncateAndPad(sha256(data)); +export function sha256Trunc(data: Buffer) { + return truncateAndPad(sha256(data)); +} -export const sha256ToField = (data: Bufferable[]) => { +export function sha256ToField(data: Bufferable[]) { const buffer = serializeToBuffer(data); return Fr.fromBuffer(sha256Trunc(buffer)); -}; +} + +/** + * The "SHA256 Compression" operation (component operation of SHA256 "Hash"). + * WARNING: modifies `state` in place (and also returns it) + * + * This algorithm is extracted from the hash.js package + * and modified to take in an initial state to operate on. + * + * @param state - The initial state to operate on (modified in-place). 8 u32s. + * @param inputs - The inputs to compress into the state. 16 u32s. + * @returns The modified state. 8 u32s. + */ +export function sha256Compression(state: Uint32Array, inputs: Uint32Array): Uint32Array { + if (state.length !== 8) { + throw new Error('`state` argument to SHA256 compression must be of length 8'); + } + if (inputs.length !== 16) { + throw new Error('`inputs` argument to SHA256 compression must be of length 16'); + } + + const W = new Array(64); + const k = [ + 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, + 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786, + 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152, 0xa831c66d, 0xb00327c8, + 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, + 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, + 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, + 0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, + 0xc67178f2, + ]; + let i = 0; + for (i = 0; i < 16; i++) { + W[i] = inputs[i]; + } + for (i = 16; i < W.length; i++) { + W[i] = sum32_4( + W[i - 16], + W[i - 7], + g0_256(W[i - 15]), // Rot17, Rot18, Sh3 + g1_256(W[i - 2]), //ROt17, Rot19, Sh10 + ); + } + + let a = state[0]; + let b = state[1]; + let c = state[2]; + let d = state[3]; + let e = state[4]; + let f = state[5]; + let g = state[6]; + let h = state[7]; + + for (let i = 0; i < 64; i++) { + const T1 = sum32_5( + h, + s1_256(e), // Rot6, Rot11, Rot25 + ch32(e, f, g), + k[i], + W[i], + ); + + const T2 = sum32( + s0_256(a), // Rot2, Rot13, Rot22 + maj32(a, b, c), + ); + h = g; + g = f; + f = e; + e = sum32(d, T1); + d = c; + c = b; + b = a; + a = sum32(T1, T2); + } + + state[0] = sum32(state[0], a); + state[1] = sum32(state[1], b); + state[2] = sum32(state[2], c); + state[3] = sum32(state[3], d); + state[4] = sum32(state[4], e); + state[5] = sum32(state[5], f); + state[6] = sum32(state[6], g); + state[7] = sum32(state[7], h); + return state; +} + +// SHA256 HELPER FUNCTIONS (from hash.js package) + +function rotr32(w: number, b: number) { + return (w >>> b) | (w << (32 - b)); +} + +function sum32(a: number, b: number) { + return (a + b) >>> 0; +} + +function sum32_4(a: number, b: number, c: number, d: number) { + return (a + b + c + d) >>> 0; +} + +function sum32_5(a: number, b: number, c: number, d: number, e: number) { + return (a + b + c + d + e) >>> 0; +} + +function ch32(x: number, y: number, z: number) { + return (x & y) ^ (~x & z); +} + +function maj32(x: number, y: number, z: number) { + return (x & y) ^ (x & z) ^ (y & z); +} + +function s0_256(x: number) { + return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22); +} + +function s1_256(x: number) { + return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25); +} + +function g0_256(x: number) { + return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3); +} + +function g1_256(x: number) { + return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10); +} diff --git a/yarn-project/simulator/src/avm/avm_gas.ts b/yarn-project/simulator/src/avm/avm_gas.ts index 5d7bae10514..213011a63ec 100644 --- a/yarn-project/simulator/src/avm/avm_gas.ts +++ b/yarn-project/simulator/src/avm/avm_gas.ts @@ -126,7 +126,7 @@ export const GasCosts: Record = { // Gadgets [Opcode.KECCAK]: TemporaryDefaultGasCost, [Opcode.POSEIDON2]: TemporaryDefaultGasCost, - [Opcode.SHA256]: TemporaryDefaultGasCost, // temp - may be removed, but alot of contracts rely on i: TemporaryDefaultGasCost, + [Opcode.SHA256COMPRESSION]: TemporaryDefaultGasCost, [Opcode.PEDERSEN]: TemporaryDefaultGasCost, // temp - may be removed, but alot of contracts rely on i: TemporaryDefaultGasCost,t }; diff --git a/yarn-project/simulator/src/avm/fixtures/index.ts b/yarn-project/simulator/src/avm/fixtures/index.ts index 2800a605bb3..1a5f637c5e2 100644 --- a/yarn-project/simulator/src/avm/fixtures/index.ts +++ b/yarn-project/simulator/src/avm/fixtures/index.ts @@ -11,7 +11,7 @@ import { type CommitmentsDB, type PublicContractsDB, type PublicStateDB } from ' import { AvmContext } from '../avm_context.js'; import { AvmContextInputs, AvmExecutionEnvironment } from '../avm_execution_environment.js'; import { AvmMachineState } from '../avm_machine_state.js'; -import { Field, Uint8 } from '../avm_memory_types.js'; +import { Field, Uint8, Uint32 } from '../avm_memory_types.js'; import { HostStorage } from '../journal/host_storage.js'; import { AvmPersistableStateManager } from '../journal/journal.js'; @@ -124,6 +124,10 @@ export function randomMemoryBytes(length: number): Uint8[] { return [...Array(length)].map(_ => new Uint8(Math.floor(Math.random() * 255))); } +export function randomMemoryUint32s(length: number): Uint32[] { + return [...Array(length)].map(_ => new Uint32(Math.floor(Math.random() * 0xffffffff))); +} + export function randomMemoryFields(length: number): Field[] { return [...Array(length)].map(_ => new Field(Fr.random())); } diff --git a/yarn-project/simulator/src/avm/opcodes/hashing.test.ts b/yarn-project/simulator/src/avm/opcodes/hashing.test.ts index d0528225878..5d24aedbf02 100644 --- a/yarn-project/simulator/src/avm/opcodes/hashing.test.ts +++ b/yarn-project/simulator/src/avm/opcodes/hashing.test.ts @@ -1,10 +1,10 @@ -import { keccak256, pedersenHash, sha256 } from '@aztec/foundation/crypto'; +import { keccak256, pedersenHash, sha256Compression } from '@aztec/foundation/crypto'; import { type AvmContext } from '../avm_context.js'; import { Field, type Uint8, Uint32 } from '../avm_memory_types.js'; -import { initContext, randomMemoryBytes, randomMemoryFields } from '../fixtures/index.js'; +import { initContext, randomMemoryBytes, randomMemoryFields, randomMemoryUint32s } from '../fixtures/index.js'; import { Addressing, AddressingMode } from './addressing_mode.js'; -import { Keccak, Pedersen, Poseidon2, Sha256 } from './hashing.js'; +import { Keccak, Pedersen, Poseidon2, Sha256Compression } from './hashing.js'; describe('Hashing Opcodes', () => { let context: AvmContext; @@ -136,72 +136,108 @@ describe('Hashing Opcodes', () => { }); }); - describe('Sha256', () => { + describe('Sha256Compression', () => { it('Should (de)serialize correctly', () => { const buf = Buffer.from([ - Sha256.opcode, // opcode + Sha256Compression.opcode, // opcode 1, // indirect ...Buffer.from('12345678', 'hex'), // dstOffset - ...Buffer.from('23456789', 'hex'), // messageOffset - ...Buffer.from('3456789a', 'hex'), // messageSizeOffset + ...Buffer.from('23456789', 'hex'), // stateOffset + ...Buffer.from('3456789a', 'hex'), // stateSizeOffset + ...Buffer.from('456789ab', 'hex'), // inputsOffset + ...Buffer.from('56789abc', 'hex'), // inputsSizeOffset ]); - const inst = new Sha256( + const inst = new Sha256Compression( /*indirect=*/ 1, /*dstOffset=*/ 0x12345678, - /*messageOffset=*/ 0x23456789, - /*messageSizeOffset=*/ 0x3456789a, + /*stateOffset=*/ 0x23456789, + /*stateSizeOffset=*/ 0x3456789a, + /*inputsOffset=*/ 0x456789ab, + /*inputsSizeOffset=*/ 0x56789abc, ); - expect(Sha256.deserialize(buf)).toEqual(inst); + expect(Sha256Compression.deserialize(buf)).toEqual(inst); expect(inst.serialize()).toEqual(buf); }); it('Should hash correctly - direct', async () => { - const args = randomMemoryBytes(10); + const state = randomMemoryUint32s(8); + const stateArray = Uint32Array.from(state.map(byte => byte.toNumber())); + const inputs = randomMemoryUint32s(16); + const inputsArray = Uint32Array.from(inputs.map(byte => byte.toNumber())); const indirect = 0; - const messageOffset = 0; - const messageSizeOffset = 15; - const dstOffset = 20; - context.machineState.memory.set(messageSizeOffset, new Uint32(args.length)); - context.machineState.memory.setSlice(messageOffset, args); - - await new Sha256(indirect, dstOffset, messageOffset, messageSizeOffset).execute(context); - - const resultBuffer = Buffer.concat( - context.machineState.memory.getSliceAs(dstOffset, 32).map(byte => byte.toBuffer()), - ); - const inputBuffer = Buffer.concat(args.map(byte => byte.toBuffer())); - const expectedHash = sha256(inputBuffer); - expect(resultBuffer).toEqual(expectedHash); + const stateOffset = 0; + const stateSizeOffset = 100; + const inputsOffset = 200; + const inputsSizeOffset = 300; + const outputOffset = 300; + context.machineState.memory.set(stateSizeOffset, new Uint32(state.length)); + context.machineState.memory.setSlice(stateOffset, state); + context.machineState.memory.set(inputsSizeOffset, new Uint32(inputs.length)); + context.machineState.memory.setSlice(inputsOffset, inputs); + + await new Sha256Compression( + indirect, + outputOffset, + stateOffset, + stateSizeOffset, + inputsOffset, + inputsSizeOffset, + ).execute(context); + + const output = context.machineState.memory.getSliceAs(outputOffset, 8); + const outputArray = Uint32Array.from(output.map(word => word.toNumber())); + + const expectedOutput = sha256Compression(stateArray, inputsArray); + expect(outputArray).toEqual(expectedOutput); }); it('Should hash correctly - indirect', async () => { - const args = randomMemoryBytes(10); + const state = randomMemoryUint32s(8); + const stateArray = Uint32Array.from(state.map(byte => byte.toNumber())); + const inputs = randomMemoryUint32s(16); + const inputsArray = Uint32Array.from(inputs.map(byte => byte.toNumber())); const indirect = new Addressing([ /*dstOffset=*/ AddressingMode.INDIRECT, - /*messageOffset*/ AddressingMode.INDIRECT, - /*messageSizeOffset*/ AddressingMode.INDIRECT, + /*stateOffset*/ AddressingMode.INDIRECT, + /*stateSizeOffset*/ AddressingMode.INDIRECT, + /*inputsOffset*/ AddressingMode.INDIRECT, + /*inputsSizeOffset*/ AddressingMode.INDIRECT, ]).toWire(); - const messageOffset = 0; - const messageOffsetReal = 10; - const messageSizeOffset = 1; - const messageSizeOffsetReal = 100; - const dstOffset = 2; - const dstOffsetReal = 30; - context.machineState.memory.set(messageOffset, new Uint32(messageOffsetReal)); - context.machineState.memory.set(dstOffset, new Uint32(dstOffsetReal)); - context.machineState.memory.set(messageSizeOffset, new Uint32(messageSizeOffsetReal)); - context.machineState.memory.set(messageSizeOffsetReal, new Uint32(args.length)); - context.machineState.memory.setSlice(messageOffsetReal, args); - - await new Sha256(indirect, dstOffset, messageOffset, messageSizeOffset).execute(context); - - const resultBuffer = Buffer.concat( - context.machineState.memory.getSliceAs(dstOffsetReal, 32).map(byte => byte.toBuffer()), - ); - const inputBuffer = Buffer.concat(args.map(byte => byte.toBuffer())); - const expectedHash = sha256(inputBuffer); - expect(resultBuffer).toEqual(expectedHash); + const stateOffset = 0; + const stateOffsetReal = 10; + const stateSizeOffset = 1; + const stateSizeOffsetReal = 100; + const inputsOffset = 2; + const inputsOffsetReal = 200; + const inputsSizeOffset = 3; + const inputsSizeOffsetReal = 300; + const outputOffset = 4; + const outputOffsetReal = 400; + context.machineState.memory.set(stateSizeOffset, new Uint32(stateSizeOffsetReal)); + context.machineState.memory.set(stateSizeOffsetReal, new Uint32(state.length)); + context.machineState.memory.set(stateOffset, new Uint32(stateOffsetReal)); + context.machineState.memory.setSlice(stateOffsetReal, state); + context.machineState.memory.set(inputsSizeOffset, new Uint32(inputsSizeOffsetReal)); + context.machineState.memory.set(inputsSizeOffsetReal, new Uint32(inputs.length)); + context.machineState.memory.set(inputsOffset, new Uint32(inputsOffsetReal)); + context.machineState.memory.setSlice(inputsOffsetReal, inputs); + context.machineState.memory.set(outputOffset, new Uint32(outputOffsetReal)); + + await new Sha256Compression( + indirect, + outputOffset, + stateOffset, + stateSizeOffset, + inputsOffset, + inputsSizeOffset, + ).execute(context); + + const output = context.machineState.memory.getSliceAs(outputOffsetReal, 8); + const outputArray = Uint32Array.from(output.map(word => word.toNumber())); + + const expectedOutput = sha256Compression(stateArray, inputsArray); + expect(outputArray).toEqual(expectedOutput); }); }); diff --git a/yarn-project/simulator/src/avm/opcodes/hashing.ts b/yarn-project/simulator/src/avm/opcodes/hashing.ts index 7bb53eb60ae..90b46bf6cb8 100644 --- a/yarn-project/simulator/src/avm/opcodes/hashing.ts +++ b/yarn-project/simulator/src/avm/opcodes/hashing.ts @@ -1,7 +1,8 @@ -import { keccak256, pedersenHash, poseidon2Permutation, sha256 } from '@aztec/foundation/crypto'; +import { keccak256, pedersenHash, poseidon2Permutation, sha256Compression } from '@aztec/foundation/crypto'; import { type AvmContext } from '../avm_context.js'; -import { Field, Uint8 } from '../avm_memory_types.js'; +import { Field, Uint8, Uint32 } from '../avm_memory_types.js'; +import { InstructionExecutionError } from '../errors.js'; import { Opcode, OperandType } from '../serialization/instruction_serialization.js'; import { Addressing } from './addressing_mode.js'; import { Instruction } from './instruction.js'; @@ -90,9 +91,9 @@ export class Keccak extends Instruction { } } -export class Sha256 extends Instruction { - static type: string = 'SHA256'; - static readonly opcode: Opcode = Opcode.SHA256; +export class Sha256Compression extends Instruction { + static type: string = 'SHA256COMPRESSION'; + static readonly opcode: Opcode = Opcode.SHA256COMPRESSION; // Informs (de)serialization. See Instruction.deserialize. static readonly wireFormat: OperandType[] = [ @@ -101,34 +102,49 @@ export class Sha256 extends Instruction { OperandType.UINT32, OperandType.UINT32, OperandType.UINT32, + OperandType.UINT32, + OperandType.UINT32, ]; constructor( private indirect: number, - private dstOffset: number, - private messageOffset: number, - private messageSizeOffset: number, + private outputOffset: number, + private stateOffset: number, + private stateSizeOffset: number, + private inputsOffset: number, + private inputsSizeOffset: number, ) { super(); } - // pub fn sha256_slice(input: [u8]) -> [u8; 32] public async execute(context: AvmContext): Promise { const memory = context.machineState.memory.track(this.type); - const [dstOffset, messageOffset, messageSizeOffset] = Addressing.fromWire(this.indirect).resolve( - [this.dstOffset, this.messageOffset, this.messageSizeOffset], + const [outputOffset, stateOffset, stateSizeOffset, inputsOffset, inputsSizeOffset] = Addressing.fromWire( + this.indirect, + ).resolve( + [this.outputOffset, this.stateOffset, this.stateSizeOffset, this.inputsOffset, this.inputsSizeOffset], memory, ); - const messageSize = memory.get(messageSizeOffset).toNumber(); - const memoryOperations = { reads: messageSize + 1, writes: 32, indirect: this.indirect }; + const stateSize = memory.get(stateSizeOffset).toNumber(); + const inputsSize = memory.get(inputsSizeOffset).toNumber(); + if (stateSize !== 8) { + throw new InstructionExecutionError('`state` argument to SHA256 compression must be of length 8'); + } + if (inputsSize !== 16) { + throw new InstructionExecutionError('`inputs` argument to SHA256 compression must be of length 16'); + } + // +2 to account for both size offsets (stateSizeOffset and inputsSizeOffset) + // Note: size of output is same as size of state + const memoryOperations = { reads: stateSize + inputsSize + 2, writes: stateSize, indirect: this.indirect }; context.machineState.consumeGas(this.gasCost(memoryOperations)); - const messageData = Buffer.concat(memory.getSlice(messageOffset, messageSize).map(word => word.toBuffer())); - const hashBuffer = sha256(messageData); + const state = Uint32Array.from(memory.getSlice(stateOffset, stateSize).map(word => word.toNumber())); + const inputs = Uint32Array.from(memory.getSlice(inputsOffset, inputsSize).map(word => word.toNumber())); + const output = sha256Compression(state, inputs); - // We need to convert the hashBuffer because map doesn't work as expected on an Uint8Array (Buffer). - const res = [...hashBuffer].map(byte => new Uint8(byte)); - memory.setSlice(dstOffset, res); + // Conversion required from Uint32Array to Uint32[] (can't map directly, need `...`) + const res = [...output].map(word => new Uint32(word)); + memory.setSlice(outputOffset, res); memory.assert(memoryOperations); context.machineState.incrementPc(); diff --git a/yarn-project/simulator/src/avm/serialization/bytecode_serialization.ts b/yarn-project/simulator/src/avm/serialization/bytecode_serialization.ts index d3245a24d5b..88f2c331bcb 100644 --- a/yarn-project/simulator/src/avm/serialization/bytecode_serialization.ts +++ b/yarn-project/simulator/src/avm/serialization/bytecode_serialization.ts @@ -1,5 +1,5 @@ import { DAGasLeft, L1GasLeft, L2GasLeft } from '../opcodes/context_getters.js'; -import { Keccak, Pedersen, Poseidon2, Sha256 } from '../opcodes/hashing.js'; +import { Keccak, Pedersen, Poseidon2, Sha256Compression } from '../opcodes/hashing.js'; import { Add, Address, @@ -136,7 +136,7 @@ const INSTRUCTION_SET = () => // //// Gadgets [Keccak.opcode, Keccak], [Poseidon2.opcode, Poseidon2], - [Sha256.opcode, Sha256], + [Sha256Compression.opcode, Sha256Compression], [Pedersen.opcode, Pedersen], ]); diff --git a/yarn-project/simulator/src/avm/serialization/instruction_serialization.ts b/yarn-project/simulator/src/avm/serialization/instruction_serialization.ts index 6dcc877194d..93847eabc3f 100644 --- a/yarn-project/simulator/src/avm/serialization/instruction_serialization.ts +++ b/yarn-project/simulator/src/avm/serialization/instruction_serialization.ts @@ -74,7 +74,7 @@ export enum Opcode { // Gadgets KECCAK, POSEIDON2, - SHA256, // temp - may be removed, but alot of contracts rely on it + SHA256COMPRESSION, PEDERSEN, // temp - may be removed, but alot of contracts rely on it } From b4487e2271ddc05a83b0b7295b42408b5f0e275c Mon Sep 17 00:00:00 2001 From: guipublic Date: Fri, 3 May 2024 16:47:48 +0000 Subject: [PATCH 39/98] update serialization in unit tests --- .../acir/tests/test_program_serialization.rs | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/noir/noir-repo/acvm-repo/acir/tests/test_program_serialization.rs b/noir/noir-repo/acvm-repo/acir/tests/test_program_serialization.rs index c5912b61cf1..b92bb4e3ed7 100644 --- a/noir/noir-repo/acvm-repo/acir/tests/test_program_serialization.rs +++ b/noir/noir-repo/acvm-repo/acir/tests/test_program_serialization.rs @@ -77,9 +77,9 @@ fn fixed_base_scalar_mul_circuit() { let bytes = Program::serialize_program(&program); let expected_serialization: Vec = vec![ - 31, 139, 8, 0, 0, 0, 0, 0, 0, 255, 85, 138, 81, 10, 0, 48, 8, 66, 87, 219, 190, 118, 233, + 31, 139, 8, 0, 0, 0, 0, 0, 0, 255, 85, 138, 81, 10, 0, 48, 8, 66, 87, 219, 126, 118, 234, 29, 61, 35, 3, 19, 228, 137, 60, 91, 149, 139, 26, 119, 242, 145, 31, 117, 114, 163, 135, - 142, 139, 219, 91, 127, 117, 71, 2, 117, 84, 50, 98, 113, 0, 0, 0, + 142, 139, 219, 91, 127, 117, 71, 2, 253, 57, 14, 6, 113, 0, 0, 0, ]; assert_eq!(bytes, expected_serialization) @@ -105,9 +105,9 @@ fn pedersen_circuit() { let bytes = Program::serialize_program(&program); let expected_serialization: Vec = vec![ - 31, 139, 8, 0, 0, 0, 0, 0, 0, 255, 93, 74, 9, 10, 0, 0, 4, 115, 149, 255, 127, 88, 8, 133, - 213, 218, 137, 80, 144, 32, 182, 79, 213, 151, 173, 61, 5, 121, 245, 91, 103, 255, 191, 3, - 7, 16, 26, 112, 158, 113, 0, 0, 0, + 31, 139, 8, 0, 0, 0, 0, 0, 0, 255, 93, 74, 9, 10, 0, 0, 4, 115, 229, 255, 47, 22, 66, 97, + 181, 118, 34, 20, 36, 136, 237, 83, 245, 101, 107, 79, 65, 94, 253, 214, 217, 255, 239, + 192, 1, 152, 119, 76, 250, 113, 0, 0, 0, ]; assert_eq!(bytes, expected_serialization) @@ -152,7 +152,7 @@ fn schnorr_verify_circuit() { let expected_serialization: Vec = vec![ 31, 139, 8, 0, 0, 0, 0, 0, 0, 255, 85, 210, 85, 78, 67, 81, 24, 133, 209, 226, 238, 238, 238, 238, 238, 165, 148, 82, 102, 193, 252, 135, 64, 232, 78, 87, 147, 114, 147, 147, 5, - 47, 132, 252, 251, 107, 41, 212, 191, 159, 218, 107, 241, 115, 236, 228, 111, 237, 181, + 47, 132, 252, 251, 107, 41, 212, 191, 159, 218, 107, 241, 115, 236, 224, 111, 237, 181, 178, 173, 246, 186, 107, 175, 157, 29, 236, 100, 23, 27, 175, 135, 189, 236, 99, 63, 7, 56, 200, 33, 14, 115, 132, 163, 28, 227, 56, 39, 56, 201, 41, 78, 115, 134, 179, 156, 227, 60, 23, 184, 200, 37, 46, 115, 133, 171, 92, 227, 58, 55, 184, 201, 45, 110, 115, 135, 187, @@ -164,8 +164,8 @@ fn schnorr_verify_circuit() { 180, 144, 14, 210, 64, 246, 95, 46, 212, 119, 207, 230, 217, 59, 91, 103, 231, 108, 156, 125, 183, 237, 186, 107, 207, 125, 59, 30, 218, 239, 216, 110, 167, 246, 58, 183, 211, 165, 125, 174, 237, 114, 107, 143, 123, 59, 60, 186, 255, 179, 187, 191, 186, 115, 209, 125, 75, - 238, 90, 118, 207, 138, 59, 54, 110, 214, 184, 91, 161, 233, 158, 255, 190, 63, 165, 188, - 93, 151, 233, 3, 0, 0, + 238, 90, 118, 207, 138, 59, 54, 110, 214, 184, 91, 161, 233, 158, 255, 190, 63, 131, 52, + 119, 168, 233, 3, 0, 0, ]; assert_eq!(bytes, expected_serialization) From b22a166aaa84232ff95038bc6814ca8cc8199fa1 Mon Sep 17 00:00:00 2001 From: guipublic Date: Fri, 3 May 2024 17:14:50 +0000 Subject: [PATCH 40/98] test --- noir/noir-repo/acvm-repo/acir/codegen/acir.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/noir/noir-repo/acvm-repo/acir/codegen/acir.cpp b/noir/noir-repo/acvm-repo/acir/codegen/acir.cpp index fd5dbf11bf4..4f2822aa5c7 100644 --- a/noir/noir-repo/acvm-repo/acir/codegen/acir.cpp +++ b/noir/noir-repo/acvm-repo/acir/codegen/acir.cpp @@ -1310,7 +1310,7 @@ struct Opcode { struct FixedBaseScalarMul { Program::FunctionInput low; - Program::FunctionInput high; + Program::FunctionInput high2; std::array outputs; friend bool operator==(const FixedBaseScalarMul &, From 0d8ea6fd042635498a51e0ef4db5780e91514bbd Mon Sep 17 00:00:00 2001 From: guipublic Date: Fri, 3 May 2024 17:15:46 +0000 Subject: [PATCH 41/98] revert test --- noir/noir-repo/acvm-repo/acir/codegen/acir.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/noir/noir-repo/acvm-repo/acir/codegen/acir.cpp b/noir/noir-repo/acvm-repo/acir/codegen/acir.cpp index 4f2822aa5c7..fd5dbf11bf4 100644 --- a/noir/noir-repo/acvm-repo/acir/codegen/acir.cpp +++ b/noir/noir-repo/acvm-repo/acir/codegen/acir.cpp @@ -1310,7 +1310,7 @@ struct Opcode { struct FixedBaseScalarMul { Program::FunctionInput low; - Program::FunctionInput high2; + Program::FunctionInput high; std::array outputs; friend bool operator==(const FixedBaseScalarMul &, From d2c7e32df97805ffeae1be82368a57522f9ce297 Mon Sep 17 00:00:00 2001 From: guipublic Date: Fri, 3 May 2024 17:28:37 +0000 Subject: [PATCH 42/98] update acir serialization format --- .../noir-repo/acvm-repo/acir/codegen/acir.cpp | 14212 ++++++---------- 1 file changed, 5587 insertions(+), 8625 deletions(-) diff --git a/noir/noir-repo/acvm-repo/acir/codegen/acir.cpp b/noir/noir-repo/acvm-repo/acir/codegen/acir.cpp index fd5dbf11bf4..1ff7d561646 100644 --- a/noir/noir-repo/acvm-repo/acir/codegen/acir.cpp +++ b/noir/noir-repo/acvm-repo/acir/codegen/acir.cpp @@ -1,9802 +1,6764 @@ #pragma once -#include "bincode.hpp" #include "serde.hpp" +#include "bincode.hpp" namespace Program { -struct Witness { - uint32_t value; - - friend bool operator==(const Witness &, const Witness &); - std::vector bincodeSerialize() const; - static Witness bincodeDeserialize(std::vector); -}; - -struct FunctionInput { - Program::Witness witness; - uint32_t num_bits; - - friend bool operator==(const FunctionInput &, const FunctionInput &); - std::vector bincodeSerialize() const; - static FunctionInput bincodeDeserialize(std::vector); -}; - -struct BlackBoxFuncCall { - - struct AND { - Program::FunctionInput lhs; - Program::FunctionInput rhs; - Program::Witness output; - - friend bool operator==(const AND &, const AND &); - std::vector bincodeSerialize() const; - static AND bincodeDeserialize(std::vector); - }; - - struct XOR { - Program::FunctionInput lhs; - Program::FunctionInput rhs; - Program::Witness output; - - friend bool operator==(const XOR &, const XOR &); - std::vector bincodeSerialize() const; - static XOR bincodeDeserialize(std::vector); - }; - - struct RANGE { - Program::FunctionInput input; - - friend bool operator==(const RANGE &, const RANGE &); - std::vector bincodeSerialize() const; - static RANGE bincodeDeserialize(std::vector); - }; - - struct Blake2s { - std::vector inputs; - std::vector outputs; - - friend bool operator==(const Blake2s &, const Blake2s &); - std::vector bincodeSerialize() const; - static Blake2s bincodeDeserialize(std::vector); - }; - - struct Blake3 { - std::vector inputs; - std::vector outputs; - - friend bool operator==(const Blake3 &, const Blake3 &); - std::vector bincodeSerialize() const; - static Blake3 bincodeDeserialize(std::vector); - }; - - struct SchnorrVerify { - Program::FunctionInput public_key_x; - Program::FunctionInput public_key_y; - std::vector signature; - std::vector message; - Program::Witness output; - - friend bool operator==(const SchnorrVerify &, const SchnorrVerify &); - std::vector bincodeSerialize() const; - static SchnorrVerify bincodeDeserialize(std::vector); - }; - - struct PedersenCommitment { - std::vector inputs; - uint32_t domain_separator; - std::array outputs; - - friend bool operator==(const PedersenCommitment &, - const PedersenCommitment &); - std::vector bincodeSerialize() const; - static PedersenCommitment bincodeDeserialize(std::vector); - }; - - struct PedersenHash { - std::vector inputs; - uint32_t domain_separator; - Program::Witness output; - - friend bool operator==(const PedersenHash &, const PedersenHash &); - std::vector bincodeSerialize() const; - static PedersenHash bincodeDeserialize(std::vector); - }; - - struct EcdsaSecp256k1 { - std::vector public_key_x; - std::vector public_key_y; - std::vector signature; - std::vector hashed_message; - Program::Witness output; - - friend bool operator==(const EcdsaSecp256k1 &, const EcdsaSecp256k1 &); - std::vector bincodeSerialize() const; - static EcdsaSecp256k1 bincodeDeserialize(std::vector); - }; - - struct EcdsaSecp256r1 { - std::vector public_key_x; - std::vector public_key_y; - std::vector signature; - std::vector hashed_message; - Program::Witness output; - - friend bool operator==(const EcdsaSecp256r1 &, const EcdsaSecp256r1 &); - std::vector bincodeSerialize() const; - static EcdsaSecp256r1 bincodeDeserialize(std::vector); - }; - - struct FixedBaseScalarMul { - Program::FunctionInput low; - Program::FunctionInput high; - std::array outputs; - - friend bool operator==(const FixedBaseScalarMul &, - const FixedBaseScalarMul &); - std::vector bincodeSerialize() const; - static FixedBaseScalarMul bincodeDeserialize(std::vector); - }; - - struct EmbeddedCurveAdd { - Program::FunctionInput input1_x; - Program::FunctionInput input1_y; - Program::FunctionInput input2_x; - Program::FunctionInput input2_y; - std::array outputs; - - friend bool operator==(const EmbeddedCurveAdd &, const EmbeddedCurveAdd &); - std::vector bincodeSerialize() const; - static EmbeddedCurveAdd bincodeDeserialize(std::vector); - }; - - struct Keccak256 { - std::vector inputs; - Program::FunctionInput var_message_size; - std::vector outputs; - - friend bool operator==(const Keccak256 &, const Keccak256 &); - std::vector bincodeSerialize() const; - static Keccak256 bincodeDeserialize(std::vector); - }; - - struct Keccakf1600 { - std::vector inputs; - std::vector outputs; - - friend bool operator==(const Keccakf1600 &, const Keccakf1600 &); - std::vector bincodeSerialize() const; - static Keccakf1600 bincodeDeserialize(std::vector); - }; - - struct RecursiveAggregation { - std::vector verification_key; - std::vector proof; - std::vector public_inputs; - Program::FunctionInput key_hash; - - friend bool operator==(const RecursiveAggregation &, - const RecursiveAggregation &); - std::vector bincodeSerialize() const; - static RecursiveAggregation bincodeDeserialize(std::vector); - }; - - struct BigIntAdd { - uint32_t lhs; - uint32_t rhs; - uint32_t output; - - friend bool operator==(const BigIntAdd &, const BigIntAdd &); - std::vector bincodeSerialize() const; - static BigIntAdd bincodeDeserialize(std::vector); - }; - - struct BigIntSub { - uint32_t lhs; - uint32_t rhs; - uint32_t output; - - friend bool operator==(const BigIntSub &, const BigIntSub &); - std::vector bincodeSerialize() const; - static BigIntSub bincodeDeserialize(std::vector); - }; - - struct BigIntMul { - uint32_t lhs; - uint32_t rhs; - uint32_t output; - - friend bool operator==(const BigIntMul &, const BigIntMul &); - std::vector bincodeSerialize() const; - static BigIntMul bincodeDeserialize(std::vector); - }; - - struct BigIntDiv { - uint32_t lhs; - uint32_t rhs; - uint32_t output; - - friend bool operator==(const BigIntDiv &, const BigIntDiv &); - std::vector bincodeSerialize() const; - static BigIntDiv bincodeDeserialize(std::vector); - }; - - struct BigIntFromLeBytes { - std::vector inputs; - std::vector modulus; - uint32_t output; - - friend bool operator==(const BigIntFromLeBytes &, - const BigIntFromLeBytes &); - std::vector bincodeSerialize() const; - static BigIntFromLeBytes bincodeDeserialize(std::vector); - }; - - struct BigIntToLeBytes { - uint32_t input; - std::vector outputs; - - friend bool operator==(const BigIntToLeBytes &, const BigIntToLeBytes &); - std::vector bincodeSerialize() const; - static BigIntToLeBytes bincodeDeserialize(std::vector); - }; - - struct Poseidon2Permutation { - std::vector inputs; - std::vector outputs; - uint32_t len; - - friend bool operator==(const Poseidon2Permutation &, - const Poseidon2Permutation &); - std::vector bincodeSerialize() const; - static Poseidon2Permutation bincodeDeserialize(std::vector); - }; - - struct Sha256Compression { - std::vector inputs; - std::vector hash_values; - std::vector outputs; - - friend bool operator==(const Sha256Compression &, - const Sha256Compression &); - std::vector bincodeSerialize() const; - static Sha256Compression bincodeDeserialize(std::vector); - }; - - std::variant - value; - - friend bool operator==(const BlackBoxFuncCall &, const BlackBoxFuncCall &); - std::vector bincodeSerialize() const; - static BlackBoxFuncCall bincodeDeserialize(std::vector); -}; - -struct BlockId { - uint32_t value; - - friend bool operator==(const BlockId &, const BlockId &); - std::vector bincodeSerialize() const; - static BlockId bincodeDeserialize(std::vector); -}; - -struct Expression { - std::vector> - mul_terms; - std::vector> linear_combinations; - std::string q_c; - - friend bool operator==(const Expression &, const Expression &); - std::vector bincodeSerialize() const; - static Expression bincodeDeserialize(std::vector); -}; - -struct BrilligInputs { - - struct Single { - Program::Expression value; - - friend bool operator==(const Single &, const Single &); - std::vector bincodeSerialize() const; - static Single bincodeDeserialize(std::vector); - }; - - struct Array { - std::vector value; - - friend bool operator==(const Array &, const Array &); - std::vector bincodeSerialize() const; - static Array bincodeDeserialize(std::vector); - }; - - struct MemoryArray { - Program::BlockId value; - - friend bool operator==(const MemoryArray &, const MemoryArray &); - std::vector bincodeSerialize() const; - static MemoryArray bincodeDeserialize(std::vector); - }; - - std::variant value; - - friend bool operator==(const BrilligInputs &, const BrilligInputs &); - std::vector bincodeSerialize() const; - static BrilligInputs bincodeDeserialize(std::vector); -}; - -struct BinaryFieldOp { - - struct Add { - friend bool operator==(const Add &, const Add &); - std::vector bincodeSerialize() const; - static Add bincodeDeserialize(std::vector); - }; - - struct Sub { - friend bool operator==(const Sub &, const Sub &); - std::vector bincodeSerialize() const; - static Sub bincodeDeserialize(std::vector); - }; - - struct Mul { - friend bool operator==(const Mul &, const Mul &); - std::vector bincodeSerialize() const; - static Mul bincodeDeserialize(std::vector); - }; - - struct Div { - friend bool operator==(const Div &, const Div &); - std::vector bincodeSerialize() const; - static Div bincodeDeserialize(std::vector); - }; - - struct IntegerDiv { - friend bool operator==(const IntegerDiv &, const IntegerDiv &); - std::vector bincodeSerialize() const; - static IntegerDiv bincodeDeserialize(std::vector); - }; - - struct Equals { - friend bool operator==(const Equals &, const Equals &); - std::vector bincodeSerialize() const; - static Equals bincodeDeserialize(std::vector); - }; - - struct LessThan { - friend bool operator==(const LessThan &, const LessThan &); - std::vector bincodeSerialize() const; - static LessThan bincodeDeserialize(std::vector); - }; - - struct LessThanEquals { - friend bool operator==(const LessThanEquals &, const LessThanEquals &); - std::vector bincodeSerialize() const; - static LessThanEquals bincodeDeserialize(std::vector); - }; - - std::variant - value; - - friend bool operator==(const BinaryFieldOp &, const BinaryFieldOp &); - std::vector bincodeSerialize() const; - static BinaryFieldOp bincodeDeserialize(std::vector); -}; - -struct BinaryIntOp { - - struct Add { - friend bool operator==(const Add &, const Add &); - std::vector bincodeSerialize() const; - static Add bincodeDeserialize(std::vector); - }; - - struct Sub { - friend bool operator==(const Sub &, const Sub &); - std::vector bincodeSerialize() const; - static Sub bincodeDeserialize(std::vector); - }; - - struct Mul { - friend bool operator==(const Mul &, const Mul &); - std::vector bincodeSerialize() const; - static Mul bincodeDeserialize(std::vector); - }; - - struct Div { - friend bool operator==(const Div &, const Div &); - std::vector bincodeSerialize() const; - static Div bincodeDeserialize(std::vector); - }; - - struct Equals { - friend bool operator==(const Equals &, const Equals &); - std::vector bincodeSerialize() const; - static Equals bincodeDeserialize(std::vector); - }; - - struct LessThan { - friend bool operator==(const LessThan &, const LessThan &); - std::vector bincodeSerialize() const; - static LessThan bincodeDeserialize(std::vector); - }; - - struct LessThanEquals { - friend bool operator==(const LessThanEquals &, const LessThanEquals &); - std::vector bincodeSerialize() const; - static LessThanEquals bincodeDeserialize(std::vector); - }; - - struct And { - friend bool operator==(const And &, const And &); - std::vector bincodeSerialize() const; - static And bincodeDeserialize(std::vector); - }; - - struct Or { - friend bool operator==(const Or &, const Or &); - std::vector bincodeSerialize() const; - static Or bincodeDeserialize(std::vector); - }; - - struct Xor { - friend bool operator==(const Xor &, const Xor &); - std::vector bincodeSerialize() const; - static Xor bincodeDeserialize(std::vector); - }; - - struct Shl { - friend bool operator==(const Shl &, const Shl &); - std::vector bincodeSerialize() const; - static Shl bincodeDeserialize(std::vector); - }; - - struct Shr { - friend bool operator==(const Shr &, const Shr &); - std::vector bincodeSerialize() const; - static Shr bincodeDeserialize(std::vector); - }; - - std::variant - value; - - friend bool operator==(const BinaryIntOp &, const BinaryIntOp &); - std::vector bincodeSerialize() const; - static BinaryIntOp bincodeDeserialize(std::vector); -}; - -struct MemoryAddress { - uint64_t value; - - friend bool operator==(const MemoryAddress &, const MemoryAddress &); - std::vector bincodeSerialize() const; - static MemoryAddress bincodeDeserialize(std::vector); -}; - -struct HeapArray { - Program::MemoryAddress pointer; - uint64_t size; - - friend bool operator==(const HeapArray &, const HeapArray &); - std::vector bincodeSerialize() const; - static HeapArray bincodeDeserialize(std::vector); -}; - -struct HeapVector { - Program::MemoryAddress pointer; - Program::MemoryAddress size; - - friend bool operator==(const HeapVector &, const HeapVector &); - std::vector bincodeSerialize() const; - static HeapVector bincodeDeserialize(std::vector); -}; - -struct BlackBoxOp { - - struct Blake2s { - Program::HeapVector message; - Program::HeapArray output; - - friend bool operator==(const Blake2s &, const Blake2s &); - std::vector bincodeSerialize() const; - static Blake2s bincodeDeserialize(std::vector); - }; - - struct Blake3 { - Program::HeapVector message; - Program::HeapArray output; - - friend bool operator==(const Blake3 &, const Blake3 &); - std::vector bincodeSerialize() const; - static Blake3 bincodeDeserialize(std::vector); - }; - - struct Keccak256 { - Program::HeapVector message; - Program::HeapArray output; - - friend bool operator==(const Keccak256 &, const Keccak256 &); - std::vector bincodeSerialize() const; - static Keccak256 bincodeDeserialize(std::vector); - }; - - struct Keccakf1600 { - Program::HeapVector message; - Program::HeapArray output; - - friend bool operator==(const Keccakf1600 &, const Keccakf1600 &); - std::vector bincodeSerialize() const; - static Keccakf1600 bincodeDeserialize(std::vector); - }; - - struct EcdsaSecp256k1 { - Program::HeapVector hashed_msg; - Program::HeapArray public_key_x; - Program::HeapArray public_key_y; - Program::HeapArray signature; - Program::MemoryAddress result; - - friend bool operator==(const EcdsaSecp256k1 &, const EcdsaSecp256k1 &); - std::vector bincodeSerialize() const; - static EcdsaSecp256k1 bincodeDeserialize(std::vector); - }; - - struct EcdsaSecp256r1 { - Program::HeapVector hashed_msg; - Program::HeapArray public_key_x; - Program::HeapArray public_key_y; - Program::HeapArray signature; - Program::MemoryAddress result; - - friend bool operator==(const EcdsaSecp256r1 &, const EcdsaSecp256r1 &); - std::vector bincodeSerialize() const; - static EcdsaSecp256r1 bincodeDeserialize(std::vector); - }; - - struct SchnorrVerify { - Program::MemoryAddress public_key_x; - Program::MemoryAddress public_key_y; - Program::HeapVector message; - Program::HeapVector signature; - Program::MemoryAddress result; - - friend bool operator==(const SchnorrVerify &, const SchnorrVerify &); - std::vector bincodeSerialize() const; - static SchnorrVerify bincodeDeserialize(std::vector); - }; - - struct PedersenCommitment { - Program::HeapVector inputs; - Program::MemoryAddress domain_separator; - Program::HeapArray output; - - friend bool operator==(const PedersenCommitment &, - const PedersenCommitment &); - std::vector bincodeSerialize() const; - static PedersenCommitment bincodeDeserialize(std::vector); - }; - - struct PedersenHash { - Program::HeapVector inputs; - Program::MemoryAddress domain_separator; - Program::MemoryAddress output; - - friend bool operator==(const PedersenHash &, const PedersenHash &); - std::vector bincodeSerialize() const; - static PedersenHash bincodeDeserialize(std::vector); - }; - - struct FixedBaseScalarMul { - Program::MemoryAddress low; - Program::MemoryAddress high; - Program::HeapArray result; - - friend bool operator==(const FixedBaseScalarMul &, - const FixedBaseScalarMul &); - std::vector bincodeSerialize() const; - static FixedBaseScalarMul bincodeDeserialize(std::vector); - }; - - struct EmbeddedCurveAdd { - Program::MemoryAddress input1_x; - Program::MemoryAddress input1_y; - Program::MemoryAddress input2_x; - Program::MemoryAddress input2_y; - Program::HeapArray result; - - friend bool operator==(const EmbeddedCurveAdd &, const EmbeddedCurveAdd &); - std::vector bincodeSerialize() const; - static EmbeddedCurveAdd bincodeDeserialize(std::vector); - }; - - struct BigIntAdd { - Program::MemoryAddress lhs; - Program::MemoryAddress rhs; - Program::MemoryAddress output; - - friend bool operator==(const BigIntAdd &, const BigIntAdd &); - std::vector bincodeSerialize() const; - static BigIntAdd bincodeDeserialize(std::vector); - }; - - struct BigIntSub { - Program::MemoryAddress lhs; - Program::MemoryAddress rhs; - Program::MemoryAddress output; - - friend bool operator==(const BigIntSub &, const BigIntSub &); - std::vector bincodeSerialize() const; - static BigIntSub bincodeDeserialize(std::vector); - }; - - struct BigIntMul { - Program::MemoryAddress lhs; - Program::MemoryAddress rhs; - Program::MemoryAddress output; - - friend bool operator==(const BigIntMul &, const BigIntMul &); - std::vector bincodeSerialize() const; - static BigIntMul bincodeDeserialize(std::vector); - }; - - struct BigIntDiv { - Program::MemoryAddress lhs; - Program::MemoryAddress rhs; - Program::MemoryAddress output; - - friend bool operator==(const BigIntDiv &, const BigIntDiv &); - std::vector bincodeSerialize() const; - static BigIntDiv bincodeDeserialize(std::vector); - }; - - struct BigIntFromLeBytes { - Program::HeapVector inputs; - Program::HeapVector modulus; - Program::MemoryAddress output; - - friend bool operator==(const BigIntFromLeBytes &, - const BigIntFromLeBytes &); - std::vector bincodeSerialize() const; - static BigIntFromLeBytes bincodeDeserialize(std::vector); - }; - - struct BigIntToLeBytes { - Program::MemoryAddress input; - Program::HeapVector output; - - friend bool operator==(const BigIntToLeBytes &, const BigIntToLeBytes &); - std::vector bincodeSerialize() const; - static BigIntToLeBytes bincodeDeserialize(std::vector); - }; - - struct Poseidon2Permutation { - Program::HeapVector message; - Program::HeapArray output; - Program::MemoryAddress len; - - friend bool operator==(const Poseidon2Permutation &, - const Poseidon2Permutation &); - std::vector bincodeSerialize() const; - static Poseidon2Permutation bincodeDeserialize(std::vector); - }; - - struct Sha256Compression { - Program::HeapVector input; - Program::HeapVector hash_values; - Program::HeapArray output; - - friend bool operator==(const Sha256Compression &, - const Sha256Compression &); - std::vector bincodeSerialize() const; - static Sha256Compression bincodeDeserialize(std::vector); - }; - - std::variant - value; - - friend bool operator==(const BlackBoxOp &, const BlackBoxOp &); - std::vector bincodeSerialize() const; - static BlackBoxOp bincodeDeserialize(std::vector); -}; - -struct HeapValueType; - -struct HeapValueType { - - struct Simple { - uint32_t value; - - friend bool operator==(const Simple &, const Simple &); - std::vector bincodeSerialize() const; - static Simple bincodeDeserialize(std::vector); - }; - - struct Array { - std::vector value_types; - uint64_t size; - - friend bool operator==(const Array &, const Array &); - std::vector bincodeSerialize() const; - static Array bincodeDeserialize(std::vector); - }; - - struct Vector { - std::vector value_types; - - friend bool operator==(const Vector &, const Vector &); - std::vector bincodeSerialize() const; - static Vector bincodeDeserialize(std::vector); - }; - - std::variant value; - - friend bool operator==(const HeapValueType &, const HeapValueType &); - std::vector bincodeSerialize() const; - static HeapValueType bincodeDeserialize(std::vector); -}; - -struct ValueOrArray { - - struct MemoryAddress { - Program::MemoryAddress value; - - friend bool operator==(const MemoryAddress &, const MemoryAddress &); - std::vector bincodeSerialize() const; - static MemoryAddress bincodeDeserialize(std::vector); - }; - - struct HeapArray { - Program::HeapArray value; - - friend bool operator==(const HeapArray &, const HeapArray &); - std::vector bincodeSerialize() const; - static HeapArray bincodeDeserialize(std::vector); - }; - - struct HeapVector { - Program::HeapVector value; - - friend bool operator==(const HeapVector &, const HeapVector &); - std::vector bincodeSerialize() const; - static HeapVector bincodeDeserialize(std::vector); - }; - - std::variant value; - - friend bool operator==(const ValueOrArray &, const ValueOrArray &); - std::vector bincodeSerialize() const; - static ValueOrArray bincodeDeserialize(std::vector); -}; - -struct BrilligOpcode { - - struct BinaryFieldOp { - Program::MemoryAddress destination; - Program::BinaryFieldOp op; - Program::MemoryAddress lhs; - Program::MemoryAddress rhs; - - friend bool operator==(const BinaryFieldOp &, const BinaryFieldOp &); - std::vector bincodeSerialize() const; - static BinaryFieldOp bincodeDeserialize(std::vector); - }; - - struct BinaryIntOp { - Program::MemoryAddress destination; - Program::BinaryIntOp op; - uint32_t bit_size; - Program::MemoryAddress lhs; - Program::MemoryAddress rhs; - - friend bool operator==(const BinaryIntOp &, const BinaryIntOp &); - std::vector bincodeSerialize() const; - static BinaryIntOp bincodeDeserialize(std::vector); - }; - - struct Cast { - Program::MemoryAddress destination; - Program::MemoryAddress source; - uint32_t bit_size; - - friend bool operator==(const Cast &, const Cast &); - std::vector bincodeSerialize() const; - static Cast bincodeDeserialize(std::vector); - }; - - struct JumpIfNot { - Program::MemoryAddress condition; - uint64_t location; - - friend bool operator==(const JumpIfNot &, const JumpIfNot &); - std::vector bincodeSerialize() const; - static JumpIfNot bincodeDeserialize(std::vector); - }; - - struct JumpIf { - Program::MemoryAddress condition; - uint64_t location; - - friend bool operator==(const JumpIf &, const JumpIf &); - std::vector bincodeSerialize() const; - static JumpIf bincodeDeserialize(std::vector); - }; - - struct Jump { - uint64_t location; - - friend bool operator==(const Jump &, const Jump &); - std::vector bincodeSerialize() const; - static Jump bincodeDeserialize(std::vector); - }; - - struct CalldataCopy { - Program::MemoryAddress destination_address; - uint64_t size; - uint64_t offset; - - friend bool operator==(const CalldataCopy &, const CalldataCopy &); - std::vector bincodeSerialize() const; - static CalldataCopy bincodeDeserialize(std::vector); - }; - - struct Call { - uint64_t location; - - friend bool operator==(const Call &, const Call &); - std::vector bincodeSerialize() const; - static Call bincodeDeserialize(std::vector); - }; - - struct Const { - Program::MemoryAddress destination; - uint32_t bit_size; - std::string value; - - friend bool operator==(const Const &, const Const &); - std::vector bincodeSerialize() const; - static Const bincodeDeserialize(std::vector); - }; - - struct Return { - friend bool operator==(const Return &, const Return &); - std::vector bincodeSerialize() const; - static Return bincodeDeserialize(std::vector); - }; - - struct ForeignCall { - std::string function; - std::vector destinations; - std::vector destination_value_types; - std::vector inputs; - std::vector input_value_types; - - friend bool operator==(const ForeignCall &, const ForeignCall &); - std::vector bincodeSerialize() const; - static ForeignCall bincodeDeserialize(std::vector); - }; - - struct Mov { - Program::MemoryAddress destination; - Program::MemoryAddress source; - - friend bool operator==(const Mov &, const Mov &); - std::vector bincodeSerialize() const; - static Mov bincodeDeserialize(std::vector); - }; - - struct ConditionalMov { - Program::MemoryAddress destination; - Program::MemoryAddress source_a; - Program::MemoryAddress source_b; - Program::MemoryAddress condition; - - friend bool operator==(const ConditionalMov &, const ConditionalMov &); - std::vector bincodeSerialize() const; - static ConditionalMov bincodeDeserialize(std::vector); - }; - - struct Load { - Program::MemoryAddress destination; - Program::MemoryAddress source_pointer; - - friend bool operator==(const Load &, const Load &); - std::vector bincodeSerialize() const; - static Load bincodeDeserialize(std::vector); - }; - - struct Store { - Program::MemoryAddress destination_pointer; - Program::MemoryAddress source; - - friend bool operator==(const Store &, const Store &); - std::vector bincodeSerialize() const; - static Store bincodeDeserialize(std::vector); - }; - - struct BlackBox { - Program::BlackBoxOp value; - - friend bool operator==(const BlackBox &, const BlackBox &); - std::vector bincodeSerialize() const; - static BlackBox bincodeDeserialize(std::vector); - }; - - struct Trap { - uint64_t revert_data_offset; - uint64_t revert_data_size; - - friend bool operator==(const Trap &, const Trap &); - std::vector bincodeSerialize() const; - static Trap bincodeDeserialize(std::vector); - }; - - struct Stop { - uint64_t return_data_offset; - uint64_t return_data_size; - - friend bool operator==(const Stop &, const Stop &); - std::vector bincodeSerialize() const; - static Stop bincodeDeserialize(std::vector); - }; - - std::variant - value; - - friend bool operator==(const BrilligOpcode &, const BrilligOpcode &); - std::vector bincodeSerialize() const; - static BrilligOpcode bincodeDeserialize(std::vector); -}; - -struct BrilligOutputs { - - struct Simple { - Program::Witness value; - - friend bool operator==(const Simple &, const Simple &); - std::vector bincodeSerialize() const; - static Simple bincodeDeserialize(std::vector); - }; - - struct Array { - std::vector value; - - friend bool operator==(const Array &, const Array &); - std::vector bincodeSerialize() const; - static Array bincodeDeserialize(std::vector); - }; - - std::variant value; - - friend bool operator==(const BrilligOutputs &, const BrilligOutputs &); - std::vector bincodeSerialize() const; - static BrilligOutputs bincodeDeserialize(std::vector); -}; - -struct Brillig { - std::vector inputs; - std::vector outputs; - std::vector bytecode; - std::optional predicate; - - friend bool operator==(const Brillig &, const Brillig &); - std::vector bincodeSerialize() const; - static Brillig bincodeDeserialize(std::vector); -}; - -struct Directive { - - struct ToLeRadix { - Program::Expression a; - std::vector b; - uint32_t radix; - - friend bool operator==(const ToLeRadix &, const ToLeRadix &); - std::vector bincodeSerialize() const; - static ToLeRadix bincodeDeserialize(std::vector); - }; - - std::variant value; - - friend bool operator==(const Directive &, const Directive &); - std::vector bincodeSerialize() const; - static Directive bincodeDeserialize(std::vector); -}; - -struct MemOp { - Program::Expression operation; - Program::Expression index; - Program::Expression value; - - friend bool operator==(const MemOp &, const MemOp &); - std::vector bincodeSerialize() const; - static MemOp bincodeDeserialize(std::vector); -}; - -struct Opcode { - - struct AssertZero { - Program::Expression value; - - friend bool operator==(const AssertZero &, const AssertZero &); - std::vector bincodeSerialize() const; - static AssertZero bincodeDeserialize(std::vector); - }; - - struct BlackBoxFuncCall { - Program::BlackBoxFuncCall value; - - friend bool operator==(const BlackBoxFuncCall &, const BlackBoxFuncCall &); - std::vector bincodeSerialize() const; - static BlackBoxFuncCall bincodeDeserialize(std::vector); - }; + struct Witness { + uint32_t value; - struct Directive { - Program::Directive value; - - friend bool operator==(const Directive &, const Directive &); - std::vector bincodeSerialize() const; - static Directive bincodeDeserialize(std::vector); - }; - - struct Brillig { - Program::Brillig value; - - friend bool operator==(const Brillig &, const Brillig &); - std::vector bincodeSerialize() const; - static Brillig bincodeDeserialize(std::vector); - }; - - namespace Program { - - struct Witness { - uint32_t value; - - friend bool operator==(const Witness &, const Witness &); - std::vector bincodeSerialize() const; - static Witness bincodeDeserialize(std::vector); - }; + friend bool operator==(const Witness&, const Witness&); + std::vector bincodeSerialize() const; + static Witness bincodeDeserialize(std::vector); + }; - struct FunctionInput { - Program::Witness witness; - uint32_t num_bits; + struct FunctionInput { + Program::Witness witness; + uint32_t num_bits; - friend bool operator==(const FunctionInput &, const FunctionInput &); - std::vector bincodeSerialize() const; - static FunctionInput bincodeDeserialize(std::vector); - }; + friend bool operator==(const FunctionInput&, const FunctionInput&); + std::vector bincodeSerialize() const; + static FunctionInput bincodeDeserialize(std::vector); + }; - struct BlackBoxFuncCall { + struct BlackBoxFuncCall { + + struct AND { + Program::FunctionInput lhs; + Program::FunctionInput rhs; + Program::Witness output; + + friend bool operator==(const AND&, const AND&); + std::vector bincodeSerialize() const; + static AND bincodeDeserialize(std::vector); + }; + + struct XOR { + Program::FunctionInput lhs; + Program::FunctionInput rhs; + Program::Witness output; + + friend bool operator==(const XOR&, const XOR&); + std::vector bincodeSerialize() const; + static XOR bincodeDeserialize(std::vector); + }; + + struct RANGE { + Program::FunctionInput input; + + friend bool operator==(const RANGE&, const RANGE&); + std::vector bincodeSerialize() const; + static RANGE bincodeDeserialize(std::vector); + }; + + struct Blake2s { + std::vector inputs; + std::array outputs; + + friend bool operator==(const Blake2s&, const Blake2s&); + std::vector bincodeSerialize() const; + static Blake2s bincodeDeserialize(std::vector); + }; + + struct Blake3 { + std::vector inputs; + std::array outputs; + + friend bool operator==(const Blake3&, const Blake3&); + std::vector bincodeSerialize() const; + static Blake3 bincodeDeserialize(std::vector); + }; + + struct SchnorrVerify { + Program::FunctionInput public_key_x; + Program::FunctionInput public_key_y; + std::array signature; + std::vector message; + Program::Witness output; + + friend bool operator==(const SchnorrVerify&, const SchnorrVerify&); + std::vector bincodeSerialize() const; + static SchnorrVerify bincodeDeserialize(std::vector); + }; + + struct PedersenCommitment { + std::vector inputs; + uint32_t domain_separator; + std::array outputs; + + friend bool operator==(const PedersenCommitment&, const PedersenCommitment&); + std::vector bincodeSerialize() const; + static PedersenCommitment bincodeDeserialize(std::vector); + }; + + struct PedersenHash { + std::vector inputs; + uint32_t domain_separator; + Program::Witness output; + + friend bool operator==(const PedersenHash&, const PedersenHash&); + std::vector bincodeSerialize() const; + static PedersenHash bincodeDeserialize(std::vector); + }; + + struct EcdsaSecp256k1 { + std::array public_key_x; + std::array public_key_y; + std::array signature; + std::array hashed_message; + Program::Witness output; + + friend bool operator==(const EcdsaSecp256k1&, const EcdsaSecp256k1&); + std::vector bincodeSerialize() const; + static EcdsaSecp256k1 bincodeDeserialize(std::vector); + }; + + struct EcdsaSecp256r1 { + std::array public_key_x; + std::array public_key_y; + std::array signature; + std::array hashed_message; + Program::Witness output; + + friend bool operator==(const EcdsaSecp256r1&, const EcdsaSecp256r1&); + std::vector bincodeSerialize() const; + static EcdsaSecp256r1 bincodeDeserialize(std::vector); + }; + + struct FixedBaseScalarMul { + Program::FunctionInput low; + Program::FunctionInput high; + std::array outputs; + + friend bool operator==(const FixedBaseScalarMul&, const FixedBaseScalarMul&); + std::vector bincodeSerialize() const; + static FixedBaseScalarMul bincodeDeserialize(std::vector); + }; + + struct EmbeddedCurveAdd { + Program::FunctionInput input1_x; + Program::FunctionInput input1_y; + Program::FunctionInput input2_x; + Program::FunctionInput input2_y; + std::array outputs; + + friend bool operator==(const EmbeddedCurveAdd&, const EmbeddedCurveAdd&); + std::vector bincodeSerialize() const; + static EmbeddedCurveAdd bincodeDeserialize(std::vector); + }; + + struct Keccak256 { + std::vector inputs; + Program::FunctionInput var_message_size; + std::array outputs; + + friend bool operator==(const Keccak256&, const Keccak256&); + std::vector bincodeSerialize() const; + static Keccak256 bincodeDeserialize(std::vector); + }; + + struct Keccakf1600 { + std::array inputs; + std::array outputs; + + friend bool operator==(const Keccakf1600&, const Keccakf1600&); + std::vector bincodeSerialize() const; + static Keccakf1600 bincodeDeserialize(std::vector); + }; + + struct RecursiveAggregation { + std::vector verification_key; + std::vector proof; + std::vector public_inputs; + Program::FunctionInput key_hash; + + friend bool operator==(const RecursiveAggregation&, const RecursiveAggregation&); + std::vector bincodeSerialize() const; + static RecursiveAggregation bincodeDeserialize(std::vector); + }; + + struct BigIntAdd { + uint32_t lhs; + uint32_t rhs; + uint32_t output; + + friend bool operator==(const BigIntAdd&, const BigIntAdd&); + std::vector bincodeSerialize() const; + static BigIntAdd bincodeDeserialize(std::vector); + }; + + struct BigIntSub { + uint32_t lhs; + uint32_t rhs; + uint32_t output; + + friend bool operator==(const BigIntSub&, const BigIntSub&); + std::vector bincodeSerialize() const; + static BigIntSub bincodeDeserialize(std::vector); + }; + + struct BigIntMul { + uint32_t lhs; + uint32_t rhs; + uint32_t output; + + friend bool operator==(const BigIntMul&, const BigIntMul&); + std::vector bincodeSerialize() const; + static BigIntMul bincodeDeserialize(std::vector); + }; + + struct BigIntDiv { + uint32_t lhs; + uint32_t rhs; + uint32_t output; + + friend bool operator==(const BigIntDiv&, const BigIntDiv&); + std::vector bincodeSerialize() const; + static BigIntDiv bincodeDeserialize(std::vector); + }; + + struct BigIntFromLeBytes { + std::vector inputs; + std::vector modulus; + uint32_t output; + + friend bool operator==(const BigIntFromLeBytes&, const BigIntFromLeBytes&); + std::vector bincodeSerialize() const; + static BigIntFromLeBytes bincodeDeserialize(std::vector); + }; + + struct BigIntToLeBytes { + uint32_t input; + std::vector outputs; + + friend bool operator==(const BigIntToLeBytes&, const BigIntToLeBytes&); + std::vector bincodeSerialize() const; + static BigIntToLeBytes bincodeDeserialize(std::vector); + }; + + struct Poseidon2Permutation { + std::vector inputs; + std::vector outputs; + uint32_t len; + + friend bool operator==(const Poseidon2Permutation&, const Poseidon2Permutation&); + std::vector bincodeSerialize() const; + static Poseidon2Permutation bincodeDeserialize(std::vector); + }; + + struct Sha256Compression { + std::array inputs; + std::array hash_values; + std::array outputs; + + friend bool operator==(const Sha256Compression&, const Sha256Compression&); + std::vector bincodeSerialize() const; + static Sha256Compression bincodeDeserialize(std::vector); + }; + + std::variant value; + + friend bool operator==(const BlackBoxFuncCall&, const BlackBoxFuncCall&); + std::vector bincodeSerialize() const; + static BlackBoxFuncCall bincodeDeserialize(std::vector); + }; - struct AND { - Program::FunctionInput lhs; - Program::FunctionInput rhs; - Program::Witness output; + struct BlockId { + uint32_t value; - friend bool operator==(const AND &, const AND &); - std::vector bincodeSerialize() const; - static AND bincodeDeserialize(std::vector); + friend bool operator==(const BlockId&, const BlockId&); + std::vector bincodeSerialize() const; + static BlockId bincodeDeserialize(std::vector); }; - struct XOR { - Program::FunctionInput lhs; - Program::FunctionInput rhs; - Program::Witness output; + struct Expression { + std::vector> mul_terms; + std::vector> linear_combinations; + std::string q_c; - friend bool operator==(const XOR &, const XOR &); - std::vector bincodeSerialize() const; - static XOR bincodeDeserialize(std::vector); + friend bool operator==(const Expression&, const Expression&); + std::vector bincodeSerialize() const; + static Expression bincodeDeserialize(std::vector); }; - struct RANGE { - Program::FunctionInput input; + struct BrilligInputs { - friend bool operator==(const RANGE &, const RANGE &); - std::vector bincodeSerialize() const; - static RANGE bincodeDeserialize(std::vector); - }; + struct Single { + Program::Expression value; - struct Blake2s { - std::vector inputs; - std::array outputs; + friend bool operator==(const Single&, const Single&); + std::vector bincodeSerialize() const; + static Single bincodeDeserialize(std::vector); + }; - friend bool operator==(const Blake2s &, const Blake2s &); - std::vector bincodeSerialize() const; - static Blake2s bincodeDeserialize(std::vector); - }; + struct Array { + std::vector value; - struct Blake3 { - std::vector inputs; - std::array outputs; + friend bool operator==(const Array&, const Array&); + std::vector bincodeSerialize() const; + static Array bincodeDeserialize(std::vector); + }; - friend bool operator==(const Blake3 &, const Blake3 &); - std::vector bincodeSerialize() const; - static Blake3 bincodeDeserialize(std::vector); - }; + struct MemoryArray { + Program::BlockId value; + + friend bool operator==(const MemoryArray&, const MemoryArray&); + std::vector bincodeSerialize() const; + static MemoryArray bincodeDeserialize(std::vector); + }; - struct SchnorrVerify { - Program::FunctionInput public_key_x; - Program::FunctionInput public_key_y; - std::array signature; - std::vector message; - Program::Witness output; + std::variant value; - friend bool operator==(const SchnorrVerify &, const SchnorrVerify &); - std::vector bincodeSerialize() const; - static SchnorrVerify bincodeDeserialize(std::vector); + friend bool operator==(const BrilligInputs&, const BrilligInputs&); + std::vector bincodeSerialize() const; + static BrilligInputs bincodeDeserialize(std::vector); }; struct BrilligOutputs { - struct Simple { - Program::Witness value; + struct Simple { + Program::Witness value; - friend bool operator==(const Simple &, const Simple &); - std::vector bincodeSerialize() const; - static Simple bincodeDeserialize(std::vector); - }; + friend bool operator==(const Simple&, const Simple&); + std::vector bincodeSerialize() const; + static Simple bincodeDeserialize(std::vector); + }; - struct Array { - std::vector value; + struct Array { + std::vector value; - friend bool operator==(const Array &, const Array &); - std::vector bincodeSerialize() const; - static Array bincodeDeserialize(std::vector); - }; + friend bool operator==(const Array&, const Array&); + std::vector bincodeSerialize() const; + static Array bincodeDeserialize(std::vector); + }; - std::variant value; + std::variant value; - friend bool operator==(const BrilligOutputs &, const BrilligOutputs &); - std::vector bincodeSerialize() const; - static BrilligOutputs bincodeDeserialize(std::vector); + friend bool operator==(const BrilligOutputs&, const BrilligOutputs&); + std::vector bincodeSerialize() const; + static BrilligOutputs bincodeDeserialize(std::vector); }; struct Directive { - struct ToLeRadix { - Program::Expression a; - std::vector b; - uint32_t radix; + struct ToLeRadix { + Program::Expression a; + std::vector b; + uint32_t radix; - friend bool operator==(const ToLeRadix &, const ToLeRadix &); - std::vector bincodeSerialize() const; - static ToLeRadix bincodeDeserialize(std::vector); - }; + friend bool operator==(const ToLeRadix&, const ToLeRadix&); + std::vector bincodeSerialize() const; + static ToLeRadix bincodeDeserialize(std::vector); + }; - std::variant value; + std::variant value; - friend bool operator==(const Directive &, const Directive &); - std::vector bincodeSerialize() const; - static Directive bincodeDeserialize(std::vector); + friend bool operator==(const Directive&, const Directive&); + std::vector bincodeSerialize() const; + static Directive bincodeDeserialize(std::vector); }; struct MemOp { - Program::Expression operation; - Program::Expression index; - Program::Expression value; + Program::Expression operation; + Program::Expression index; + Program::Expression value; - friend bool operator==(const MemOp &, const MemOp &); - std::vector bincodeSerialize() const; - static MemOp bincodeDeserialize(std::vector); + friend bool operator==(const MemOp&, const MemOp&); + std::vector bincodeSerialize() const; + static MemOp bincodeDeserialize(std::vector); }; struct Opcode { - struct AssertZero { - Program::Expression value; - - friend bool operator==(const AssertZero &, const AssertZero &); + struct AssertZero { + Program::Expression value; + + friend bool operator==(const AssertZero&, const AssertZero&); + std::vector bincodeSerialize() const; + static AssertZero bincodeDeserialize(std::vector); + }; + + struct BlackBoxFuncCall { + Program::BlackBoxFuncCall value; + + friend bool operator==(const BlackBoxFuncCall&, const BlackBoxFuncCall&); + std::vector bincodeSerialize() const; + static BlackBoxFuncCall bincodeDeserialize(std::vector); + }; + + struct Directive { + Program::Directive value; + + friend bool operator==(const Directive&, const Directive&); + std::vector bincodeSerialize() const; + static Directive bincodeDeserialize(std::vector); + }; + + struct MemoryOp { + Program::BlockId block_id; + Program::MemOp op; + std::optional predicate; + + friend bool operator==(const MemoryOp&, const MemoryOp&); + std::vector bincodeSerialize() const; + static MemoryOp bincodeDeserialize(std::vector); + }; + + struct MemoryInit { + Program::BlockId block_id; + std::vector init; + + friend bool operator==(const MemoryInit&, const MemoryInit&); + std::vector bincodeSerialize() const; + static MemoryInit bincodeDeserialize(std::vector); + }; + + struct BrilligCall { + uint32_t id; + std::vector inputs; + std::vector outputs; + std::optional predicate; + + friend bool operator==(const BrilligCall&, const BrilligCall&); + std::vector bincodeSerialize() const; + static BrilligCall bincodeDeserialize(std::vector); + }; + + struct Call { + uint32_t id; + std::vector inputs; + std::vector outputs; + std::optional predicate; + + friend bool operator==(const Call&, const Call&); + std::vector bincodeSerialize() const; + static Call bincodeDeserialize(std::vector); + }; + + std::variant value; + + friend bool operator==(const Opcode&, const Opcode&); std::vector bincodeSerialize() const; - static AssertZero bincodeDeserialize(std::vector); - }; + static Opcode bincodeDeserialize(std::vector); + }; - struct BlackBoxFuncCall { - Program::BlackBoxFuncCall value; + struct BinaryFieldOp { - friend bool operator==(const BlackBoxFuncCall &, - const BlackBoxFuncCall &); + struct Add { + friend bool operator==(const Add&, const Add&); + std::vector bincodeSerialize() const; + static Add bincodeDeserialize(std::vector); + }; + + struct Sub { + friend bool operator==(const Sub&, const Sub&); + std::vector bincodeSerialize() const; + static Sub bincodeDeserialize(std::vector); + }; + + struct Mul { + friend bool operator==(const Mul&, const Mul&); + std::vector bincodeSerialize() const; + static Mul bincodeDeserialize(std::vector); + }; + + struct Div { + friend bool operator==(const Div&, const Div&); + std::vector bincodeSerialize() const; + static Div bincodeDeserialize(std::vector); + }; + + struct IntegerDiv { + friend bool operator==(const IntegerDiv&, const IntegerDiv&); + std::vector bincodeSerialize() const; + static IntegerDiv bincodeDeserialize(std::vector); + }; + + struct Equals { + friend bool operator==(const Equals&, const Equals&); + std::vector bincodeSerialize() const; + static Equals bincodeDeserialize(std::vector); + }; + + struct LessThan { + friend bool operator==(const LessThan&, const LessThan&); + std::vector bincodeSerialize() const; + static LessThan bincodeDeserialize(std::vector); + }; + + struct LessThanEquals { + friend bool operator==(const LessThanEquals&, const LessThanEquals&); + std::vector bincodeSerialize() const; + static LessThanEquals bincodeDeserialize(std::vector); + }; + + std::variant value; + + friend bool operator==(const BinaryFieldOp&, const BinaryFieldOp&); std::vector bincodeSerialize() const; - static BlackBoxFuncCall bincodeDeserialize(std::vector); - }; + static BinaryFieldOp bincodeDeserialize(std::vector); + }; - struct Directive { - Program::Directive value; + struct BinaryIntOp { - friend bool operator==(const Directive &, const Directive &); + struct Add { + friend bool operator==(const Add&, const Add&); + std::vector bincodeSerialize() const; + static Add bincodeDeserialize(std::vector); + }; + + struct Sub { + friend bool operator==(const Sub&, const Sub&); + std::vector bincodeSerialize() const; + static Sub bincodeDeserialize(std::vector); + }; + + struct Mul { + friend bool operator==(const Mul&, const Mul&); + std::vector bincodeSerialize() const; + static Mul bincodeDeserialize(std::vector); + }; + + struct Div { + friend bool operator==(const Div&, const Div&); + std::vector bincodeSerialize() const; + static Div bincodeDeserialize(std::vector); + }; + + struct Equals { + friend bool operator==(const Equals&, const Equals&); + std::vector bincodeSerialize() const; + static Equals bincodeDeserialize(std::vector); + }; + + struct LessThan { + friend bool operator==(const LessThan&, const LessThan&); + std::vector bincodeSerialize() const; + static LessThan bincodeDeserialize(std::vector); + }; + + struct LessThanEquals { + friend bool operator==(const LessThanEquals&, const LessThanEquals&); + std::vector bincodeSerialize() const; + static LessThanEquals bincodeDeserialize(std::vector); + }; + + struct And { + friend bool operator==(const And&, const And&); + std::vector bincodeSerialize() const; + static And bincodeDeserialize(std::vector); + }; + + struct Or { + friend bool operator==(const Or&, const Or&); + std::vector bincodeSerialize() const; + static Or bincodeDeserialize(std::vector); + }; + + struct Xor { + friend bool operator==(const Xor&, const Xor&); + std::vector bincodeSerialize() const; + static Xor bincodeDeserialize(std::vector); + }; + + struct Shl { + friend bool operator==(const Shl&, const Shl&); + std::vector bincodeSerialize() const; + static Shl bincodeDeserialize(std::vector); + }; + + struct Shr { + friend bool operator==(const Shr&, const Shr&); + std::vector bincodeSerialize() const; + static Shr bincodeDeserialize(std::vector); + }; + + std::variant value; + + friend bool operator==(const BinaryIntOp&, const BinaryIntOp&); std::vector bincodeSerialize() const; - static Directive bincodeDeserialize(std::vector); - }; + static BinaryIntOp bincodeDeserialize(std::vector); + }; - struct MemoryOp { - Program::BlockId block_id; - Program::MemOp op; - std::optional predicate; + struct MemoryAddress { + uint64_t value; - friend bool operator==(const MemoryOp &, const MemoryOp &); + friend bool operator==(const MemoryAddress&, const MemoryAddress&); std::vector bincodeSerialize() const; - static MemoryOp bincodeDeserialize(std::vector); - }; + static MemoryAddress bincodeDeserialize(std::vector); + }; - struct MemoryInit { - Program::BlockId block_id; - std::vector init; + struct HeapArray { + Program::MemoryAddress pointer; + uint64_t size; - friend bool operator==(const MemoryInit &, const MemoryInit &); + friend bool operator==(const HeapArray&, const HeapArray&); std::vector bincodeSerialize() const; - static MemoryInit bincodeDeserialize(std::vector); - }; + static HeapArray bincodeDeserialize(std::vector); + }; - struct BrilligCall { - uint32_t id; - std::vector inputs; - std::vector outputs; - std::optional predicate; + struct HeapVector { + Program::MemoryAddress pointer; + Program::MemoryAddress size; - friend bool operator==(const BrilligCall &, const BrilligCall &); + friend bool operator==(const HeapVector&, const HeapVector&); std::vector bincodeSerialize() const; - static BrilligCall bincodeDeserialize(std::vector); - }; - - struct Call { - uint32_t id; - std::vector inputs; - std::vector outputs; - std::optional predicate; + static HeapVector bincodeDeserialize(std::vector); + }; - friend bool operator==(const Call &, const Call &); + struct BlackBoxOp { + + struct Blake2s { + Program::HeapVector message; + Program::HeapArray output; + + friend bool operator==(const Blake2s&, const Blake2s&); + std::vector bincodeSerialize() const; + static Blake2s bincodeDeserialize(std::vector); + }; + + struct Blake3 { + Program::HeapVector message; + Program::HeapArray output; + + friend bool operator==(const Blake3&, const Blake3&); + std::vector bincodeSerialize() const; + static Blake3 bincodeDeserialize(std::vector); + }; + + struct Keccak256 { + Program::HeapVector message; + Program::HeapArray output; + + friend bool operator==(const Keccak256&, const Keccak256&); + std::vector bincodeSerialize() const; + static Keccak256 bincodeDeserialize(std::vector); + }; + + struct Keccakf1600 { + Program::HeapVector message; + Program::HeapArray output; + + friend bool operator==(const Keccakf1600&, const Keccakf1600&); + std::vector bincodeSerialize() const; + static Keccakf1600 bincodeDeserialize(std::vector); + }; + + struct EcdsaSecp256k1 { + Program::HeapVector hashed_msg; + Program::HeapArray public_key_x; + Program::HeapArray public_key_y; + Program::HeapArray signature; + Program::MemoryAddress result; + + friend bool operator==(const EcdsaSecp256k1&, const EcdsaSecp256k1&); + std::vector bincodeSerialize() const; + static EcdsaSecp256k1 bincodeDeserialize(std::vector); + }; + + struct EcdsaSecp256r1 { + Program::HeapVector hashed_msg; + Program::HeapArray public_key_x; + Program::HeapArray public_key_y; + Program::HeapArray signature; + Program::MemoryAddress result; + + friend bool operator==(const EcdsaSecp256r1&, const EcdsaSecp256r1&); + std::vector bincodeSerialize() const; + static EcdsaSecp256r1 bincodeDeserialize(std::vector); + }; + + struct SchnorrVerify { + Program::MemoryAddress public_key_x; + Program::MemoryAddress public_key_y; + Program::HeapVector message; + Program::HeapVector signature; + Program::MemoryAddress result; + + friend bool operator==(const SchnorrVerify&, const SchnorrVerify&); + std::vector bincodeSerialize() const; + static SchnorrVerify bincodeDeserialize(std::vector); + }; + + struct PedersenCommitment { + Program::HeapVector inputs; + Program::MemoryAddress domain_separator; + Program::HeapArray output; + + friend bool operator==(const PedersenCommitment&, const PedersenCommitment&); + std::vector bincodeSerialize() const; + static PedersenCommitment bincodeDeserialize(std::vector); + }; + + struct PedersenHash { + Program::HeapVector inputs; + Program::MemoryAddress domain_separator; + Program::MemoryAddress output; + + friend bool operator==(const PedersenHash&, const PedersenHash&); + std::vector bincodeSerialize() const; + static PedersenHash bincodeDeserialize(std::vector); + }; + + struct FixedBaseScalarMul { + Program::MemoryAddress low; + Program::MemoryAddress high; + Program::HeapArray result; + + friend bool operator==(const FixedBaseScalarMul&, const FixedBaseScalarMul&); + std::vector bincodeSerialize() const; + static FixedBaseScalarMul bincodeDeserialize(std::vector); + }; + + struct EmbeddedCurveAdd { + Program::MemoryAddress input1_x; + Program::MemoryAddress input1_y; + Program::MemoryAddress input2_x; + Program::MemoryAddress input2_y; + Program::HeapArray result; + + friend bool operator==(const EmbeddedCurveAdd&, const EmbeddedCurveAdd&); + std::vector bincodeSerialize() const; + static EmbeddedCurveAdd bincodeDeserialize(std::vector); + }; + + struct BigIntAdd { + Program::MemoryAddress lhs; + Program::MemoryAddress rhs; + Program::MemoryAddress output; + + friend bool operator==(const BigIntAdd&, const BigIntAdd&); + std::vector bincodeSerialize() const; + static BigIntAdd bincodeDeserialize(std::vector); + }; + + struct BigIntSub { + Program::MemoryAddress lhs; + Program::MemoryAddress rhs; + Program::MemoryAddress output; + + friend bool operator==(const BigIntSub&, const BigIntSub&); + std::vector bincodeSerialize() const; + static BigIntSub bincodeDeserialize(std::vector); + }; + + struct BigIntMul { + Program::MemoryAddress lhs; + Program::MemoryAddress rhs; + Program::MemoryAddress output; + + friend bool operator==(const BigIntMul&, const BigIntMul&); + std::vector bincodeSerialize() const; + static BigIntMul bincodeDeserialize(std::vector); + }; + + struct BigIntDiv { + Program::MemoryAddress lhs; + Program::MemoryAddress rhs; + Program::MemoryAddress output; + + friend bool operator==(const BigIntDiv&, const BigIntDiv&); + std::vector bincodeSerialize() const; + static BigIntDiv bincodeDeserialize(std::vector); + }; + + struct BigIntFromLeBytes { + Program::HeapVector inputs; + Program::HeapVector modulus; + Program::MemoryAddress output; + + friend bool operator==(const BigIntFromLeBytes&, const BigIntFromLeBytes&); + std::vector bincodeSerialize() const; + static BigIntFromLeBytes bincodeDeserialize(std::vector); + }; + + struct BigIntToLeBytes { + Program::MemoryAddress input; + Program::HeapVector output; + + friend bool operator==(const BigIntToLeBytes&, const BigIntToLeBytes&); + std::vector bincodeSerialize() const; + static BigIntToLeBytes bincodeDeserialize(std::vector); + }; + + struct Poseidon2Permutation { + Program::HeapVector message; + Program::HeapArray output; + Program::MemoryAddress len; + + friend bool operator==(const Poseidon2Permutation&, const Poseidon2Permutation&); + std::vector bincodeSerialize() const; + static Poseidon2Permutation bincodeDeserialize(std::vector); + }; + + struct Sha256Compression { + Program::HeapVector input; + Program::HeapVector hash_values; + Program::HeapArray output; + + friend bool operator==(const Sha256Compression&, const Sha256Compression&); + std::vector bincodeSerialize() const; + static Sha256Compression bincodeDeserialize(std::vector); + }; + + std::variant value; + + friend bool operator==(const BlackBoxOp&, const BlackBoxOp&); std::vector bincodeSerialize() const; - static Call bincodeDeserialize(std::vector); - }; - - std::variant - value; - - friend bool operator==(const Opcode &, const Opcode &); - std::vector bincodeSerialize() const; - static Opcode bincodeDeserialize(std::vector); + static BlackBoxOp bincodeDeserialize(std::vector); }; - struct BinaryFieldOp { + struct HeapValueType; - friend bool operator==(const PedersenCommitment &, - const PedersenCommitment &); - std::vector bincodeSerialize() const; - static PedersenCommitment bincodeDeserialize(std::vector); - }; + struct HeapValueType { - struct PedersenHash { - std::vector inputs; - uint32_t domain_separator; - Program::Witness output; + struct Simple { + uint32_t value; - friend bool operator==(const PedersenHash &, const PedersenHash &); - std::vector bincodeSerialize() const; - static PedersenHash bincodeDeserialize(std::vector); - }; + friend bool operator==(const Simple&, const Simple&); + std::vector bincodeSerialize() const; + static Simple bincodeDeserialize(std::vector); + }; - struct EcdsaSecp256k1 { - std::array public_key_x; - std::array public_key_y; - std::array signature; - std::array hashed_message; - Program::Witness output; + struct Array { + std::vector value_types; + uint64_t size; - friend bool operator==(const EcdsaSecp256k1 &, const EcdsaSecp256k1 &); - std::vector bincodeSerialize() const; - static EcdsaSecp256k1 bincodeDeserialize(std::vector); - }; + friend bool operator==(const Array&, const Array&); + std::vector bincodeSerialize() const; + static Array bincodeDeserialize(std::vector); + }; - struct EcdsaSecp256r1 { - std::array public_key_x; - std::array public_key_y; - std::array signature; - std::array hashed_message; - Program::Witness output; + struct Vector { + std::vector value_types; - friend bool operator==(const EcdsaSecp256r1 &, const EcdsaSecp256r1 &); - std::vector bincodeSerialize() const; - static EcdsaSecp256r1 bincodeDeserialize(std::vector); - }; + friend bool operator==(const Vector&, const Vector&); + std::vector bincodeSerialize() const; + static Vector bincodeDeserialize(std::vector); + }; - struct FixedBaseScalarMul { - Program::FunctionInput low; - Program::FunctionInput high; - std::array outputs; + std::variant value; - friend bool operator==(const FixedBaseScalarMul &, - const FixedBaseScalarMul &); - std::vector bincodeSerialize() const; - static FixedBaseScalarMul bincodeDeserialize(std::vector); + friend bool operator==(const HeapValueType&, const HeapValueType&); + std::vector bincodeSerialize() const; + static HeapValueType bincodeDeserialize(std::vector); }; - struct EmbeddedCurveAdd { - Program::FunctionInput input1_x; - Program::FunctionInput input1_y; - Program::FunctionInput input2_x; - Program::FunctionInput input2_y; - std::array outputs; - - friend bool operator==(const EmbeddedCurveAdd &, - const EmbeddedCurveAdd &); - std::vector bincodeSerialize() const; - static EmbeddedCurveAdd bincodeDeserialize(std::vector); - }; + struct ValueOrArray { - struct Keccak256 { - std::vector inputs; - Program::FunctionInput var_message_size; - std::array outputs; + struct MemoryAddress { + Program::MemoryAddress value; - friend bool operator==(const Keccak256 &, const Keccak256 &); - std::vector bincodeSerialize() const; - static Keccak256 bincodeDeserialize(std::vector); - }; + friend bool operator==(const MemoryAddress&, const MemoryAddress&); + std::vector bincodeSerialize() const; + static MemoryAddress bincodeDeserialize(std::vector); + }; - struct Keccakf1600 { - std::array inputs; - std::array outputs; + struct HeapArray { + Program::HeapArray value; - friend bool operator==(const Keccakf1600 &, const Keccakf1600 &); - std::vector bincodeSerialize() const; - static Keccakf1600 bincodeDeserialize(std::vector); - }; + friend bool operator==(const HeapArray&, const HeapArray&); + std::vector bincodeSerialize() const; + static HeapArray bincodeDeserialize(std::vector); + }; - struct RecursiveAggregation { - std::vector verification_key; - std::vector proof; - std::vector public_inputs; - Program::FunctionInput key_hash; + struct HeapVector { + Program::HeapVector value; - friend bool operator==(const RecursiveAggregation &, - const RecursiveAggregation &); - std::vector bincodeSerialize() const; - static RecursiveAggregation bincodeDeserialize(std::vector); - }; + friend bool operator==(const HeapVector&, const HeapVector&); + std::vector bincodeSerialize() const; + static HeapVector bincodeDeserialize(std::vector); + }; - struct BigIntAdd { - uint32_t lhs; - uint32_t rhs; - uint32_t output; + std::variant value; - friend bool operator==(const BigIntAdd &, const BigIntAdd &); - std::vector bincodeSerialize() const; - static BigIntAdd bincodeDeserialize(std::vector); + friend bool operator==(const ValueOrArray&, const ValueOrArray&); + std::vector bincodeSerialize() const; + static ValueOrArray bincodeDeserialize(std::vector); }; - struct BigIntSub { - uint32_t lhs; - uint32_t rhs; - uint32_t output; - - friend bool operator==(const BigIntSub &, const BigIntSub &); - std::vector bincodeSerialize() const; - static BigIntSub bincodeDeserialize(std::vector); + struct BrilligOpcode { + + struct BinaryFieldOp { + Program::MemoryAddress destination; + Program::BinaryFieldOp op; + Program::MemoryAddress lhs; + Program::MemoryAddress rhs; + + friend bool operator==(const BinaryFieldOp&, const BinaryFieldOp&); + std::vector bincodeSerialize() const; + static BinaryFieldOp bincodeDeserialize(std::vector); + }; + + struct BinaryIntOp { + Program::MemoryAddress destination; + Program::BinaryIntOp op; + uint32_t bit_size; + Program::MemoryAddress lhs; + Program::MemoryAddress rhs; + + friend bool operator==(const BinaryIntOp&, const BinaryIntOp&); + std::vector bincodeSerialize() const; + static BinaryIntOp bincodeDeserialize(std::vector); + }; + + struct Cast { + Program::MemoryAddress destination; + Program::MemoryAddress source; + uint32_t bit_size; + + friend bool operator==(const Cast&, const Cast&); + std::vector bincodeSerialize() const; + static Cast bincodeDeserialize(std::vector); + }; + + struct JumpIfNot { + Program::MemoryAddress condition; + uint64_t location; + + friend bool operator==(const JumpIfNot&, const JumpIfNot&); + std::vector bincodeSerialize() const; + static JumpIfNot bincodeDeserialize(std::vector); + }; + + struct JumpIf { + Program::MemoryAddress condition; + uint64_t location; + + friend bool operator==(const JumpIf&, const JumpIf&); + std::vector bincodeSerialize() const; + static JumpIf bincodeDeserialize(std::vector); + }; + + struct Jump { + uint64_t location; + + friend bool operator==(const Jump&, const Jump&); + std::vector bincodeSerialize() const; + static Jump bincodeDeserialize(std::vector); + }; + + struct CalldataCopy { + Program::MemoryAddress destination_address; + uint64_t size; + uint64_t offset; + + friend bool operator==(const CalldataCopy&, const CalldataCopy&); + std::vector bincodeSerialize() const; + static CalldataCopy bincodeDeserialize(std::vector); + }; + + struct Call { + uint64_t location; + + friend bool operator==(const Call&, const Call&); + std::vector bincodeSerialize() const; + static Call bincodeDeserialize(std::vector); + }; + + struct Const { + Program::MemoryAddress destination; + uint32_t bit_size; + std::string value; + + friend bool operator==(const Const&, const Const&); + std::vector bincodeSerialize() const; + static Const bincodeDeserialize(std::vector); + }; + + struct Return { + friend bool operator==(const Return&, const Return&); + std::vector bincodeSerialize() const; + static Return bincodeDeserialize(std::vector); + }; + + struct ForeignCall { + std::string function; + std::vector destinations; + std::vector destination_value_types; + std::vector inputs; + std::vector input_value_types; + + friend bool operator==(const ForeignCall&, const ForeignCall&); + std::vector bincodeSerialize() const; + static ForeignCall bincodeDeserialize(std::vector); + }; + + struct Mov { + Program::MemoryAddress destination; + Program::MemoryAddress source; + + friend bool operator==(const Mov&, const Mov&); + std::vector bincodeSerialize() const; + static Mov bincodeDeserialize(std::vector); + }; + + struct ConditionalMov { + Program::MemoryAddress destination; + Program::MemoryAddress source_a; + Program::MemoryAddress source_b; + Program::MemoryAddress condition; + + friend bool operator==(const ConditionalMov&, const ConditionalMov&); + std::vector bincodeSerialize() const; + static ConditionalMov bincodeDeserialize(std::vector); + }; + + struct Load { + Program::MemoryAddress destination; + Program::MemoryAddress source_pointer; + + friend bool operator==(const Load&, const Load&); + std::vector bincodeSerialize() const; + static Load bincodeDeserialize(std::vector); + }; + + struct Store { + Program::MemoryAddress destination_pointer; + Program::MemoryAddress source; + + friend bool operator==(const Store&, const Store&); + std::vector bincodeSerialize() const; + static Store bincodeDeserialize(std::vector); + }; + + struct BlackBox { + Program::BlackBoxOp value; + + friend bool operator==(const BlackBox&, const BlackBox&); + std::vector bincodeSerialize() const; + static BlackBox bincodeDeserialize(std::vector); + }; + + struct Trap { + Program::HeapArray revert_data; + + friend bool operator==(const Trap&, const Trap&); + std::vector bincodeSerialize() const; + static Trap bincodeDeserialize(std::vector); + }; + + struct Stop { + uint64_t return_data_offset; + uint64_t return_data_size; + + friend bool operator==(const Stop&, const Stop&); + std::vector bincodeSerialize() const; + static Stop bincodeDeserialize(std::vector); + }; + + std::variant value; + + friend bool operator==(const BrilligOpcode&, const BrilligOpcode&); + std::vector bincodeSerialize() const; + static BrilligOpcode bincodeDeserialize(std::vector); }; - struct BigIntMul { - uint32_t lhs; - uint32_t rhs; - uint32_t output; - - friend bool operator==(const BigIntMul &, const BigIntMul &); - std::vector bincodeSerialize() const; - static BigIntMul bincodeDeserialize(std::vector); - }; + struct ExpressionOrMemory { - struct BigIntDiv { - uint32_t lhs; - uint32_t rhs; - uint32_t output; + struct Expression { + Program::Expression value; - friend bool operator==(const BigIntDiv &, const BigIntDiv &); - std::vector bincodeSerialize() const; - static BigIntDiv bincodeDeserialize(std::vector); - }; + friend bool operator==(const Expression&, const Expression&); + std::vector bincodeSerialize() const; + static Expression bincodeDeserialize(std::vector); + }; - struct BigIntFromLeBytes { - std::vector inputs; - std::vector modulus; - uint32_t output; + struct Memory { + Program::BlockId value; - friend bool operator==(const BigIntFromLeBytes &, - const BigIntFromLeBytes &); - std::vector bincodeSerialize() const; - static BigIntFromLeBytes bincodeDeserialize(std::vector); - }; + friend bool operator==(const Memory&, const Memory&); + std::vector bincodeSerialize() const; + static Memory bincodeDeserialize(std::vector); + }; - struct BigIntToLeBytes { - uint32_t input; - std::vector outputs; + std::variant value; - friend bool operator==(const BigIntToLeBytes &, const BigIntToLeBytes &); - std::vector bincodeSerialize() const; - static BigIntToLeBytes bincodeDeserialize(std::vector); + friend bool operator==(const ExpressionOrMemory&, const ExpressionOrMemory&); + std::vector bincodeSerialize() const; + static ExpressionOrMemory bincodeDeserialize(std::vector); }; - struct Poseidon2Permutation { - std::vector inputs; - std::vector outputs; - uint32_t len; + struct AssertionPayload { - friend bool operator==(const Poseidon2Permutation &, - const Poseidon2Permutation &); - std::vector bincodeSerialize() const; - static Poseidon2Permutation bincodeDeserialize(std::vector); - }; + struct StaticString { + std::string value; - struct Sha256Compression { - std::array inputs; - std::array hash_values; - std::array outputs; + friend bool operator==(const StaticString&, const StaticString&); + std::vector bincodeSerialize() const; + static StaticString bincodeDeserialize(std::vector); + }; - friend bool operator==(const Sha256Compression &, - const Sha256Compression &); - std::vector bincodeSerialize() const; - static Sha256Compression bincodeDeserialize(std::vector); - }; + struct Dynamic { + std::tuple> value; - std::variant - value; - - friend bool operator==(const BlackBoxFuncCall &, const BlackBoxFuncCall &); - std::vector bincodeSerialize() const; - static BlackBoxFuncCall bincodeDeserialize(std::vector); - }; - - struct BlockId { - uint32_t value; - - friend bool operator==(const BlockId &, const BlockId &); - std::vector bincodeSerialize() const; - static BlockId bincodeDeserialize(std::vector); - }; - - struct Expression { - std::vector> - mul_terms; - std::vector> linear_combinations; - std::string q_c; - - friend bool operator==(const Expression &, const Expression &); - std::vector bincodeSerialize() const; - static Expression bincodeDeserialize(std::vector); - }; - - struct BrilligInputs { - - struct Single { - Program::Expression value; - - friend bool operator==(const Single &, const Single &); - std::vector bincodeSerialize() const; - static Single bincodeDeserialize(std::vector); - }; + friend bool operator==(const Dynamic&, const Dynamic&); + std::vector bincodeSerialize() const; + static Dynamic bincodeDeserialize(std::vector); + }; - struct Array { - std::vector value; + std::variant value; - friend bool operator==(const Array &, const Array &); - std::vector bincodeSerialize() const; - static Array bincodeDeserialize(std::vector); + friend bool operator==(const AssertionPayload&, const AssertionPayload&); + std::vector bincodeSerialize() const; + static AssertionPayload bincodeDeserialize(std::vector); }; - struct MemoryArray { - Program::BlockId value; + struct ExpressionWidth { - friend bool operator==(const MemoryArray &, const MemoryArray &); - std::vector bincodeSerialize() const; - static MemoryArray bincodeDeserialize(std::vector); - }; + struct Unbounded { + friend bool operator==(const Unbounded&, const Unbounded&); + std::vector bincodeSerialize() const; + static Unbounded bincodeDeserialize(std::vector); + }; - std::variant value; + struct Bounded { + uint64_t width; - friend bool operator==(const BrilligInputs &, const BrilligInputs &); - std::vector bincodeSerialize() const; - static BrilligInputs bincodeDeserialize(std::vector); - }; + friend bool operator==(const Bounded&, const Bounded&); + std::vector bincodeSerialize() const; + static Bounded bincodeDeserialize(std::vector); + }; - struct BinaryFieldOp { + std::variant value; - struct Add { - friend bool operator==(const Add &, const Add &); - std::vector bincodeSerialize() const; - static Add bincodeDeserialize(std::vector); + friend bool operator==(const ExpressionWidth&, const ExpressionWidth&); + std::vector bincodeSerialize() const; + static ExpressionWidth bincodeDeserialize(std::vector); }; - struct Sub { - friend bool operator==(const Sub &, const Sub &); - std::vector bincodeSerialize() const; - static Sub bincodeDeserialize(std::vector); - }; + struct OpcodeLocation { - struct Mul { - friend bool operator==(const Mul &, const Mul &); - std::vector bincodeSerialize() const; - static Mul bincodeDeserialize(std::vector); - }; + struct Acir { + uint64_t value; - struct Div { - friend bool operator==(const Div &, const Div &); - std::vector bincodeSerialize() const; - static Div bincodeDeserialize(std::vector); - }; + friend bool operator==(const Acir&, const Acir&); + std::vector bincodeSerialize() const; + static Acir bincodeDeserialize(std::vector); + }; - struct IntegerDiv { - friend bool operator==(const IntegerDiv &, const IntegerDiv &); - std::vector bincodeSerialize() const; - static IntegerDiv bincodeDeserialize(std::vector); - }; + struct Brillig { + uint64_t acir_index; + uint64_t brillig_index; - struct Equals { - friend bool operator==(const Equals &, const Equals &); - std::vector bincodeSerialize() const; - static Equals bincodeDeserialize(std::vector); - }; + friend bool operator==(const Brillig&, const Brillig&); + std::vector bincodeSerialize() const; + static Brillig bincodeDeserialize(std::vector); + }; - struct LessThan { - friend bool operator==(const LessThan &, const LessThan &); - std::vector bincodeSerialize() const; - static LessThan bincodeDeserialize(std::vector); - }; + std::variant value; - struct LessThanEquals { - friend bool operator==(const LessThanEquals &, const LessThanEquals &); - std::vector bincodeSerialize() const; - static LessThanEquals bincodeDeserialize(std::vector); + friend bool operator==(const OpcodeLocation&, const OpcodeLocation&); + std::vector bincodeSerialize() const; + static OpcodeLocation bincodeDeserialize(std::vector); }; - std::variant - value; - - friend bool operator==(const BinaryFieldOp &, const BinaryFieldOp &); - std::vector bincodeSerialize() const; - static BinaryFieldOp bincodeDeserialize(std::vector); - }; - - struct BinaryIntOp { + struct PublicInputs { + std::vector value; - struct Add { - friend bool operator==(const Add &, const Add &); - std::vector bincodeSerialize() const; - static Add bincodeDeserialize(std::vector); + friend bool operator==(const PublicInputs&, const PublicInputs&); + std::vector bincodeSerialize() const; + static PublicInputs bincodeDeserialize(std::vector); }; - struct Sub { - friend bool operator==(const Sub &, const Sub &); - std::vector bincodeSerialize() const; - static Sub bincodeDeserialize(std::vector); + struct Circuit { + uint32_t current_witness_index; + std::vector opcodes; + Program::ExpressionWidth expression_width; + std::vector private_parameters; + Program::PublicInputs public_parameters; + Program::PublicInputs return_values; + std::vector> assert_messages; + bool recursive; + + friend bool operator==(const Circuit&, const Circuit&); + std::vector bincodeSerialize() const; + static Circuit bincodeDeserialize(std::vector); }; - struct Mul { - friend bool operator==(const Mul &, const Mul &); - std::vector bincodeSerialize() const; - static Mul bincodeDeserialize(std::vector); - }; + struct BrilligBytecode { + std::vector bytecode; - struct Div { - friend bool operator==(const Div &, const Div &); - std::vector bincodeSerialize() const; - static Div bincodeDeserialize(std::vector); + friend bool operator==(const BrilligBytecode&, const BrilligBytecode&); + std::vector bincodeSerialize() const; + static BrilligBytecode bincodeDeserialize(std::vector); }; - struct Equals { - friend bool operator==(const Equals &, const Equals &); - std::vector bincodeSerialize() const; - static Equals bincodeDeserialize(std::vector); - }; + struct Program { + std::vector functions; + std::vector unconstrained_functions; - struct LessThan { - friend bool operator==(const LessThan &, const LessThan &); - std::vector bincodeSerialize() const; - static LessThan bincodeDeserialize(std::vector); + friend bool operator==(const Program&, const Program&); + std::vector bincodeSerialize() const; + static Program bincodeDeserialize(std::vector); }; - struct LessThanEquals { - friend bool operator==(const LessThanEquals &, const LessThanEquals &); - std::vector bincodeSerialize() const; - static LessThanEquals bincodeDeserialize(std::vector); - }; +} // end of namespace Program - struct And { - friend bool operator==(const And &, const And &); - std::vector bincodeSerialize() const; - static And bincodeDeserialize(std::vector); - }; - struct Or { - friend bool operator==(const Or &, const Or &); - std::vector bincodeSerialize() const; - static Or bincodeDeserialize(std::vector); - }; +namespace Program { - struct Xor { - friend bool operator==(const Xor &, const Xor &); - std::vector bincodeSerialize() const; - static Xor bincodeDeserialize(std::vector); - }; + inline bool operator==(const AssertionPayload &lhs, const AssertionPayload &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } - struct Shl { - friend bool operator==(const Shl &, const Shl &); - std::vector bincodeSerialize() const; - static Shl bincodeDeserialize(std::vector); - }; + inline std::vector AssertionPayload::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - struct Shr { - friend bool operator==(const Shr &, const Shr &); - std::vector bincodeSerialize() const; - static Shr bincodeDeserialize(std::vector); - }; + inline AssertionPayload AssertionPayload::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } - std::variant - value; +} // end of namespace Program - friend bool operator==(const BinaryIntOp &, const BinaryIntOp &); - std::vector bincodeSerialize() const; - static BinaryIntOp bincodeDeserialize(std::vector); - }; +template <> +template +void serde::Serializable::serialize(const Program::AssertionPayload &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.value, serializer); + serializer.decrease_container_depth(); +} - struct MemoryAddress { - uint64_t value; +template <> +template +Program::AssertionPayload serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::AssertionPayload obj; + obj.value = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; +} - friend bool operator==(const MemoryAddress &, const MemoryAddress &); - std::vector bincodeSerialize() const; - static MemoryAddress bincodeDeserialize(std::vector); - }; +namespace Program { - struct HeapArray { - Program::MemoryAddress pointer; - uint64_t size; + inline bool operator==(const AssertionPayload::StaticString &lhs, const AssertionPayload::StaticString &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } - friend bool operator==(const HeapArray &, const HeapArray &); - std::vector bincodeSerialize() const; - static HeapArray bincodeDeserialize(std::vector); - }; + inline std::vector AssertionPayload::StaticString::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - struct HeapVector { - Program::MemoryAddress pointer; - Program::MemoryAddress size; + inline AssertionPayload::StaticString AssertionPayload::StaticString::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } - friend bool operator==(const HeapVector &, const HeapVector &); - std::vector bincodeSerialize() const; - static HeapVector bincodeDeserialize(std::vector); - }; +} // end of namespace Program - struct BlackBoxOp { +template <> +template +void serde::Serializable::serialize(const Program::AssertionPayload::StaticString &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.value, serializer); +} - struct Blake2s { - Program::HeapVector message; - Program::HeapArray output; +template <> +template +Program::AssertionPayload::StaticString serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::AssertionPayload::StaticString obj; + obj.value = serde::Deserializable::deserialize(deserializer); + return obj; +} - friend bool operator==(const Blake2s &, const Blake2s &); - std::vector bincodeSerialize() const; - static Blake2s bincodeDeserialize(std::vector); - }; +namespace Program { - struct Blake3 { - Program::HeapVector message; - Program::HeapArray output; + inline bool operator==(const AssertionPayload::Dynamic &lhs, const AssertionPayload::Dynamic &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } - friend bool operator==(const Blake3 &, const Blake3 &); - std::vector bincodeSerialize() const; - static Blake3 bincodeDeserialize(std::vector); - }; + inline std::vector AssertionPayload::Dynamic::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - struct Keccak256 { - Program::HeapVector message; - Program::HeapArray output; + inline AssertionPayload::Dynamic AssertionPayload::Dynamic::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } - friend bool operator==(const Keccak256 &, const Keccak256 &); - std::vector bincodeSerialize() const; - static Keccak256 bincodeDeserialize(std::vector); - }; +} // end of namespace Program - struct Keccakf1600 { - Program::HeapVector message; - Program::HeapArray output; +template <> +template +void serde::Serializable::serialize(const Program::AssertionPayload::Dynamic &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.value, serializer); +} - friend bool operator==(const Keccakf1600 &, const Keccakf1600 &); - std::vector bincodeSerialize() const; - static Keccakf1600 bincodeDeserialize(std::vector); - }; +template <> +template +Program::AssertionPayload::Dynamic serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::AssertionPayload::Dynamic obj; + obj.value = serde::Deserializable::deserialize(deserializer); + return obj; +} - struct EcdsaSecp256k1 { - Program::HeapVector hashed_msg; - Program::HeapArray public_key_x; - Program::HeapArray public_key_y; - Program::HeapArray signature; - Program::MemoryAddress result; +namespace Program { - friend bool operator==(const EcdsaSecp256k1 &, const EcdsaSecp256k1 &); - std::vector bincodeSerialize() const; - static EcdsaSecp256k1 bincodeDeserialize(std::vector); - }; + inline bool operator==(const BinaryFieldOp &lhs, const BinaryFieldOp &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } - struct EcdsaSecp256r1 { - Program::HeapVector hashed_msg; - Program::HeapArray public_key_x; - Program::HeapArray public_key_y; - Program::HeapArray signature; - Program::MemoryAddress result; + inline std::vector BinaryFieldOp::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - friend bool operator==(const EcdsaSecp256r1 &, const EcdsaSecp256r1 &); - std::vector bincodeSerialize() const; - static EcdsaSecp256r1 bincodeDeserialize(std::vector); - }; + inline BinaryFieldOp BinaryFieldOp::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } - struct SchnorrVerify { - Program::MemoryAddress public_key_x; - Program::MemoryAddress public_key_y; - Program::HeapVector message; - Program::HeapVector signature; - Program::MemoryAddress result; +} // end of namespace Program - friend bool operator==(const SchnorrVerify &, const SchnorrVerify &); - std::vector bincodeSerialize() const; - static SchnorrVerify bincodeDeserialize(std::vector); - }; +template <> +template +void serde::Serializable::serialize(const Program::BinaryFieldOp &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.value, serializer); + serializer.decrease_container_depth(); +} - struct PedersenCommitment { - Program::HeapVector inputs; - Program::MemoryAddress domain_separator; - Program::HeapArray output; +template <> +template +Program::BinaryFieldOp serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::BinaryFieldOp obj; + obj.value = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; +} - friend bool operator==(const PedersenCommitment &, - const PedersenCommitment &); - std::vector bincodeSerialize() const; - static PedersenCommitment bincodeDeserialize(std::vector); - }; +namespace Program { - struct PedersenHash { - Program::HeapVector inputs; - Program::MemoryAddress domain_separator; - Program::MemoryAddress output; + inline bool operator==(const BinaryFieldOp::Add &lhs, const BinaryFieldOp::Add &rhs) { + return true; + } - friend bool operator==(const PedersenHash &, const PedersenHash &); - std::vector bincodeSerialize() const; - static PedersenHash bincodeDeserialize(std::vector); - }; + inline std::vector BinaryFieldOp::Add::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - struct FixedBaseScalarMul { - Program::MemoryAddress low; - Program::MemoryAddress high; - Program::HeapArray result; + inline BinaryFieldOp::Add BinaryFieldOp::Add::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } - friend bool operator==(const FixedBaseScalarMul &, - const FixedBaseScalarMul &); - std::vector bincodeSerialize() const; - static FixedBaseScalarMul bincodeDeserialize(std::vector); - }; +} // end of namespace Program - struct EmbeddedCurveAdd { - Program::MemoryAddress input1_x; - Program::MemoryAddress input1_y; - Program::MemoryAddress input2_x; - Program::MemoryAddress input2_y; - Program::HeapArray result; - - friend bool operator==(const EmbeddedCurveAdd &, - const EmbeddedCurveAdd &); - std::vector bincodeSerialize() const; - static EmbeddedCurveAdd bincodeDeserialize(std::vector); - }; +template <> +template +void serde::Serializable::serialize(const Program::BinaryFieldOp::Add &obj, Serializer &serializer) { +} - struct BigIntAdd { - Program::MemoryAddress lhs; - Program::MemoryAddress rhs; - Program::MemoryAddress output; +template <> +template +Program::BinaryFieldOp::Add serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryFieldOp::Add obj; + return obj; +} - friend bool operator==(const BigIntAdd &, const BigIntAdd &); - std::vector bincodeSerialize() const; - static BigIntAdd bincodeDeserialize(std::vector); - }; +namespace Program { - struct BigIntSub { - Program::MemoryAddress lhs; - Program::MemoryAddress rhs; - Program::MemoryAddress output; + inline bool operator==(const BinaryFieldOp::Sub &lhs, const BinaryFieldOp::Sub &rhs) { + return true; + } - friend bool operator==(const BigIntSub &, const BigIntSub &); - std::vector bincodeSerialize() const; - static BigIntSub bincodeDeserialize(std::vector); - }; + inline std::vector BinaryFieldOp::Sub::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - struct BigIntMul { - Program::MemoryAddress lhs; - Program::MemoryAddress rhs; - Program::MemoryAddress output; + inline BinaryFieldOp::Sub BinaryFieldOp::Sub::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } - friend bool operator==(const BigIntMul &, const BigIntMul &); - std::vector bincodeSerialize() const; - static BigIntMul bincodeDeserialize(std::vector); - }; +} // end of namespace Program - struct BigIntDiv { - Program::MemoryAddress lhs; - Program::MemoryAddress rhs; - Program::MemoryAddress output; +template <> +template +void serde::Serializable::serialize(const Program::BinaryFieldOp::Sub &obj, Serializer &serializer) { +} - friend bool operator==(const BigIntDiv &, const BigIntDiv &); - std::vector bincodeSerialize() const; - static BigIntDiv bincodeDeserialize(std::vector); - }; +template <> +template +Program::BinaryFieldOp::Sub serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryFieldOp::Sub obj; + return obj; +} - struct BigIntFromLeBytes { - Program::HeapVector inputs; - Program::HeapVector modulus; - Program::MemoryAddress output; +namespace Program { - friend bool operator==(const BigIntFromLeBytes &, - const BigIntFromLeBytes &); - std::vector bincodeSerialize() const; - static BigIntFromLeBytes bincodeDeserialize(std::vector); - }; + inline bool operator==(const BinaryFieldOp::Mul &lhs, const BinaryFieldOp::Mul &rhs) { + return true; + } - struct BigIntToLeBytes { - Program::MemoryAddress input; - Program::HeapVector output; + inline std::vector BinaryFieldOp::Mul::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - friend bool operator==(const BigIntToLeBytes &, const BigIntToLeBytes &); - std::vector bincodeSerialize() const; - static BigIntToLeBytes bincodeDeserialize(std::vector); - }; + inline BinaryFieldOp::Mul BinaryFieldOp::Mul::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } - struct Poseidon2Permutation { - Program::HeapVector message; - Program::HeapArray output; - Program::MemoryAddress len; +} // end of namespace Program - friend bool operator==(const Poseidon2Permutation &, - const Poseidon2Permutation &); - std::vector bincodeSerialize() const; - static Poseidon2Permutation bincodeDeserialize(std::vector); - }; +template <> +template +void serde::Serializable::serialize(const Program::BinaryFieldOp::Mul &obj, Serializer &serializer) { +} - struct Sha256Compression { - Program::HeapVector input; - Program::HeapVector hash_values; - Program::HeapArray output; +template <> +template +Program::BinaryFieldOp::Mul serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryFieldOp::Mul obj; + return obj; +} - friend bool operator==(const Sha256Compression &, - const Sha256Compression &); - std::vector bincodeSerialize() const; - static Sha256Compression bincodeDeserialize(std::vector); - }; +namespace Program { - std::variant - value; + inline bool operator==(const BinaryFieldOp::Div &lhs, const BinaryFieldOp::Div &rhs) { + return true; + } - friend bool operator==(const BlackBoxOp &, const BlackBoxOp &); - std::vector bincodeSerialize() const; - static BlackBoxOp bincodeDeserialize(std::vector); - }; + inline std::vector BinaryFieldOp::Div::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - struct HeapValueType; + inline BinaryFieldOp::Div BinaryFieldOp::Div::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } - struct HeapValueType { +} // end of namespace Program - struct Simple { - uint32_t value; +template <> +template +void serde::Serializable::serialize(const Program::BinaryFieldOp::Div &obj, Serializer &serializer) { +} - friend bool operator==(const Simple &, const Simple &); - std::vector bincodeSerialize() const; - static Simple bincodeDeserialize(std::vector); - }; +template <> +template +Program::BinaryFieldOp::Div serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryFieldOp::Div obj; + return obj; +} - struct Array { - std::vector value_types; - uint64_t size; +namespace Program { - friend bool operator==(const Array &, const Array &); - std::vector bincodeSerialize() const; - static Array bincodeDeserialize(std::vector); - }; + inline bool operator==(const BinaryFieldOp::IntegerDiv &lhs, const BinaryFieldOp::IntegerDiv &rhs) { + return true; + } - struct Vector { - std::vector value_types; + inline std::vector BinaryFieldOp::IntegerDiv::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - friend bool operator==(const Vector &, const Vector &); - std::vector bincodeSerialize() const; - static Vector bincodeDeserialize(std::vector); - }; + inline BinaryFieldOp::IntegerDiv BinaryFieldOp::IntegerDiv::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } - std::variant value; +} // end of namespace Program - friend bool operator==(const HeapValueType &, const HeapValueType &); - std::vector bincodeSerialize() const; - static HeapValueType bincodeDeserialize(std::vector); - }; +template <> +template +void serde::Serializable::serialize(const Program::BinaryFieldOp::IntegerDiv &obj, Serializer &serializer) { +} + +template <> +template +Program::BinaryFieldOp::IntegerDiv serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryFieldOp::IntegerDiv obj; + return obj; +} + +namespace Program { + + inline bool operator==(const BinaryFieldOp::Equals &lhs, const BinaryFieldOp::Equals &rhs) { + return true; + } + + inline std::vector BinaryFieldOp::Equals::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BinaryFieldOp::Equals BinaryFieldOp::Equals::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::BinaryFieldOp::Equals &obj, Serializer &serializer) { +} + +template <> +template +Program::BinaryFieldOp::Equals serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryFieldOp::Equals obj; + return obj; +} + +namespace Program { + + inline bool operator==(const BinaryFieldOp::LessThan &lhs, const BinaryFieldOp::LessThan &rhs) { + return true; + } + + inline std::vector BinaryFieldOp::LessThan::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BinaryFieldOp::LessThan BinaryFieldOp::LessThan::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::BinaryFieldOp::LessThan &obj, Serializer &serializer) { +} + +template <> +template +Program::BinaryFieldOp::LessThan serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryFieldOp::LessThan obj; + return obj; +} + +namespace Program { + + inline bool operator==(const BinaryFieldOp::LessThanEquals &lhs, const BinaryFieldOp::LessThanEquals &rhs) { + return true; + } + + inline std::vector BinaryFieldOp::LessThanEquals::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BinaryFieldOp::LessThanEquals BinaryFieldOp::LessThanEquals::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::BinaryFieldOp::LessThanEquals &obj, Serializer &serializer) { +} + +template <> +template +Program::BinaryFieldOp::LessThanEquals serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryFieldOp::LessThanEquals obj; + return obj; +} + +namespace Program { + + inline bool operator==(const BinaryIntOp &lhs, const BinaryIntOp &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } + + inline std::vector BinaryIntOp::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BinaryIntOp BinaryIntOp::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::BinaryIntOp &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.value, serializer); + serializer.decrease_container_depth(); +} + +template <> +template +Program::BinaryIntOp serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::BinaryIntOp obj; + obj.value = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; +} + +namespace Program { + + inline bool operator==(const BinaryIntOp::Add &lhs, const BinaryIntOp::Add &rhs) { + return true; + } + + inline std::vector BinaryIntOp::Add::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BinaryIntOp::Add BinaryIntOp::Add::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::BinaryIntOp::Add &obj, Serializer &serializer) { +} + +template <> +template +Program::BinaryIntOp::Add serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryIntOp::Add obj; + return obj; +} + +namespace Program { + + inline bool operator==(const BinaryIntOp::Sub &lhs, const BinaryIntOp::Sub &rhs) { + return true; + } + + inline std::vector BinaryIntOp::Sub::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BinaryIntOp::Sub BinaryIntOp::Sub::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::BinaryIntOp::Sub &obj, Serializer &serializer) { +} + +template <> +template +Program::BinaryIntOp::Sub serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryIntOp::Sub obj; + return obj; +} + +namespace Program { + + inline bool operator==(const BinaryIntOp::Mul &lhs, const BinaryIntOp::Mul &rhs) { + return true; + } + + inline std::vector BinaryIntOp::Mul::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BinaryIntOp::Mul BinaryIntOp::Mul::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::BinaryIntOp::Mul &obj, Serializer &serializer) { +} + +template <> +template +Program::BinaryIntOp::Mul serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryIntOp::Mul obj; + return obj; +} + +namespace Program { + + inline bool operator==(const BinaryIntOp::Div &lhs, const BinaryIntOp::Div &rhs) { + return true; + } + + inline std::vector BinaryIntOp::Div::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BinaryIntOp::Div BinaryIntOp::Div::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::BinaryIntOp::Div &obj, Serializer &serializer) { +} + +template <> +template +Program::BinaryIntOp::Div serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryIntOp::Div obj; + return obj; +} + +namespace Program { + + inline bool operator==(const BinaryIntOp::Equals &lhs, const BinaryIntOp::Equals &rhs) { + return true; + } + + inline std::vector BinaryIntOp::Equals::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BinaryIntOp::Equals BinaryIntOp::Equals::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::BinaryIntOp::Equals &obj, Serializer &serializer) { +} + +template <> +template +Program::BinaryIntOp::Equals serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryIntOp::Equals obj; + return obj; +} + +namespace Program { + + inline bool operator==(const BinaryIntOp::LessThan &lhs, const BinaryIntOp::LessThan &rhs) { + return true; + } + + inline std::vector BinaryIntOp::LessThan::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BinaryIntOp::LessThan BinaryIntOp::LessThan::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::BinaryIntOp::LessThan &obj, Serializer &serializer) { +} + +template <> +template +Program::BinaryIntOp::LessThan serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryIntOp::LessThan obj; + return obj; +} + +namespace Program { + + inline bool operator==(const BinaryIntOp::LessThanEquals &lhs, const BinaryIntOp::LessThanEquals &rhs) { + return true; + } + + inline std::vector BinaryIntOp::LessThanEquals::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BinaryIntOp::LessThanEquals BinaryIntOp::LessThanEquals::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::BinaryIntOp::LessThanEquals &obj, Serializer &serializer) { +} + +template <> +template +Program::BinaryIntOp::LessThanEquals serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryIntOp::LessThanEquals obj; + return obj; +} + +namespace Program { + + inline bool operator==(const BinaryIntOp::And &lhs, const BinaryIntOp::And &rhs) { + return true; + } + + inline std::vector BinaryIntOp::And::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BinaryIntOp::And BinaryIntOp::And::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::BinaryIntOp::And &obj, Serializer &serializer) { +} + +template <> +template +Program::BinaryIntOp::And serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryIntOp::And obj; + return obj; +} + +namespace Program { + + inline bool operator==(const BinaryIntOp::Or &lhs, const BinaryIntOp::Or &rhs) { + return true; + } + + inline std::vector BinaryIntOp::Or::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BinaryIntOp::Or BinaryIntOp::Or::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::BinaryIntOp::Or &obj, Serializer &serializer) { +} + +template <> +template +Program::BinaryIntOp::Or serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryIntOp::Or obj; + return obj; +} + +namespace Program { + + inline bool operator==(const BinaryIntOp::Xor &lhs, const BinaryIntOp::Xor &rhs) { + return true; + } + + inline std::vector BinaryIntOp::Xor::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BinaryIntOp::Xor BinaryIntOp::Xor::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::BinaryIntOp::Xor &obj, Serializer &serializer) { +} + +template <> +template +Program::BinaryIntOp::Xor serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryIntOp::Xor obj; + return obj; +} + +namespace Program { + + inline bool operator==(const BinaryIntOp::Shl &lhs, const BinaryIntOp::Shl &rhs) { + return true; + } + + inline std::vector BinaryIntOp::Shl::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BinaryIntOp::Shl BinaryIntOp::Shl::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::BinaryIntOp::Shl &obj, Serializer &serializer) { +} + +template <> +template +Program::BinaryIntOp::Shl serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryIntOp::Shl obj; + return obj; +} + +namespace Program { + + inline bool operator==(const BinaryIntOp::Shr &lhs, const BinaryIntOp::Shr &rhs) { + return true; + } + + inline std::vector BinaryIntOp::Shr::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BinaryIntOp::Shr BinaryIntOp::Shr::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::BinaryIntOp::Shr &obj, Serializer &serializer) { +} + +template <> +template +Program::BinaryIntOp::Shr serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryIntOp::Shr obj; + return obj; +} + +namespace Program { + + inline bool operator==(const BlackBoxFuncCall &lhs, const BlackBoxFuncCall &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } + + inline std::vector BlackBoxFuncCall::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BlackBoxFuncCall BlackBoxFuncCall::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::BlackBoxFuncCall &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.value, serializer); + serializer.decrease_container_depth(); +} + +template <> +template +Program::BlackBoxFuncCall serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::BlackBoxFuncCall obj; + obj.value = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; +} + +namespace Program { + + inline bool operator==(const BlackBoxFuncCall::AND &lhs, const BlackBoxFuncCall::AND &rhs) { + if (!(lhs.lhs == rhs.lhs)) { return false; } + if (!(lhs.rhs == rhs.rhs)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } + + inline std::vector BlackBoxFuncCall::AND::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BlackBoxFuncCall::AND BlackBoxFuncCall::AND::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::AND &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.lhs, serializer); + serde::Serializable::serialize(obj.rhs, serializer); + serde::Serializable::serialize(obj.output, serializer); +} + +template <> +template +Program::BlackBoxFuncCall::AND serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::AND obj; + obj.lhs = serde::Deserializable::deserialize(deserializer); + obj.rhs = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; +} + +namespace Program { + + inline bool operator==(const BlackBoxFuncCall::XOR &lhs, const BlackBoxFuncCall::XOR &rhs) { + if (!(lhs.lhs == rhs.lhs)) { return false; } + if (!(lhs.rhs == rhs.rhs)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } + + inline std::vector BlackBoxFuncCall::XOR::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BlackBoxFuncCall::XOR BlackBoxFuncCall::XOR::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::XOR &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.lhs, serializer); + serde::Serializable::serialize(obj.rhs, serializer); + serde::Serializable::serialize(obj.output, serializer); +} + +template <> +template +Program::BlackBoxFuncCall::XOR serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::XOR obj; + obj.lhs = serde::Deserializable::deserialize(deserializer); + obj.rhs = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; +} + +namespace Program { + + inline bool operator==(const BlackBoxFuncCall::RANGE &lhs, const BlackBoxFuncCall::RANGE &rhs) { + if (!(lhs.input == rhs.input)) { return false; } + return true; + } + + inline std::vector BlackBoxFuncCall::RANGE::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BlackBoxFuncCall::RANGE BlackBoxFuncCall::RANGE::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::RANGE &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.input, serializer); +} + +template <> +template +Program::BlackBoxFuncCall::RANGE serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::RANGE obj; + obj.input = serde::Deserializable::deserialize(deserializer); + return obj; +} + +namespace Program { + + inline bool operator==(const BlackBoxFuncCall::Blake2s &lhs, const BlackBoxFuncCall::Blake2s &rhs) { + if (!(lhs.inputs == rhs.inputs)) { return false; } + if (!(lhs.outputs == rhs.outputs)) { return false; } + return true; + } + + inline std::vector BlackBoxFuncCall::Blake2s::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BlackBoxFuncCall::Blake2s BlackBoxFuncCall::Blake2s::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::Blake2s &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.inputs, serializer); + serde::Serializable::serialize(obj.outputs, serializer); +} + +template <> +template +Program::BlackBoxFuncCall::Blake2s serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::Blake2s obj; + obj.inputs = serde::Deserializable::deserialize(deserializer); + obj.outputs = serde::Deserializable::deserialize(deserializer); + return obj; +} + +namespace Program { + + inline bool operator==(const BlackBoxFuncCall::Blake3 &lhs, const BlackBoxFuncCall::Blake3 &rhs) { + if (!(lhs.inputs == rhs.inputs)) { return false; } + if (!(lhs.outputs == rhs.outputs)) { return false; } + return true; + } + + inline std::vector BlackBoxFuncCall::Blake3::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BlackBoxFuncCall::Blake3 BlackBoxFuncCall::Blake3::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::Blake3 &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.inputs, serializer); + serde::Serializable::serialize(obj.outputs, serializer); +} + +template <> +template +Program::BlackBoxFuncCall::Blake3 serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::Blake3 obj; + obj.inputs = serde::Deserializable::deserialize(deserializer); + obj.outputs = serde::Deserializable::deserialize(deserializer); + return obj; +} + +namespace Program { + + inline bool operator==(const BlackBoxFuncCall::SchnorrVerify &lhs, const BlackBoxFuncCall::SchnorrVerify &rhs) { + if (!(lhs.public_key_x == rhs.public_key_x)) { return false; } + if (!(lhs.public_key_y == rhs.public_key_y)) { return false; } + if (!(lhs.signature == rhs.signature)) { return false; } + if (!(lhs.message == rhs.message)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } + + inline std::vector BlackBoxFuncCall::SchnorrVerify::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BlackBoxFuncCall::SchnorrVerify BlackBoxFuncCall::SchnorrVerify::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::SchnorrVerify &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.public_key_x, serializer); + serde::Serializable::serialize(obj.public_key_y, serializer); + serde::Serializable::serialize(obj.signature, serializer); + serde::Serializable::serialize(obj.message, serializer); + serde::Serializable::serialize(obj.output, serializer); +} + +template <> +template +Program::BlackBoxFuncCall::SchnorrVerify serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::SchnorrVerify obj; + obj.public_key_x = serde::Deserializable::deserialize(deserializer); + obj.public_key_y = serde::Deserializable::deserialize(deserializer); + obj.signature = serde::Deserializable::deserialize(deserializer); + obj.message = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; +} + +namespace Program { + + inline bool operator==(const BlackBoxFuncCall::PedersenCommitment &lhs, const BlackBoxFuncCall::PedersenCommitment &rhs) { + if (!(lhs.inputs == rhs.inputs)) { return false; } + if (!(lhs.domain_separator == rhs.domain_separator)) { return false; } + if (!(lhs.outputs == rhs.outputs)) { return false; } + return true; + } + + inline std::vector BlackBoxFuncCall::PedersenCommitment::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BlackBoxFuncCall::PedersenCommitment BlackBoxFuncCall::PedersenCommitment::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::PedersenCommitment &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.inputs, serializer); + serde::Serializable::serialize(obj.domain_separator, serializer); + serde::Serializable::serialize(obj.outputs, serializer); +} + +template <> +template +Program::BlackBoxFuncCall::PedersenCommitment serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::PedersenCommitment obj; + obj.inputs = serde::Deserializable::deserialize(deserializer); + obj.domain_separator = serde::Deserializable::deserialize(deserializer); + obj.outputs = serde::Deserializable::deserialize(deserializer); + return obj; +} + +namespace Program { + + inline bool operator==(const BlackBoxFuncCall::PedersenHash &lhs, const BlackBoxFuncCall::PedersenHash &rhs) { + if (!(lhs.inputs == rhs.inputs)) { return false; } + if (!(lhs.domain_separator == rhs.domain_separator)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } + + inline std::vector BlackBoxFuncCall::PedersenHash::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BlackBoxFuncCall::PedersenHash BlackBoxFuncCall::PedersenHash::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::PedersenHash &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.inputs, serializer); + serde::Serializable::serialize(obj.domain_separator, serializer); + serde::Serializable::serialize(obj.output, serializer); +} + +template <> +template +Program::BlackBoxFuncCall::PedersenHash serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::PedersenHash obj; + obj.inputs = serde::Deserializable::deserialize(deserializer); + obj.domain_separator = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; +} + +namespace Program { + + inline bool operator==(const BlackBoxFuncCall::EcdsaSecp256k1 &lhs, const BlackBoxFuncCall::EcdsaSecp256k1 &rhs) { + if (!(lhs.public_key_x == rhs.public_key_x)) { return false; } + if (!(lhs.public_key_y == rhs.public_key_y)) { return false; } + if (!(lhs.signature == rhs.signature)) { return false; } + if (!(lhs.hashed_message == rhs.hashed_message)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } + + inline std::vector BlackBoxFuncCall::EcdsaSecp256k1::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BlackBoxFuncCall::EcdsaSecp256k1 BlackBoxFuncCall::EcdsaSecp256k1::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::EcdsaSecp256k1 &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.public_key_x, serializer); + serde::Serializable::serialize(obj.public_key_y, serializer); + serde::Serializable::serialize(obj.signature, serializer); + serde::Serializable::serialize(obj.hashed_message, serializer); + serde::Serializable::serialize(obj.output, serializer); +} + +template <> +template +Program::BlackBoxFuncCall::EcdsaSecp256k1 serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::EcdsaSecp256k1 obj; + obj.public_key_x = serde::Deserializable::deserialize(deserializer); + obj.public_key_y = serde::Deserializable::deserialize(deserializer); + obj.signature = serde::Deserializable::deserialize(deserializer); + obj.hashed_message = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; +} + +namespace Program { + + inline bool operator==(const BlackBoxFuncCall::EcdsaSecp256r1 &lhs, const BlackBoxFuncCall::EcdsaSecp256r1 &rhs) { + if (!(lhs.public_key_x == rhs.public_key_x)) { return false; } + if (!(lhs.public_key_y == rhs.public_key_y)) { return false; } + if (!(lhs.signature == rhs.signature)) { return false; } + if (!(lhs.hashed_message == rhs.hashed_message)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } + + inline std::vector BlackBoxFuncCall::EcdsaSecp256r1::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BlackBoxFuncCall::EcdsaSecp256r1 BlackBoxFuncCall::EcdsaSecp256r1::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::EcdsaSecp256r1 &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.public_key_x, serializer); + serde::Serializable::serialize(obj.public_key_y, serializer); + serde::Serializable::serialize(obj.signature, serializer); + serde::Serializable::serialize(obj.hashed_message, serializer); + serde::Serializable::serialize(obj.output, serializer); +} + +template <> +template +Program::BlackBoxFuncCall::EcdsaSecp256r1 serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::EcdsaSecp256r1 obj; + obj.public_key_x = serde::Deserializable::deserialize(deserializer); + obj.public_key_y = serde::Deserializable::deserialize(deserializer); + obj.signature = serde::Deserializable::deserialize(deserializer); + obj.hashed_message = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; +} + +namespace Program { + + inline bool operator==(const BlackBoxFuncCall::FixedBaseScalarMul &lhs, const BlackBoxFuncCall::FixedBaseScalarMul &rhs) { + if (!(lhs.low == rhs.low)) { return false; } + if (!(lhs.high == rhs.high)) { return false; } + if (!(lhs.outputs == rhs.outputs)) { return false; } + return true; + } + + inline std::vector BlackBoxFuncCall::FixedBaseScalarMul::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BlackBoxFuncCall::FixedBaseScalarMul BlackBoxFuncCall::FixedBaseScalarMul::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::FixedBaseScalarMul &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.low, serializer); + serde::Serializable::serialize(obj.high, serializer); + serde::Serializable::serialize(obj.outputs, serializer); +} + +template <> +template +Program::BlackBoxFuncCall::FixedBaseScalarMul serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::FixedBaseScalarMul obj; + obj.low = serde::Deserializable::deserialize(deserializer); + obj.high = serde::Deserializable::deserialize(deserializer); + obj.outputs = serde::Deserializable::deserialize(deserializer); + return obj; +} + +namespace Program { + + inline bool operator==(const BlackBoxFuncCall::EmbeddedCurveAdd &lhs, const BlackBoxFuncCall::EmbeddedCurveAdd &rhs) { + if (!(lhs.input1_x == rhs.input1_x)) { return false; } + if (!(lhs.input1_y == rhs.input1_y)) { return false; } + if (!(lhs.input2_x == rhs.input2_x)) { return false; } + if (!(lhs.input2_y == rhs.input2_y)) { return false; } + if (!(lhs.outputs == rhs.outputs)) { return false; } + return true; + } + + inline std::vector BlackBoxFuncCall::EmbeddedCurveAdd::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BlackBoxFuncCall::EmbeddedCurveAdd BlackBoxFuncCall::EmbeddedCurveAdd::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::EmbeddedCurveAdd &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.input1_x, serializer); + serde::Serializable::serialize(obj.input1_y, serializer); + serde::Serializable::serialize(obj.input2_x, serializer); + serde::Serializable::serialize(obj.input2_y, serializer); + serde::Serializable::serialize(obj.outputs, serializer); +} + +template <> +template +Program::BlackBoxFuncCall::EmbeddedCurveAdd serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::EmbeddedCurveAdd obj; + obj.input1_x = serde::Deserializable::deserialize(deserializer); + obj.input1_y = serde::Deserializable::deserialize(deserializer); + obj.input2_x = serde::Deserializable::deserialize(deserializer); + obj.input2_y = serde::Deserializable::deserialize(deserializer); + obj.outputs = serde::Deserializable::deserialize(deserializer); + return obj; +} + +namespace Program { + + inline bool operator==(const BlackBoxFuncCall::Keccak256 &lhs, const BlackBoxFuncCall::Keccak256 &rhs) { + if (!(lhs.inputs == rhs.inputs)) { return false; } + if (!(lhs.var_message_size == rhs.var_message_size)) { return false; } + if (!(lhs.outputs == rhs.outputs)) { return false; } + return true; + } + + inline std::vector BlackBoxFuncCall::Keccak256::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BlackBoxFuncCall::Keccak256 BlackBoxFuncCall::Keccak256::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::Keccak256 &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.inputs, serializer); + serde::Serializable::serialize(obj.var_message_size, serializer); + serde::Serializable::serialize(obj.outputs, serializer); +} + +template <> +template +Program::BlackBoxFuncCall::Keccak256 serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::Keccak256 obj; + obj.inputs = serde::Deserializable::deserialize(deserializer); + obj.var_message_size = serde::Deserializable::deserialize(deserializer); + obj.outputs = serde::Deserializable::deserialize(deserializer); + return obj; +} + +namespace Program { + + inline bool operator==(const BlackBoxFuncCall::Keccakf1600 &lhs, const BlackBoxFuncCall::Keccakf1600 &rhs) { + if (!(lhs.inputs == rhs.inputs)) { return false; } + if (!(lhs.outputs == rhs.outputs)) { return false; } + return true; + } + + inline std::vector BlackBoxFuncCall::Keccakf1600::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BlackBoxFuncCall::Keccakf1600 BlackBoxFuncCall::Keccakf1600::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::Keccakf1600 &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.inputs, serializer); + serde::Serializable::serialize(obj.outputs, serializer); +} + +template <> +template +Program::BlackBoxFuncCall::Keccakf1600 serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::Keccakf1600 obj; + obj.inputs = serde::Deserializable::deserialize(deserializer); + obj.outputs = serde::Deserializable::deserialize(deserializer); + return obj; +} + +namespace Program { + + inline bool operator==(const BlackBoxFuncCall::RecursiveAggregation &lhs, const BlackBoxFuncCall::RecursiveAggregation &rhs) { + if (!(lhs.verification_key == rhs.verification_key)) { return false; } + if (!(lhs.proof == rhs.proof)) { return false; } + if (!(lhs.public_inputs == rhs.public_inputs)) { return false; } + if (!(lhs.key_hash == rhs.key_hash)) { return false; } + return true; + } + + inline std::vector BlackBoxFuncCall::RecursiveAggregation::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BlackBoxFuncCall::RecursiveAggregation BlackBoxFuncCall::RecursiveAggregation::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::RecursiveAggregation &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.verification_key, serializer); + serde::Serializable::serialize(obj.proof, serializer); + serde::Serializable::serialize(obj.public_inputs, serializer); + serde::Serializable::serialize(obj.key_hash, serializer); +} + +template <> +template +Program::BlackBoxFuncCall::RecursiveAggregation serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::RecursiveAggregation obj; + obj.verification_key = serde::Deserializable::deserialize(deserializer); + obj.proof = serde::Deserializable::deserialize(deserializer); + obj.public_inputs = serde::Deserializable::deserialize(deserializer); + obj.key_hash = serde::Deserializable::deserialize(deserializer); + return obj; +} + +namespace Program { + + inline bool operator==(const BlackBoxFuncCall::BigIntAdd &lhs, const BlackBoxFuncCall::BigIntAdd &rhs) { + if (!(lhs.lhs == rhs.lhs)) { return false; } + if (!(lhs.rhs == rhs.rhs)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } + + inline std::vector BlackBoxFuncCall::BigIntAdd::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BlackBoxFuncCall::BigIntAdd BlackBoxFuncCall::BigIntAdd::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::BigIntAdd &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.lhs, serializer); + serde::Serializable::serialize(obj.rhs, serializer); + serde::Serializable::serialize(obj.output, serializer); +} + +template <> +template +Program::BlackBoxFuncCall::BigIntAdd serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::BigIntAdd obj; + obj.lhs = serde::Deserializable::deserialize(deserializer); + obj.rhs = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; +} + +namespace Program { + + inline bool operator==(const BlackBoxFuncCall::BigIntSub &lhs, const BlackBoxFuncCall::BigIntSub &rhs) { + if (!(lhs.lhs == rhs.lhs)) { return false; } + if (!(lhs.rhs == rhs.rhs)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } + + inline std::vector BlackBoxFuncCall::BigIntSub::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BlackBoxFuncCall::BigIntSub BlackBoxFuncCall::BigIntSub::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::BigIntSub &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.lhs, serializer); + serde::Serializable::serialize(obj.rhs, serializer); + serde::Serializable::serialize(obj.output, serializer); +} + +template <> +template +Program::BlackBoxFuncCall::BigIntSub serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::BigIntSub obj; + obj.lhs = serde::Deserializable::deserialize(deserializer); + obj.rhs = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; +} + +namespace Program { + + inline bool operator==(const BlackBoxFuncCall::BigIntMul &lhs, const BlackBoxFuncCall::BigIntMul &rhs) { + if (!(lhs.lhs == rhs.lhs)) { return false; } + if (!(lhs.rhs == rhs.rhs)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } + + inline std::vector BlackBoxFuncCall::BigIntMul::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BlackBoxFuncCall::BigIntMul BlackBoxFuncCall::BigIntMul::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::BigIntMul &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.lhs, serializer); + serde::Serializable::serialize(obj.rhs, serializer); + serde::Serializable::serialize(obj.output, serializer); +} + +template <> +template +Program::BlackBoxFuncCall::BigIntMul serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::BigIntMul obj; + obj.lhs = serde::Deserializable::deserialize(deserializer); + obj.rhs = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; +} + +namespace Program { + + inline bool operator==(const BlackBoxFuncCall::BigIntDiv &lhs, const BlackBoxFuncCall::BigIntDiv &rhs) { + if (!(lhs.lhs == rhs.lhs)) { return false; } + if (!(lhs.rhs == rhs.rhs)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } + + inline std::vector BlackBoxFuncCall::BigIntDiv::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BlackBoxFuncCall::BigIntDiv BlackBoxFuncCall::BigIntDiv::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::BigIntDiv &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.lhs, serializer); + serde::Serializable::serialize(obj.rhs, serializer); + serde::Serializable::serialize(obj.output, serializer); +} + +template <> +template +Program::BlackBoxFuncCall::BigIntDiv serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::BigIntDiv obj; + obj.lhs = serde::Deserializable::deserialize(deserializer); + obj.rhs = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; +} + +namespace Program { + + inline bool operator==(const BlackBoxFuncCall::BigIntFromLeBytes &lhs, const BlackBoxFuncCall::BigIntFromLeBytes &rhs) { + if (!(lhs.inputs == rhs.inputs)) { return false; } + if (!(lhs.modulus == rhs.modulus)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } + + inline std::vector BlackBoxFuncCall::BigIntFromLeBytes::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BlackBoxFuncCall::BigIntFromLeBytes BlackBoxFuncCall::BigIntFromLeBytes::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::BigIntFromLeBytes &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.inputs, serializer); + serde::Serializable::serialize(obj.modulus, serializer); + serde::Serializable::serialize(obj.output, serializer); +} - struct ValueOrArray { +template <> +template +Program::BlackBoxFuncCall::BigIntFromLeBytes serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::BigIntFromLeBytes obj; + obj.inputs = serde::Deserializable::deserialize(deserializer); + obj.modulus = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; +} - struct MemoryAddress { - Program::MemoryAddress value; +namespace Program { - friend bool operator==(const MemoryAddress &, const MemoryAddress &); - std::vector bincodeSerialize() const; - static MemoryAddress bincodeDeserialize(std::vector); - }; + inline bool operator==(const BlackBoxFuncCall::BigIntToLeBytes &lhs, const BlackBoxFuncCall::BigIntToLeBytes &rhs) { + if (!(lhs.input == rhs.input)) { return false; } + if (!(lhs.outputs == rhs.outputs)) { return false; } + return true; + } - struct HeapArray { - Program::HeapArray value; + inline std::vector BlackBoxFuncCall::BigIntToLeBytes::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - friend bool operator==(const HeapArray &, const HeapArray &); - std::vector bincodeSerialize() const; - static HeapArray bincodeDeserialize(std::vector); - }; + inline BlackBoxFuncCall::BigIntToLeBytes BlackBoxFuncCall::BigIntToLeBytes::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } - struct HeapVector { - Program::HeapVector value; +} // end of namespace Program - friend bool operator==(const HeapVector &, const HeapVector &); - std::vector bincodeSerialize() const; - static HeapVector bincodeDeserialize(std::vector); - }; +template <> +template +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::BigIntToLeBytes &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.input, serializer); + serde::Serializable::serialize(obj.outputs, serializer); +} - std::variant value; +template <> +template +Program::BlackBoxFuncCall::BigIntToLeBytes serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::BigIntToLeBytes obj; + obj.input = serde::Deserializable::deserialize(deserializer); + obj.outputs = serde::Deserializable::deserialize(deserializer); + return obj; +} - friend bool operator==(const ValueOrArray &, const ValueOrArray &); - std::vector bincodeSerialize() const; - static ValueOrArray bincodeDeserialize(std::vector); - }; +namespace Program { - struct BrilligOpcode { + inline bool operator==(const BlackBoxFuncCall::Poseidon2Permutation &lhs, const BlackBoxFuncCall::Poseidon2Permutation &rhs) { + if (!(lhs.inputs == rhs.inputs)) { return false; } + if (!(lhs.outputs == rhs.outputs)) { return false; } + if (!(lhs.len == rhs.len)) { return false; } + return true; + } - struct BinaryFieldOp { - Program::MemoryAddress destination; - Program::BinaryFieldOp op; - Program::MemoryAddress lhs; - Program::MemoryAddress rhs; - - friend bool operator==(const BinaryFieldOp &, const BinaryFieldOp &); - std::vector bincodeSerialize() const; - static BinaryFieldOp bincodeDeserialize(std::vector); - }; + inline std::vector BlackBoxFuncCall::Poseidon2Permutation::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - struct BinaryIntOp { - Program::MemoryAddress destination; - Program::BinaryIntOp op; - uint32_t bit_size; - Program::MemoryAddress lhs; - Program::MemoryAddress rhs; - - friend bool operator==(const BinaryIntOp &, const BinaryIntOp &); - std::vector bincodeSerialize() const; - static BinaryIntOp bincodeDeserialize(std::vector); - }; + inline BlackBoxFuncCall::Poseidon2Permutation BlackBoxFuncCall::Poseidon2Permutation::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } - struct Cast { - Program::MemoryAddress destination; - Program::MemoryAddress source; - uint32_t bit_size; +} // end of namespace Program - friend bool operator==(const Cast &, const Cast &); - std::vector bincodeSerialize() const; - static Cast bincodeDeserialize(std::vector); - }; +template <> +template +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::Poseidon2Permutation &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.inputs, serializer); + serde::Serializable::serialize(obj.outputs, serializer); + serde::Serializable::serialize(obj.len, serializer); +} - struct JumpIfNot { - Program::MemoryAddress condition; - uint64_t location; +template <> +template +Program::BlackBoxFuncCall::Poseidon2Permutation serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::Poseidon2Permutation obj; + obj.inputs = serde::Deserializable::deserialize(deserializer); + obj.outputs = serde::Deserializable::deserialize(deserializer); + obj.len = serde::Deserializable::deserialize(deserializer); + return obj; +} - struct BinaryFieldOp { - Program::MemoryAddress destination; - Program::BinaryFieldOp op; - Program::MemoryAddress lhs; - Program::MemoryAddress rhs; +namespace Program { - friend bool operator==(const BinaryFieldOp &, const BinaryFieldOp &); - std::vector bincodeSerialize() const; - static BinaryFieldOp bincodeDeserialize(std::vector); - }; + inline bool operator==(const BlackBoxFuncCall::Sha256Compression &lhs, const BlackBoxFuncCall::Sha256Compression &rhs) { + if (!(lhs.inputs == rhs.inputs)) { return false; } + if (!(lhs.hash_values == rhs.hash_values)) { return false; } + if (!(lhs.outputs == rhs.outputs)) { return false; } + return true; + } - struct BinaryIntOp { - Program::MemoryAddress destination; - Program::BinaryIntOp op; - uint32_t bit_size; - Program::MemoryAddress lhs; - Program::MemoryAddress rhs; + inline std::vector BlackBoxFuncCall::Sha256Compression::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - friend bool operator==(const BinaryIntOp &, const BinaryIntOp &); - std::vector bincodeSerialize() const; - static BinaryIntOp bincodeDeserialize(std::vector); - }; + inline BlackBoxFuncCall::Sha256Compression BlackBoxFuncCall::Sha256Compression::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } - struct Cast { - Program::MemoryAddress destination; - Program::MemoryAddress source; - uint32_t bit_size; +} // end of namespace Program - friend bool operator==(const Cast &, const Cast &); - std::vector bincodeSerialize() const; - static Cast bincodeDeserialize(std::vector); - }; +template <> +template +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::Sha256Compression &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.inputs, serializer); + serde::Serializable::serialize(obj.hash_values, serializer); + serde::Serializable::serialize(obj.outputs, serializer); +} - struct JumpIfNot { - Program::MemoryAddress condition; - uint64_t location; +template <> +template +Program::BlackBoxFuncCall::Sha256Compression serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::Sha256Compression obj; + obj.inputs = serde::Deserializable::deserialize(deserializer); + obj.hash_values = serde::Deserializable::deserialize(deserializer); + obj.outputs = serde::Deserializable::deserialize(deserializer); + return obj; +} - friend bool operator==(const JumpIfNot &, const JumpIfNot &); - std::vector bincodeSerialize() const; - static JumpIfNot bincodeDeserialize(std::vector); - }; +namespace Program { - struct JumpIf { - Program::MemoryAddress condition; - uint64_t location; + inline bool operator==(const BlackBoxOp &lhs, const BlackBoxOp &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } - friend bool operator==(const JumpIf &, const JumpIf &); - std::vector bincodeSerialize() const; - static JumpIf bincodeDeserialize(std::vector); - }; + inline std::vector BlackBoxOp::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - struct Jump { - uint64_t location; + inline BlackBoxOp BlackBoxOp::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } - friend bool operator==(const Jump &, const Jump &); - std::vector bincodeSerialize() const; - static Jump bincodeDeserialize(std::vector); - }; +} // end of namespace Program - struct CalldataCopy { - Program::MemoryAddress destination_address; - uint64_t size; - uint64_t offset; +template <> +template +void serde::Serializable::serialize(const Program::BlackBoxOp &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.value, serializer); + serializer.decrease_container_depth(); +} - friend bool operator==(const CalldataCopy &, const CalldataCopy &); - std::vector bincodeSerialize() const; - static CalldataCopy bincodeDeserialize(std::vector); - }; +template <> +template +Program::BlackBoxOp serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::BlackBoxOp obj; + obj.value = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; +} - struct Call { - uint64_t location; +namespace Program { - friend bool operator==(const Call &, const Call &); - std::vector bincodeSerialize() const; - static Call bincodeDeserialize(std::vector); - }; + inline bool operator==(const BlackBoxOp::Blake2s &lhs, const BlackBoxOp::Blake2s &rhs) { + if (!(lhs.message == rhs.message)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } - struct Const { - Program::MemoryAddress destination; - uint32_t bit_size; - std::string value; + inline std::vector BlackBoxOp::Blake2s::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - friend bool operator==(const Const &, const Const &); - std::vector bincodeSerialize() const; - static Const bincodeDeserialize(std::vector); - }; + inline BlackBoxOp::Blake2s BlackBoxOp::Blake2s::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } - struct Return { - friend bool operator==(const Return &, const Return &); - std::vector bincodeSerialize() const; - static Return bincodeDeserialize(std::vector); - }; +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::BlackBoxOp::Blake2s &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.message, serializer); + serde::Serializable::serialize(obj.output, serializer); +} - struct ForeignCall { - std::string function; - std::vector destinations; - std::vector destination_value_types; - std::vector inputs; - std::vector input_value_types; +template <> +template +Program::BlackBoxOp::Blake2s serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxOp::Blake2s obj; + obj.message = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; +} - friend bool operator==(const ForeignCall &, const ForeignCall &); - std::vector bincodeSerialize() const; - static ForeignCall bincodeDeserialize(std::vector); - }; +namespace Program { - struct Mov { - Program::MemoryAddress destination; - Program::MemoryAddress source; + inline bool operator==(const BlackBoxOp::Blake3 &lhs, const BlackBoxOp::Blake3 &rhs) { + if (!(lhs.message == rhs.message)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } - friend bool operator==(const Mov &, const Mov &); - std::vector bincodeSerialize() const; - static Mov bincodeDeserialize(std::vector); - }; + inline std::vector BlackBoxOp::Blake3::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - struct ConditionalMov { - Program::MemoryAddress destination; - Program::MemoryAddress source_a; - Program::MemoryAddress source_b; - Program::MemoryAddress condition; + inline BlackBoxOp::Blake3 BlackBoxOp::Blake3::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } - friend bool operator==(const ConditionalMov &, const ConditionalMov &); - std::vector bincodeSerialize() const; - static ConditionalMov bincodeDeserialize(std::vector); - }; +} // end of namespace Program - struct Load { - Program::MemoryAddress destination; - Program::MemoryAddress source_pointer; +template <> +template +void serde::Serializable::serialize(const Program::BlackBoxOp::Blake3 &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.message, serializer); + serde::Serializable::serialize(obj.output, serializer); +} - friend bool operator==(const Load &, const Load &); - std::vector bincodeSerialize() const; - static Load bincodeDeserialize(std::vector); - }; +template <> +template +Program::BlackBoxOp::Blake3 serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxOp::Blake3 obj; + obj.message = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; +} - struct Store { - Program::MemoryAddress destination_pointer; - Program::MemoryAddress source; +namespace Program { - friend bool operator==(const Store &, const Store &); - std::vector bincodeSerialize() const; - static Store bincodeDeserialize(std::vector); - }; + inline bool operator==(const BlackBoxOp::Keccak256 &lhs, const BlackBoxOp::Keccak256 &rhs) { + if (!(lhs.message == rhs.message)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } - struct BlackBox { - Program::BlackBoxOp value; + inline std::vector BlackBoxOp::Keccak256::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - friend bool operator==(const BlackBox &, const BlackBox &); - std::vector bincodeSerialize() const; - static BlackBox bincodeDeserialize(std::vector); - }; + inline BlackBoxOp::Keccak256 BlackBoxOp::Keccak256::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } - struct Trap { - Program::HeapArray revert_data; +} // end of namespace Program - friend bool operator==(const Trap &, const Trap &); - std::vector bincodeSerialize() const; - static Trap bincodeDeserialize(std::vector); - }; +template <> +template +void serde::Serializable::serialize(const Program::BlackBoxOp::Keccak256 &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.message, serializer); + serde::Serializable::serialize(obj.output, serializer); +} + +template <> +template +Program::BlackBoxOp::Keccak256 serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxOp::Keccak256 obj; + obj.message = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; +} - struct Stop { - uint64_t return_data_offset; - uint64_t return_data_size; +namespace Program { - friend bool operator==(const Stop &, const Stop &); - std::vector bincodeSerialize() const; - static Stop bincodeDeserialize(std::vector); - }; + inline bool operator==(const BlackBoxOp::Keccakf1600 &lhs, const BlackBoxOp::Keccakf1600 &rhs) { + if (!(lhs.message == rhs.message)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } + + inline std::vector BlackBoxOp::Keccakf1600::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BlackBoxOp::Keccakf1600 BlackBoxOp::Keccakf1600::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::BlackBoxOp::Keccakf1600 &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.message, serializer); + serde::Serializable::serialize(obj.output, serializer); +} + +template <> +template +Program::BlackBoxOp::Keccakf1600 serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxOp::Keccakf1600 obj; + obj.message = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; +} + +namespace Program { + + inline bool operator==(const BlackBoxOp::EcdsaSecp256k1 &lhs, const BlackBoxOp::EcdsaSecp256k1 &rhs) { + if (!(lhs.hashed_msg == rhs.hashed_msg)) { return false; } + if (!(lhs.public_key_x == rhs.public_key_x)) { return false; } + if (!(lhs.public_key_y == rhs.public_key_y)) { return false; } + if (!(lhs.signature == rhs.signature)) { return false; } + if (!(lhs.result == rhs.result)) { return false; } + return true; + } + + inline std::vector BlackBoxOp::EcdsaSecp256k1::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BlackBoxOp::EcdsaSecp256k1 BlackBoxOp::EcdsaSecp256k1::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::BlackBoxOp::EcdsaSecp256k1 &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.hashed_msg, serializer); + serde::Serializable::serialize(obj.public_key_x, serializer); + serde::Serializable::serialize(obj.public_key_y, serializer); + serde::Serializable::serialize(obj.signature, serializer); + serde::Serializable::serialize(obj.result, serializer); +} + +template <> +template +Program::BlackBoxOp::EcdsaSecp256k1 serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxOp::EcdsaSecp256k1 obj; + obj.hashed_msg = serde::Deserializable::deserialize(deserializer); + obj.public_key_x = serde::Deserializable::deserialize(deserializer); + obj.public_key_y = serde::Deserializable::deserialize(deserializer); + obj.signature = serde::Deserializable::deserialize(deserializer); + obj.result = serde::Deserializable::deserialize(deserializer); + return obj; +} + +namespace Program { + + inline bool operator==(const BlackBoxOp::EcdsaSecp256r1 &lhs, const BlackBoxOp::EcdsaSecp256r1 &rhs) { + if (!(lhs.hashed_msg == rhs.hashed_msg)) { return false; } + if (!(lhs.public_key_x == rhs.public_key_x)) { return false; } + if (!(lhs.public_key_y == rhs.public_key_y)) { return false; } + if (!(lhs.signature == rhs.signature)) { return false; } + if (!(lhs.result == rhs.result)) { return false; } + return true; + } + + inline std::vector BlackBoxOp::EcdsaSecp256r1::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BlackBoxOp::EcdsaSecp256r1 BlackBoxOp::EcdsaSecp256r1::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::BlackBoxOp::EcdsaSecp256r1 &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.hashed_msg, serializer); + serde::Serializable::serialize(obj.public_key_x, serializer); + serde::Serializable::serialize(obj.public_key_y, serializer); + serde::Serializable::serialize(obj.signature, serializer); + serde::Serializable::serialize(obj.result, serializer); +} + +template <> +template +Program::BlackBoxOp::EcdsaSecp256r1 serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxOp::EcdsaSecp256r1 obj; + obj.hashed_msg = serde::Deserializable::deserialize(deserializer); + obj.public_key_x = serde::Deserializable::deserialize(deserializer); + obj.public_key_y = serde::Deserializable::deserialize(deserializer); + obj.signature = serde::Deserializable::deserialize(deserializer); + obj.result = serde::Deserializable::deserialize(deserializer); + return obj; +} + +namespace Program { + + inline bool operator==(const BlackBoxOp::SchnorrVerify &lhs, const BlackBoxOp::SchnorrVerify &rhs) { + if (!(lhs.public_key_x == rhs.public_key_x)) { return false; } + if (!(lhs.public_key_y == rhs.public_key_y)) { return false; } + if (!(lhs.message == rhs.message)) { return false; } + if (!(lhs.signature == rhs.signature)) { return false; } + if (!(lhs.result == rhs.result)) { return false; } + return true; + } + + inline std::vector BlackBoxOp::SchnorrVerify::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BlackBoxOp::SchnorrVerify BlackBoxOp::SchnorrVerify::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::BlackBoxOp::SchnorrVerify &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.public_key_x, serializer); + serde::Serializable::serialize(obj.public_key_y, serializer); + serde::Serializable::serialize(obj.message, serializer); + serde::Serializable::serialize(obj.signature, serializer); + serde::Serializable::serialize(obj.result, serializer); +} + +template <> +template +Program::BlackBoxOp::SchnorrVerify serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxOp::SchnorrVerify obj; + obj.public_key_x = serde::Deserializable::deserialize(deserializer); + obj.public_key_y = serde::Deserializable::deserialize(deserializer); + obj.message = serde::Deserializable::deserialize(deserializer); + obj.signature = serde::Deserializable::deserialize(deserializer); + obj.result = serde::Deserializable::deserialize(deserializer); + return obj; +} + +namespace Program { + + inline bool operator==(const BlackBoxOp::PedersenCommitment &lhs, const BlackBoxOp::PedersenCommitment &rhs) { + if (!(lhs.inputs == rhs.inputs)) { return false; } + if (!(lhs.domain_separator == rhs.domain_separator)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } + + inline std::vector BlackBoxOp::PedersenCommitment::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BlackBoxOp::PedersenCommitment BlackBoxOp::PedersenCommitment::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::BlackBoxOp::PedersenCommitment &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.inputs, serializer); + serde::Serializable::serialize(obj.domain_separator, serializer); + serde::Serializable::serialize(obj.output, serializer); +} + +template <> +template +Program::BlackBoxOp::PedersenCommitment serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxOp::PedersenCommitment obj; + obj.inputs = serde::Deserializable::deserialize(deserializer); + obj.domain_separator = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; +} + +namespace Program { + + inline bool operator==(const BlackBoxOp::PedersenHash &lhs, const BlackBoxOp::PedersenHash &rhs) { + if (!(lhs.inputs == rhs.inputs)) { return false; } + if (!(lhs.domain_separator == rhs.domain_separator)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } + + inline std::vector BlackBoxOp::PedersenHash::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BlackBoxOp::PedersenHash BlackBoxOp::PedersenHash::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::BlackBoxOp::PedersenHash &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.inputs, serializer); + serde::Serializable::serialize(obj.domain_separator, serializer); + serde::Serializable::serialize(obj.output, serializer); +} + +template <> +template +Program::BlackBoxOp::PedersenHash serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxOp::PedersenHash obj; + obj.inputs = serde::Deserializable::deserialize(deserializer); + obj.domain_separator = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; +} - std::variant - value; +namespace Program { - friend bool operator==(const BrilligOpcode &, const BrilligOpcode &); - std::vector bincodeSerialize() const; - static BrilligOpcode bincodeDeserialize(std::vector); - }; + inline bool operator==(const BlackBoxOp::FixedBaseScalarMul &lhs, const BlackBoxOp::FixedBaseScalarMul &rhs) { + if (!(lhs.low == rhs.low)) { return false; } + if (!(lhs.high == rhs.high)) { return false; } + if (!(lhs.result == rhs.result)) { return false; } + return true; + } - struct ExpressionOrMemory { + inline std::vector BlackBoxOp::FixedBaseScalarMul::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - struct Expression { - Program::Expression value; + inline BlackBoxOp::FixedBaseScalarMul BlackBoxOp::FixedBaseScalarMul::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } - friend bool operator==(const Expression &, const Expression &); - std::vector bincodeSerialize() const; - static Expression bincodeDeserialize(std::vector); - }; +} // end of namespace Program - struct Memory { - Program::BlockId value; +template <> +template +void serde::Serializable::serialize(const Program::BlackBoxOp::FixedBaseScalarMul &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.low, serializer); + serde::Serializable::serialize(obj.high, serializer); + serde::Serializable::serialize(obj.result, serializer); +} - friend bool operator==(const Memory &, const Memory &); - std::vector bincodeSerialize() const; - static Memory bincodeDeserialize(std::vector); - }; +template <> +template +Program::BlackBoxOp::FixedBaseScalarMul serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxOp::FixedBaseScalarMul obj; + obj.low = serde::Deserializable::deserialize(deserializer); + obj.high = serde::Deserializable::deserialize(deserializer); + obj.result = serde::Deserializable::deserialize(deserializer); + return obj; +} - std::variant value; +namespace Program { - friend bool operator==(const ExpressionOrMemory &, - const ExpressionOrMemory &); - std::vector bincodeSerialize() const; - static ExpressionOrMemory bincodeDeserialize(std::vector); - }; + inline bool operator==(const BlackBoxOp::EmbeddedCurveAdd &lhs, const BlackBoxOp::EmbeddedCurveAdd &rhs) { + if (!(lhs.input1_x == rhs.input1_x)) { return false; } + if (!(lhs.input1_y == rhs.input1_y)) { return false; } + if (!(lhs.input2_x == rhs.input2_x)) { return false; } + if (!(lhs.input2_y == rhs.input2_y)) { return false; } + if (!(lhs.result == rhs.result)) { return false; } + return true; + } - struct AssertionPayload { + inline std::vector BlackBoxOp::EmbeddedCurveAdd::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - struct StaticString { - std::string value; + inline BlackBoxOp::EmbeddedCurveAdd BlackBoxOp::EmbeddedCurveAdd::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } - friend bool operator==(const StaticString &, const StaticString &); - std::vector bincodeSerialize() const; - static StaticString bincodeDeserialize(std::vector); - }; +} // end of namespace Program - struct Dynamic { - std::tuple> value; +template <> +template +void serde::Serializable::serialize(const Program::BlackBoxOp::EmbeddedCurveAdd &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.input1_x, serializer); + serde::Serializable::serialize(obj.input1_y, serializer); + serde::Serializable::serialize(obj.input2_x, serializer); + serde::Serializable::serialize(obj.input2_y, serializer); + serde::Serializable::serialize(obj.result, serializer); +} - friend bool operator==(const Dynamic &, const Dynamic &); - std::vector bincodeSerialize() const; - static Dynamic bincodeDeserialize(std::vector); - }; +template <> +template +Program::BlackBoxOp::EmbeddedCurveAdd serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxOp::EmbeddedCurveAdd obj; + obj.input1_x = serde::Deserializable::deserialize(deserializer); + obj.input1_y = serde::Deserializable::deserialize(deserializer); + obj.input2_x = serde::Deserializable::deserialize(deserializer); + obj.input2_y = serde::Deserializable::deserialize(deserializer); + obj.result = serde::Deserializable::deserialize(deserializer); + return obj; +} - std::variant value; +namespace Program { - friend bool operator==(const AssertionPayload &, - const AssertionPayload &); - std::vector bincodeSerialize() const; - static AssertionPayload bincodeDeserialize(std::vector); - }; + inline bool operator==(const BlackBoxOp::BigIntAdd &lhs, const BlackBoxOp::BigIntAdd &rhs) { + if (!(lhs.lhs == rhs.lhs)) { return false; } + if (!(lhs.rhs == rhs.rhs)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } - struct ExpressionWidth { + inline std::vector BlackBoxOp::BigIntAdd::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - friend bool operator==(const MemoryInit &, const MemoryInit &); - std::vector bincodeSerialize() const; - static MemoryInit bincodeDeserialize(std::vector); - }; + inline BlackBoxOp::BigIntAdd BlackBoxOp::BigIntAdd::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } - struct BrilligCall { - uint32_t id; - std::vector inputs; - std::vector outputs; - std::optional predicate; +} // end of namespace Program - friend bool operator==(const BrilligCall &, const BrilligCall &); - std::vector bincodeSerialize() const; - static BrilligCall bincodeDeserialize(std::vector); - }; +template <> +template +void serde::Serializable::serialize(const Program::BlackBoxOp::BigIntAdd &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.lhs, serializer); + serde::Serializable::serialize(obj.rhs, serializer); + serde::Serializable::serialize(obj.output, serializer); +} - struct Call { - uint32_t id; - std::vector inputs; - std::vector outputs; - std::optional predicate; +template <> +template +Program::BlackBoxOp::BigIntAdd serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxOp::BigIntAdd obj; + obj.lhs = serde::Deserializable::deserialize(deserializer); + obj.rhs = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; +} - friend bool operator==(const Call &, const Call &); - std::vector bincodeSerialize() const; - static Call bincodeDeserialize(std::vector); - }; +namespace Program { - std::variant - value; + inline bool operator==(const BlackBoxOp::BigIntSub &lhs, const BlackBoxOp::BigIntSub &rhs) { + if (!(lhs.lhs == rhs.lhs)) { return false; } + if (!(lhs.rhs == rhs.rhs)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } - friend bool operator==(const Opcode &, const Opcode &); - std::vector bincodeSerialize() const; - static Opcode bincodeDeserialize(std::vector); - }; + inline std::vector BlackBoxOp::BigIntSub::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - struct ExpressionWidth { + inline BlackBoxOp::BigIntSub BlackBoxOp::BigIntSub::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } - struct Unbounded { - friend bool operator==(const Unbounded &, const Unbounded &); - std::vector bincodeSerialize() const; - static Unbounded bincodeDeserialize(std::vector); - }; +} // end of namespace Program - struct Bounded { - uint64_t width; +template <> +template +void serde::Serializable::serialize(const Program::BlackBoxOp::BigIntSub &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.lhs, serializer); + serde::Serializable::serialize(obj.rhs, serializer); + serde::Serializable::serialize(obj.output, serializer); +} - friend bool operator==(const Bounded &, const Bounded &); - std::vector bincodeSerialize() const; - static Bounded bincodeDeserialize(std::vector); - }; +template <> +template +Program::BlackBoxOp::BigIntSub serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxOp::BigIntSub obj; + obj.lhs = serde::Deserializable::deserialize(deserializer); + obj.rhs = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; +} - std::variant value; +namespace Program { - std::variant value; + inline bool operator==(const BlackBoxOp::BigIntMul &lhs, const BlackBoxOp::BigIntMul &rhs) { + if (!(lhs.lhs == rhs.lhs)) { return false; } + if (!(lhs.rhs == rhs.rhs)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } - friend bool operator==(const OpcodeLocation &, const OpcodeLocation &); - std::vector bincodeSerialize() const; - static OpcodeLocation bincodeDeserialize(std::vector); - }; + inline std::vector BlackBoxOp::BigIntMul::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - struct PublicInputs { - std::vector value; + inline BlackBoxOp::BigIntMul BlackBoxOp::BigIntMul::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } - friend bool operator==(const PublicInputs &, const PublicInputs &); - std::vector bincodeSerialize() const; - static PublicInputs bincodeDeserialize(std::vector); - }; +} // end of namespace Program - struct Circuit { - uint32_t current_witness_index; - std::vector opcodes; - Program::ExpressionWidth expression_width; - std::vector private_parameters; - Program::PublicInputs public_parameters; - Program::PublicInputs return_values; - std::vector> - assert_messages; - bool recursive; +template <> +template +void serde::Serializable::serialize(const Program::BlackBoxOp::BigIntMul &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.lhs, serializer); + serde::Serializable::serialize(obj.rhs, serializer); + serde::Serializable::serialize(obj.output, serializer); +} - friend bool operator==(const Circuit &, const Circuit &); - std::vector bincodeSerialize() const; - static Circuit bincodeDeserialize(std::vector); - }; +template <> +template +Program::BlackBoxOp::BigIntMul serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxOp::BigIntMul obj; + obj.lhs = serde::Deserializable::deserialize(deserializer); + obj.rhs = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; +} - struct Program { - std::vector functions; +namespace Program { - struct Circuit { - uint32_t current_witness_index; - std::vector opcodes; - Program::ExpressionWidth expression_width; - std::vector private_parameters; - Program::PublicInputs public_parameters; - Program::PublicInputs return_values; - std::vector< - std::tuple> - assert_messages; - bool recursive; - - friend bool operator==(const Circuit &, const Circuit &); - std::vector bincodeSerialize() const; - static Circuit bincodeDeserialize(std::vector); - }; + inline bool operator==(const BlackBoxOp::BigIntDiv &lhs, const BlackBoxOp::BigIntDiv &rhs) { + if (!(lhs.lhs == rhs.lhs)) { return false; } + if (!(lhs.rhs == rhs.rhs)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } - struct BrilligBytecode { - std::vector bytecode; + inline std::vector BlackBoxOp::BigIntDiv::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - friend bool operator==(const BrilligBytecode &, const BrilligBytecode &); - std::vector bincodeSerialize() const; - static BrilligBytecode bincodeDeserialize(std::vector); - }; + inline BlackBoxOp::BigIntDiv BlackBoxOp::BigIntDiv::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } - struct Program { - std::vector functions; - std::vector unconstrained_functions; +} // end of namespace Program - friend bool operator==(const Program &, const Program &); - std::vector bincodeSerialize() const; - static Program bincodeDeserialize(std::vector); - }; +template <> +template +void serde::Serializable::serialize(const Program::BlackBoxOp::BigIntDiv &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.lhs, serializer); + serde::Serializable::serialize(obj.rhs, serializer); + serde::Serializable::serialize(obj.output, serializer); +} - } // end of namespace Program +template <> +template +Program::BlackBoxOp::BigIntDiv serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxOp::BigIntDiv obj; + obj.lhs = serde::Deserializable::deserialize(deserializer); + obj.rhs = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; +} - namespace Program { +namespace Program { - inline bool operator==(const AssertionPayload &lhs, - const AssertionPayload &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; + inline bool operator==(const BlackBoxOp::BigIntFromLeBytes &lhs, const BlackBoxOp::BigIntFromLeBytes &rhs) { + if (!(lhs.inputs == rhs.inputs)) { return false; } + if (!(lhs.modulus == rhs.modulus)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; } - inline std::vector AssertionPayload::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); + inline std::vector BlackBoxOp::BigIntFromLeBytes::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); } - inline AssertionPayload AssertionPayload::bincodeDeserialize( - std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; + inline BlackBoxOp::BigIntFromLeBytes BlackBoxOp::BigIntFromLeBytes::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; } - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::AssertionPayload &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.value, serializer); - serializer.decrease_container_depth(); - } - - template <> - template - Program::AssertionPayload - serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::AssertionPayload obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; - } - - namespace Program { - - inline bool operator==(const AssertionPayload::StaticString &lhs, - const AssertionPayload::StaticString &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; - } - - inline std::vector - AssertionPayload::StaticString::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); - } - - inline AssertionPayload::StaticString - AssertionPayload::StaticString::bincodeDeserialize( - std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::AssertionPayload::StaticString &obj, - Serializer &serializer) { - serde::Serializable::serialize(obj.value, serializer); - } +} // end of namespace Program - template <> - template - Program::AssertionPayload::StaticString - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::AssertionPayload::StaticString obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const AssertionPayload::Dynamic &lhs, - const AssertionPayload::Dynamic &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; - } - - inline std::vector - AssertionPayload::Dynamic::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); - } - - inline AssertionPayload::Dynamic - AssertionPayload::Dynamic::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::AssertionPayload::Dynamic &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.value, serializer); - } +template <> +template +void serde::Serializable::serialize(const Program::BlackBoxOp::BigIntFromLeBytes &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.inputs, serializer); + serde::Serializable::serialize(obj.modulus, serializer); + serde::Serializable::serialize(obj.output, serializer); +} - template <> - template - Program::AssertionPayload::Dynamic - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::AssertionPayload::Dynamic obj; - obj.value = - serde::Deserializable::deserialize(deserializer); +template <> +template +Program::BlackBoxOp::BigIntFromLeBytes serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxOp::BigIntFromLeBytes obj; + obj.inputs = serde::Deserializable::deserialize(deserializer); + obj.modulus = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); return obj; - } +} - namespace Program { +namespace Program { - inline bool operator==(const BinaryFieldOp &lhs, const BinaryFieldOp &rhs) { - if (!(lhs.value == rhs.value)) { - return false; + inline bool operator==(const BlackBoxOp::BigIntToLeBytes &lhs, const BlackBoxOp::BigIntToLeBytes &rhs) { + if (!(lhs.input == rhs.input)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; } - return true; - } - inline std::vector BinaryFieldOp::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } + inline std::vector BlackBoxOp::BigIntToLeBytes::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - inline BinaryFieldOp - BinaryFieldOp::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); + inline BlackBoxOp::BigIntToLeBytes BlackBoxOp::BigIntToLeBytes::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; } - return value; - } - } // end of namespace Program +} // end of namespace Program - template <> - template - void serde::Serializable::serialize( - const Program::BinaryFieldOp &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.value, serializer); - serializer.decrease_container_depth(); - } +template <> +template +void serde::Serializable::serialize(const Program::BlackBoxOp::BigIntToLeBytes &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.input, serializer); + serde::Serializable::serialize(obj.output, serializer); +} - template <> - template - Program::BinaryFieldOp - serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::BinaryFieldOp obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); +template <> +template +Program::BlackBoxOp::BigIntToLeBytes serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxOp::BigIntToLeBytes obj; + obj.input = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); return obj; - } +} - namespace Program { +namespace Program { - inline bool operator==(const BinaryFieldOp::Add &lhs, - const BinaryFieldOp::Add &rhs) { - return true; - } + inline bool operator==(const BlackBoxOp::Poseidon2Permutation &lhs, const BlackBoxOp::Poseidon2Permutation &rhs) { + if (!(lhs.message == rhs.message)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + if (!(lhs.len == rhs.len)) { return false; } + return true; + } - inline std::vector BinaryFieldOp::Add::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } + inline std::vector BlackBoxOp::Poseidon2Permutation::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - inline BinaryFieldOp::Add - BinaryFieldOp::Add::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); + inline BlackBoxOp::Poseidon2Permutation BlackBoxOp::Poseidon2Permutation::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; } - return value; - } - } // end of namespace Program +} // end of namespace Program - template <> - template - void serde::Serializable::serialize( - const Program::BinaryFieldOp::Add &obj, Serializer &serializer) {} +template <> +template +void serde::Serializable::serialize(const Program::BlackBoxOp::Poseidon2Permutation &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.message, serializer); + serde::Serializable::serialize(obj.output, serializer); + serde::Serializable::serialize(obj.len, serializer); +} - template <> - template - Program::BinaryFieldOp::Add - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryFieldOp::Add obj; +template <> +template +Program::BlackBoxOp::Poseidon2Permutation serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxOp::Poseidon2Permutation obj; + obj.message = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + obj.len = serde::Deserializable::deserialize(deserializer); return obj; - } +} - namespace Program { +namespace Program { - inline bool operator==(const BinaryFieldOp::Sub &lhs, - const BinaryFieldOp::Sub &rhs) { - return true; - } + inline bool operator==(const BlackBoxOp::Sha256Compression &lhs, const BlackBoxOp::Sha256Compression &rhs) { + if (!(lhs.input == rhs.input)) { return false; } + if (!(lhs.hash_values == rhs.hash_values)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } - inline std::vector BinaryFieldOp::Sub::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } + inline std::vector BlackBoxOp::Sha256Compression::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - inline BinaryFieldOp::Sub - BinaryFieldOp::Sub::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); + inline BlackBoxOp::Sha256Compression BlackBoxOp::Sha256Compression::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; } - return value; - } - } // end of namespace Program +} // end of namespace Program - template <> - template - void serde::Serializable::serialize( - const Program::BinaryFieldOp::Sub &obj, Serializer &serializer) {} +template <> +template +void serde::Serializable::serialize(const Program::BlackBoxOp::Sha256Compression &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.input, serializer); + serde::Serializable::serialize(obj.hash_values, serializer); + serde::Serializable::serialize(obj.output, serializer); +} - template <> - template - Program::BinaryFieldOp::Sub - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryFieldOp::Sub obj; +template <> +template +Program::BlackBoxOp::Sha256Compression serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxOp::Sha256Compression obj; + obj.input = serde::Deserializable::deserialize(deserializer); + obj.hash_values = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); return obj; - } +} - namespace Program { +namespace Program { - inline bool operator==(const BinaryFieldOp::Mul &lhs, - const BinaryFieldOp::Mul &rhs) { - return true; - } + inline bool operator==(const BlockId &lhs, const BlockId &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } - inline std::vector BinaryFieldOp::Mul::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } + inline std::vector BlockId::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - inline BinaryFieldOp::Mul - BinaryFieldOp::Mul::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); + inline BlockId BlockId::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; } - return value; - } - } // end of namespace Program +} // end of namespace Program - template <> - template - void serde::Serializable::serialize( - const Program::BinaryFieldOp::Mul &obj, Serializer &serializer) {} +template <> +template +void serde::Serializable::serialize(const Program::BlockId &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.value, serializer); + serializer.decrease_container_depth(); +} - template <> - template - Program::BinaryFieldOp::Mul - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryFieldOp::Mul obj; +template <> +template +Program::BlockId serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::BlockId obj; + obj.value = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); return obj; - } +} - namespace Program { +namespace Program { - inline bool operator==(const BinaryFieldOp::Div &lhs, - const BinaryFieldOp::Div &rhs) { - return true; - } + inline bool operator==(const BrilligBytecode &lhs, const BrilligBytecode &rhs) { + if (!(lhs.bytecode == rhs.bytecode)) { return false; } + return true; + } - inline std::vector BinaryFieldOp::Div::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } + inline std::vector BrilligBytecode::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - inline BinaryFieldOp::Div - BinaryFieldOp::Div::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); + inline BrilligBytecode BrilligBytecode::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; } - return value; - } - } // end of namespace Program +} // end of namespace Program - template <> - template - void serde::Serializable::serialize( - const Program::BinaryFieldOp::Div &obj, Serializer &serializer) {} +template <> +template +void serde::Serializable::serialize(const Program::BrilligBytecode &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.bytecode, serializer); + serializer.decrease_container_depth(); +} - template <> - template - Program::BinaryFieldOp::Div - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryFieldOp::Div obj; - return obj; - } - - namespace Program { - - inline bool operator==(const BinaryFieldOp::IntegerDiv &lhs, - const BinaryFieldOp::IntegerDiv &rhs) { - return true; - } - - inline std::vector - BinaryFieldOp::IntegerDiv::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); - } - - inline BinaryFieldOp::IntegerDiv - BinaryFieldOp::IntegerDiv::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BinaryFieldOp::IntegerDiv &obj, Serializer &serializer) {} - - template <> - template - Program::BinaryFieldOp::IntegerDiv - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryFieldOp::IntegerDiv obj; +template <> +template +Program::BrilligBytecode serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::BrilligBytecode obj; + obj.bytecode = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); return obj; - } +} - namespace Program { +namespace Program { - inline bool operator==(const BinaryFieldOp::Equals &lhs, - const BinaryFieldOp::Equals &rhs) { - return true; - } + inline bool operator==(const BrilligInputs &lhs, const BrilligInputs &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } - inline std::vector BinaryFieldOp::Equals::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } + inline std::vector BrilligInputs::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - inline BinaryFieldOp::Equals - BinaryFieldOp::Equals::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); + inline BrilligInputs BrilligInputs::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; } - return value; - } - } // end of namespace Program +} // end of namespace Program - template <> - template - void serde::Serializable::serialize( - const Program::BinaryFieldOp::Equals &obj, Serializer &serializer) {} +template <> +template +void serde::Serializable::serialize(const Program::BrilligInputs &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.value, serializer); + serializer.decrease_container_depth(); +} - template <> - template - Program::BinaryFieldOp::Equals - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryFieldOp::Equals obj; - return obj; - } - - namespace Program { - - inline bool operator==(const BinaryFieldOp::LessThan &lhs, - const BinaryFieldOp::LessThan &rhs) { - return true; - } - - inline std::vector - BinaryFieldOp::LessThan::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } - - inline BinaryFieldOp::LessThan - BinaryFieldOp::LessThan::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BinaryFieldOp::LessThan &obj, Serializer &serializer) {} - - template <> - template - Program::BinaryFieldOp::LessThan - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryFieldOp::LessThan obj; - return obj; - } - - namespace Program { - - inline bool operator==(const BinaryFieldOp::LessThanEquals &lhs, - const BinaryFieldOp::LessThanEquals &rhs) { - return true; - } - - inline std::vector - BinaryFieldOp::LessThanEquals::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); - } - - inline BinaryFieldOp::LessThanEquals - BinaryFieldOp::LessThanEquals::bincodeDeserialize( - std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BinaryFieldOp::LessThanEquals &obj, - Serializer &serializer) {} - - template <> - template - Program::BinaryFieldOp::LessThanEquals - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryFieldOp::LessThanEquals obj; +template <> +template +Program::BrilligInputs serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::BrilligInputs obj; + obj.value = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); return obj; - } +} - namespace Program { +namespace Program { - inline bool operator==(const BinaryIntOp &lhs, const BinaryIntOp &rhs) { - if (!(lhs.value == rhs.value)) { - return false; + inline bool operator==(const BrilligInputs::Single &lhs, const BrilligInputs::Single &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; } - return true; - } - inline std::vector BinaryIntOp::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } + inline std::vector BrilligInputs::Single::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - inline BinaryIntOp - BinaryIntOp::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); + inline BrilligInputs::Single BrilligInputs::Single::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; } - return value; - } - } // end of namespace Program +} // end of namespace Program - template <> - template - void serde::Serializable::serialize( - const Program::BinaryIntOp &obj, Serializer &serializer) { - serializer.increase_container_depth(); +template <> +template +void serde::Serializable::serialize(const Program::BrilligInputs::Single &obj, Serializer &serializer) { serde::Serializable::serialize(obj.value, serializer); - serializer.decrease_container_depth(); - } +} - template <> - template - Program::BinaryIntOp serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::BinaryIntOp obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); +template <> +template +Program::BrilligInputs::Single serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligInputs::Single obj; + obj.value = serde::Deserializable::deserialize(deserializer); return obj; - } +} - namespace Program { +namespace Program { - inline bool operator==(const BinaryIntOp::Add &lhs, - const BinaryIntOp::Add &rhs) { - return true; - } + inline bool operator==(const BrilligInputs::Array &lhs, const BrilligInputs::Array &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } - inline std::vector BinaryIntOp::Add::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } + inline std::vector BrilligInputs::Array::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - inline BinaryIntOp::Add - BinaryIntOp::Add::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); + inline BrilligInputs::Array BrilligInputs::Array::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; } - return value; - } - } // end of namespace Program +} // end of namespace Program - template <> - template - void serde::Serializable::serialize( - const Program::BinaryIntOp::Add &obj, Serializer &serializer) {} +template <> +template +void serde::Serializable::serialize(const Program::BrilligInputs::Array &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.value, serializer); +} - template <> - template - Program::BinaryIntOp::Add - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryIntOp::Add obj; +template <> +template +Program::BrilligInputs::Array serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligInputs::Array obj; + obj.value = serde::Deserializable::deserialize(deserializer); return obj; - } +} - namespace Program { +namespace Program { - inline bool operator==(const BinaryIntOp::Sub &lhs, - const BinaryIntOp::Sub &rhs) { - return true; - } + inline bool operator==(const BrilligInputs::MemoryArray &lhs, const BrilligInputs::MemoryArray &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } - inline std::vector BinaryIntOp::Sub::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } + inline std::vector BrilligInputs::MemoryArray::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - inline BinaryIntOp::Sub - BinaryIntOp::Sub::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); + inline BrilligInputs::MemoryArray BrilligInputs::MemoryArray::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; } - return value; - } - } // end of namespace Program +} // end of namespace Program - template <> - template - void serde::Serializable::serialize( - const Program::BinaryIntOp::Sub &obj, Serializer &serializer) {} +template <> +template +void serde::Serializable::serialize(const Program::BrilligInputs::MemoryArray &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.value, serializer); +} - template <> - template - Program::BinaryIntOp::Sub - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryIntOp::Sub obj; +template <> +template +Program::BrilligInputs::MemoryArray serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligInputs::MemoryArray obj; + obj.value = serde::Deserializable::deserialize(deserializer); return obj; - } +} - namespace Program { +namespace Program { - inline bool operator==(const BinaryIntOp::Mul &lhs, - const BinaryIntOp::Mul &rhs) { - return true; - } + inline bool operator==(const BrilligOpcode &lhs, const BrilligOpcode &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } - inline std::vector BinaryIntOp::Mul::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } + inline std::vector BrilligOpcode::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - inline BinaryIntOp::Mul - BinaryIntOp::Mul::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); + inline BrilligOpcode BrilligOpcode::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; } - return value; - } - } // end of namespace Program +} // end of namespace Program - template <> - template - void serde::Serializable::serialize( - const Program::BinaryIntOp::Mul &obj, Serializer &serializer) {} +template <> +template +void serde::Serializable::serialize(const Program::BrilligOpcode &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.value, serializer); + serializer.decrease_container_depth(); +} - template <> - template - Program::BinaryIntOp::Mul - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryIntOp::Mul obj; +template <> +template +Program::BrilligOpcode serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::BrilligOpcode obj; + obj.value = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); return obj; - } +} - namespace Program { +namespace Program { - inline bool operator==(const BinaryIntOp::Div &lhs, - const BinaryIntOp::Div &rhs) { - return true; - } + inline bool operator==(const BrilligOpcode::BinaryFieldOp &lhs, const BrilligOpcode::BinaryFieldOp &rhs) { + if (!(lhs.destination == rhs.destination)) { return false; } + if (!(lhs.op == rhs.op)) { return false; } + if (!(lhs.lhs == rhs.lhs)) { return false; } + if (!(lhs.rhs == rhs.rhs)) { return false; } + return true; + } - inline std::vector BinaryIntOp::Div::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } + inline std::vector BrilligOpcode::BinaryFieldOp::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - inline BinaryIntOp::Div - BinaryIntOp::Div::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); + inline BrilligOpcode::BinaryFieldOp BrilligOpcode::BinaryFieldOp::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; } - return value; - } - } // end of namespace Program +} // end of namespace Program - template <> - template - void serde::Serializable::serialize( - const Program::BinaryIntOp::Div &obj, Serializer &serializer) {} +template <> +template +void serde::Serializable::serialize(const Program::BrilligOpcode::BinaryFieldOp &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.destination, serializer); + serde::Serializable::serialize(obj.op, serializer); + serde::Serializable::serialize(obj.lhs, serializer); + serde::Serializable::serialize(obj.rhs, serializer); +} - template <> - template - Program::BinaryIntOp::Div - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryIntOp::Div obj; +template <> +template +Program::BrilligOpcode::BinaryFieldOp serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOpcode::BinaryFieldOp obj; + obj.destination = serde::Deserializable::deserialize(deserializer); + obj.op = serde::Deserializable::deserialize(deserializer); + obj.lhs = serde::Deserializable::deserialize(deserializer); + obj.rhs = serde::Deserializable::deserialize(deserializer); return obj; - } +} - namespace Program { +namespace Program { - inline bool operator==(const BinaryIntOp::Equals &lhs, - const BinaryIntOp::Equals &rhs) { - return true; - } + inline bool operator==(const BrilligOpcode::BinaryIntOp &lhs, const BrilligOpcode::BinaryIntOp &rhs) { + if (!(lhs.destination == rhs.destination)) { return false; } + if (!(lhs.op == rhs.op)) { return false; } + if (!(lhs.bit_size == rhs.bit_size)) { return false; } + if (!(lhs.lhs == rhs.lhs)) { return false; } + if (!(lhs.rhs == rhs.rhs)) { return false; } + return true; + } - inline std::vector BinaryIntOp::Equals::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } + inline std::vector BrilligOpcode::BinaryIntOp::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - inline BinaryIntOp::Equals - BinaryIntOp::Equals::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); + inline BrilligOpcode::BinaryIntOp BrilligOpcode::BinaryIntOp::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; } - return value; - } - } // end of namespace Program +} // end of namespace Program - template <> - template - void serde::Serializable::serialize( - const Program::BinaryIntOp::Equals &obj, Serializer &serializer) {} +template <> +template +void serde::Serializable::serialize(const Program::BrilligOpcode::BinaryIntOp &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.destination, serializer); + serde::Serializable::serialize(obj.op, serializer); + serde::Serializable::serialize(obj.bit_size, serializer); + serde::Serializable::serialize(obj.lhs, serializer); + serde::Serializable::serialize(obj.rhs, serializer); +} - template <> - template - Program::BinaryIntOp::Equals - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryIntOp::Equals obj; +template <> +template +Program::BrilligOpcode::BinaryIntOp serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOpcode::BinaryIntOp obj; + obj.destination = serde::Deserializable::deserialize(deserializer); + obj.op = serde::Deserializable::deserialize(deserializer); + obj.bit_size = serde::Deserializable::deserialize(deserializer); + obj.lhs = serde::Deserializable::deserialize(deserializer); + obj.rhs = serde::Deserializable::deserialize(deserializer); return obj; - } +} - namespace Program { +namespace Program { - inline bool operator==(const BinaryIntOp::LessThan &lhs, - const BinaryIntOp::LessThan &rhs) { - return true; - } + inline bool operator==(const BrilligOpcode::Cast &lhs, const BrilligOpcode::Cast &rhs) { + if (!(lhs.destination == rhs.destination)) { return false; } + if (!(lhs.source == rhs.source)) { return false; } + if (!(lhs.bit_size == rhs.bit_size)) { return false; } + return true; + } - inline std::vector BinaryIntOp::LessThan::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } + inline std::vector BrilligOpcode::Cast::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - inline BinaryIntOp::LessThan - BinaryIntOp::LessThan::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); + inline BrilligOpcode::Cast BrilligOpcode::Cast::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; } - return value; - } - } // end of namespace Program +} // end of namespace Program - template <> - template - void serde::Serializable::serialize( - const Program::BinaryIntOp::LessThan &obj, Serializer &serializer) {} +template <> +template +void serde::Serializable::serialize(const Program::BrilligOpcode::Cast &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.destination, serializer); + serde::Serializable::serialize(obj.source, serializer); + serde::Serializable::serialize(obj.bit_size, serializer); +} - template <> - template - Program::BinaryIntOp::LessThan - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryIntOp::LessThan obj; - return obj; - } - - namespace Program { - - inline bool operator==(const BinaryIntOp::LessThanEquals &lhs, - const BinaryIntOp::LessThanEquals &rhs) { - return true; - } - - inline std::vector - BinaryIntOp::LessThanEquals::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); - } - - inline BinaryIntOp::LessThanEquals - BinaryIntOp::LessThanEquals::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BinaryIntOp::LessThanEquals &obj, Serializer &serializer) { - } - - template <> - template - Program::BinaryIntOp::LessThanEquals - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryIntOp::LessThanEquals obj; +template <> +template +Program::BrilligOpcode::Cast serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOpcode::Cast obj; + obj.destination = serde::Deserializable::deserialize(deserializer); + obj.source = serde::Deserializable::deserialize(deserializer); + obj.bit_size = serde::Deserializable::deserialize(deserializer); return obj; - } +} - namespace Program { +namespace Program { - inline bool operator==(const BinaryIntOp::And &lhs, - const BinaryIntOp::And &rhs) { - return true; - } + inline bool operator==(const BrilligOpcode::JumpIfNot &lhs, const BrilligOpcode::JumpIfNot &rhs) { + if (!(lhs.condition == rhs.condition)) { return false; } + if (!(lhs.location == rhs.location)) { return false; } + return true; + } - inline std::vector BinaryIntOp::And::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } + inline std::vector BrilligOpcode::JumpIfNot::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - inline BinaryIntOp::And - BinaryIntOp::And::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); + inline BrilligOpcode::JumpIfNot BrilligOpcode::JumpIfNot::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; } - return value; - } - } // end of namespace Program +} // end of namespace Program - template <> - template - void serde::Serializable::serialize( - const Program::BinaryIntOp::And &obj, Serializer &serializer) {} +template <> +template +void serde::Serializable::serialize(const Program::BrilligOpcode::JumpIfNot &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.condition, serializer); + serde::Serializable::serialize(obj.location, serializer); +} - template <> - template - Program::BinaryIntOp::And - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryIntOp::And obj; +template <> +template +Program::BrilligOpcode::JumpIfNot serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOpcode::JumpIfNot obj; + obj.condition = serde::Deserializable::deserialize(deserializer); + obj.location = serde::Deserializable::deserialize(deserializer); return obj; - } +} - namespace Program { +namespace Program { - inline bool operator==(const BinaryIntOp::Or &lhs, - const BinaryIntOp::Or &rhs) { - return true; - } + inline bool operator==(const BrilligOpcode::JumpIf &lhs, const BrilligOpcode::JumpIf &rhs) { + if (!(lhs.condition == rhs.condition)) { return false; } + if (!(lhs.location == rhs.location)) { return false; } + return true; + } - inline std::vector BinaryIntOp::Or::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } + inline std::vector BrilligOpcode::JumpIf::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - inline BinaryIntOp::Or - BinaryIntOp::Or::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); + inline BrilligOpcode::JumpIf BrilligOpcode::JumpIf::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; } - return value; - } - } // end of namespace Program +} // end of namespace Program - template <> - template - void serde::Serializable::serialize( - const Program::BinaryIntOp::Or &obj, Serializer &serializer) {} +template <> +template +void serde::Serializable::serialize(const Program::BrilligOpcode::JumpIf &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.condition, serializer); + serde::Serializable::serialize(obj.location, serializer); +} - template <> - template - Program::BinaryIntOp::Or - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryIntOp::Or obj; +template <> +template +Program::BrilligOpcode::JumpIf serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOpcode::JumpIf obj; + obj.condition = serde::Deserializable::deserialize(deserializer); + obj.location = serde::Deserializable::deserialize(deserializer); return obj; - } +} - namespace Program { +namespace Program { - inline bool operator==(const BinaryIntOp::Xor &lhs, - const BinaryIntOp::Xor &rhs) { - return true; - } + inline bool operator==(const BrilligOpcode::Jump &lhs, const BrilligOpcode::Jump &rhs) { + if (!(lhs.location == rhs.location)) { return false; } + return true; + } - inline std::vector BinaryIntOp::Xor::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } + inline std::vector BrilligOpcode::Jump::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - inline BinaryIntOp::Xor - BinaryIntOp::Xor::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); + inline BrilligOpcode::Jump BrilligOpcode::Jump::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; } - return value; - } - } // end of namespace Program +} // end of namespace Program - template <> - template - void serde::Serializable::serialize( - const Program::BinaryIntOp::Xor &obj, Serializer &serializer) {} +template <> +template +void serde::Serializable::serialize(const Program::BrilligOpcode::Jump &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.location, serializer); +} - template <> - template - Program::BinaryIntOp::Xor - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryIntOp::Xor obj; +template <> +template +Program::BrilligOpcode::Jump serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOpcode::Jump obj; + obj.location = serde::Deserializable::deserialize(deserializer); return obj; - } +} - namespace Program { +namespace Program { - inline bool operator==(const BinaryIntOp::Shl &lhs, - const BinaryIntOp::Shl &rhs) { - return true; - } + inline bool operator==(const BrilligOpcode::CalldataCopy &lhs, const BrilligOpcode::CalldataCopy &rhs) { + if (!(lhs.destination_address == rhs.destination_address)) { return false; } + if (!(lhs.size == rhs.size)) { return false; } + if (!(lhs.offset == rhs.offset)) { return false; } + return true; + } - inline std::vector BinaryIntOp::Shl::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } + inline std::vector BrilligOpcode::CalldataCopy::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - inline BinaryIntOp::Shl - BinaryIntOp::Shl::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); + inline BrilligOpcode::CalldataCopy BrilligOpcode::CalldataCopy::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; } - return value; - } - } // end of namespace Program +} // end of namespace Program - template <> - template - void serde::Serializable::serialize( - const Program::BinaryIntOp::Shl &obj, Serializer &serializer) {} +template <> +template +void serde::Serializable::serialize(const Program::BrilligOpcode::CalldataCopy &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.destination_address, serializer); + serde::Serializable::serialize(obj.size, serializer); + serde::Serializable::serialize(obj.offset, serializer); +} - template <> - template - Program::BinaryIntOp::Shl - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryIntOp::Shl obj; +template <> +template +Program::BrilligOpcode::CalldataCopy serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOpcode::CalldataCopy obj; + obj.destination_address = serde::Deserializable::deserialize(deserializer); + obj.size = serde::Deserializable::deserialize(deserializer); + obj.offset = serde::Deserializable::deserialize(deserializer); return obj; - } +} - namespace Program { +namespace Program { - inline bool operator==(const BinaryIntOp::Shr &lhs, - const BinaryIntOp::Shr &rhs) { - return true; - } + inline bool operator==(const BrilligOpcode::Call &lhs, const BrilligOpcode::Call &rhs) { + if (!(lhs.location == rhs.location)) { return false; } + return true; + } - inline std::vector BinaryIntOp::Shr::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } + inline std::vector BrilligOpcode::Call::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - inline BinaryIntOp::Shr - BinaryIntOp::Shr::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); + inline BrilligOpcode::Call BrilligOpcode::Call::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; } - return value; - } - } // end of namespace Program +} // end of namespace Program - template <> - template - void serde::Serializable::serialize( - const Program::BinaryIntOp::Shr &obj, Serializer &serializer) {} +template <> +template +void serde::Serializable::serialize(const Program::BrilligOpcode::Call &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.location, serializer); +} - template <> - template - Program::BinaryIntOp::Shr - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryIntOp::Shr obj; +template <> +template +Program::BrilligOpcode::Call serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOpcode::Call obj; + obj.location = serde::Deserializable::deserialize(deserializer); return obj; - } +} - namespace Program { +namespace Program { - inline bool operator==(const BlackBoxFuncCall &lhs, - const BlackBoxFuncCall &rhs) { - if (!(lhs.value == rhs.value)) { - return false; + inline bool operator==(const BrilligOpcode::Const &lhs, const BrilligOpcode::Const &rhs) { + if (!(lhs.destination == rhs.destination)) { return false; } + if (!(lhs.bit_size == rhs.bit_size)) { return false; } + if (!(lhs.value == rhs.value)) { return false; } + return true; } - return true; - } - inline std::vector BlackBoxFuncCall::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } + inline std::vector BrilligOpcode::Const::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - inline BlackBoxFuncCall - BlackBoxFuncCall::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); + inline BrilligOpcode::Const BrilligOpcode::Const::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; } - return value; - } - } // end of namespace Program +} // end of namespace Program - template <> - template - void serde::Serializable::serialize( - const Program::BlackBoxFuncCall &obj, Serializer &serializer) { - serializer.increase_container_depth(); +template <> +template +void serde::Serializable::serialize(const Program::BrilligOpcode::Const &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.destination, serializer); + serde::Serializable::serialize(obj.bit_size, serializer); serde::Serializable::serialize(obj.value, serializer); - serializer.decrease_container_depth(); - } +} - template <> - template - Program::BlackBoxFuncCall - serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::BlackBoxFuncCall obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); +template <> +template +Program::BrilligOpcode::Const serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOpcode::Const obj; + obj.destination = serde::Deserializable::deserialize(deserializer); + obj.bit_size = serde::Deserializable::deserialize(deserializer); + obj.value = serde::Deserializable::deserialize(deserializer); return obj; - } +} - namespace Program { +namespace Program { - inline bool operator==(const BlackBoxFuncCall::AND &lhs, - const BlackBoxFuncCall::AND &rhs) { - if (!(lhs.lhs == rhs.lhs)) { - return false; - } - if (!(lhs.rhs == rhs.rhs)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; + inline bool operator==(const BrilligOpcode::Return &lhs, const BrilligOpcode::Return &rhs) { + return true; } - return true; - } - inline std::vector BlackBoxFuncCall::AND::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } - - inline BlackBoxFuncCall::AND - BlackBoxFuncCall::AND::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); + inline std::vector BrilligOpcode::Return::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BlackBoxFuncCall::AND &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.lhs, serializer); - serde::Serializable::serialize(obj.rhs, serializer); - serde::Serializable::serialize(obj.output, - serializer); - } - - template <> - template - Program::BlackBoxFuncCall::AND - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxFuncCall::AND obj; - obj.lhs = - serde::Deserializable::deserialize(deserializer); - obj.rhs = - serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BlackBoxFuncCall::XOR &lhs, - const BlackBoxFuncCall::XOR &rhs) { - if (!(lhs.lhs == rhs.lhs)) { - return false; - } - if (!(lhs.rhs == rhs.rhs)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; - } - - inline std::vector BlackBoxFuncCall::XOR::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } - - inline BlackBoxFuncCall::XOR - BlackBoxFuncCall::XOR::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BlackBoxFuncCall::XOR &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.lhs, serializer); - serde::Serializable::serialize(obj.rhs, serializer); - serde::Serializable::serialize(obj.output, - serializer); - } - - template <> - template - Program::BlackBoxFuncCall::XOR - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxFuncCall::XOR obj; - obj.lhs = - serde::Deserializable::deserialize(deserializer); - obj.rhs = - serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BlackBoxFuncCall::RANGE &lhs, - const BlackBoxFuncCall::RANGE &rhs) { - if (!(lhs.input == rhs.input)) { - return false; - } - return true; - } - - inline std::vector - BlackBoxFuncCall::RANGE::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } - - inline BlackBoxFuncCall::RANGE - BlackBoxFuncCall::RANGE::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BlackBoxFuncCall::RANGE &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.input, serializer); - } - - template <> - template - Program::BlackBoxFuncCall::RANGE - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxFuncCall::RANGE obj; - obj.input = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BlackBoxFuncCall::Blake2s &lhs, - const BlackBoxFuncCall::Blake2s &rhs) { - if (!(lhs.inputs == rhs.inputs)) { - return false; - } - if (!(lhs.outputs == rhs.outputs)) { - return false; - } - return true; - } - - inline std::vector - BlackBoxFuncCall::Blake2s::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); - } - - inline BlackBoxFuncCall::Blake2s - BlackBoxFuncCall::Blake2s::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BlackBoxFuncCall::Blake2s &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.inputs, - serializer); - serde::Serializable::serialize(obj.outputs, - serializer); - } - - template <> - template - Program::BlackBoxFuncCall::Blake2s - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxFuncCall::Blake2s obj; - obj.inputs = - serde::Deserializable::deserialize(deserializer); - obj.outputs = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BlackBoxFuncCall::Blake3 &lhs, - const BlackBoxFuncCall::Blake3 &rhs) { - if (!(lhs.inputs == rhs.inputs)) { - return false; - } - if (!(lhs.outputs == rhs.outputs)) { - return false; - } - return true; - } - - inline std::vector - BlackBoxFuncCall::Blake3::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } - - inline BlackBoxFuncCall::Blake3 - BlackBoxFuncCall::Blake3::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BlackBoxFuncCall::Blake3 &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.inputs, - serializer); - serde::Serializable::serialize(obj.outputs, - serializer); - } - - template <> - template - Program::BlackBoxFuncCall::Blake3 - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxFuncCall::Blake3 obj; - obj.inputs = - serde::Deserializable::deserialize(deserializer); - obj.outputs = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BlackBoxFuncCall::SchnorrVerify &lhs, - const BlackBoxFuncCall::SchnorrVerify &rhs) { - if (!(lhs.public_key_x == rhs.public_key_x)) { - return false; - } - if (!(lhs.public_key_y == rhs.public_key_y)) { - return false; - } - if (!(lhs.signature == rhs.signature)) { - return false; - } - if (!(lhs.message == rhs.message)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; - } - - inline std::vector - BlackBoxFuncCall::SchnorrVerify::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); - } - - inline BlackBoxFuncCall::SchnorrVerify - BlackBoxFuncCall::SchnorrVerify::bincodeDeserialize( - std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BlackBoxFuncCall::SchnorrVerify &obj, - Serializer &serializer) { - serde::Serializable::serialize(obj.public_key_x, - serializer); - serde::Serializable::serialize(obj.public_key_y, - serializer); - serde::Serializable::serialize(obj.signature, - serializer); - serde::Serializable::serialize(obj.message, - serializer); - serde::Serializable::serialize(obj.output, - serializer); - } - - template <> - template - Program::BlackBoxFuncCall::SchnorrVerify - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxFuncCall::SchnorrVerify obj; - obj.public_key_x = - serde::Deserializable::deserialize( - deserializer); - obj.public_key_y = - serde::Deserializable::deserialize( - deserializer); - obj.signature = serde::Deserializable::deserialize( - deserializer); - obj.message = - serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BlackBoxFuncCall::PedersenCommitment &lhs, - const BlackBoxFuncCall::PedersenCommitment &rhs) { - if (!(lhs.inputs == rhs.inputs)) { - return false; - } - if (!(lhs.domain_separator == rhs.domain_separator)) { - return false; - } - if (!(lhs.outputs == rhs.outputs)) { - return false; - } - return true; - } - - inline std::vector - BlackBoxFuncCall::PedersenCommitment::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize( - *this, serializer); - return std::move(serializer).bytes(); - } - - inline BlackBoxFuncCall::PedersenCommitment - BlackBoxFuncCall::PedersenCommitment::bincodeDeserialize( - std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable< - BlackBoxFuncCall::PedersenCommitment>::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void - serde::Serializable::serialize( - const Program::BlackBoxFuncCall::PedersenCommitment &obj, - Serializer &serializer) { - serde::Serializable::serialize(obj.inputs, - serializer); - serde::Serializable::serialize( - obj.domain_separator, serializer); - serde::Serializable::serialize(obj.outputs, - serializer); - } - - template <> - template - Program::BlackBoxFuncCall::PedersenCommitment - serde::Deserializable:: - deserialize(Deserializer &deserializer) { - Program::BlackBoxFuncCall::PedersenCommitment obj; - obj.inputs = - serde::Deserializable::deserialize(deserializer); - obj.domain_separator = - serde::Deserializable::deserialize( - deserializer); - obj.outputs = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BlackBoxFuncCall::PedersenHash &lhs, - const BlackBoxFuncCall::PedersenHash &rhs) { - if (!(lhs.inputs == rhs.inputs)) { - return false; - } - if (!(lhs.domain_separator == rhs.domain_separator)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; - } - - inline std::vector - BlackBoxFuncCall::PedersenHash::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); - } - - inline BlackBoxFuncCall::PedersenHash - BlackBoxFuncCall::PedersenHash::bincodeDeserialize( - std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BlackBoxFuncCall::PedersenHash &obj, - Serializer &serializer) { - serde::Serializable::serialize(obj.inputs, - serializer); - serde::Serializable::serialize( - obj.domain_separator, serializer); - serde::Serializable::serialize(obj.output, - serializer); - } - - template <> - template - Program::BlackBoxFuncCall::PedersenHash - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxFuncCall::PedersenHash obj; - obj.inputs = - serde::Deserializable::deserialize(deserializer); - obj.domain_separator = - serde::Deserializable::deserialize( - deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BlackBoxFuncCall::EcdsaSecp256k1 &lhs, - const BlackBoxFuncCall::EcdsaSecp256k1 &rhs) { - if (!(lhs.public_key_x == rhs.public_key_x)) { - return false; - } - if (!(lhs.public_key_y == rhs.public_key_y)) { - return false; - } - if (!(lhs.signature == rhs.signature)) { - return false; - } - if (!(lhs.hashed_message == rhs.hashed_message)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; - } - - inline std::vector - BlackBoxFuncCall::EcdsaSecp256k1::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize( - *this, serializer); - return std::move(serializer).bytes(); - } - - inline BlackBoxFuncCall::EcdsaSecp256k1 - BlackBoxFuncCall::EcdsaSecp256k1::bincodeDeserialize( - std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void - serde::Serializable::serialize( - const Program::BlackBoxFuncCall::EcdsaSecp256k1 &obj, - Serializer &serializer) { - serde::Serializable::serialize(obj.public_key_x, - serializer); - serde::Serializable::serialize(obj.public_key_y, - serializer); - serde::Serializable::serialize(obj.signature, - serializer); - serde::Serializable::serialize( - obj.hashed_message, serializer); - serde::Serializable::serialize(obj.output, - serializer); - } - - template <> - template - Program::BlackBoxFuncCall::EcdsaSecp256k1 - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxFuncCall::EcdsaSecp256k1 obj; - obj.public_key_x = - serde::Deserializable::deserialize( - deserializer); - obj.public_key_y = - serde::Deserializable::deserialize( - deserializer); - obj.signature = serde::Deserializable::deserialize( - deserializer); - obj.hashed_message = - serde::Deserializable::deserialize( - deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BlackBoxFuncCall::EcdsaSecp256r1 &lhs, - const BlackBoxFuncCall::EcdsaSecp256r1 &rhs) { - if (!(lhs.public_key_x == rhs.public_key_x)) { - return false; - } - if (!(lhs.public_key_y == rhs.public_key_y)) { - return false; - } - if (!(lhs.signature == rhs.signature)) { - return false; - } - if (!(lhs.hashed_message == rhs.hashed_message)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; - } - - inline std::vector - BlackBoxFuncCall::EcdsaSecp256r1::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize( - *this, serializer); - return std::move(serializer).bytes(); - } - - inline BlackBoxFuncCall::EcdsaSecp256r1 - BlackBoxFuncCall::EcdsaSecp256r1::bincodeDeserialize( - std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void - serde::Serializable::serialize( - const Program::BlackBoxFuncCall::EcdsaSecp256r1 &obj, - Serializer &serializer) { - serde::Serializable::serialize(obj.public_key_x, - serializer); - serde::Serializable::serialize(obj.public_key_y, - serializer); - serde::Serializable::serialize(obj.signature, - serializer); - serde::Serializable::serialize( - obj.hashed_message, serializer); - serde::Serializable::serialize(obj.output, - serializer); - } - - template <> - template - Program::BlackBoxFuncCall::EcdsaSecp256r1 - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxFuncCall::EcdsaSecp256r1 obj; - obj.public_key_x = - serde::Deserializable::deserialize( - deserializer); - obj.public_key_y = - serde::Deserializable::deserialize( - deserializer); - obj.signature = serde::Deserializable::deserialize( - deserializer); - obj.hashed_message = - serde::Deserializable::deserialize( - deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BlackBoxFuncCall::FixedBaseScalarMul &lhs, - const BlackBoxFuncCall::FixedBaseScalarMul &rhs) { - if (!(lhs.low == rhs.low)) { - return false; - } - if (!(lhs.high == rhs.high)) { - return false; - } - if (!(lhs.outputs == rhs.outputs)) { - return false; - } - return true; - } - - inline std::vector - BlackBoxFuncCall::FixedBaseScalarMul::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize( - *this, serializer); - return std::move(serializer).bytes(); - } - - inline BlackBoxFuncCall::FixedBaseScalarMul - BlackBoxFuncCall::FixedBaseScalarMul::bincodeDeserialize( - std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable< - BlackBoxFuncCall::FixedBaseScalarMul>::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void - serde::Serializable::serialize( - const Program::BlackBoxFuncCall::FixedBaseScalarMul &obj, - Serializer &serializer) { - serde::Serializable::serialize(obj.low, serializer); - serde::Serializable::serialize(obj.high, serializer); - serde::Serializable::serialize(obj.outputs, - serializer); - } - - template <> - template - Program::BlackBoxFuncCall::FixedBaseScalarMul - serde::Deserializable:: - deserialize(Deserializer &deserializer) { - Program::BlackBoxFuncCall::FixedBaseScalarMul obj; - obj.low = - serde::Deserializable::deserialize(deserializer); - obj.high = - serde::Deserializable::deserialize(deserializer); - obj.outputs = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BlackBoxFuncCall::EmbeddedCurveAdd &lhs, - const BlackBoxFuncCall::EmbeddedCurveAdd &rhs) { - if (!(lhs.input1_x == rhs.input1_x)) { - return false; - } - if (!(lhs.input1_y == rhs.input1_y)) { - return false; - } - if (!(lhs.input2_x == rhs.input2_x)) { - return false; - } - if (!(lhs.input2_y == rhs.input2_y)) { - return false; - } - if (!(lhs.outputs == rhs.outputs)) { - return false; - } - return true; - } - - inline std::vector - BlackBoxFuncCall::EmbeddedCurveAdd::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize( - *this, serializer); - return std::move(serializer).bytes(); - } - - inline BlackBoxFuncCall::EmbeddedCurveAdd - BlackBoxFuncCall::EmbeddedCurveAdd::bincodeDeserialize( - std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void - serde::Serializable::serialize( - const Program::BlackBoxFuncCall::EmbeddedCurveAdd &obj, - Serializer &serializer) { - serde::Serializable::serialize(obj.input1_x, - serializer); - serde::Serializable::serialize(obj.input1_y, - serializer); - serde::Serializable::serialize(obj.input2_x, - serializer); - serde::Serializable::serialize(obj.input2_y, - serializer); - serde::Serializable::serialize(obj.outputs, - serializer); - } - - template <> - template - Program::BlackBoxFuncCall::EmbeddedCurveAdd - serde::Deserializable:: - deserialize(Deserializer &deserializer) { - Program::BlackBoxFuncCall::EmbeddedCurveAdd obj; - obj.input1_x = serde::Deserializable::deserialize( - deserializer); - obj.input1_y = serde::Deserializable::deserialize( - deserializer); - obj.input2_x = serde::Deserializable::deserialize( - deserializer); - obj.input2_y = serde::Deserializable::deserialize( - deserializer); - obj.outputs = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BlackBoxFuncCall::Keccak256 &lhs, - const BlackBoxFuncCall::Keccak256 &rhs) { - if (!(lhs.inputs == rhs.inputs)) { - return false; - } - if (!(lhs.var_message_size == rhs.var_message_size)) { - return false; - } - if (!(lhs.outputs == rhs.outputs)) { - return false; - } - return true; - } - - inline std::vector - BlackBoxFuncCall::Keccak256::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); - } - - inline BlackBoxFuncCall::Keccak256 - BlackBoxFuncCall::Keccak256::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BlackBoxFuncCall::Keccak256 &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.inputs, - serializer); - serde::Serializable::serialize( - obj.var_message_size, serializer); - serde::Serializable::serialize(obj.outputs, - serializer); - } - - template <> - template - Program::BlackBoxFuncCall::Keccak256 - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxFuncCall::Keccak256 obj; - obj.inputs = - serde::Deserializable::deserialize(deserializer); - obj.var_message_size = - serde::Deserializable::deserialize( - deserializer); - obj.outputs = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BlackBoxFuncCall::Keccakf1600 &lhs, - const BlackBoxFuncCall::Keccakf1600 &rhs) { - if (!(lhs.inputs == rhs.inputs)) { - return false; - } - if (!(lhs.outputs == rhs.outputs)) { - return false; - } - return true; - } - - inline std::vector - BlackBoxFuncCall::Keccakf1600::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); - } - - inline BlackBoxFuncCall::Keccakf1600 - BlackBoxFuncCall::Keccakf1600::bincodeDeserialize( - std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BlackBoxFuncCall::Keccakf1600 &obj, - Serializer &serializer) { - serde::Serializable::serialize(obj.inputs, - serializer); - serde::Serializable::serialize(obj.outputs, - serializer); - } - - template <> - template - Program::BlackBoxFuncCall::Keccakf1600 - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxFuncCall::Keccakf1600 obj; - obj.inputs = - serde::Deserializable::deserialize(deserializer); - obj.outputs = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BlackBoxFuncCall::RecursiveAggregation &lhs, - const BlackBoxFuncCall::RecursiveAggregation &rhs) { - if (!(lhs.verification_key == rhs.verification_key)) { - return false; - } - if (!(lhs.proof == rhs.proof)) { - return false; - } - if (!(lhs.public_inputs == rhs.public_inputs)) { - return false; - } - if (!(lhs.key_hash == rhs.key_hash)) { - return false; - } - return true; - } - - inline std::vector - BlackBoxFuncCall::RecursiveAggregation::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize( - *this, serializer); - return std::move(serializer).bytes(); - } - - inline BlackBoxFuncCall::RecursiveAggregation - BlackBoxFuncCall::RecursiveAggregation::bincodeDeserialize( - std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable< - BlackBoxFuncCall::RecursiveAggregation>::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable:: - serialize(const Program::BlackBoxFuncCall::RecursiveAggregation &obj, - Serializer &serializer) { - serde::Serializable::serialize( - obj.verification_key, serializer); - serde::Serializable::serialize(obj.proof, serializer); - serde::Serializable::serialize( - obj.public_inputs, serializer); - serde::Serializable::serialize(obj.key_hash, - serializer); - } - - template <> - template - Program::BlackBoxFuncCall::RecursiveAggregation - serde::Deserializable:: - deserialize(Deserializer &deserializer) { - Program::BlackBoxFuncCall::RecursiveAggregation obj; - obj.verification_key = - serde::Deserializable::deserialize( - deserializer); - obj.proof = - serde::Deserializable::deserialize(deserializer); - obj.public_inputs = - serde::Deserializable::deserialize( - deserializer); - obj.key_hash = serde::Deserializable::deserialize( - deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BlackBoxFuncCall::BigIntAdd &lhs, - const BlackBoxFuncCall::BigIntAdd &rhs) { - if (!(lhs.lhs == rhs.lhs)) { - return false; - } - if (!(lhs.rhs == rhs.rhs)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; - } - - inline std::vector - BlackBoxFuncCall::BigIntAdd::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); - } - - inline BlackBoxFuncCall::BigIntAdd - BlackBoxFuncCall::BigIntAdd::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BlackBoxFuncCall::BigIntAdd &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.lhs, serializer); - serde::Serializable::serialize(obj.rhs, serializer); - serde::Serializable::serialize(obj.output, - serializer); - } - - template <> - template - Program::BlackBoxFuncCall::BigIntAdd - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxFuncCall::BigIntAdd obj; - obj.lhs = - serde::Deserializable::deserialize(deserializer); - obj.rhs = - serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BlackBoxFuncCall::BigIntSub &lhs, - const BlackBoxFuncCall::BigIntSub &rhs) { - if (!(lhs.lhs == rhs.lhs)) { - return false; - } - if (!(lhs.rhs == rhs.rhs)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; - } - - inline std::vector - BlackBoxFuncCall::BigIntSub::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); - } - - inline BlackBoxFuncCall::BigIntSub - BlackBoxFuncCall::BigIntSub::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BlackBoxFuncCall::BigIntSub &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.lhs, serializer); - serde::Serializable::serialize(obj.rhs, serializer); - serde::Serializable::serialize(obj.output, - serializer); - } - - template <> - template - Program::BlackBoxFuncCall::BigIntSub - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxFuncCall::BigIntSub obj; - obj.lhs = - serde::Deserializable::deserialize(deserializer); - obj.rhs = - serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BlackBoxFuncCall::BigIntMul &lhs, - const BlackBoxFuncCall::BigIntMul &rhs) { - if (!(lhs.lhs == rhs.lhs)) { - return false; - } - if (!(lhs.rhs == rhs.rhs)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; - } - - inline std::vector - BlackBoxFuncCall::BigIntMul::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); - } - - inline BlackBoxFuncCall::BigIntMul - BlackBoxFuncCall::BigIntMul::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BlackBoxFuncCall::BigIntMul &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.lhs, serializer); - serde::Serializable::serialize(obj.rhs, serializer); - serde::Serializable::serialize(obj.output, - serializer); - } - - template <> - template - Program::BlackBoxFuncCall::BigIntMul - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxFuncCall::BigIntMul obj; - obj.lhs = - serde::Deserializable::deserialize(deserializer); - obj.rhs = - serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BlackBoxFuncCall::BigIntDiv &lhs, - const BlackBoxFuncCall::BigIntDiv &rhs) { - if (!(lhs.lhs == rhs.lhs)) { - return false; - } - if (!(lhs.rhs == rhs.rhs)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; - } - - inline std::vector - BlackBoxFuncCall::BigIntDiv::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); - } - - inline BlackBoxFuncCall::BigIntDiv - BlackBoxFuncCall::BigIntDiv::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BlackBoxFuncCall::BigIntDiv &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.lhs, serializer); - serde::Serializable::serialize(obj.rhs, serializer); - serde::Serializable::serialize(obj.output, - serializer); - } - - template <> - template - Program::BlackBoxFuncCall::BigIntDiv - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxFuncCall::BigIntDiv obj; - obj.lhs = - serde::Deserializable::deserialize(deserializer); - obj.rhs = - serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BlackBoxFuncCall::BigIntFromLeBytes &lhs, - const BlackBoxFuncCall::BigIntFromLeBytes &rhs) { - if (!(lhs.inputs == rhs.inputs)) { - return false; - } - if (!(lhs.modulus == rhs.modulus)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; - } - - inline std::vector - BlackBoxFuncCall::BigIntFromLeBytes::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize( - *this, serializer); - return std::move(serializer).bytes(); - } - - inline BlackBoxFuncCall::BigIntFromLeBytes - BlackBoxFuncCall::BigIntFromLeBytes::bincodeDeserialize( - std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void - serde::Serializable::serialize( - const Program::BlackBoxFuncCall::BigIntFromLeBytes &obj, - Serializer &serializer) { - serde::Serializable::serialize(obj.inputs, - serializer); - serde::Serializable::serialize(obj.modulus, - serializer); - serde::Serializable::serialize(obj.output, - serializer); - } - - template <> - template - Program::BlackBoxFuncCall::BigIntFromLeBytes - serde::Deserializable:: - deserialize(Deserializer &deserializer) { - Program::BlackBoxFuncCall::BigIntFromLeBytes obj; - obj.inputs = - serde::Deserializable::deserialize(deserializer); - obj.modulus = - serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BlackBoxFuncCall::BigIntToLeBytes &lhs, - const BlackBoxFuncCall::BigIntToLeBytes &rhs) { - if (!(lhs.input == rhs.input)) { - return false; - } - if (!(lhs.outputs == rhs.outputs)) { - return false; - } - return true; - } - - inline std::vector - BlackBoxFuncCall::BigIntToLeBytes::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize( - *this, serializer); - return std::move(serializer).bytes(); - } - - inline BlackBoxFuncCall::BigIntToLeBytes - BlackBoxFuncCall::BigIntToLeBytes::bincodeDeserialize( - std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void - serde::Serializable::serialize( - const Program::BlackBoxFuncCall::BigIntToLeBytes &obj, - Serializer &serializer) { - serde::Serializable::serialize(obj.input, serializer); - serde::Serializable::serialize(obj.outputs, - serializer); - } - - template <> - template - Program::BlackBoxFuncCall::BigIntToLeBytes - serde::Deserializable:: - deserialize(Deserializer &deserializer) { - Program::BlackBoxFuncCall::BigIntToLeBytes obj; - obj.input = - serde::Deserializable::deserialize(deserializer); - obj.outputs = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BlackBoxFuncCall::Poseidon2Permutation &lhs, - const BlackBoxFuncCall::Poseidon2Permutation &rhs) { - if (!(lhs.inputs == rhs.inputs)) { - return false; - } - if (!(lhs.outputs == rhs.outputs)) { - return false; - } - if (!(lhs.len == rhs.len)) { - return false; - } - return true; - } - - inline std::vector - BlackBoxFuncCall::Poseidon2Permutation::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize( - *this, serializer); - return std::move(serializer).bytes(); - } - - inline BlackBoxFuncCall::Poseidon2Permutation - BlackBoxFuncCall::Poseidon2Permutation::bincodeDeserialize( - std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable< - BlackBoxFuncCall::Poseidon2Permutation>::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable:: - serialize(const Program::BlackBoxFuncCall::Poseidon2Permutation &obj, - Serializer &serializer) { - serde::Serializable::serialize(obj.inputs, - serializer); - serde::Serializable::serialize(obj.outputs, - serializer); - serde::Serializable::serialize(obj.len, serializer); - } - template <> - template - Program::BlackBoxFuncCall::Poseidon2Permutation - serde::Deserializable:: - deserialize(Deserializer &deserializer) { - Program::BlackBoxFuncCall::Poseidon2Permutation obj; - obj.inputs = - serde::Deserializable::deserialize(deserializer); - obj.outputs = - serde::Deserializable::deserialize(deserializer); - obj.len = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BlackBoxFuncCall::Sha256Compression &lhs, - const BlackBoxFuncCall::Sha256Compression &rhs) { - if (!(lhs.inputs == rhs.inputs)) { - return false; - } - if (!(lhs.hash_values == rhs.hash_values)) { - return false; - } - if (!(lhs.outputs == rhs.outputs)) { - return false; - } - return true; - } - - inline std::vector - BlackBoxFuncCall::Sha256Compression::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize( - *this, serializer); - return std::move(serializer).bytes(); - } - - inline BlackBoxFuncCall::Sha256Compression - BlackBoxFuncCall::Sha256Compression::bincodeDeserialize( - std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void - serde::Serializable::serialize( - const Program::BlackBoxFuncCall::Sha256Compression &obj, - Serializer &serializer) { - serde::Serializable::serialize(obj.inputs, - serializer); - serde::Serializable::serialize(obj.hash_values, - serializer); - serde::Serializable::serialize(obj.outputs, - serializer); - } - - template <> - template - Program::BlackBoxFuncCall::Sha256Compression - serde::Deserializable:: - deserialize(Deserializer &deserializer) { - Program::BlackBoxFuncCall::Sha256Compression obj; - obj.inputs = - serde::Deserializable::deserialize(deserializer); - obj.hash_values = - serde::Deserializable::deserialize( - deserializer); - obj.outputs = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BlackBoxOp &lhs, const BlackBoxOp &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; - } - - inline std::vector BlackBoxOp::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } - - inline BlackBoxOp BlackBoxOp::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BlackBoxOp &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.value, serializer); - serializer.decrease_container_depth(); - } + inline BrilligOpcode::Return BrilligOpcode::Return::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } - template <> - template - Program::BlackBoxOp serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::BlackBoxOp obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; - } - - namespace Program { - - inline bool operator==(const BlackBoxOp::Blake2s &lhs, - const BlackBoxOp::Blake2s &rhs) { - if (!(lhs.message == rhs.message)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; - } - - inline std::vector BlackBoxOp::Blake2s::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } - - inline BlackBoxOp::Blake2s - BlackBoxOp::Blake2s::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BlackBoxOp::Blake2s &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.message, - serializer); - serde::Serializable::serialize(obj.output, - serializer); - } - - template <> - template - Program::BlackBoxOp::Blake2s - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxOp::Blake2s obj; - obj.message = - serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BlackBoxOp::Blake3 &lhs, - const BlackBoxOp::Blake3 &rhs) { - if (!(lhs.message == rhs.message)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; - } - - inline std::vector BlackBoxOp::Blake3::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } - - inline BlackBoxOp::Blake3 - BlackBoxOp::Blake3::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BlackBoxOp::Blake3 &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.message, - serializer); - serde::Serializable::serialize(obj.output, - serializer); - } - - template <> - template - Program::BlackBoxOp::Blake3 - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxOp::Blake3 obj; - obj.message = - serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BlackBoxOp::Keccak256 &lhs, - const BlackBoxOp::Keccak256 &rhs) { - if (!(lhs.message == rhs.message)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; - } - - inline std::vector BlackBoxOp::Keccak256::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } - - inline BlackBoxOp::Keccak256 - BlackBoxOp::Keccak256::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BlackBoxOp::Keccak256 &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.message, - serializer); - serde::Serializable::serialize(obj.output, - serializer); - } - - template <> - template - Program::BlackBoxOp::Keccak256 - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxOp::Keccak256 obj; - obj.message = - serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BlackBoxOp::Keccakf1600 &lhs, - const BlackBoxOp::Keccakf1600 &rhs) { - if (!(lhs.message == rhs.message)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; - } - - inline std::vector - BlackBoxOp::Keccakf1600::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } - - inline BlackBoxOp::Keccakf1600 - BlackBoxOp::Keccakf1600::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BlackBoxOp::Keccakf1600 &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.message, - serializer); - serde::Serializable::serialize(obj.output, - serializer); - } - - template <> - template - Program::BlackBoxOp::Keccakf1600 - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxOp::Keccakf1600 obj; - obj.message = - serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BlackBoxOp::EcdsaSecp256k1 &lhs, - const BlackBoxOp::EcdsaSecp256k1 &rhs) { - if (!(lhs.hashed_msg == rhs.hashed_msg)) { - return false; - } - if (!(lhs.public_key_x == rhs.public_key_x)) { - return false; - } - if (!(lhs.public_key_y == rhs.public_key_y)) { - return false; - } - if (!(lhs.signature == rhs.signature)) { - return false; - } - if (!(lhs.result == rhs.result)) { - return false; - } - return true; - } - - inline std::vector - BlackBoxOp::EcdsaSecp256k1::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); - } - - inline BlackBoxOp::EcdsaSecp256k1 - BlackBoxOp::EcdsaSecp256k1::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BlackBoxOp::EcdsaSecp256k1 &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.hashed_msg, - serializer); - serde::Serializable::serialize(obj.public_key_x, - serializer); - serde::Serializable::serialize(obj.public_key_y, - serializer); - serde::Serializable::serialize(obj.signature, - serializer); - serde::Serializable::serialize(obj.result, - serializer); - } - - template <> - template - Program::BlackBoxOp::EcdsaSecp256k1 - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxOp::EcdsaSecp256k1 obj; - obj.hashed_msg = - serde::Deserializable::deserialize( - deserializer); - obj.public_key_x = - serde::Deserializable::deserialize( - deserializer); - obj.public_key_y = - serde::Deserializable::deserialize( - deserializer); - obj.signature = serde::Deserializable::deserialize( - deserializer); - obj.result = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BlackBoxOp::EcdsaSecp256r1 &lhs, - const BlackBoxOp::EcdsaSecp256r1 &rhs) { - if (!(lhs.hashed_msg == rhs.hashed_msg)) { - return false; - } - if (!(lhs.public_key_x == rhs.public_key_x)) { - return false; - } - if (!(lhs.public_key_y == rhs.public_key_y)) { - return false; - } - if (!(lhs.signature == rhs.signature)) { - return false; - } - if (!(lhs.result == rhs.result)) { - return false; - } - return true; - } - - inline std::vector - BlackBoxOp::EcdsaSecp256r1::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); - } - - inline BlackBoxOp::EcdsaSecp256r1 - BlackBoxOp::EcdsaSecp256r1::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BlackBoxOp::EcdsaSecp256r1 &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.hashed_msg, - serializer); - serde::Serializable::serialize(obj.public_key_x, - serializer); - serde::Serializable::serialize(obj.public_key_y, - serializer); - serde::Serializable::serialize(obj.signature, - serializer); - serde::Serializable::serialize(obj.result, - serializer); - } - - template <> - template - Program::BlackBoxOp::EcdsaSecp256r1 - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxOp::EcdsaSecp256r1 obj; - obj.hashed_msg = - serde::Deserializable::deserialize( - deserializer); - obj.public_key_x = - serde::Deserializable::deserialize( - deserializer); - obj.public_key_y = - serde::Deserializable::deserialize( - deserializer); - obj.signature = serde::Deserializable::deserialize( - deserializer); - obj.result = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BlackBoxOp::SchnorrVerify &lhs, - const BlackBoxOp::SchnorrVerify &rhs) { - if (!(lhs.public_key_x == rhs.public_key_x)) { - return false; - } - if (!(lhs.public_key_y == rhs.public_key_y)) { - return false; - } - if (!(lhs.message == rhs.message)) { - return false; - } - if (!(lhs.signature == rhs.signature)) { - return false; - } - if (!(lhs.result == rhs.result)) { - return false; - } - return true; - } - - inline std::vector - BlackBoxOp::SchnorrVerify::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); - } - - inline BlackBoxOp::SchnorrVerify - BlackBoxOp::SchnorrVerify::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BlackBoxOp::SchnorrVerify &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.public_key_x, - serializer); - serde::Serializable::serialize(obj.public_key_y, - serializer); - serde::Serializable::serialize(obj.message, - serializer); - serde::Serializable::serialize(obj.signature, - serializer); - serde::Serializable::serialize(obj.result, - serializer); - } - - template <> - template - Program::BlackBoxOp::SchnorrVerify - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxOp::SchnorrVerify obj; - obj.public_key_x = - serde::Deserializable::deserialize( - deserializer); - obj.public_key_y = - serde::Deserializable::deserialize( - deserializer); - obj.message = - serde::Deserializable::deserialize(deserializer); - obj.signature = serde::Deserializable::deserialize( - deserializer); - obj.result = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BlackBoxOp::PedersenCommitment &lhs, - const BlackBoxOp::PedersenCommitment &rhs) { - if (!(lhs.inputs == rhs.inputs)) { - return false; - } - if (!(lhs.domain_separator == rhs.domain_separator)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; - } - - inline std::vector - BlackBoxOp::PedersenCommitment::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); - } - - inline BlackBoxOp::PedersenCommitment - BlackBoxOp::PedersenCommitment::bincodeDeserialize( - std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BlackBoxOp::PedersenCommitment &obj, - Serializer &serializer) { - serde::Serializable::serialize(obj.inputs, - serializer); - serde::Serializable::serialize( - obj.domain_separator, serializer); - serde::Serializable::serialize(obj.output, - serializer); - } - - template <> - template - Program::BlackBoxOp::PedersenCommitment - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxOp::PedersenCommitment obj; - obj.inputs = - serde::Deserializable::deserialize(deserializer); - obj.domain_separator = - serde::Deserializable::deserialize( - deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BlackBoxOp::PedersenHash &lhs, - const BlackBoxOp::PedersenHash &rhs) { - if (!(lhs.inputs == rhs.inputs)) { - return false; - } - if (!(lhs.domain_separator == rhs.domain_separator)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; - } - - inline std::vector - BlackBoxOp::PedersenHash::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } - - inline BlackBoxOp::PedersenHash - BlackBoxOp::PedersenHash::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BlackBoxOp::PedersenHash &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.inputs, - serializer); - serde::Serializable::serialize( - obj.domain_separator, serializer); - serde::Serializable::serialize(obj.output, - serializer); - } - - template <> - template - Program::BlackBoxOp::PedersenHash - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxOp::PedersenHash obj; - obj.inputs = - serde::Deserializable::deserialize(deserializer); - obj.domain_separator = - serde::Deserializable::deserialize( - deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BlackBoxOp::FixedBaseScalarMul &lhs, - const BlackBoxOp::FixedBaseScalarMul &rhs) { - if (!(lhs.low == rhs.low)) { - return false; - } - if (!(lhs.high == rhs.high)) { - return false; - } - if (!(lhs.result == rhs.result)) { - return false; - } - return true; - } - - inline std::vector - BlackBoxOp::FixedBaseScalarMul::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); - } - - inline BlackBoxOp::FixedBaseScalarMul - BlackBoxOp::FixedBaseScalarMul::bincodeDeserialize( - std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BlackBoxOp::FixedBaseScalarMul &obj, - Serializer &serializer) { - serde::Serializable::serialize(obj.low, serializer); - serde::Serializable::serialize(obj.high, serializer); - serde::Serializable::serialize(obj.result, - serializer); - } - - template <> - template - Program::BlackBoxOp::FixedBaseScalarMul - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxOp::FixedBaseScalarMul obj; - obj.low = - serde::Deserializable::deserialize(deserializer); - obj.high = - serde::Deserializable::deserialize(deserializer); - obj.result = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BlackBoxOp::EmbeddedCurveAdd &lhs, - const BlackBoxOp::EmbeddedCurveAdd &rhs) { - if (!(lhs.input1_x == rhs.input1_x)) { - return false; - } - if (!(lhs.input1_y == rhs.input1_y)) { - return false; - } - if (!(lhs.input2_x == rhs.input2_x)) { - return false; - } - if (!(lhs.input2_y == rhs.input2_y)) { - return false; - } - if (!(lhs.result == rhs.result)) { - return false; - } - return true; - } - - inline std::vector - BlackBoxOp::EmbeddedCurveAdd::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); - } - - inline BlackBoxOp::EmbeddedCurveAdd - BlackBoxOp::EmbeddedCurveAdd::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BlackBoxOp::EmbeddedCurveAdd &obj, - Serializer &serializer) { - serde::Serializable::serialize(obj.input1_x, - serializer); - serde::Serializable::serialize(obj.input1_y, - serializer); - serde::Serializable::serialize(obj.input2_x, - serializer); - serde::Serializable::serialize(obj.input2_y, - serializer); - serde::Serializable::serialize(obj.result, - serializer); - } - - template <> - template - Program::BlackBoxOp::EmbeddedCurveAdd - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxOp::EmbeddedCurveAdd obj; - obj.input1_x = serde::Deserializable::deserialize( - deserializer); - obj.input1_y = serde::Deserializable::deserialize( - deserializer); - obj.input2_x = serde::Deserializable::deserialize( - deserializer); - obj.input2_y = serde::Deserializable::deserialize( - deserializer); - obj.result = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BlackBoxOp::BigIntAdd &lhs, - const BlackBoxOp::BigIntAdd &rhs) { - if (!(lhs.lhs == rhs.lhs)) { - return false; - } - if (!(lhs.rhs == rhs.rhs)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; - } - - inline std::vector BlackBoxOp::BigIntAdd::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } - - inline BlackBoxOp::BigIntAdd - BlackBoxOp::BigIntAdd::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BlackBoxOp::BigIntAdd &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.lhs, serializer); - serde::Serializable::serialize(obj.rhs, serializer); - serde::Serializable::serialize(obj.output, - serializer); - } - - template <> - template - Program::BlackBoxOp::BigIntAdd - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxOp::BigIntAdd obj; - obj.lhs = - serde::Deserializable::deserialize(deserializer); - obj.rhs = - serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BlackBoxOp::BigIntSub &lhs, - const BlackBoxOp::BigIntSub &rhs) { - if (!(lhs.lhs == rhs.lhs)) { - return false; - } - if (!(lhs.rhs == rhs.rhs)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; - } - - inline std::vector BlackBoxOp::BigIntSub::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } - - inline BlackBoxOp::BigIntSub - BlackBoxOp::BigIntSub::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BlackBoxOp::BigIntSub &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.lhs, serializer); - serde::Serializable::serialize(obj.rhs, serializer); - serde::Serializable::serialize(obj.output, - serializer); - } - - template <> - template - Program::BlackBoxOp::BigIntSub - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxOp::BigIntSub obj; - obj.lhs = - serde::Deserializable::deserialize(deserializer); - obj.rhs = - serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BlackBoxOp::BigIntMul &lhs, - const BlackBoxOp::BigIntMul &rhs) { - if (!(lhs.lhs == rhs.lhs)) { - return false; - } - if (!(lhs.rhs == rhs.rhs)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; - } - - inline std::vector BlackBoxOp::BigIntMul::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } - - inline BlackBoxOp::BigIntMul - BlackBoxOp::BigIntMul::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BlackBoxOp::BigIntMul &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.lhs, serializer); - serde::Serializable::serialize(obj.rhs, serializer); - serde::Serializable::serialize(obj.output, - serializer); - } - - template <> - template - Program::BlackBoxOp::BigIntMul - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxOp::BigIntMul obj; - obj.lhs = - serde::Deserializable::deserialize(deserializer); - obj.rhs = - serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BlackBoxOp::BigIntDiv &lhs, - const BlackBoxOp::BigIntDiv &rhs) { - if (!(lhs.lhs == rhs.lhs)) { - return false; - } - if (!(lhs.rhs == rhs.rhs)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; - } - - inline std::vector BlackBoxOp::BigIntDiv::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } - - inline BlackBoxOp::BigIntDiv - BlackBoxOp::BigIntDiv::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BlackBoxOp::BigIntDiv &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.lhs, serializer); - serde::Serializable::serialize(obj.rhs, serializer); - serde::Serializable::serialize(obj.output, - serializer); - } - - template <> - template - Program::BlackBoxOp::BigIntDiv - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxOp::BigIntDiv obj; - obj.lhs = - serde::Deserializable::deserialize(deserializer); - obj.rhs = - serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BlackBoxOp::BigIntFromLeBytes &lhs, - const BlackBoxOp::BigIntFromLeBytes &rhs) { - if (!(lhs.inputs == rhs.inputs)) { - return false; - } - if (!(lhs.modulus == rhs.modulus)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; - } - - inline std::vector - BlackBoxOp::BigIntFromLeBytes::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); - } - - inline BlackBoxOp::BigIntFromLeBytes - BlackBoxOp::BigIntFromLeBytes::bincodeDeserialize( - std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BlackBoxOp::BigIntFromLeBytes &obj, - Serializer &serializer) { - serde::Serializable::serialize(obj.inputs, - serializer); - serde::Serializable::serialize(obj.modulus, - serializer); - serde::Serializable::serialize(obj.output, - serializer); - } - - template <> - template - Program::BlackBoxOp::BigIntFromLeBytes - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxOp::BigIntFromLeBytes obj; - obj.inputs = - serde::Deserializable::deserialize(deserializer); - obj.modulus = - serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BlackBoxOp::BigIntToLeBytes &lhs, - const BlackBoxOp::BigIntToLeBytes &rhs) { - if (!(lhs.input == rhs.input)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; - } - - inline std::vector - BlackBoxOp::BigIntToLeBytes::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); - } - - inline BlackBoxOp::BigIntToLeBytes - BlackBoxOp::BigIntToLeBytes::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BlackBoxOp::BigIntToLeBytes &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.input, serializer); - serde::Serializable::serialize(obj.output, - serializer); - } - - template <> - template - Program::BlackBoxOp::BigIntToLeBytes - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxOp::BigIntToLeBytes obj; - obj.input = - serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BlackBoxOp::Poseidon2Permutation &lhs, - const BlackBoxOp::Poseidon2Permutation &rhs) { - if (!(lhs.message == rhs.message)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - if (!(lhs.len == rhs.len)) { - return false; - } - return true; - } - - inline std::vector - BlackBoxOp::Poseidon2Permutation::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize( - *this, serializer); - return std::move(serializer).bytes(); - } - - inline BlackBoxOp::Poseidon2Permutation - BlackBoxOp::Poseidon2Permutation::bincodeDeserialize( - std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void - serde::Serializable::serialize( - const Program::BlackBoxOp::Poseidon2Permutation &obj, - Serializer &serializer) { - serde::Serializable::serialize(obj.message, - serializer); - serde::Serializable::serialize(obj.output, - serializer); - serde::Serializable::serialize(obj.len, serializer); - } +} // end of namespace Program - template <> - template - Program::BlackBoxOp::Poseidon2Permutation - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxOp::Poseidon2Permutation obj; - obj.message = - serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - obj.len = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BlackBoxOp::Sha256Compression &lhs, - const BlackBoxOp::Sha256Compression &rhs) { - if (!(lhs.input == rhs.input)) { - return false; - } - if (!(lhs.hash_values == rhs.hash_values)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; - } - - inline std::vector - BlackBoxOp::Sha256Compression::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); - } - - inline BlackBoxOp::Sha256Compression - BlackBoxOp::Sha256Compression::bincodeDeserialize( - std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BlackBoxOp::Sha256Compression &obj, - Serializer &serializer) { - serde::Serializable::serialize(obj.input, serializer); - serde::Serializable::serialize(obj.hash_values, - serializer); - serde::Serializable::serialize(obj.output, - serializer); - } - - template <> - template - Program::BlackBoxOp::Sha256Compression - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxOp::Sha256Compression obj; - obj.input = - serde::Deserializable::deserialize(deserializer); - obj.hash_values = - serde::Deserializable::deserialize( - deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BlockId &lhs, const BlockId &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; - } - - inline std::vector BlockId::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } - - inline BlockId BlockId::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void - serde::Serializable::serialize(const Program::BlockId &obj, - Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.value, serializer); - serializer.decrease_container_depth(); - } +template <> +template +void serde::Serializable::serialize(const Program::BrilligOpcode::Return &obj, Serializer &serializer) { +} - template <> - template - Program::BlockId serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::BlockId obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); +template <> +template +Program::BrilligOpcode::Return serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOpcode::Return obj; return obj; - } +} - namespace Program { +namespace Program { - inline bool operator==(const BrilligBytecode &lhs, - const BrilligBytecode &rhs) { - if (!(lhs.bytecode == rhs.bytecode)) { - return false; + inline bool operator==(const BrilligOpcode::ForeignCall &lhs, const BrilligOpcode::ForeignCall &rhs) { + if (!(lhs.function == rhs.function)) { return false; } + if (!(lhs.destinations == rhs.destinations)) { return false; } + if (!(lhs.destination_value_types == rhs.destination_value_types)) { return false; } + if (!(lhs.inputs == rhs.inputs)) { return false; } + if (!(lhs.input_value_types == rhs.input_value_types)) { return false; } + return true; } - return true; - } - return true; - } // namespace Program - inline std::vector BrilligBytecode::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } + inline std::vector BrilligOpcode::ForeignCall::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - inline BrilligBytecode - BrilligBytecode::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); + inline BrilligOpcode::ForeignCall BrilligOpcode::ForeignCall::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; } - return value; - } - } // end of namespace Program +} // end of namespace Program - template <> - template - void serde::Serializable::serialize( - const Program::BrilligBytecode &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.bytecode, - serializer); - serializer.decrease_container_depth(); - } +template <> +template +void serde::Serializable::serialize(const Program::BrilligOpcode::ForeignCall &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.function, serializer); + serde::Serializable::serialize(obj.destinations, serializer); + serde::Serializable::serialize(obj.destination_value_types, serializer); + serde::Serializable::serialize(obj.inputs, serializer); + serde::Serializable::serialize(obj.input_value_types, serializer); +} - template <> - template - Program::BrilligBytecode - serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::BrilligBytecode obj; - obj.bytecode = serde::Deserializable::deserialize( - deserializer); - deserializer.decrease_container_depth(); +template <> +template +Program::BrilligOpcode::ForeignCall serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOpcode::ForeignCall obj; + obj.function = serde::Deserializable::deserialize(deserializer); + obj.destinations = serde::Deserializable::deserialize(deserializer); + obj.destination_value_types = serde::Deserializable::deserialize(deserializer); + obj.inputs = serde::Deserializable::deserialize(deserializer); + obj.input_value_types = serde::Deserializable::deserialize(deserializer); return obj; - } +} - namespace Program { +namespace Program { - inline bool operator==(const BrilligInputs &lhs, const BrilligInputs &rhs) { - if (!(lhs.value == rhs.value)) { - return false; + inline bool operator==(const BrilligOpcode::Mov &lhs, const BrilligOpcode::Mov &rhs) { + if (!(lhs.destination == rhs.destination)) { return false; } + if (!(lhs.source == rhs.source)) { return false; } + return true; } - return true; - } - inline std::vector BrilligInputs::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } + inline std::vector BrilligOpcode::Mov::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - inline BrilligInputs - BrilligInputs::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); + inline BrilligOpcode::Mov BrilligOpcode::Mov::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; } - return value; - } - } // end of namespace Program +} // end of namespace Program - template <> - template - void serde::Serializable::serialize( - const Program::BrilligInputs &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.value, serializer); - serializer.decrease_container_depth(); - } +template <> +template +void serde::Serializable::serialize(const Program::BrilligOpcode::Mov &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.destination, serializer); + serde::Serializable::serialize(obj.source, serializer); +} - template <> - template - Program::BrilligInputs - serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::BrilligInputs obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); +template <> +template +Program::BrilligOpcode::Mov serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOpcode::Mov obj; + obj.destination = serde::Deserializable::deserialize(deserializer); + obj.source = serde::Deserializable::deserialize(deserializer); return obj; - } +} - namespace Program { +namespace Program { - inline bool operator==(const BrilligInputs::Single &lhs, - const BrilligInputs::Single &rhs) { - if (!(lhs.value == rhs.value)) { - return false; + inline bool operator==(const BrilligOpcode::ConditionalMov &lhs, const BrilligOpcode::ConditionalMov &rhs) { + if (!(lhs.destination == rhs.destination)) { return false; } + if (!(lhs.source_a == rhs.source_a)) { return false; } + if (!(lhs.source_b == rhs.source_b)) { return false; } + if (!(lhs.condition == rhs.condition)) { return false; } + return true; } - return true; - } - inline std::vector BrilligInputs::Single::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } + inline std::vector BrilligOpcode::ConditionalMov::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - inline BrilligInputs::Single - BrilligInputs::Single::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); + inline BrilligOpcode::ConditionalMov BrilligOpcode::ConditionalMov::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; } - return value; - } - } // end of namespace Program +} // end of namespace Program - template <> - template - void serde::Serializable::serialize( - const Program::BrilligInputs::Single &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.value, serializer); - } +template <> +template +void serde::Serializable::serialize(const Program::BrilligOpcode::ConditionalMov &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.destination, serializer); + serde::Serializable::serialize(obj.source_a, serializer); + serde::Serializable::serialize(obj.source_b, serializer); + serde::Serializable::serialize(obj.condition, serializer); +} - template <> - template - Program::BrilligInputs::Single - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligInputs::Single obj; - obj.value = - serde::Deserializable::deserialize(deserializer); +template <> +template +Program::BrilligOpcode::ConditionalMov serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOpcode::ConditionalMov obj; + obj.destination = serde::Deserializable::deserialize(deserializer); + obj.source_a = serde::Deserializable::deserialize(deserializer); + obj.source_b = serde::Deserializable::deserialize(deserializer); + obj.condition = serde::Deserializable::deserialize(deserializer); return obj; - } +} - namespace Program { +namespace Program { - inline bool operator==(const BrilligInputs::Array &lhs, - const BrilligInputs::Array &rhs) { - if (!(lhs.value == rhs.value)) { - return false; + inline bool operator==(const BrilligOpcode::Load &lhs, const BrilligOpcode::Load &rhs) { + if (!(lhs.destination == rhs.destination)) { return false; } + if (!(lhs.source_pointer == rhs.source_pointer)) { return false; } + return true; } - return true; - } - - inline std::vector BrilligInputs::Array::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } - inline BrilligInputs::Array - BrilligInputs::Array::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); + inline std::vector BrilligOpcode::Load::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); } - return value; - } - } // end of namespace Program + inline BrilligOpcode::Load BrilligOpcode::Load::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } - template <> - template - void serde::Serializable::serialize( - const Program::BrilligInputs::Array &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.value, serializer); - } +} // end of namespace Program - template <> - template - Program::BrilligInputs::Array - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligInputs::Array obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BrilligInputs::MemoryArray &lhs, - const BrilligInputs::MemoryArray &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; - } - - inline std::vector - BrilligInputs::MemoryArray::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); - } - - inline BrilligInputs::MemoryArray - BrilligInputs::MemoryArray::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BrilligInputs::MemoryArray &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.value, serializer); - } +template <> +template +void serde::Serializable::serialize(const Program::BrilligOpcode::Load &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.destination, serializer); + serde::Serializable::serialize(obj.source_pointer, serializer); +} - template <> - template - Program::BrilligInputs::MemoryArray - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligInputs::MemoryArray obj; - obj.value = - serde::Deserializable::deserialize(deserializer); +template <> +template +Program::BrilligOpcode::Load serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOpcode::Load obj; + obj.destination = serde::Deserializable::deserialize(deserializer); + obj.source_pointer = serde::Deserializable::deserialize(deserializer); return obj; - } +} - namespace Program { +namespace Program { - inline bool operator==(const BrilligOpcode &lhs, const BrilligOpcode &rhs) { - if (!(lhs.value == rhs.value)) { - return false; + inline bool operator==(const BrilligOpcode::Store &lhs, const BrilligOpcode::Store &rhs) { + if (!(lhs.destination_pointer == rhs.destination_pointer)) { return false; } + if (!(lhs.source == rhs.source)) { return false; } + return true; } - return true; - } - inline std::vector BrilligOpcode::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } + inline std::vector BrilligOpcode::Store::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - inline BrilligOpcode - BrilligOpcode::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); + inline BrilligOpcode::Store BrilligOpcode::Store::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; } - return value; - } - } // end of namespace Program +} // end of namespace Program - template <> - template - void serde::Serializable::serialize( - const Program::BrilligOpcode &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.value, serializer); - serializer.decrease_container_depth(); - } +template <> +template +void serde::Serializable::serialize(const Program::BrilligOpcode::Store &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.destination_pointer, serializer); + serde::Serializable::serialize(obj.source, serializer); +} - template <> - template - Program::BrilligOpcode - serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::BrilligOpcode obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); +template <> +template +Program::BrilligOpcode::Store serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOpcode::Store obj; + obj.destination_pointer = serde::Deserializable::deserialize(deserializer); + obj.source = serde::Deserializable::deserialize(deserializer); return obj; - } +} - namespace Program { +namespace Program { - inline bool operator==(const BrilligOpcode::BinaryFieldOp &lhs, - const BrilligOpcode::BinaryFieldOp &rhs) { - if (!(lhs.destination == rhs.destination)) { - return false; - } - if (!(lhs.op == rhs.op)) { - return false; - } - if (!(lhs.lhs == rhs.lhs)) { - return false; + inline bool operator==(const BrilligOpcode::BlackBox &lhs, const BrilligOpcode::BlackBox &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; } - if (!(lhs.rhs == rhs.rhs)) { - return false; - } - return true; - } - - inline std::vector - BrilligOpcode::BinaryFieldOp::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); - } - inline BrilligOpcode::BinaryFieldOp - BrilligOpcode::BinaryFieldOp::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); + inline std::vector BrilligOpcode::BlackBox::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BrilligOpcode::BinaryFieldOp &obj, - Serializer &serializer) { - serde::Serializable::serialize(obj.destination, - serializer); - serde::Serializable::serialize(obj.op, serializer); - serde::Serializable::serialize(obj.lhs, serializer); - serde::Serializable::serialize(obj.rhs, serializer); - } - template <> - template - Program::BrilligOpcode::BinaryFieldOp - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOpcode::BinaryFieldOp obj; - obj.destination = - serde::Deserializable::deserialize( - deserializer); - obj.op = serde::Deserializable::deserialize(deserializer); - obj.lhs = - serde::Deserializable::deserialize(deserializer); - obj.rhs = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BrilligOpcode::BinaryIntOp &lhs, - const BrilligOpcode::BinaryIntOp &rhs) { - if (!(lhs.destination == rhs.destination)) { - return false; - } - if (!(lhs.op == rhs.op)) { - return false; - } - if (!(lhs.bit_size == rhs.bit_size)) { - return false; - } - if (!(lhs.lhs == rhs.lhs)) { - return false; - } - if (!(lhs.rhs == rhs.rhs)) { - return false; - } - return true; - } - - inline std::vector - BrilligOpcode::BinaryIntOp::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); - } - - inline BrilligOpcode::BinaryIntOp - BrilligOpcode::BinaryIntOp::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BrilligOpcode::BinaryIntOp &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.destination, - serializer); - serde::Serializable::serialize(obj.op, serializer); - serde::Serializable::serialize(obj.bit_size, - serializer); - serde::Serializable::serialize(obj.lhs, serializer); - serde::Serializable::serialize(obj.rhs, serializer); - } + inline BrilligOpcode::BlackBox BrilligOpcode::BlackBox::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } - template <> - template - Program::BrilligOpcode::BinaryIntOp - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOpcode::BinaryIntOp obj; - obj.destination = - serde::Deserializable::deserialize( - deserializer); - obj.op = serde::Deserializable::deserialize(deserializer); - obj.bit_size = serde::Deserializable::deserialize( - deserializer); - obj.lhs = - serde::Deserializable::deserialize(deserializer); - obj.rhs = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BrilligOpcode::Cast &lhs, - const BrilligOpcode::Cast &rhs) { - if (!(lhs.destination == rhs.destination)) { - return false; - } - if (!(lhs.source == rhs.source)) { - return false; - } - if (!(lhs.bit_size == rhs.bit_size)) { - return false; - } - return true; - } - - inline std::vector BrilligOpcode::Cast::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } - - inline BrilligOpcode::Cast - BrilligOpcode::Cast::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BrilligOpcode::Cast &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.destination, - serializer); - serde::Serializable::serialize(obj.source, - serializer); - serde::Serializable::serialize(obj.bit_size, - serializer); - } - - template <> - template - Program::BrilligOpcode::Cast - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOpcode::Cast obj; - obj.destination = - serde::Deserializable::deserialize( - deserializer); - obj.source = - serde::Deserializable::deserialize(deserializer); - obj.bit_size = serde::Deserializable::deserialize( - deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BrilligOpcode::JumpIfNot &lhs, - const BrilligOpcode::JumpIfNot &rhs) { - if (!(lhs.condition == rhs.condition)) { - return false; - } - if (!(lhs.location == rhs.location)) { - return false; - } - return true; - } - - inline std::vector - BrilligOpcode::JumpIfNot::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } - - inline BrilligOpcode::JumpIfNot - BrilligOpcode::JumpIfNot::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BrilligOpcode::JumpIfNot &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.condition, - serializer); - serde::Serializable::serialize(obj.location, - serializer); - } - - template <> - template - Program::BrilligOpcode::JumpIfNot - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOpcode::JumpIfNot obj; - obj.condition = serde::Deserializable::deserialize( - deserializer); - obj.location = serde::Deserializable::deserialize( - deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BrilligOpcode::JumpIf &lhs, - const BrilligOpcode::JumpIf &rhs) { - if (!(lhs.condition == rhs.condition)) { - return false; - } - if (!(lhs.location == rhs.location)) { - return false; - } - return true; - } - - inline std::vector BrilligOpcode::JumpIf::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } - - inline BrilligOpcode::JumpIf - BrilligOpcode::JumpIf::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BrilligOpcode::JumpIf &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.condition, - serializer); - serde::Serializable::serialize(obj.location, - serializer); - } - - template <> - template - Program::BrilligOpcode::JumpIf - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOpcode::JumpIf obj; - obj.condition = serde::Deserializable::deserialize( - deserializer); - obj.location = serde::Deserializable::deserialize( - deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BrilligOpcode::Jump &lhs, - const BrilligOpcode::Jump &rhs) { - if (!(lhs.location == rhs.location)) { - return false; - } - return true; - } - - inline std::vector BrilligOpcode::Jump::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } - - inline BrilligOpcode::Jump - BrilligOpcode::Jump::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BrilligOpcode::Jump &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.location, - serializer); - } - - template <> - template - Program::BrilligOpcode::Jump - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOpcode::Jump obj; - obj.location = serde::Deserializable::deserialize( - deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BrilligOpcode::CalldataCopy &lhs, - const BrilligOpcode::CalldataCopy &rhs) { - if (!(lhs.destination_address == rhs.destination_address)) { - return false; - } - if (!(lhs.size == rhs.size)) { - return false; - } - if (!(lhs.offset == rhs.offset)) { - return false; - } - return true; - } - - inline std::vector - BrilligOpcode::CalldataCopy::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); - } - - inline BrilligOpcode::CalldataCopy - BrilligOpcode::CalldataCopy::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BrilligOpcode::CalldataCopy &obj, Serializer &serializer) { - serde::Serializable::serialize( - obj.destination_address, serializer); - serde::Serializable::serialize(obj.size, serializer); - serde::Serializable::serialize(obj.offset, - serializer); - } - - template <> - template - Program::BrilligOpcode::CalldataCopy - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOpcode::CalldataCopy obj; - obj.destination_address = - serde::Deserializable::deserialize( - deserializer); - obj.size = - serde::Deserializable::deserialize(deserializer); - obj.offset = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BrilligOpcode::Call &lhs, - const BrilligOpcode::Call &rhs) { - if (!(lhs.location == rhs.location)) { - return false; - } - return true; - } - - inline std::vector BrilligOpcode::Call::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } - - inline BrilligOpcode::Call - BrilligOpcode::Call::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BrilligOpcode::Call &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.location, - serializer); - } - - template <> - template - Program::BrilligOpcode::Call - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOpcode::Call obj; - obj.location = serde::Deserializable::deserialize( - deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BrilligOpcode::Const &lhs, - const BrilligOpcode::Const &rhs) { - if (!(lhs.destination == rhs.destination)) { - return false; - } - if (!(lhs.bit_size == rhs.bit_size)) { - return false; - } - if (!(lhs.value == rhs.value)) { - return false; - } - return true; - } - - inline std::vector BrilligOpcode::Const::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } - - inline BrilligOpcode::Const - BrilligOpcode::Const::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BrilligOpcode::Const &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.destination, - serializer); - serde::Serializable::serialize(obj.bit_size, - serializer); - serde::Serializable::serialize(obj.value, serializer); - } +} // end of namespace Program - template <> - template - Program::BrilligOpcode::Const - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOpcode::Const obj; - obj.destination = - serde::Deserializable::deserialize( - deserializer); - obj.bit_size = serde::Deserializable::deserialize( - deserializer); - obj.value = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BrilligOpcode::Return &lhs, - const BrilligOpcode::Return &rhs) { - return true; - } - - inline std::vector BrilligOpcode::Return::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } - - inline BrilligOpcode::Return - BrilligOpcode::Return::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BrilligOpcode::Return &obj, Serializer &serializer) {} - - template <> - template - Program::BrilligOpcode::Return - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOpcode::Return obj; - return obj; - } - - namespace Program { - - inline bool operator==(const BrilligOpcode::ForeignCall &lhs, - const BrilligOpcode::ForeignCall &rhs) { - if (!(lhs.function == rhs.function)) { - return false; - } - if (!(lhs.destinations == rhs.destinations)) { - return false; - } - if (!(lhs.destination_value_types == rhs.destination_value_types)) { - return false; - } - if (!(lhs.inputs == rhs.inputs)) { - return false; - } - if (!(lhs.input_value_types == rhs.input_value_types)) { - return false; - } - return true; - } - - inline std::vector - BrilligOpcode::ForeignCall::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); - } - - inline BrilligOpcode::ForeignCall - BrilligOpcode::ForeignCall::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BrilligOpcode::ForeignCall &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.function, - serializer); - serde::Serializable::serialize(obj.destinations, - serializer); - serde::Serializable::serialize( - obj.destination_value_types, serializer); - serde::Serializable::serialize(obj.inputs, - serializer); - serde::Serializable::serialize( - obj.input_value_types, serializer); - } - - template <> - template - Program::BrilligOpcode::ForeignCall - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOpcode::ForeignCall obj; - obj.function = serde::Deserializable::deserialize( - deserializer); - obj.destinations = - serde::Deserializable::deserialize( - deserializer); - obj.destination_value_types = serde::Deserializable< - decltype(obj.destination_value_types)>::deserialize(deserializer); - obj.inputs = - serde::Deserializable::deserialize(deserializer); - obj.input_value_types = - serde::Deserializable::deserialize( - deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BrilligOpcode::Mov &lhs, - const BrilligOpcode::Mov &rhs) { - if (!(lhs.destination == rhs.destination)) { - return false; - } - if (!(lhs.source == rhs.source)) { - return false; - } - return true; - } - - inline std::vector BrilligOpcode::Mov::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } - - inline BrilligOpcode::Mov - BrilligOpcode::Mov::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BrilligOpcode::Mov &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.destination, - serializer); - serde::Serializable::serialize(obj.source, - serializer); - } - - template <> - template - Program::BrilligOpcode::Mov - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOpcode::Mov obj; - obj.destination = - serde::Deserializable::deserialize( - deserializer); - obj.source = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BrilligOpcode::ConditionalMov &lhs, - const BrilligOpcode::ConditionalMov &rhs) { - if (!(lhs.destination == rhs.destination)) { - return false; - } - if (!(lhs.source_a == rhs.source_a)) { - return false; - } - if (!(lhs.source_b == rhs.source_b)) { - return false; - } - if (!(lhs.condition == rhs.condition)) { - return false; - } - return true; - } - - inline std::vector - BrilligOpcode::ConditionalMov::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); - } - - inline BrilligOpcode::ConditionalMov - BrilligOpcode::ConditionalMov::bincodeDeserialize( - std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BrilligOpcode::ConditionalMov &obj, - Serializer &serializer) { - serde::Serializable::serialize(obj.destination, - serializer); - serde::Serializable::serialize(obj.source_a, - serializer); - serde::Serializable::serialize(obj.source_b, - serializer); - serde::Serializable::serialize(obj.condition, - serializer); - } - - template <> - template - Program::BrilligOpcode::ConditionalMov - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOpcode::ConditionalMov obj; - obj.destination = - serde::Deserializable::deserialize( - deserializer); - obj.source_a = serde::Deserializable::deserialize( - deserializer); - obj.source_b = serde::Deserializable::deserialize( - deserializer); - obj.condition = serde::Deserializable::deserialize( - deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BrilligOpcode::Load &lhs, - const BrilligOpcode::Load &rhs) { - if (!(lhs.destination == rhs.destination)) { - return false; - } - if (!(lhs.source_pointer == rhs.source_pointer)) { - return false; - } - return true; - } - - inline std::vector BrilligOpcode::Load::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } - - inline BrilligOpcode::Load - BrilligOpcode::Load::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BrilligOpcode::Load &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.destination, - serializer); - serde::Serializable::serialize( - obj.source_pointer, serializer); - } - - template <> - template - Program::BrilligOpcode::Load - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOpcode::Load obj; - obj.destination = - serde::Deserializable::deserialize( - deserializer); - obj.source_pointer = - serde::Deserializable::deserialize( - deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BrilligOpcode::Store &lhs, - const BrilligOpcode::Store &rhs) { - if (!(lhs.destination_pointer == rhs.destination_pointer)) { - return false; - } - if (!(lhs.source == rhs.source)) { - return false; - } - return true; - } - - inline std::vector BrilligOpcode::Store::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } - - inline BrilligOpcode::Store - BrilligOpcode::Store::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BrilligOpcode::Store &obj, Serializer &serializer) { - serde::Serializable::serialize( - obj.destination_pointer, serializer); - serde::Serializable::serialize(obj.source, - serializer); - } - - template <> - template - Program::BrilligOpcode::Store - serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOpcode::Store obj; - obj.destination_pointer = - serde::Deserializable::deserialize( - deserializer); - obj.source = - serde::Deserializable::deserialize(deserializer); - return obj; - } - - namespace Program { - - inline bool operator==(const BrilligOpcode::BlackBox &lhs, - const BrilligOpcode::BlackBox &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; - } - - inline std::vector - BrilligOpcode::BlackBox::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } - - inline BrilligOpcode::BlackBox - BrilligOpcode::BlackBox::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; - } - - } // end of namespace Program - - template <> - template - void serde::Serializable::serialize( - const Program::BrilligOpcode::BlackBox &obj, Serializer &serializer) { +template <> +template +void serde::Serializable::serialize(const Program::BrilligOpcode::BlackBox &obj, Serializer &serializer) { serde::Serializable::serialize(obj.value, serializer); - } +} - template <> - template - Program::BrilligOpcode::BlackBox - serde::Deserializable::deserialize( - Deserializer &deserializer) { +template <> +template +Program::BrilligOpcode::BlackBox serde::Deserializable::deserialize(Deserializer &deserializer) { Program::BrilligOpcode::BlackBox obj; - obj.value = - serde::Deserializable::deserialize(deserializer); + obj.value = serde::Deserializable::deserialize(deserializer); return obj; - } +} - namespace Program { +namespace Program { - inline bool operator==(const BrilligOpcode::Trap &lhs, - const BrilligOpcode::Trap &rhs) { - if (!(lhs.revert_data == rhs.revert_data)) { - return false; + inline bool operator==(const BrilligOpcode::Trap &lhs, const BrilligOpcode::Trap &rhs) { + if (!(lhs.revert_data == rhs.revert_data)) { return false; } + return true; } - return true; - } - if (!(lhs.revert_data_size == rhs.revert_data_size)) { - return false; - } - return true; - } // namespace Program - inline std::vector BrilligOpcode::Trap::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); - } + inline std::vector BrilligOpcode::Trap::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } - inline BrilligOpcode::Trap - BrilligOpcode::Trap::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); + inline BrilligOpcode::Trap BrilligOpcode::Trap::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; } - return value; - } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BrilligOpcode::Trap &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.revert_data, - serializer); +void serde::Serializable::serialize(const Program::BrilligOpcode::Trap &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.revert_data, serializer); } template <> template -Program::BrilligOpcode::Trap -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOpcode::Trap obj; - obj.revert_data = - serde::Deserializable::deserialize( - deserializer); - return obj; +Program::BrilligOpcode::Trap serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOpcode::Trap obj; + obj.revert_data = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BrilligOpcode::Stop &lhs, - const BrilligOpcode::Stop &rhs) { - if (!(lhs.return_data_offset == rhs.return_data_offset)) { - return false; - } - if (!(lhs.return_data_size == rhs.return_data_size)) { - return false; - } - return true; -} + inline bool operator==(const BrilligOpcode::Stop &lhs, const BrilligOpcode::Stop &rhs) { + if (!(lhs.return_data_offset == rhs.return_data_offset)) { return false; } + if (!(lhs.return_data_size == rhs.return_data_size)) { return false; } + return true; + } -inline std::vector BrilligOpcode::Stop::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BrilligOpcode::Stop::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BrilligOpcode::Stop -BrilligOpcode::Stop::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BrilligOpcode::Stop BrilligOpcode::Stop::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BrilligOpcode::Stop &obj, Serializer &serializer) { - serde::Serializable::serialize( - obj.return_data_offset, serializer); - serde::Serializable::serialize( - obj.return_data_size, serializer); +void serde::Serializable::serialize(const Program::BrilligOpcode::Stop &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.return_data_offset, serializer); + serde::Serializable::serialize(obj.return_data_size, serializer); } template <> template -Program::BrilligOpcode::Stop -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOpcode::Stop obj; - obj.return_data_offset = - serde::Deserializable::deserialize( - deserializer); - obj.return_data_size = - serde::Deserializable::deserialize( - deserializer); - return obj; +Program::BrilligOpcode::Stop serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOpcode::Stop obj; + obj.return_data_offset = serde::Deserializable::deserialize(deserializer); + obj.return_data_size = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BrilligOutputs &lhs, const BrilligOutputs &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const BrilligOutputs &lhs, const BrilligOutputs &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector BrilligOutputs::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BrilligOutputs::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BrilligOutputs -BrilligOutputs::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BrilligOutputs BrilligOutputs::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BrilligOutputs &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.value, serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::BrilligOutputs &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.value, serializer); + serializer.decrease_container_depth(); } template <> template -Program::BrilligOutputs -serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::BrilligOutputs obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::BrilligOutputs serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::BrilligOutputs obj; + obj.value = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const BrilligOutputs::Simple &lhs, - const BrilligOutputs::Simple &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const BrilligOutputs::Simple &lhs, const BrilligOutputs::Simple &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector BrilligOutputs::Simple::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BrilligOutputs::Simple::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BrilligOutputs::Simple -BrilligOutputs::Simple::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BrilligOutputs::Simple BrilligOutputs::Simple::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BrilligOutputs::Simple &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.value, serializer); +void serde::Serializable::serialize(const Program::BrilligOutputs::Simple &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.value, serializer); } template <> template -Program::BrilligOutputs::Simple -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOutputs::Simple obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BrilligOutputs::Simple serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOutputs::Simple obj; + obj.value = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BrilligOutputs::Array &lhs, - const BrilligOutputs::Array &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const BrilligOutputs::Array &lhs, const BrilligOutputs::Array &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector BrilligOutputs::Array::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BrilligOutputs::Array::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BrilligOutputs::Array -BrilligOutputs::Array::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BrilligOutputs::Array BrilligOutputs::Array::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BrilligOutputs::Array &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.value, serializer); +void serde::Serializable::serialize(const Program::BrilligOutputs::Array &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.value, serializer); } template <> template -Program::BrilligOutputs::Array -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOutputs::Array obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BrilligOutputs::Array serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOutputs::Array obj; + obj.value = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const Circuit &lhs, const Circuit &rhs) { - if (!(lhs.current_witness_index == rhs.current_witness_index)) { - return false; - } - if (!(lhs.opcodes == rhs.opcodes)) { - return false; - } - if (!(lhs.expression_width == rhs.expression_width)) { - return false; - } - if (!(lhs.private_parameters == rhs.private_parameters)) { - return false; - } - if (!(lhs.public_parameters == rhs.public_parameters)) { - return false; - } - if (!(lhs.return_values == rhs.return_values)) { - return false; - } - if (!(lhs.assert_messages == rhs.assert_messages)) { - return false; - } - if (!(lhs.recursive == rhs.recursive)) { - return false; - } - return true; -} + inline bool operator==(const Circuit &lhs, const Circuit &rhs) { + if (!(lhs.current_witness_index == rhs.current_witness_index)) { return false; } + if (!(lhs.opcodes == rhs.opcodes)) { return false; } + if (!(lhs.expression_width == rhs.expression_width)) { return false; } + if (!(lhs.private_parameters == rhs.private_parameters)) { return false; } + if (!(lhs.public_parameters == rhs.public_parameters)) { return false; } + if (!(lhs.return_values == rhs.return_values)) { return false; } + if (!(lhs.assert_messages == rhs.assert_messages)) { return false; } + if (!(lhs.recursive == rhs.recursive)) { return false; } + return true; + } -inline std::vector Circuit::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector Circuit::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline Circuit Circuit::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline Circuit Circuit::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::Circuit &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize( - obj.current_witness_index, serializer); - serde::Serializable::serialize(obj.opcodes, - serializer); - serde::Serializable::serialize( - obj.expression_width, serializer); - serde::Serializable::serialize( - obj.private_parameters, serializer); - serde::Serializable::serialize( - obj.public_parameters, serializer); - serde::Serializable::serialize(obj.return_values, - serializer); - serde::Serializable::serialize( - obj.assert_messages, serializer); - serde::Serializable::serialize(obj.recursive, - serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::Circuit &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.current_witness_index, serializer); + serde::Serializable::serialize(obj.opcodes, serializer); + serde::Serializable::serialize(obj.expression_width, serializer); + serde::Serializable::serialize(obj.private_parameters, serializer); + serde::Serializable::serialize(obj.public_parameters, serializer); + serde::Serializable::serialize(obj.return_values, serializer); + serde::Serializable::serialize(obj.assert_messages, serializer); + serde::Serializable::serialize(obj.recursive, serializer); + serializer.decrease_container_depth(); } template <> template -Program::Circuit serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::Circuit obj; - obj.current_witness_index = - serde::Deserializable::deserialize( - deserializer); - obj.opcodes = - serde::Deserializable::deserialize(deserializer); - obj.expression_width = - serde::Deserializable::deserialize( - deserializer); - obj.private_parameters = - serde::Deserializable::deserialize( - deserializer); - obj.public_parameters = - serde::Deserializable::deserialize( - deserializer); - obj.return_values = - serde::Deserializable::deserialize( - deserializer); - obj.assert_messages = - serde::Deserializable::deserialize( - deserializer); - obj.recursive = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::Circuit serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::Circuit obj; + obj.current_witness_index = serde::Deserializable::deserialize(deserializer); + obj.opcodes = serde::Deserializable::deserialize(deserializer); + obj.expression_width = serde::Deserializable::deserialize(deserializer); + obj.private_parameters = serde::Deserializable::deserialize(deserializer); + obj.public_parameters = serde::Deserializable::deserialize(deserializer); + obj.return_values = serde::Deserializable::deserialize(deserializer); + obj.assert_messages = serde::Deserializable::deserialize(deserializer); + obj.recursive = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const Directive &lhs, const Directive &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const Directive &lhs, const Directive &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector Directive::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector Directive::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline Directive Directive::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline Directive Directive::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::Directive &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.value, serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::Directive &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.value, serializer); + serializer.decrease_container_depth(); } template <> template -Program::Directive serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::Directive obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::Directive serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::Directive obj; + obj.value = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const Directive::ToLeRadix &lhs, - const Directive::ToLeRadix &rhs) { - if (!(lhs.a == rhs.a)) { - return false; - } - if (!(lhs.b == rhs.b)) { - return false; - } - if (!(lhs.radix == rhs.radix)) { - return false; - } - return true; -} + inline bool operator==(const Directive::ToLeRadix &lhs, const Directive::ToLeRadix &rhs) { + if (!(lhs.a == rhs.a)) { return false; } + if (!(lhs.b == rhs.b)) { return false; } + if (!(lhs.radix == rhs.radix)) { return false; } + return true; + } -inline std::vector Directive::ToLeRadix::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector Directive::ToLeRadix::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline Directive::ToLeRadix -Directive::ToLeRadix::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline Directive::ToLeRadix Directive::ToLeRadix::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::Directive::ToLeRadix &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.a, serializer); - serde::Serializable::serialize(obj.b, serializer); - serde::Serializable::serialize(obj.radix, serializer); +void serde::Serializable::serialize(const Program::Directive::ToLeRadix &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.a, serializer); + serde::Serializable::serialize(obj.b, serializer); + serde::Serializable::serialize(obj.radix, serializer); } template <> template -Program::Directive::ToLeRadix -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::Directive::ToLeRadix obj; - obj.a = serde::Deserializable::deserialize(deserializer); - obj.b = serde::Deserializable::deserialize(deserializer); - obj.radix = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::Directive::ToLeRadix serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::Directive::ToLeRadix obj; + obj.a = serde::Deserializable::deserialize(deserializer); + obj.b = serde::Deserializable::deserialize(deserializer); + obj.radix = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const Expression &lhs, const Expression &rhs) { - if (!(lhs.mul_terms == rhs.mul_terms)) { - return false; - } - if (!(lhs.linear_combinations == rhs.linear_combinations)) { - return false; - } - if (!(lhs.q_c == rhs.q_c)) { - return false; - } - return true; -} + inline bool operator==(const Expression &lhs, const Expression &rhs) { + if (!(lhs.mul_terms == rhs.mul_terms)) { return false; } + if (!(lhs.linear_combinations == rhs.linear_combinations)) { return false; } + if (!(lhs.q_c == rhs.q_c)) { return false; } + return true; + } -inline std::vector Expression::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector Expression::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline Expression Expression::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline Expression Expression::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::Expression &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.mul_terms, - serializer); - serde::Serializable::serialize( - obj.linear_combinations, serializer); - serde::Serializable::serialize(obj.q_c, serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::Expression &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.mul_terms, serializer); + serde::Serializable::serialize(obj.linear_combinations, serializer); + serde::Serializable::serialize(obj.q_c, serializer); + serializer.decrease_container_depth(); } template <> template -Program::Expression serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::Expression obj; - obj.mul_terms = - serde::Deserializable::deserialize(deserializer); - obj.linear_combinations = - serde::Deserializable::deserialize( - deserializer); - obj.q_c = serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::Expression serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::Expression obj; + obj.mul_terms = serde::Deserializable::deserialize(deserializer); + obj.linear_combinations = serde::Deserializable::deserialize(deserializer); + obj.q_c = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const ExpressionOrMemory &lhs, - const ExpressionOrMemory &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const ExpressionOrMemory &lhs, const ExpressionOrMemory &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector ExpressionOrMemory::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector ExpressionOrMemory::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline ExpressionOrMemory -ExpressionOrMemory::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline ExpressionOrMemory ExpressionOrMemory::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::ExpressionOrMemory &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.value, serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::ExpressionOrMemory &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.value, serializer); + serializer.decrease_container_depth(); } template <> template -Program::ExpressionOrMemory -serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::ExpressionOrMemory obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::ExpressionOrMemory serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::ExpressionOrMemory obj; + obj.value = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const ExpressionOrMemory::Expression &lhs, - const ExpressionOrMemory::Expression &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const ExpressionOrMemory::Expression &lhs, const ExpressionOrMemory::Expression &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector -ExpressionOrMemory::Expression::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); -} + inline std::vector ExpressionOrMemory::Expression::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline ExpressionOrMemory::Expression -ExpressionOrMemory::Expression::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline ExpressionOrMemory::Expression ExpressionOrMemory::Expression::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::ExpressionOrMemory::Expression &obj, - Serializer &serializer) { - serde::Serializable::serialize(obj.value, serializer); +void serde::Serializable::serialize(const Program::ExpressionOrMemory::Expression &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.value, serializer); } template <> template -Program::ExpressionOrMemory::Expression -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::ExpressionOrMemory::Expression obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::ExpressionOrMemory::Expression serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::ExpressionOrMemory::Expression obj; + obj.value = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const ExpressionOrMemory::Memory &lhs, - const ExpressionOrMemory::Memory &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const ExpressionOrMemory::Memory &lhs, const ExpressionOrMemory::Memory &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector -ExpressionOrMemory::Memory::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector ExpressionOrMemory::Memory::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline ExpressionOrMemory::Memory -ExpressionOrMemory::Memory::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline ExpressionOrMemory::Memory ExpressionOrMemory::Memory::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::ExpressionOrMemory::Memory &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.value, serializer); +void serde::Serializable::serialize(const Program::ExpressionOrMemory::Memory &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.value, serializer); } template <> template -Program::ExpressionOrMemory::Memory -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::ExpressionOrMemory::Memory obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::ExpressionOrMemory::Memory serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::ExpressionOrMemory::Memory obj; + obj.value = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const ExpressionWidth &lhs, const ExpressionWidth &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const ExpressionWidth &lhs, const ExpressionWidth &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector ExpressionWidth::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector ExpressionWidth::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline ExpressionWidth -ExpressionWidth::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline ExpressionWidth ExpressionWidth::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::ExpressionWidth &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.value, serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::ExpressionWidth &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.value, serializer); + serializer.decrease_container_depth(); } template <> template -Program::ExpressionWidth -serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::ExpressionWidth obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::ExpressionWidth serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::ExpressionWidth obj; + obj.value = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const ExpressionWidth::Unbounded &lhs, - const ExpressionWidth::Unbounded &rhs) { - return true; -} + inline bool operator==(const ExpressionWidth::Unbounded &lhs, const ExpressionWidth::Unbounded &rhs) { + return true; + } -inline std::vector -ExpressionWidth::Unbounded::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector ExpressionWidth::Unbounded::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline ExpressionWidth::Unbounded -ExpressionWidth::Unbounded::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline ExpressionWidth::Unbounded ExpressionWidth::Unbounded::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::ExpressionWidth::Unbounded &obj, Serializer &serializer) {} +void serde::Serializable::serialize(const Program::ExpressionWidth::Unbounded &obj, Serializer &serializer) { +} template <> template -Program::ExpressionWidth::Unbounded -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::ExpressionWidth::Unbounded obj; - return obj; +Program::ExpressionWidth::Unbounded serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::ExpressionWidth::Unbounded obj; + return obj; } namespace Program { -inline bool operator==(const ExpressionWidth::Bounded &lhs, - const ExpressionWidth::Bounded &rhs) { - if (!(lhs.width == rhs.width)) { - return false; - } - return true; -} + inline bool operator==(const ExpressionWidth::Bounded &lhs, const ExpressionWidth::Bounded &rhs) { + if (!(lhs.width == rhs.width)) { return false; } + return true; + } -inline std::vector ExpressionWidth::Bounded::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector ExpressionWidth::Bounded::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline ExpressionWidth::Bounded -ExpressionWidth::Bounded::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline ExpressionWidth::Bounded ExpressionWidth::Bounded::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::ExpressionWidth::Bounded &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.width, serializer); +void serde::Serializable::serialize(const Program::ExpressionWidth::Bounded &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.width, serializer); } template <> template -Program::ExpressionWidth::Bounded -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::ExpressionWidth::Bounded obj; - obj.width = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::ExpressionWidth::Bounded serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::ExpressionWidth::Bounded obj; + obj.width = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const FunctionInput &lhs, const FunctionInput &rhs) { - if (!(lhs.witness == rhs.witness)) { - return false; - } - if (!(lhs.num_bits == rhs.num_bits)) { - return false; - } - return true; -} + inline bool operator==(const FunctionInput &lhs, const FunctionInput &rhs) { + if (!(lhs.witness == rhs.witness)) { return false; } + if (!(lhs.num_bits == rhs.num_bits)) { return false; } + return true; + } -inline std::vector FunctionInput::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector FunctionInput::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline FunctionInput -FunctionInput::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline FunctionInput FunctionInput::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::FunctionInput &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.witness, - serializer); - serde::Serializable::serialize(obj.num_bits, - serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::FunctionInput &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.witness, serializer); + serde::Serializable::serialize(obj.num_bits, serializer); + serializer.decrease_container_depth(); } template <> template -Program::FunctionInput -serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::FunctionInput obj; - obj.witness = - serde::Deserializable::deserialize(deserializer); - obj.num_bits = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::FunctionInput serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::FunctionInput obj; + obj.witness = serde::Deserializable::deserialize(deserializer); + obj.num_bits = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const HeapArray &lhs, const HeapArray &rhs) { - if (!(lhs.pointer == rhs.pointer)) { - return false; - } - if (!(lhs.size == rhs.size)) { - return false; - } - return true; -} + inline bool operator==(const HeapArray &lhs, const HeapArray &rhs) { + if (!(lhs.pointer == rhs.pointer)) { return false; } + if (!(lhs.size == rhs.size)) { return false; } + return true; + } -inline std::vector HeapArray::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector HeapArray::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline HeapArray HeapArray::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline HeapArray HeapArray::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::HeapArray &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.pointer, - serializer); - serde::Serializable::serialize(obj.size, serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::HeapArray &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.pointer, serializer); + serde::Serializable::serialize(obj.size, serializer); + serializer.decrease_container_depth(); } template <> template -Program::HeapArray serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::HeapArray obj; - obj.pointer = - serde::Deserializable::deserialize(deserializer); - obj.size = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::HeapArray serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::HeapArray obj; + obj.pointer = serde::Deserializable::deserialize(deserializer); + obj.size = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const HeapValueType &lhs, const HeapValueType &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const HeapValueType &lhs, const HeapValueType &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector HeapValueType::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector HeapValueType::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline HeapValueType -HeapValueType::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline HeapValueType HeapValueType::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::HeapValueType &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.value, serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::HeapValueType &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.value, serializer); + serializer.decrease_container_depth(); } template <> template -Program::HeapValueType -serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::HeapValueType obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::HeapValueType serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::HeapValueType obj; + obj.value = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const HeapValueType::Simple &lhs, - const HeapValueType::Simple &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const HeapValueType::Simple &lhs, const HeapValueType::Simple &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector HeapValueType::Simple::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector HeapValueType::Simple::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline HeapValueType::Simple -HeapValueType::Simple::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline HeapValueType::Simple HeapValueType::Simple::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::HeapValueType::Simple &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.value, serializer); +void serde::Serializable::serialize(const Program::HeapValueType::Simple &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.value, serializer); } template <> template -Program::HeapValueType::Simple -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::HeapValueType::Simple obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::HeapValueType::Simple serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::HeapValueType::Simple obj; + obj.value = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const HeapValueType::Array &lhs, - const HeapValueType::Array &rhs) { - if (!(lhs.value_types == rhs.value_types)) { - return false; - } - if (!(lhs.size == rhs.size)) { - return false; - } - return true; -} + inline bool operator==(const HeapValueType::Array &lhs, const HeapValueType::Array &rhs) { + if (!(lhs.value_types == rhs.value_types)) { return false; } + if (!(lhs.size == rhs.size)) { return false; } + return true; + } -inline std::vector HeapValueType::Array::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector HeapValueType::Array::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline HeapValueType::Array -HeapValueType::Array::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline HeapValueType::Array HeapValueType::Array::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::HeapValueType::Array &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.value_types, - serializer); - serde::Serializable::serialize(obj.size, serializer); +void serde::Serializable::serialize(const Program::HeapValueType::Array &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.value_types, serializer); + serde::Serializable::serialize(obj.size, serializer); } template <> template -Program::HeapValueType::Array -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::HeapValueType::Array obj; - obj.value_types = - serde::Deserializable::deserialize( - deserializer); - obj.size = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::HeapValueType::Array serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::HeapValueType::Array obj; + obj.value_types = serde::Deserializable::deserialize(deserializer); + obj.size = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const HeapValueType::Vector &lhs, - const HeapValueType::Vector &rhs) { - if (!(lhs.value_types == rhs.value_types)) { - return false; - } - return true; -} + inline bool operator==(const HeapValueType::Vector &lhs, const HeapValueType::Vector &rhs) { + if (!(lhs.value_types == rhs.value_types)) { return false; } + return true; + } -inline std::vector HeapValueType::Vector::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector HeapValueType::Vector::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline HeapValueType::Vector -HeapValueType::Vector::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline HeapValueType::Vector HeapValueType::Vector::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::HeapValueType::Vector &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.value_types, - serializer); +void serde::Serializable::serialize(const Program::HeapValueType::Vector &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.value_types, serializer); } template <> template -Program::HeapValueType::Vector -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::HeapValueType::Vector obj; - obj.value_types = - serde::Deserializable::deserialize( - deserializer); - return obj; +Program::HeapValueType::Vector serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::HeapValueType::Vector obj; + obj.value_types = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const HeapVector &lhs, const HeapVector &rhs) { - if (!(lhs.pointer == rhs.pointer)) { - return false; - } - if (!(lhs.size == rhs.size)) { - return false; - } - return true; -} + inline bool operator==(const HeapVector &lhs, const HeapVector &rhs) { + if (!(lhs.pointer == rhs.pointer)) { return false; } + if (!(lhs.size == rhs.size)) { return false; } + return true; + } -inline std::vector HeapVector::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector HeapVector::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline HeapVector HeapVector::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline HeapVector HeapVector::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::HeapVector &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.pointer, - serializer); - serde::Serializable::serialize(obj.size, serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::HeapVector &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.pointer, serializer); + serde::Serializable::serialize(obj.size, serializer); + serializer.decrease_container_depth(); } template <> template -Program::HeapVector serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::HeapVector obj; - obj.pointer = - serde::Deserializable::deserialize(deserializer); - obj.size = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::HeapVector serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::HeapVector obj; + obj.pointer = serde::Deserializable::deserialize(deserializer); + obj.size = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const MemOp &lhs, const MemOp &rhs) { - if (!(lhs.operation == rhs.operation)) { - return false; - } - if (!(lhs.index == rhs.index)) { - return false; - } - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const MemOp &lhs, const MemOp &rhs) { + if (!(lhs.operation == rhs.operation)) { return false; } + if (!(lhs.index == rhs.index)) { return false; } + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector MemOp::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector MemOp::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline MemOp MemOp::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline MemOp MemOp::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize(const Program::MemOp &obj, - Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.operation, - serializer); - serde::Serializable::serialize(obj.index, serializer); - serde::Serializable::serialize(obj.value, serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::MemOp &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.operation, serializer); + serde::Serializable::serialize(obj.index, serializer); + serde::Serializable::serialize(obj.value, serializer); + serializer.decrease_container_depth(); } template <> template -Program::MemOp -serde::Deserializable::deserialize(Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::MemOp obj; - obj.operation = - serde::Deserializable::deserialize(deserializer); - obj.index = - serde::Deserializable::deserialize(deserializer); - obj.value = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::MemOp serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::MemOp obj; + obj.operation = serde::Deserializable::deserialize(deserializer); + obj.index = serde::Deserializable::deserialize(deserializer); + obj.value = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const MemoryAddress &lhs, const MemoryAddress &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const MemoryAddress &lhs, const MemoryAddress &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector MemoryAddress::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector MemoryAddress::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline MemoryAddress -MemoryAddress::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline MemoryAddress MemoryAddress::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::MemoryAddress &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.value, serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::MemoryAddress &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.value, serializer); + serializer.decrease_container_depth(); } template <> template -Program::MemoryAddress -serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::MemoryAddress obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::MemoryAddress serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::MemoryAddress obj; + obj.value = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const Opcode &lhs, const Opcode &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const Opcode &lhs, const Opcode &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector Opcode::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector Opcode::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline Opcode Opcode::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline Opcode Opcode::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize(const Program::Opcode &obj, - Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.value, serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::Opcode &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.value, serializer); + serializer.decrease_container_depth(); } template <> template -Program::Opcode serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::Opcode obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::Opcode serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::Opcode obj; + obj.value = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const Opcode::AssertZero &lhs, - const Opcode::AssertZero &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const Opcode::AssertZero &lhs, const Opcode::AssertZero &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector Opcode::AssertZero::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector Opcode::AssertZero::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline Opcode::AssertZero -Opcode::AssertZero::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline Opcode::AssertZero Opcode::AssertZero::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::Opcode::AssertZero &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.value, serializer); +void serde::Serializable::serialize(const Program::Opcode::AssertZero &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.value, serializer); } template <> template -Program::Opcode::AssertZero -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::Opcode::AssertZero obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::Opcode::AssertZero serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::Opcode::AssertZero obj; + obj.value = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const Opcode::BlackBoxFuncCall &lhs, - const Opcode::BlackBoxFuncCall &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const Opcode::BlackBoxFuncCall &lhs, const Opcode::BlackBoxFuncCall &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector Opcode::BlackBoxFuncCall::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector Opcode::BlackBoxFuncCall::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline Opcode::BlackBoxFuncCall -Opcode::BlackBoxFuncCall::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline Opcode::BlackBoxFuncCall Opcode::BlackBoxFuncCall::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::Opcode::BlackBoxFuncCall &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.value, serializer); +void serde::Serializable::serialize(const Program::Opcode::BlackBoxFuncCall &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.value, serializer); } template <> template -Program::Opcode::BlackBoxFuncCall -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::Opcode::BlackBoxFuncCall obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::Opcode::BlackBoxFuncCall serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::Opcode::BlackBoxFuncCall obj; + obj.value = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const Opcode::Directive &lhs, - const Opcode::Directive &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const Opcode::Directive &lhs, const Opcode::Directive &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector Opcode::Directive::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector Opcode::Directive::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline Opcode::Directive -Opcode::Directive::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline Opcode::Directive Opcode::Directive::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::Opcode::Directive &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.value, serializer); +void serde::Serializable::serialize(const Program::Opcode::Directive &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.value, serializer); } template <> template -Program::Opcode::Directive -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::Opcode::Directive obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::Opcode::Directive serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::Opcode::Directive obj; + obj.value = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const Opcode::MemoryOp &lhs, - const Opcode::MemoryOp &rhs) { - if (!(lhs.block_id == rhs.block_id)) { - return false; - } - if (!(lhs.op == rhs.op)) { - return false; - } - if (!(lhs.predicate == rhs.predicate)) { - return false; - } - return true; -} -if (!(lhs.op == rhs.op)) { - return false; -} -if (!(lhs.predicate == rhs.predicate)) { - return false; -} -return true; -} // namespace Program + inline bool operator==(const Opcode::MemoryOp &lhs, const Opcode::MemoryOp &rhs) { + if (!(lhs.block_id == rhs.block_id)) { return false; } + if (!(lhs.op == rhs.op)) { return false; } + if (!(lhs.predicate == rhs.predicate)) { return false; } + return true; + } -inline std::vector Opcode::MemoryOp::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector Opcode::MemoryOp::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline Opcode::MemoryOp -Opcode::MemoryOp::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline Opcode::MemoryOp Opcode::MemoryOp::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::Opcode::MemoryOp &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.block_id, - serializer); - serde::Serializable::serialize(obj.op, serializer); - serde::Serializable::serialize(obj.predicate, - serializer); +void serde::Serializable::serialize(const Program::Opcode::MemoryOp &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.block_id, serializer); + serde::Serializable::serialize(obj.op, serializer); + serde::Serializable::serialize(obj.predicate, serializer); } template <> template -Program::Opcode::MemoryOp -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::Opcode::MemoryOp obj; - obj.block_id = - serde::Deserializable::deserialize(deserializer); - obj.op = serde::Deserializable::deserialize(deserializer); - obj.predicate = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::Opcode::MemoryOp serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::Opcode::MemoryOp obj; + obj.block_id = serde::Deserializable::deserialize(deserializer); + obj.op = serde::Deserializable::deserialize(deserializer); + obj.predicate = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const Opcode::MemoryInit &lhs, - const Opcode::MemoryInit &rhs) { - if (!(lhs.block_id == rhs.block_id)) { - return false; - } - if (!(lhs.init == rhs.init)) { - return false; - } - return true; -} + inline bool operator==(const Opcode::MemoryInit &lhs, const Opcode::MemoryInit &rhs) { + if (!(lhs.block_id == rhs.block_id)) { return false; } + if (!(lhs.init == rhs.init)) { return false; } + return true; + } -inline std::vector Opcode::MemoryInit::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector Opcode::MemoryInit::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline Opcode::MemoryInit -Opcode::MemoryInit::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline Opcode::MemoryInit Opcode::MemoryInit::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::Opcode::MemoryInit &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.block_id, - serializer); - serde::Serializable::serialize(obj.init, serializer); +void serde::Serializable::serialize(const Program::Opcode::MemoryInit &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.block_id, serializer); + serde::Serializable::serialize(obj.init, serializer); } template <> template -Program::Opcode::MemoryInit -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::Opcode::MemoryInit obj; - obj.block_id = - serde::Deserializable::deserialize(deserializer); - obj.init = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::Opcode::MemoryInit serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::Opcode::MemoryInit obj; + obj.block_id = serde::Deserializable::deserialize(deserializer); + obj.init = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const Opcode::BrilligCall &lhs, - const Opcode::BrilligCall &rhs) { - if (!(lhs.id == rhs.id)) { - return false; - } - if (!(lhs.inputs == rhs.inputs)) { - return false; - } - if (!(lhs.outputs == rhs.outputs)) { - return false; - } - if (!(lhs.predicate == rhs.predicate)) { - return false; - } - return true; -} + inline bool operator==(const Opcode::BrilligCall &lhs, const Opcode::BrilligCall &rhs) { + if (!(lhs.id == rhs.id)) { return false; } + if (!(lhs.inputs == rhs.inputs)) { return false; } + if (!(lhs.outputs == rhs.outputs)) { return false; } + if (!(lhs.predicate == rhs.predicate)) { return false; } + return true; + } -inline std::vector Opcode::BrilligCall::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector Opcode::BrilligCall::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline Opcode::BrilligCall -Opcode::BrilligCall::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline Opcode::BrilligCall Opcode::BrilligCall::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::Opcode::BrilligCall &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.id, serializer); - serde::Serializable::serialize(obj.inputs, serializer); - serde::Serializable::serialize(obj.outputs, - serializer); - serde::Serializable::serialize(obj.predicate, - serializer); +void serde::Serializable::serialize(const Program::Opcode::BrilligCall &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.id, serializer); + serde::Serializable::serialize(obj.inputs, serializer); + serde::Serializable::serialize(obj.outputs, serializer); + serde::Serializable::serialize(obj.predicate, serializer); } template <> template -Program::Opcode::BrilligCall -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::Opcode::BrilligCall obj; - obj.id = serde::Deserializable::deserialize(deserializer); - obj.inputs = - serde::Deserializable::deserialize(deserializer); - obj.outputs = - serde::Deserializable::deserialize(deserializer); - obj.predicate = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::Opcode::BrilligCall serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::Opcode::BrilligCall obj; + obj.id = serde::Deserializable::deserialize(deserializer); + obj.inputs = serde::Deserializable::deserialize(deserializer); + obj.outputs = serde::Deserializable::deserialize(deserializer); + obj.predicate = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const Opcode::Call &lhs, const Opcode::Call &rhs) { - if (!(lhs.id == rhs.id)) { - return false; - } - if (!(lhs.inputs == rhs.inputs)) { - return false; - } - if (!(lhs.outputs == rhs.outputs)) { - return false; - } - if (!(lhs.predicate == rhs.predicate)) { - return false; - } - return true; -} + inline bool operator==(const Opcode::Call &lhs, const Opcode::Call &rhs) { + if (!(lhs.id == rhs.id)) { return false; } + if (!(lhs.inputs == rhs.inputs)) { return false; } + if (!(lhs.outputs == rhs.outputs)) { return false; } + if (!(lhs.predicate == rhs.predicate)) { return false; } + return true; + } -inline std::vector Opcode::Call::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector Opcode::Call::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline Opcode::Call -Opcode::Call::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline Opcode::Call Opcode::Call::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::Opcode::Call &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.id, serializer); - serde::Serializable::serialize(obj.inputs, serializer); - serde::Serializable::serialize(obj.outputs, - serializer); - serde::Serializable::serialize(obj.predicate, - serializer); +void serde::Serializable::serialize(const Program::Opcode::Call &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.id, serializer); + serde::Serializable::serialize(obj.inputs, serializer); + serde::Serializable::serialize(obj.outputs, serializer); + serde::Serializable::serialize(obj.predicate, serializer); } template <> template -Program::Opcode::Call serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::Opcode::Call obj; - obj.id = serde::Deserializable::deserialize(deserializer); - obj.inputs = - serde::Deserializable::deserialize(deserializer); - obj.outputs = - serde::Deserializable::deserialize(deserializer); - obj.predicate = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::Opcode::Call serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::Opcode::Call obj; + obj.id = serde::Deserializable::deserialize(deserializer); + obj.inputs = serde::Deserializable::deserialize(deserializer); + obj.outputs = serde::Deserializable::deserialize(deserializer); + obj.predicate = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const OpcodeLocation &lhs, const OpcodeLocation &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const OpcodeLocation &lhs, const OpcodeLocation &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector OpcodeLocation::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector OpcodeLocation::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline OpcodeLocation -OpcodeLocation::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline OpcodeLocation OpcodeLocation::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::OpcodeLocation &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.value, serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::OpcodeLocation &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.value, serializer); + serializer.decrease_container_depth(); } template <> template -Program::OpcodeLocation -serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::OpcodeLocation obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::OpcodeLocation serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::OpcodeLocation obj; + obj.value = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const OpcodeLocation::Acir &lhs, - const OpcodeLocation::Acir &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const OpcodeLocation::Acir &lhs, const OpcodeLocation::Acir &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector OpcodeLocation::Acir::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector OpcodeLocation::Acir::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline OpcodeLocation::Acir -OpcodeLocation::Acir::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline OpcodeLocation::Acir OpcodeLocation::Acir::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::OpcodeLocation::Acir &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.value, serializer); +void serde::Serializable::serialize(const Program::OpcodeLocation::Acir &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.value, serializer); } template <> template -Program::OpcodeLocation::Acir -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::OpcodeLocation::Acir obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::OpcodeLocation::Acir serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::OpcodeLocation::Acir obj; + obj.value = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const OpcodeLocation::Brillig &lhs, - const OpcodeLocation::Brillig &rhs) { - if (!(lhs.acir_index == rhs.acir_index)) { - return false; - } - if (!(lhs.brillig_index == rhs.brillig_index)) { - return false; - } - return true; -} + inline bool operator==(const OpcodeLocation::Brillig &lhs, const OpcodeLocation::Brillig &rhs) { + if (!(lhs.acir_index == rhs.acir_index)) { return false; } + if (!(lhs.brillig_index == rhs.brillig_index)) { return false; } + return true; + } -inline std::vector OpcodeLocation::Brillig::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector OpcodeLocation::Brillig::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline OpcodeLocation::Brillig -OpcodeLocation::Brillig::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline OpcodeLocation::Brillig OpcodeLocation::Brillig::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::OpcodeLocation::Brillig &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.acir_index, - serializer); - serde::Serializable::serialize(obj.brillig_index, - serializer); +void serde::Serializable::serialize(const Program::OpcodeLocation::Brillig &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.acir_index, serializer); + serde::Serializable::serialize(obj.brillig_index, serializer); } template <> template -Program::OpcodeLocation::Brillig -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::OpcodeLocation::Brillig obj; - obj.acir_index = serde::Deserializable::deserialize( - deserializer); - obj.brillig_index = - serde::Deserializable::deserialize( - deserializer); - return obj; +Program::OpcodeLocation::Brillig serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::OpcodeLocation::Brillig obj; + obj.acir_index = serde::Deserializable::deserialize(deserializer); + obj.brillig_index = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const Program &lhs, const Program &rhs) { - if (!(lhs.functions == rhs.functions)) { - return false; - } - if (!(lhs.unconstrained_functions == rhs.unconstrained_functions)) { - return false; - } - return true; -} + inline bool operator==(const Program &lhs, const Program &rhs) { + if (!(lhs.functions == rhs.functions)) { return false; } + if (!(lhs.unconstrained_functions == rhs.unconstrained_functions)) { return false; } + return true; + } -inline std::vector Program::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector Program::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline Program Program::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline Program Program::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::Program &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.functions, - serializer); - serde::Serializable::serialize( - obj.unconstrained_functions, serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::Program &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.functions, serializer); + serde::Serializable::serialize(obj.unconstrained_functions, serializer); + serializer.decrease_container_depth(); } template <> template -Program::Program serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::Program obj; - obj.functions = - serde::Deserializable::deserialize(deserializer); - obj.unconstrained_functions = - serde::Deserializable::deserialize( - deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::Program serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::Program obj; + obj.functions = serde::Deserializable::deserialize(deserializer); + obj.unconstrained_functions = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const PublicInputs &lhs, const PublicInputs &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const PublicInputs &lhs, const PublicInputs &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector PublicInputs::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector PublicInputs::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline PublicInputs -PublicInputs::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline PublicInputs PublicInputs::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::PublicInputs &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.value, serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::PublicInputs &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.value, serializer); + serializer.decrease_container_depth(); } template <> template -Program::PublicInputs serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::PublicInputs obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::PublicInputs serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::PublicInputs obj; + obj.value = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const ValueOrArray &lhs, const ValueOrArray &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const ValueOrArray &lhs, const ValueOrArray &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector ValueOrArray::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector ValueOrArray::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline ValueOrArray -ValueOrArray::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline ValueOrArray ValueOrArray::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::ValueOrArray &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.value, serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::ValueOrArray &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.value, serializer); + serializer.decrease_container_depth(); } template <> template -Program::ValueOrArray serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::ValueOrArray obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::ValueOrArray serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::ValueOrArray obj; + obj.value = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const ValueOrArray::MemoryAddress &lhs, - const ValueOrArray::MemoryAddress &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const ValueOrArray::MemoryAddress &lhs, const ValueOrArray::MemoryAddress &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector -ValueOrArray::MemoryAddress::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); -} + inline std::vector ValueOrArray::MemoryAddress::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline ValueOrArray::MemoryAddress -ValueOrArray::MemoryAddress::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline ValueOrArray::MemoryAddress ValueOrArray::MemoryAddress::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::ValueOrArray::MemoryAddress &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.value, serializer); +void serde::Serializable::serialize(const Program::ValueOrArray::MemoryAddress &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.value, serializer); } template <> template -Program::ValueOrArray::MemoryAddress -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::ValueOrArray::MemoryAddress obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::ValueOrArray::MemoryAddress serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::ValueOrArray::MemoryAddress obj; + obj.value = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const ValueOrArray::HeapArray &lhs, - const ValueOrArray::HeapArray &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const ValueOrArray::HeapArray &lhs, const ValueOrArray::HeapArray &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector ValueOrArray::HeapArray::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector ValueOrArray::HeapArray::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline ValueOrArray::HeapArray -ValueOrArray::HeapArray::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline ValueOrArray::HeapArray ValueOrArray::HeapArray::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::ValueOrArray::HeapArray &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.value, serializer); +void serde::Serializable::serialize(const Program::ValueOrArray::HeapArray &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.value, serializer); } template <> template -Program::ValueOrArray::HeapArray -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::ValueOrArray::HeapArray obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::ValueOrArray::HeapArray serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::ValueOrArray::HeapArray obj; + obj.value = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const ValueOrArray::HeapVector &lhs, - const ValueOrArray::HeapVector &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const ValueOrArray::HeapVector &lhs, const ValueOrArray::HeapVector &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector ValueOrArray::HeapVector::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector ValueOrArray::HeapVector::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline ValueOrArray::HeapVector -ValueOrArray::HeapVector::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline ValueOrArray::HeapVector ValueOrArray::HeapVector::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::ValueOrArray::HeapVector &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.value, serializer); +void serde::Serializable::serialize(const Program::ValueOrArray::HeapVector &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.value, serializer); } template <> template -Program::ValueOrArray::HeapVector -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::ValueOrArray::HeapVector obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::ValueOrArray::HeapVector serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::ValueOrArray::HeapVector obj; + obj.value = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const Witness &lhs, const Witness &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const Witness &lhs, const Witness &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector Witness::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector Witness::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline Witness Witness::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline Witness Witness::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::Witness &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.value, serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::Witness &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.value, serializer); + serializer.decrease_container_depth(); } template <> template -Program::Witness serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::Witness obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::Witness serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::Witness obj; + obj.value = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } From ee3414d4e36f18e953616b3a3517da9f9049dc1f Mon Sep 17 00:00:00 2001 From: guipublic Date: Mon, 6 May 2024 13:25:09 +0000 Subject: [PATCH 43/98] update serialisation --- .../acvm-repo/acvm_js/test/shared/fixed_base_scalar_mul.ts | 4 ++-- noir/noir-repo/acvm-repo/acvm_js/test/shared/pedersen.ts | 4 ++-- .../noir-repo/acvm-repo/acvm_js/test/shared/schnorr_verify.ts | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/noir/noir-repo/acvm-repo/acvm_js/test/shared/fixed_base_scalar_mul.ts b/noir/noir-repo/acvm-repo/acvm_js/test/shared/fixed_base_scalar_mul.ts index 97b5041121a..7b9bdd92f46 100644 --- a/noir/noir-repo/acvm-repo/acvm_js/test/shared/fixed_base_scalar_mul.ts +++ b/noir/noir-repo/acvm-repo/acvm_js/test/shared/fixed_base_scalar_mul.ts @@ -1,7 +1,7 @@ // See `fixed_base_scalar_mul_circuit` integration test in `acir/tests/test_program_serialization.rs`. export const bytecode = Uint8Array.from([ - 31, 139, 8, 0, 0, 0, 0, 0, 0, 255, 85, 138, 81, 10, 0, 48, 8, 66, 87, 219, 190, 118, 233, 29, 61, 35, 3, 19, 228, 137, - 60, 91, 149, 139, 26, 119, 242, 145, 31, 117, 114, 163, 135, 142, 139, 219, 91, 127, 117, 71, 2, 117, 84, 50, 98, 113, + 31, 139, 8, 0, 0, 0, 0, 0, 0, 255, 85, 138, 81, 10, 0, 48, 8, 66, 87, 219, 126, 118, 234, 29, 61, 35, 3, 19, 228, 137, + 60, 91, 149, 139, 26, 119, 242, 145, 31, 117, 114, 163, 135, 142, 139, 219, 91, 127, 117, 71, 2, 253, 57, 14, 6, 113, 0, 0, 0, ]); export const initialWitnessMap = new Map([ diff --git a/noir/noir-repo/acvm-repo/acvm_js/test/shared/pedersen.ts b/noir/noir-repo/acvm-repo/acvm_js/test/shared/pedersen.ts index e8ddc893d87..e777d8125c7 100644 --- a/noir/noir-repo/acvm-repo/acvm_js/test/shared/pedersen.ts +++ b/noir/noir-repo/acvm-repo/acvm_js/test/shared/pedersen.ts @@ -1,7 +1,7 @@ // See `pedersen_circuit` integration test in `acir/tests/test_program_serialization.rs`. export const bytecode = Uint8Array.from([ - 31, 139, 8, 0, 0, 0, 0, 0, 0, 255, 93, 74, 9, 10, 0, 0, 4, 115, 149, 255, 127, 88, 8, 133, 213, 218, 137, 80, 144, 32, - 182, 79, 213, 151, 173, 61, 5, 121, 245, 91, 103, 255, 191, 3, 7, 16, 26, 112, 158, 113, 0, 0, 0, + 31, 139, 8, 0, 0, 0, 0, 0, 0, 255, 93, 74, 9, 10, 0, 0, 4, 115, 229, 255, 47, 22, 66, 97, 181, 118, 34, 20, 36, 136, + 237, 83, 245, 101, 107, 79, 65, 94, 253, 214, 217, 255, 239, 192, 1, 152, 119, 76, 250, 113, 0, 0, 0, ]); export const initialWitnessMap = new Map([[1, '0x0000000000000000000000000000000000000000000000000000000000000001']]); diff --git a/noir/noir-repo/acvm-repo/acvm_js/test/shared/schnorr_verify.ts b/noir/noir-repo/acvm-repo/acvm_js/test/shared/schnorr_verify.ts index a207aa12b2c..c92e080114f 100644 --- a/noir/noir-repo/acvm-repo/acvm_js/test/shared/schnorr_verify.ts +++ b/noir/noir-repo/acvm-repo/acvm_js/test/shared/schnorr_verify.ts @@ -2,7 +2,7 @@ export const bytecode = Uint8Array.from([ 31, 139, 8, 0, 0, 0, 0, 0, 0, 255, 85, 210, 85, 78, 67, 81, 24, 133, 209, 226, 238, 238, 238, 238, 238, 165, 148, 82, 102, 193, 252, 135, 64, 232, 78, 87, 147, 114, 147, 147, 5, 47, 132, 252, 251, 107, 41, 212, 191, 159, 218, 107, 241, - 115, 236, 228, 111, 237, 181, 178, 173, 246, 186, 107, 175, 157, 29, 236, 100, 23, 27, 175, 135, 189, 236, 99, 63, 7, + 115, 236, 224, 111, 237, 181, 178, 173, 246, 186, 107, 175, 157, 29, 236, 100, 23, 27, 175, 135, 189, 236, 99, 63, 7, 56, 200, 33, 14, 115, 132, 163, 28, 227, 56, 39, 56, 201, 41, 78, 115, 134, 179, 156, 227, 60, 23, 184, 200, 37, 46, 115, 133, 171, 92, 227, 58, 55, 184, 201, 45, 110, 115, 135, 187, 220, 227, 62, 15, 120, 200, 35, 30, 243, 132, 167, 60, 227, 57, 47, 120, 201, 43, 94, 243, 134, 183, 188, 227, 61, 31, 248, 200, 39, 62, 243, 133, 175, 77, 59, 230, 123, @@ -11,7 +11,7 @@ export const bytecode = Uint8Array.from([ 210, 72, 250, 72, 27, 233, 34, 77, 164, 135, 180, 144, 14, 210, 64, 246, 95, 46, 212, 119, 207, 230, 217, 59, 91, 103, 231, 108, 156, 125, 183, 237, 186, 107, 207, 125, 59, 30, 218, 239, 216, 110, 167, 246, 58, 183, 211, 165, 125, 174, 237, 114, 107, 143, 123, 59, 60, 186, 255, 179, 187, 191, 186, 115, 209, 125, 75, 238, 90, 118, 207, 138, 59, 54, 110, - 214, 184, 91, 161, 233, 158, 255, 190, 63, 165, 188, 93, 151, 233, 3, 0, 0, + 214, 184, 91, 161, 233, 158, 255, 190, 63, 131, 52, 119, 168, 233, 3, 0, 0, ]); export const initialWitnessMap = new Map([ From 1223ba69d747e9186bf7352e04f295b0a252a280 Mon Sep 17 00:00:00 2001 From: guipublic Date: Mon, 6 May 2024 13:51:24 +0000 Subject: [PATCH 44/98] another serialisation update --- .../acvm-repo/acir/tests/test_program_serialization.rs | 4 ++-- .../acvm-repo/acvm_js/test/shared/variable_base_scalar_mul.ts | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/noir/noir-repo/acvm-repo/acir/tests/test_program_serialization.rs b/noir/noir-repo/acvm-repo/acir/tests/test_program_serialization.rs index a4ee0b1fa99..cfc9b8da92d 100644 --- a/noir/noir-repo/acvm-repo/acir/tests/test_program_serialization.rs +++ b/noir/noir-repo/acvm-repo/acir/tests/test_program_serialization.rs @@ -108,9 +108,9 @@ fn variable_base_scalar_mul_circuit() { let bytes = Program::serialize_program(&program); let expected_serialization: Vec = vec![ - 31, 139, 8, 0, 0, 0, 0, 0, 0, 255, 93, 139, 65, 10, 0, 32, 8, 4, 213, 172, 46, 61, 186, + 31, 139, 8, 0, 0, 0, 0, 0, 0, 255, 93, 139, 65, 10, 0, 32, 8, 4, 213, 172, 14, 125, 186, 167, 103, 52, 65, 185, 176, 140, 44, 142, 202, 73, 143, 42, 247, 230, 128, 51, 106, 176, - 64, 135, 53, 218, 112, 252, 113, 141, 223, 187, 9, 155, 36, 231, 203, 2, 176, 218, 19, 62, + 64, 135, 53, 218, 112, 252, 113, 141, 223, 187, 9, 155, 36, 231, 203, 2, 17, 253, 86, 139, 137, 0, 0, 0, ]; diff --git a/noir/noir-repo/acvm-repo/acvm_js/test/shared/variable_base_scalar_mul.ts b/noir/noir-repo/acvm-repo/acvm_js/test/shared/variable_base_scalar_mul.ts index 400f7bf4e61..bfd52d4a2be 100644 --- a/noir/noir-repo/acvm-repo/acvm_js/test/shared/variable_base_scalar_mul.ts +++ b/noir/noir-repo/acvm-repo/acvm_js/test/shared/variable_base_scalar_mul.ts @@ -1,8 +1,8 @@ // See `variable_base_scalar_mul_circuit` integration test in `acir/tests/test_program_serialization.rs`. export const bytecode = Uint8Array.from([ - 31, 139, 8, 0, 0, 0, 0, 0, 0, 255, 93, 139, 65, 10, 0, 32, 8, 4, 213, 172, 46, 61, 186, 167, 103, 52, 65, 185, 176, + 31, 139, 8, 0, 0, 0, 0, 0, 0, 255, 93, 139, 65, 10, 0, 32, 8, 4, 213, 172, 14, 125, 186, 167, 103, 52, 65, 185, 176, 140, 44, 142, 202, 73, 143, 42, 247, 230, 128, 51, 106, 176, 64, 135, 53, 218, 112, 252, 113, 141, 223, 187, 9, 155, - 36, 231, 203, 2, 176, 218, 19, 62, 137, 0, 0, 0, + 36, 231, 203, 2, 17, 253, 86, 139, 137, 0, 0, 0, ]); export const initialWitnessMap = new Map([ [1, '0x0000000000000000000000000000000000000000000000000000000000000001'], From 6b68029c0405446daede26b8296348fc24aee5fd Mon Sep 17 00:00:00 2001 From: guipublic Date: Mon, 6 May 2024 13:59:59 +0000 Subject: [PATCH 45/98] fix merge issue --- .../compiler/noirc_evaluator/src/ssa/ir/instruction.rs | 2 -- 1 file changed, 2 deletions(-) diff --git a/noir/noir-repo/compiler/noirc_evaluator/src/ssa/ir/instruction.rs b/noir/noir-repo/compiler/noirc_evaluator/src/ssa/ir/instruction.rs index 11c844c91d2..7cc19e9f2b8 100644 --- a/noir/noir-repo/compiler/noirc_evaluator/src/ssa/ir/instruction.rs +++ b/noir/noir-repo/compiler/noirc_evaluator/src/ssa/ir/instruction.rs @@ -276,8 +276,6 @@ impl Instruction { | Load { .. } | Store { .. } | IncrementRc { .. } - | ArrayGet { .. } - | ArraySet { .. } | DecrementRc { .. } | RangeCheck { .. } => false, From 82443bf9e1bcdd0eb8f2b11abca0d0ad167f19cf Mon Sep 17 00:00:00 2001 From: guipublic Date: Mon, 6 May 2024 14:16:04 +0000 Subject: [PATCH 46/98] update acir.cpp --- .../noir-repo/acvm-repo/acir/codegen/acir.cpp | 11646 +++++++--------- 1 file changed, 4909 insertions(+), 6737 deletions(-) diff --git a/noir/noir-repo/acvm-repo/acir/codegen/acir.cpp b/noir/noir-repo/acvm-repo/acir/codegen/acir.cpp index 1110caf3836..8c7704815b5 100644 --- a/noir/noir-repo/acvm-repo/acir/codegen/acir.cpp +++ b/noir/noir-repo/acvm-repo/acir/codegen/acir.cpp @@ -1,8716 +1,6888 @@ #pragma once -#include "bincode.hpp" #include "serde.hpp" +#include "bincode.hpp" namespace Program { -struct Witness { - uint32_t value; - - friend bool operator==(const Witness &, const Witness &); - std::vector bincodeSerialize() const; - static Witness bincodeDeserialize(std::vector); -}; - -struct FunctionInput { - Program::Witness witness; - uint32_t num_bits; - - friend bool operator==(const FunctionInput &, const FunctionInput &); - std::vector bincodeSerialize() const; - static FunctionInput bincodeDeserialize(std::vector); -}; - -struct BlackBoxFuncCall { - - struct AND { - Program::FunctionInput lhs; - Program::FunctionInput rhs; - Program::Witness output; - - friend bool operator==(const AND &, const AND &); - std::vector bincodeSerialize() const; - static AND bincodeDeserialize(std::vector); - }; - - struct XOR { - Program::FunctionInput lhs; - Program::FunctionInput rhs; - Program::Witness output; - - friend bool operator==(const XOR &, const XOR &); - std::vector bincodeSerialize() const; - static XOR bincodeDeserialize(std::vector); - }; - - struct RANGE { - Program::FunctionInput input; - - friend bool operator==(const RANGE &, const RANGE &); - std::vector bincodeSerialize() const; - static RANGE bincodeDeserialize(std::vector); - }; - - struct Blake2s { - std::vector inputs; - std::array outputs; - - friend bool operator==(const Blake2s &, const Blake2s &); - std::vector bincodeSerialize() const; - static Blake2s bincodeDeserialize(std::vector); - }; - - struct Blake3 { - std::vector inputs; - std::array outputs; - - friend bool operator==(const Blake3 &, const Blake3 &); - std::vector bincodeSerialize() const; - static Blake3 bincodeDeserialize(std::vector); - }; - - struct SchnorrVerify { - Program::FunctionInput public_key_x; - Program::FunctionInput public_key_y; - std::array signature; - std::vector message; - Program::Witness output; - - friend bool operator==(const SchnorrVerify &, const SchnorrVerify &); - std::vector bincodeSerialize() const; - static SchnorrVerify bincodeDeserialize(std::vector); - }; - - struct PedersenCommitment { - std::vector inputs; - uint32_t domain_separator; - std::array outputs; - - friend bool operator==(const PedersenCommitment &, - const PedersenCommitment &); - std::vector bincodeSerialize() const; - static PedersenCommitment bincodeDeserialize(std::vector); - }; - - struct PedersenHash { - std::vector inputs; - uint32_t domain_separator; - Program::Witness output; - - friend bool operator==(const PedersenHash &, const PedersenHash &); - std::vector bincodeSerialize() const; - static PedersenHash bincodeDeserialize(std::vector); - }; - - struct EcdsaSecp256k1 { - std::array public_key_x; - std::array public_key_y; - std::array signature; - std::array hashed_message; - Program::Witness output; - - friend bool operator==(const EcdsaSecp256k1 &, const EcdsaSecp256k1 &); - std::vector bincodeSerialize() const; - static EcdsaSecp256k1 bincodeDeserialize(std::vector); - }; - - struct EcdsaSecp256r1 { - std::array public_key_x; - std::array public_key_y; - std::array signature; - std::array hashed_message; - Program::Witness output; - - friend bool operator==(const EcdsaSecp256r1 &, const EcdsaSecp256r1 &); - std::vector bincodeSerialize() const; - static EcdsaSecp256r1 bincodeDeserialize(std::vector); - }; - - struct FixedBaseScalarMul { - Program::FunctionInput low; - Program::FunctionInput high; - std::array outputs; - - friend bool operator==(const FixedBaseScalarMul &, - const FixedBaseScalarMul &); - std::vector bincodeSerialize() const; - static FixedBaseScalarMul bincodeDeserialize(std::vector); - }; - - struct VariableBaseScalarMul { - Program::FunctionInput point_x; - Program::FunctionInput point_y; - Program::FunctionInput scalar_low; - Program::FunctionInput scalar_high; - std::array outputs; - - friend bool operator==(const VariableBaseScalarMul &, - const VariableBaseScalarMul &); - std::vector bincodeSerialize() const; - static VariableBaseScalarMul bincodeDeserialize(std::vector); - }; - - struct EmbeddedCurveAdd { - Program::FunctionInput input1_x; - Program::FunctionInput input1_y; - Program::FunctionInput input2_x; - Program::FunctionInput input2_y; - std::array outputs; - - friend bool operator==(const EmbeddedCurveAdd &, const EmbeddedCurveAdd &); - std::vector bincodeSerialize() const; - static EmbeddedCurveAdd bincodeDeserialize(std::vector); - }; - - struct Keccak256 { - std::vector inputs; - Program::FunctionInput var_message_size; - std::array outputs; - - friend bool operator==(const Keccak256 &, const Keccak256 &); - std::vector bincodeSerialize() const; - static Keccak256 bincodeDeserialize(std::vector); - }; - - struct Keccakf1600 { - std::array inputs; - std::array outputs; - - friend bool operator==(const Keccakf1600 &, const Keccakf1600 &); - std::vector bincodeSerialize() const; - static Keccakf1600 bincodeDeserialize(std::vector); - }; - - struct RecursiveAggregation { - std::vector verification_key; - std::vector proof; - std::vector public_inputs; - Program::FunctionInput key_hash; - - friend bool operator==(const RecursiveAggregation &, - const RecursiveAggregation &); - std::vector bincodeSerialize() const; - static RecursiveAggregation bincodeDeserialize(std::vector); - }; - - struct BigIntAdd { - uint32_t lhs; - uint32_t rhs; - uint32_t output; - - friend bool operator==(const BigIntAdd &, const BigIntAdd &); - std::vector bincodeSerialize() const; - static BigIntAdd bincodeDeserialize(std::vector); - }; - - struct BigIntSub { - uint32_t lhs; - uint32_t rhs; - uint32_t output; - - friend bool operator==(const BigIntSub &, const BigIntSub &); - std::vector bincodeSerialize() const; - static BigIntSub bincodeDeserialize(std::vector); - }; - - struct BigIntMul { - uint32_t lhs; - uint32_t rhs; - uint32_t output; - - friend bool operator==(const BigIntMul &, const BigIntMul &); - std::vector bincodeSerialize() const; - static BigIntMul bincodeDeserialize(std::vector); - }; - - struct BigIntDiv { - uint32_t lhs; - uint32_t rhs; - uint32_t output; - - friend bool operator==(const BigIntDiv &, const BigIntDiv &); - std::vector bincodeSerialize() const; - static BigIntDiv bincodeDeserialize(std::vector); - }; - - struct BigIntFromLeBytes { - std::vector inputs; - std::vector modulus; - uint32_t output; - - friend bool operator==(const BigIntFromLeBytes &, - const BigIntFromLeBytes &); - std::vector bincodeSerialize() const; - static BigIntFromLeBytes bincodeDeserialize(std::vector); - }; - - struct BigIntToLeBytes { - uint32_t input; - std::vector outputs; - - friend bool operator==(const BigIntToLeBytes &, const BigIntToLeBytes &); - std::vector bincodeSerialize() const; - static BigIntToLeBytes bincodeDeserialize(std::vector); - }; - - struct Poseidon2Permutation { - std::vector inputs; - std::vector outputs; - uint32_t len; - - friend bool operator==(const Poseidon2Permutation &, - const Poseidon2Permutation &); - std::vector bincodeSerialize() const; - static Poseidon2Permutation bincodeDeserialize(std::vector); - }; - - struct Sha256Compression { - std::array inputs; - std::array hash_values; - std::array outputs; - - friend bool operator==(const Sha256Compression &, - const Sha256Compression &); - std::vector bincodeSerialize() const; - static Sha256Compression bincodeDeserialize(std::vector); - }; - - std::variant - value; - - friend bool operator==(const BlackBoxFuncCall &, const BlackBoxFuncCall &); - std::vector bincodeSerialize() const; - static BlackBoxFuncCall bincodeDeserialize(std::vector); -}; - -struct BlockId { - uint32_t value; - - friend bool operator==(const BlockId &, const BlockId &); - std::vector bincodeSerialize() const; - static BlockId bincodeDeserialize(std::vector); -}; - -struct Expression { - std::vector> - mul_terms; - std::vector> linear_combinations; - std::string q_c; - - friend bool operator==(const Expression &, const Expression &); - std::vector bincodeSerialize() const; - static Expression bincodeDeserialize(std::vector); -}; - -struct BrilligInputs { - - struct Single { - Program::Expression value; - - friend bool operator==(const Single &, const Single &); - std::vector bincodeSerialize() const; - static Single bincodeDeserialize(std::vector); - }; - - struct Array { - std::vector value; - - friend bool operator==(const Array &, const Array &); - std::vector bincodeSerialize() const; - static Array bincodeDeserialize(std::vector); - }; - - struct MemoryArray { - Program::BlockId value; - - friend bool operator==(const MemoryArray &, const MemoryArray &); - std::vector bincodeSerialize() const; - static MemoryArray bincodeDeserialize(std::vector); - }; - - std::variant value; - - friend bool operator==(const BrilligInputs &, const BrilligInputs &); - std::vector bincodeSerialize() const; - static BrilligInputs bincodeDeserialize(std::vector); -}; - -struct BrilligOutputs { - - struct Simple { - Program::Witness value; - - friend bool operator==(const Simple &, const Simple &); - std::vector bincodeSerialize() const; - static Simple bincodeDeserialize(std::vector); - }; - - struct Array { - std::vector value; - - friend bool operator==(const Array &, const Array &); - std::vector bincodeSerialize() const; - static Array bincodeDeserialize(std::vector); - }; - - std::variant value; - - friend bool operator==(const BrilligOutputs &, const BrilligOutputs &); - std::vector bincodeSerialize() const; - static BrilligOutputs bincodeDeserialize(std::vector); -}; - -struct Directive { - - struct ToLeRadix { - Program::Expression a; - std::vector b; - uint32_t radix; - - friend bool operator==(const ToLeRadix &, const ToLeRadix &); - std::vector bincodeSerialize() const; - static ToLeRadix bincodeDeserialize(std::vector); - }; - - std::variant value; - - friend bool operator==(const Directive &, const Directive &); - std::vector bincodeSerialize() const; - static Directive bincodeDeserialize(std::vector); -}; - -struct MemOp { - Program::Expression operation; - Program::Expression index; - Program::Expression value; - - friend bool operator==(const MemOp &, const MemOp &); - std::vector bincodeSerialize() const; - static MemOp bincodeDeserialize(std::vector); -}; - -struct Opcode { - - struct AssertZero { - Program::Expression value; - - friend bool operator==(const AssertZero &, const AssertZero &); - std::vector bincodeSerialize() const; - static AssertZero bincodeDeserialize(std::vector); - }; - - struct BlackBoxFuncCall { - Program::BlackBoxFuncCall value; - - friend bool operator==(const BlackBoxFuncCall &, const BlackBoxFuncCall &); - std::vector bincodeSerialize() const; - static BlackBoxFuncCall bincodeDeserialize(std::vector); - }; - - struct Directive { - Program::Directive value; - - friend bool operator==(const Directive &, const Directive &); - std::vector bincodeSerialize() const; - static Directive bincodeDeserialize(std::vector); - }; - - struct MemoryOp { - Program::BlockId block_id; - Program::MemOp op; - std::optional predicate; - - friend bool operator==(const MemoryOp &, const MemoryOp &); - std::vector bincodeSerialize() const; - static MemoryOp bincodeDeserialize(std::vector); - }; - - struct MemoryInit { - Program::BlockId block_id; - std::vector init; - - friend bool operator==(const MemoryInit &, const MemoryInit &); - std::vector bincodeSerialize() const; - static MemoryInit bincodeDeserialize(std::vector); - }; - - struct BrilligCall { - uint32_t id; - std::vector inputs; - std::vector outputs; - std::optional predicate; - - friend bool operator==(const BrilligCall &, const BrilligCall &); - std::vector bincodeSerialize() const; - static BrilligCall bincodeDeserialize(std::vector); - }; - - struct Call { - uint32_t id; - std::vector inputs; - std::vector outputs; - std::optional predicate; - - friend bool operator==(const Call &, const Call &); - std::vector bincodeSerialize() const; - static Call bincodeDeserialize(std::vector); - }; - - std::variant - value; - - friend bool operator==(const Opcode &, const Opcode &); - std::vector bincodeSerialize() const; - static Opcode bincodeDeserialize(std::vector); -}; - -struct BinaryFieldOp { - - struct Add { - friend bool operator==(const Add &, const Add &); - std::vector bincodeSerialize() const; - static Add bincodeDeserialize(std::vector); - }; - - struct Sub { - friend bool operator==(const Sub &, const Sub &); - std::vector bincodeSerialize() const; - static Sub bincodeDeserialize(std::vector); - }; - - struct Mul { - friend bool operator==(const Mul &, const Mul &); - std::vector bincodeSerialize() const; - static Mul bincodeDeserialize(std::vector); - }; - - struct Div { - friend bool operator==(const Div &, const Div &); - std::vector bincodeSerialize() const; - static Div bincodeDeserialize(std::vector); - }; - - struct IntegerDiv { - friend bool operator==(const IntegerDiv &, const IntegerDiv &); - std::vector bincodeSerialize() const; - static IntegerDiv bincodeDeserialize(std::vector); - }; - - struct Equals { - friend bool operator==(const Equals &, const Equals &); - std::vector bincodeSerialize() const; - static Equals bincodeDeserialize(std::vector); - }; - - struct LessThan { - friend bool operator==(const LessThan &, const LessThan &); - std::vector bincodeSerialize() const; - static LessThan bincodeDeserialize(std::vector); - }; - - struct LessThanEquals { - friend bool operator==(const LessThanEquals &, const LessThanEquals &); - std::vector bincodeSerialize() const; - static LessThanEquals bincodeDeserialize(std::vector); - }; - - std::variant - value; - - friend bool operator==(const BinaryFieldOp &, const BinaryFieldOp &); - std::vector bincodeSerialize() const; - static BinaryFieldOp bincodeDeserialize(std::vector); -}; - -struct BinaryIntOp { - - struct Add { - friend bool operator==(const Add &, const Add &); - std::vector bincodeSerialize() const; - static Add bincodeDeserialize(std::vector); - }; - - struct Sub { - friend bool operator==(const Sub &, const Sub &); - std::vector bincodeSerialize() const; - static Sub bincodeDeserialize(std::vector); - }; - - struct Mul { - friend bool operator==(const Mul &, const Mul &); - std::vector bincodeSerialize() const; - static Mul bincodeDeserialize(std::vector); - }; - - struct Div { - friend bool operator==(const Div &, const Div &); - std::vector bincodeSerialize() const; - static Div bincodeDeserialize(std::vector); - }; - - struct Equals { - friend bool operator==(const Equals &, const Equals &); - std::vector bincodeSerialize() const; - static Equals bincodeDeserialize(std::vector); - }; - - struct LessThan { - friend bool operator==(const LessThan &, const LessThan &); - std::vector bincodeSerialize() const; - static LessThan bincodeDeserialize(std::vector); - }; - - struct LessThanEquals { - friend bool operator==(const LessThanEquals &, const LessThanEquals &); - std::vector bincodeSerialize() const; - static LessThanEquals bincodeDeserialize(std::vector); - }; - - struct And { - friend bool operator==(const And &, const And &); - std::vector bincodeSerialize() const; - static And bincodeDeserialize(std::vector); - }; - - struct Or { - friend bool operator==(const Or &, const Or &); - std::vector bincodeSerialize() const; - static Or bincodeDeserialize(std::vector); - }; - - struct Xor { - friend bool operator==(const Xor &, const Xor &); - std::vector bincodeSerialize() const; - static Xor bincodeDeserialize(std::vector); - }; - - struct Shl { - friend bool operator==(const Shl &, const Shl &); - std::vector bincodeSerialize() const; - static Shl bincodeDeserialize(std::vector); - }; - - struct Shr { - friend bool operator==(const Shr &, const Shr &); - std::vector bincodeSerialize() const; - static Shr bincodeDeserialize(std::vector); - }; - - std::variant - value; - - friend bool operator==(const BinaryIntOp &, const BinaryIntOp &); - std::vector bincodeSerialize() const; - static BinaryIntOp bincodeDeserialize(std::vector); -}; - -struct MemoryAddress { - uint64_t value; - - friend bool operator==(const MemoryAddress &, const MemoryAddress &); - std::vector bincodeSerialize() const; - static MemoryAddress bincodeDeserialize(std::vector); -}; - -struct HeapArray { - Program::MemoryAddress pointer; - uint64_t size; - - friend bool operator==(const HeapArray &, const HeapArray &); - std::vector bincodeSerialize() const; - static HeapArray bincodeDeserialize(std::vector); -}; - -struct HeapVector { - Program::MemoryAddress pointer; - Program::MemoryAddress size; - - friend bool operator==(const HeapVector &, const HeapVector &); - std::vector bincodeSerialize() const; - static HeapVector bincodeDeserialize(std::vector); -}; - -struct BlackBoxOp { - - struct Blake2s { - Program::HeapVector message; - Program::HeapArray output; - - friend bool operator==(const Blake2s &, const Blake2s &); - std::vector bincodeSerialize() const; - static Blake2s bincodeDeserialize(std::vector); - }; - - struct Blake3 { - Program::HeapVector message; - Program::HeapArray output; - - friend bool operator==(const Blake3 &, const Blake3 &); - std::vector bincodeSerialize() const; - static Blake3 bincodeDeserialize(std::vector); - }; - - struct Keccak256 { - Program::HeapVector message; - Program::HeapArray output; - - friend bool operator==(const Keccak256 &, const Keccak256 &); - std::vector bincodeSerialize() const; - static Keccak256 bincodeDeserialize(std::vector); - }; - - struct Keccakf1600 { - Program::HeapVector message; - Program::HeapArray output; - - friend bool operator==(const Keccakf1600 &, const Keccakf1600 &); - std::vector bincodeSerialize() const; - static Keccakf1600 bincodeDeserialize(std::vector); - }; - - struct EcdsaSecp256k1 { - Program::HeapVector hashed_msg; - Program::HeapArray public_key_x; - Program::HeapArray public_key_y; - Program::HeapArray signature; - Program::MemoryAddress result; - - friend bool operator==(const EcdsaSecp256k1 &, const EcdsaSecp256k1 &); - std::vector bincodeSerialize() const; - static EcdsaSecp256k1 bincodeDeserialize(std::vector); - }; - - struct EcdsaSecp256r1 { - Program::HeapVector hashed_msg; - Program::HeapArray public_key_x; - Program::HeapArray public_key_y; - Program::HeapArray signature; - Program::MemoryAddress result; - - friend bool operator==(const EcdsaSecp256r1 &, const EcdsaSecp256r1 &); - std::vector bincodeSerialize() const; - static EcdsaSecp256r1 bincodeDeserialize(std::vector); - }; - - struct SchnorrVerify { - Program::MemoryAddress public_key_x; - Program::MemoryAddress public_key_y; - Program::HeapVector message; - Program::HeapVector signature; - Program::MemoryAddress result; - - friend bool operator==(const SchnorrVerify &, const SchnorrVerify &); - std::vector bincodeSerialize() const; - static SchnorrVerify bincodeDeserialize(std::vector); - }; - - struct PedersenCommitment { - Program::HeapVector inputs; - Program::MemoryAddress domain_separator; - Program::HeapArray output; - - friend bool operator==(const PedersenCommitment &, - const PedersenCommitment &); - std::vector bincodeSerialize() const; - static PedersenCommitment bincodeDeserialize(std::vector); - }; - - struct PedersenHash { - Program::HeapVector inputs; - Program::MemoryAddress domain_separator; - Program::MemoryAddress output; - - friend bool operator==(const PedersenHash &, const PedersenHash &); - std::vector bincodeSerialize() const; - static PedersenHash bincodeDeserialize(std::vector); - }; - - struct FixedBaseScalarMul { - Program::MemoryAddress low; - Program::MemoryAddress high; - Program::HeapArray result; - - friend bool operator==(const FixedBaseScalarMul &, - const FixedBaseScalarMul &); - std::vector bincodeSerialize() const; - static FixedBaseScalarMul bincodeDeserialize(std::vector); - }; - - struct VariableBaseScalarMul { - Program::MemoryAddress point_x; - Program::MemoryAddress point_y; - Program::MemoryAddress scalar_low; - Program::MemoryAddress scalar_high; - Program::HeapArray result; - - friend bool operator==(const VariableBaseScalarMul &, - const VariableBaseScalarMul &); - std::vector bincodeSerialize() const; - static VariableBaseScalarMul bincodeDeserialize(std::vector); - }; - - struct EmbeddedCurveAdd { - Program::MemoryAddress input1_x; - Program::MemoryAddress input1_y; - Program::MemoryAddress input2_x; - Program::MemoryAddress input2_y; - Program::HeapArray result; - - friend bool operator==(const EmbeddedCurveAdd &, const EmbeddedCurveAdd &); - std::vector bincodeSerialize() const; - static EmbeddedCurveAdd bincodeDeserialize(std::vector); - }; - - struct BigIntAdd { - Program::MemoryAddress lhs; - Program::MemoryAddress rhs; - Program::MemoryAddress output; - - friend bool operator==(const BigIntAdd &, const BigIntAdd &); - std::vector bincodeSerialize() const; - static BigIntAdd bincodeDeserialize(std::vector); - }; - - struct BigIntSub { - Program::MemoryAddress lhs; - Program::MemoryAddress rhs; - Program::MemoryAddress output; - - friend bool operator==(const BigIntSub &, const BigIntSub &); - std::vector bincodeSerialize() const; - static BigIntSub bincodeDeserialize(std::vector); - }; - - struct BigIntMul { - Program::MemoryAddress lhs; - Program::MemoryAddress rhs; - Program::MemoryAddress output; - - friend bool operator==(const BigIntMul &, const BigIntMul &); - std::vector bincodeSerialize() const; - static BigIntMul bincodeDeserialize(std::vector); - }; - - struct BigIntDiv { - Program::MemoryAddress lhs; - Program::MemoryAddress rhs; - Program::MemoryAddress output; - - friend bool operator==(const BigIntDiv &, const BigIntDiv &); - std::vector bincodeSerialize() const; - static BigIntDiv bincodeDeserialize(std::vector); - }; - - struct BigIntFromLeBytes { - Program::HeapVector inputs; - Program::HeapVector modulus; - Program::MemoryAddress output; - - friend bool operator==(const BigIntFromLeBytes &, - const BigIntFromLeBytes &); - std::vector bincodeSerialize() const; - static BigIntFromLeBytes bincodeDeserialize(std::vector); - }; - - struct BigIntToLeBytes { - Program::MemoryAddress input; - Program::HeapVector output; - - friend bool operator==(const BigIntToLeBytes &, const BigIntToLeBytes &); - std::vector bincodeSerialize() const; - static BigIntToLeBytes bincodeDeserialize(std::vector); - }; - - struct Poseidon2Permutation { - Program::HeapVector message; - Program::HeapArray output; - Program::MemoryAddress len; - - friend bool operator==(const Poseidon2Permutation &, - const Poseidon2Permutation &); - std::vector bincodeSerialize() const; - static Poseidon2Permutation bincodeDeserialize(std::vector); - }; - - struct Sha256Compression { - Program::HeapVector input; - Program::HeapVector hash_values; - Program::HeapArray output; - - friend bool operator==(const Sha256Compression &, - const Sha256Compression &); - std::vector bincodeSerialize() const; - static Sha256Compression bincodeDeserialize(std::vector); - }; - - std::variant - value; - - friend bool operator==(const BlackBoxOp &, const BlackBoxOp &); - std::vector bincodeSerialize() const; - static BlackBoxOp bincodeDeserialize(std::vector); -}; - -struct HeapValueType; - -struct HeapValueType { - - struct Simple { - uint32_t value; - - friend bool operator==(const Simple &, const Simple &); - std::vector bincodeSerialize() const; - static Simple bincodeDeserialize(std::vector); - }; - - struct Array { - std::vector value_types; - uint64_t size; - - friend bool operator==(const Array &, const Array &); - std::vector bincodeSerialize() const; - static Array bincodeDeserialize(std::vector); - }; - - struct Vector { - std::vector value_types; - - friend bool operator==(const Vector &, const Vector &); - std::vector bincodeSerialize() const; - static Vector bincodeDeserialize(std::vector); - }; - - std::variant value; - - friend bool operator==(const HeapValueType &, const HeapValueType &); - std::vector bincodeSerialize() const; - static HeapValueType bincodeDeserialize(std::vector); -}; - -struct ValueOrArray { - - struct MemoryAddress { - Program::MemoryAddress value; - - friend bool operator==(const MemoryAddress &, const MemoryAddress &); - std::vector bincodeSerialize() const; - static MemoryAddress bincodeDeserialize(std::vector); - }; - - struct HeapArray { - Program::HeapArray value; - - friend bool operator==(const HeapArray &, const HeapArray &); - std::vector bincodeSerialize() const; - static HeapArray bincodeDeserialize(std::vector); - }; - - struct HeapVector { - Program::HeapVector value; - - friend bool operator==(const HeapVector &, const HeapVector &); - std::vector bincodeSerialize() const; - static HeapVector bincodeDeserialize(std::vector); - }; - - std::variant value; - - friend bool operator==(const ValueOrArray &, const ValueOrArray &); - std::vector bincodeSerialize() const; - static ValueOrArray bincodeDeserialize(std::vector); -}; - -struct BrilligOpcode { - - struct BinaryFieldOp { - Program::MemoryAddress destination; - Program::BinaryFieldOp op; - Program::MemoryAddress lhs; - Program::MemoryAddress rhs; - - friend bool operator==(const BinaryFieldOp &, const BinaryFieldOp &); - std::vector bincodeSerialize() const; - static BinaryFieldOp bincodeDeserialize(std::vector); - }; - - struct BinaryIntOp { - Program::MemoryAddress destination; - Program::BinaryIntOp op; - uint32_t bit_size; - Program::MemoryAddress lhs; - Program::MemoryAddress rhs; - - friend bool operator==(const BinaryIntOp &, const BinaryIntOp &); - std::vector bincodeSerialize() const; - static BinaryIntOp bincodeDeserialize(std::vector); - }; - - struct Cast { - Program::MemoryAddress destination; - Program::MemoryAddress source; - uint32_t bit_size; - - friend bool operator==(const Cast &, const Cast &); - std::vector bincodeSerialize() const; - static Cast bincodeDeserialize(std::vector); - }; - - struct JumpIfNot { - Program::MemoryAddress condition; - uint64_t location; - - friend bool operator==(const JumpIfNot &, const JumpIfNot &); - std::vector bincodeSerialize() const; - static JumpIfNot bincodeDeserialize(std::vector); - }; - - struct JumpIf { - Program::MemoryAddress condition; - uint64_t location; - - friend bool operator==(const JumpIf &, const JumpIf &); - std::vector bincodeSerialize() const; - static JumpIf bincodeDeserialize(std::vector); - }; - - struct Jump { - uint64_t location; - - friend bool operator==(const Jump &, const Jump &); - std::vector bincodeSerialize() const; - static Jump bincodeDeserialize(std::vector); - }; - - struct CalldataCopy { - Program::MemoryAddress destination_address; - uint64_t size; - uint64_t offset; - - friend bool operator==(const CalldataCopy &, const CalldataCopy &); - std::vector bincodeSerialize() const; - static CalldataCopy bincodeDeserialize(std::vector); - }; - - struct Call { - uint64_t location; - - friend bool operator==(const Call &, const Call &); - std::vector bincodeSerialize() const; - static Call bincodeDeserialize(std::vector); - }; - - struct Const { - Program::MemoryAddress destination; - uint32_t bit_size; - std::string value; - - friend bool operator==(const Const &, const Const &); - std::vector bincodeSerialize() const; - static Const bincodeDeserialize(std::vector); - }; - - struct Return { - friend bool operator==(const Return &, const Return &); - std::vector bincodeSerialize() const; - static Return bincodeDeserialize(std::vector); - }; - - struct ForeignCall { - std::string function; - std::vector destinations; - std::vector destination_value_types; - std::vector inputs; - std::vector input_value_types; - - friend bool operator==(const ForeignCall &, const ForeignCall &); - std::vector bincodeSerialize() const; - static ForeignCall bincodeDeserialize(std::vector); - }; - - struct Mov { - Program::MemoryAddress destination; - Program::MemoryAddress source; - - friend bool operator==(const Mov &, const Mov &); - std::vector bincodeSerialize() const; - static Mov bincodeDeserialize(std::vector); - }; - - struct ConditionalMov { - Program::MemoryAddress destination; - Program::MemoryAddress source_a; - Program::MemoryAddress source_b; - Program::MemoryAddress condition; - - friend bool operator==(const ConditionalMov &, const ConditionalMov &); - std::vector bincodeSerialize() const; - static ConditionalMov bincodeDeserialize(std::vector); - }; - - struct Load { - Program::MemoryAddress destination; - Program::MemoryAddress source_pointer; - - friend bool operator==(const Load &, const Load &); - std::vector bincodeSerialize() const; - static Load bincodeDeserialize(std::vector); - }; - - struct Store { - Program::MemoryAddress destination_pointer; - Program::MemoryAddress source; - - friend bool operator==(const Store &, const Store &); - std::vector bincodeSerialize() const; - static Store bincodeDeserialize(std::vector); - }; - - struct BlackBox { - Program::BlackBoxOp value; - - friend bool operator==(const BlackBox &, const BlackBox &); - std::vector bincodeSerialize() const; - static BlackBox bincodeDeserialize(std::vector); - }; - - struct Trap { - Program::HeapArray revert_data; - - friend bool operator==(const Trap &, const Trap &); - std::vector bincodeSerialize() const; - static Trap bincodeDeserialize(std::vector); - }; - - struct Stop { - uint64_t return_data_offset; - uint64_t return_data_size; - - friend bool operator==(const Stop &, const Stop &); - std::vector bincodeSerialize() const; - static Stop bincodeDeserialize(std::vector); - }; - - std::variant - value; - - friend bool operator==(const BrilligOpcode &, const BrilligOpcode &); - std::vector bincodeSerialize() const; - static BrilligOpcode bincodeDeserialize(std::vector); -}; - -struct ExpressionOrMemory { - - struct Expression { - Program::Expression value; - - friend bool operator==(const Expression &, const Expression &); - std::vector bincodeSerialize() const; - static Expression bincodeDeserialize(std::vector); - }; - - struct Memory { - Program::BlockId value; - - friend bool operator==(const Memory &, const Memory &); - std::vector bincodeSerialize() const; - static Memory bincodeDeserialize(std::vector); - }; - - std::variant value; - - friend bool operator==(const ExpressionOrMemory &, - const ExpressionOrMemory &); - std::vector bincodeSerialize() const; - static ExpressionOrMemory bincodeDeserialize(std::vector); -}; - -struct AssertionPayload { - - struct StaticString { - std::string value; - - friend bool operator==(const StaticString &, const StaticString &); - std::vector bincodeSerialize() const; - static StaticString bincodeDeserialize(std::vector); - }; - - struct Dynamic { - std::tuple> value; - - friend bool operator==(const Dynamic &, const Dynamic &); - std::vector bincodeSerialize() const; - static Dynamic bincodeDeserialize(std::vector); - }; + struct Witness { + uint32_t value; + + friend bool operator==(const Witness&, const Witness&); + std::vector bincodeSerialize() const; + static Witness bincodeDeserialize(std::vector); + }; + + struct FunctionInput { + Program::Witness witness; + uint32_t num_bits; + + friend bool operator==(const FunctionInput&, const FunctionInput&); + std::vector bincodeSerialize() const; + static FunctionInput bincodeDeserialize(std::vector); + }; + + struct BlackBoxFuncCall { + + struct AND { + Program::FunctionInput lhs; + Program::FunctionInput rhs; + Program::Witness output; + + friend bool operator==(const AND&, const AND&); + std::vector bincodeSerialize() const; + static AND bincodeDeserialize(std::vector); + }; + + struct XOR { + Program::FunctionInput lhs; + Program::FunctionInput rhs; + Program::Witness output; + + friend bool operator==(const XOR&, const XOR&); + std::vector bincodeSerialize() const; + static XOR bincodeDeserialize(std::vector); + }; + + struct RANGE { + Program::FunctionInput input; + + friend bool operator==(const RANGE&, const RANGE&); + std::vector bincodeSerialize() const; + static RANGE bincodeDeserialize(std::vector); + }; + + struct Blake2s { + std::vector inputs; + std::array outputs; + + friend bool operator==(const Blake2s&, const Blake2s&); + std::vector bincodeSerialize() const; + static Blake2s bincodeDeserialize(std::vector); + }; + + struct Blake3 { + std::vector inputs; + std::array outputs; + + friend bool operator==(const Blake3&, const Blake3&); + std::vector bincodeSerialize() const; + static Blake3 bincodeDeserialize(std::vector); + }; + + struct SchnorrVerify { + Program::FunctionInput public_key_x; + Program::FunctionInput public_key_y; + std::array signature; + std::vector message; + Program::Witness output; + + friend bool operator==(const SchnorrVerify&, const SchnorrVerify&); + std::vector bincodeSerialize() const; + static SchnorrVerify bincodeDeserialize(std::vector); + }; + + struct PedersenCommitment { + std::vector inputs; + uint32_t domain_separator; + std::array outputs; + + friend bool operator==(const PedersenCommitment&, const PedersenCommitment&); + std::vector bincodeSerialize() const; + static PedersenCommitment bincodeDeserialize(std::vector); + }; + + struct PedersenHash { + std::vector inputs; + uint32_t domain_separator; + Program::Witness output; + + friend bool operator==(const PedersenHash&, const PedersenHash&); + std::vector bincodeSerialize() const; + static PedersenHash bincodeDeserialize(std::vector); + }; + + struct EcdsaSecp256k1 { + std::array public_key_x; + std::array public_key_y; + std::array signature; + std::array hashed_message; + Program::Witness output; + + friend bool operator==(const EcdsaSecp256k1&, const EcdsaSecp256k1&); + std::vector bincodeSerialize() const; + static EcdsaSecp256k1 bincodeDeserialize(std::vector); + }; + + struct EcdsaSecp256r1 { + std::array public_key_x; + std::array public_key_y; + std::array signature; + std::array hashed_message; + Program::Witness output; + + friend bool operator==(const EcdsaSecp256r1&, const EcdsaSecp256r1&); + std::vector bincodeSerialize() const; + static EcdsaSecp256r1 bincodeDeserialize(std::vector); + }; + + struct FixedBaseScalarMul { + Program::FunctionInput low; + Program::FunctionInput high; + std::array outputs; + + friend bool operator==(const FixedBaseScalarMul&, const FixedBaseScalarMul&); + std::vector bincodeSerialize() const; + static FixedBaseScalarMul bincodeDeserialize(std::vector); + }; + + struct VariableBaseScalarMul { + Program::FunctionInput point_x; + Program::FunctionInput point_y; + Program::FunctionInput scalar_low; + Program::FunctionInput scalar_high; + std::array outputs; + + friend bool operator==(const VariableBaseScalarMul&, const VariableBaseScalarMul&); + std::vector bincodeSerialize() const; + static VariableBaseScalarMul bincodeDeserialize(std::vector); + }; + + struct EmbeddedCurveAdd { + Program::FunctionInput input1_x; + Program::FunctionInput input1_y; + Program::FunctionInput input2_x; + Program::FunctionInput input2_y; + std::array outputs; + + friend bool operator==(const EmbeddedCurveAdd&, const EmbeddedCurveAdd&); + std::vector bincodeSerialize() const; + static EmbeddedCurveAdd bincodeDeserialize(std::vector); + }; + + struct Keccak256 { + std::vector inputs; + Program::FunctionInput var_message_size; + std::array outputs; + + friend bool operator==(const Keccak256&, const Keccak256&); + std::vector bincodeSerialize() const; + static Keccak256 bincodeDeserialize(std::vector); + }; + + struct Keccakf1600 { + std::array inputs; + std::array outputs; + + friend bool operator==(const Keccakf1600&, const Keccakf1600&); + std::vector bincodeSerialize() const; + static Keccakf1600 bincodeDeserialize(std::vector); + }; + + struct RecursiveAggregation { + std::vector verification_key; + std::vector proof; + std::vector public_inputs; + Program::FunctionInput key_hash; + + friend bool operator==(const RecursiveAggregation&, const RecursiveAggregation&); + std::vector bincodeSerialize() const; + static RecursiveAggregation bincodeDeserialize(std::vector); + }; + + struct BigIntAdd { + uint32_t lhs; + uint32_t rhs; + uint32_t output; + + friend bool operator==(const BigIntAdd&, const BigIntAdd&); + std::vector bincodeSerialize() const; + static BigIntAdd bincodeDeserialize(std::vector); + }; + + struct BigIntSub { + uint32_t lhs; + uint32_t rhs; + uint32_t output; + + friend bool operator==(const BigIntSub&, const BigIntSub&); + std::vector bincodeSerialize() const; + static BigIntSub bincodeDeserialize(std::vector); + }; + + struct BigIntMul { + uint32_t lhs; + uint32_t rhs; + uint32_t output; + + friend bool operator==(const BigIntMul&, const BigIntMul&); + std::vector bincodeSerialize() const; + static BigIntMul bincodeDeserialize(std::vector); + }; + + struct BigIntDiv { + uint32_t lhs; + uint32_t rhs; + uint32_t output; + + friend bool operator==(const BigIntDiv&, const BigIntDiv&); + std::vector bincodeSerialize() const; + static BigIntDiv bincodeDeserialize(std::vector); + }; + + struct BigIntFromLeBytes { + std::vector inputs; + std::vector modulus; + uint32_t output; + + friend bool operator==(const BigIntFromLeBytes&, const BigIntFromLeBytes&); + std::vector bincodeSerialize() const; + static BigIntFromLeBytes bincodeDeserialize(std::vector); + }; + + struct BigIntToLeBytes { + uint32_t input; + std::vector outputs; + + friend bool operator==(const BigIntToLeBytes&, const BigIntToLeBytes&); + std::vector bincodeSerialize() const; + static BigIntToLeBytes bincodeDeserialize(std::vector); + }; + + struct Poseidon2Permutation { + std::vector inputs; + std::vector outputs; + uint32_t len; + + friend bool operator==(const Poseidon2Permutation&, const Poseidon2Permutation&); + std::vector bincodeSerialize() const; + static Poseidon2Permutation bincodeDeserialize(std::vector); + }; + + struct Sha256Compression { + std::array inputs; + std::array hash_values; + std::array outputs; + + friend bool operator==(const Sha256Compression&, const Sha256Compression&); + std::vector bincodeSerialize() const; + static Sha256Compression bincodeDeserialize(std::vector); + }; + + std::variant value; + + friend bool operator==(const BlackBoxFuncCall&, const BlackBoxFuncCall&); + std::vector bincodeSerialize() const; + static BlackBoxFuncCall bincodeDeserialize(std::vector); + }; + + struct BlockId { + uint32_t value; + + friend bool operator==(const BlockId&, const BlockId&); + std::vector bincodeSerialize() const; + static BlockId bincodeDeserialize(std::vector); + }; + + struct Expression { + std::vector> mul_terms; + std::vector> linear_combinations; + std::string q_c; + + friend bool operator==(const Expression&, const Expression&); + std::vector bincodeSerialize() const; + static Expression bincodeDeserialize(std::vector); + }; + + struct BrilligInputs { + + struct Single { + Program::Expression value; + + friend bool operator==(const Single&, const Single&); + std::vector bincodeSerialize() const; + static Single bincodeDeserialize(std::vector); + }; + + struct Array { + std::vector value; + + friend bool operator==(const Array&, const Array&); + std::vector bincodeSerialize() const; + static Array bincodeDeserialize(std::vector); + }; + + struct MemoryArray { + Program::BlockId value; + + friend bool operator==(const MemoryArray&, const MemoryArray&); + std::vector bincodeSerialize() const; + static MemoryArray bincodeDeserialize(std::vector); + }; + + std::variant value; + + friend bool operator==(const BrilligInputs&, const BrilligInputs&); + std::vector bincodeSerialize() const; + static BrilligInputs bincodeDeserialize(std::vector); + }; + + struct BrilligOutputs { + + struct Simple { + Program::Witness value; + + friend bool operator==(const Simple&, const Simple&); + std::vector bincodeSerialize() const; + static Simple bincodeDeserialize(std::vector); + }; + + struct Array { + std::vector value; + + friend bool operator==(const Array&, const Array&); + std::vector bincodeSerialize() const; + static Array bincodeDeserialize(std::vector); + }; + + std::variant value; + + friend bool operator==(const BrilligOutputs&, const BrilligOutputs&); + std::vector bincodeSerialize() const; + static BrilligOutputs bincodeDeserialize(std::vector); + }; + + struct Directive { + + struct ToLeRadix { + Program::Expression a; + std::vector b; + uint32_t radix; + + friend bool operator==(const ToLeRadix&, const ToLeRadix&); + std::vector bincodeSerialize() const; + static ToLeRadix bincodeDeserialize(std::vector); + }; + + std::variant value; + + friend bool operator==(const Directive&, const Directive&); + std::vector bincodeSerialize() const; + static Directive bincodeDeserialize(std::vector); + }; + + struct MemOp { + Program::Expression operation; + Program::Expression index; + Program::Expression value; + + friend bool operator==(const MemOp&, const MemOp&); + std::vector bincodeSerialize() const; + static MemOp bincodeDeserialize(std::vector); + }; + + struct Opcode { + + struct AssertZero { + Program::Expression value; + + friend bool operator==(const AssertZero&, const AssertZero&); + std::vector bincodeSerialize() const; + static AssertZero bincodeDeserialize(std::vector); + }; + + struct BlackBoxFuncCall { + Program::BlackBoxFuncCall value; + + friend bool operator==(const BlackBoxFuncCall&, const BlackBoxFuncCall&); + std::vector bincodeSerialize() const; + static BlackBoxFuncCall bincodeDeserialize(std::vector); + }; + + struct Directive { + Program::Directive value; + + friend bool operator==(const Directive&, const Directive&); + std::vector bincodeSerialize() const; + static Directive bincodeDeserialize(std::vector); + }; + + struct MemoryOp { + Program::BlockId block_id; + Program::MemOp op; + std::optional predicate; + + friend bool operator==(const MemoryOp&, const MemoryOp&); + std::vector bincodeSerialize() const; + static MemoryOp bincodeDeserialize(std::vector); + }; + + struct MemoryInit { + Program::BlockId block_id; + std::vector init; + + friend bool operator==(const MemoryInit&, const MemoryInit&); + std::vector bincodeSerialize() const; + static MemoryInit bincodeDeserialize(std::vector); + }; + + struct BrilligCall { + uint32_t id; + std::vector inputs; + std::vector outputs; + std::optional predicate; + + friend bool operator==(const BrilligCall&, const BrilligCall&); + std::vector bincodeSerialize() const; + static BrilligCall bincodeDeserialize(std::vector); + }; + + struct Call { + uint32_t id; + std::vector inputs; + std::vector outputs; + std::optional predicate; + + friend bool operator==(const Call&, const Call&); + std::vector bincodeSerialize() const; + static Call bincodeDeserialize(std::vector); + }; + + std::variant value; + + friend bool operator==(const Opcode&, const Opcode&); + std::vector bincodeSerialize() const; + static Opcode bincodeDeserialize(std::vector); + }; + + struct BinaryFieldOp { + + struct Add { + friend bool operator==(const Add&, const Add&); + std::vector bincodeSerialize() const; + static Add bincodeDeserialize(std::vector); + }; + + struct Sub { + friend bool operator==(const Sub&, const Sub&); + std::vector bincodeSerialize() const; + static Sub bincodeDeserialize(std::vector); + }; + + struct Mul { + friend bool operator==(const Mul&, const Mul&); + std::vector bincodeSerialize() const; + static Mul bincodeDeserialize(std::vector); + }; + + struct Div { + friend bool operator==(const Div&, const Div&); + std::vector bincodeSerialize() const; + static Div bincodeDeserialize(std::vector); + }; + + struct IntegerDiv { + friend bool operator==(const IntegerDiv&, const IntegerDiv&); + std::vector bincodeSerialize() const; + static IntegerDiv bincodeDeserialize(std::vector); + }; + + struct Equals { + friend bool operator==(const Equals&, const Equals&); + std::vector bincodeSerialize() const; + static Equals bincodeDeserialize(std::vector); + }; + + struct LessThan { + friend bool operator==(const LessThan&, const LessThan&); + std::vector bincodeSerialize() const; + static LessThan bincodeDeserialize(std::vector); + }; + + struct LessThanEquals { + friend bool operator==(const LessThanEquals&, const LessThanEquals&); + std::vector bincodeSerialize() const; + static LessThanEquals bincodeDeserialize(std::vector); + }; + + std::variant value; + + friend bool operator==(const BinaryFieldOp&, const BinaryFieldOp&); + std::vector bincodeSerialize() const; + static BinaryFieldOp bincodeDeserialize(std::vector); + }; + + struct BinaryIntOp { + + struct Add { + friend bool operator==(const Add&, const Add&); + std::vector bincodeSerialize() const; + static Add bincodeDeserialize(std::vector); + }; + + struct Sub { + friend bool operator==(const Sub&, const Sub&); + std::vector bincodeSerialize() const; + static Sub bincodeDeserialize(std::vector); + }; + + struct Mul { + friend bool operator==(const Mul&, const Mul&); + std::vector bincodeSerialize() const; + static Mul bincodeDeserialize(std::vector); + }; + + struct Div { + friend bool operator==(const Div&, const Div&); + std::vector bincodeSerialize() const; + static Div bincodeDeserialize(std::vector); + }; + + struct Equals { + friend bool operator==(const Equals&, const Equals&); + std::vector bincodeSerialize() const; + static Equals bincodeDeserialize(std::vector); + }; + + struct LessThan { + friend bool operator==(const LessThan&, const LessThan&); + std::vector bincodeSerialize() const; + static LessThan bincodeDeserialize(std::vector); + }; + + struct LessThanEquals { + friend bool operator==(const LessThanEquals&, const LessThanEquals&); + std::vector bincodeSerialize() const; + static LessThanEquals bincodeDeserialize(std::vector); + }; + + struct And { + friend bool operator==(const And&, const And&); + std::vector bincodeSerialize() const; + static And bincodeDeserialize(std::vector); + }; + + struct Or { + friend bool operator==(const Or&, const Or&); + std::vector bincodeSerialize() const; + static Or bincodeDeserialize(std::vector); + }; + + struct Xor { + friend bool operator==(const Xor&, const Xor&); + std::vector bincodeSerialize() const; + static Xor bincodeDeserialize(std::vector); + }; + + struct Shl { + friend bool operator==(const Shl&, const Shl&); + std::vector bincodeSerialize() const; + static Shl bincodeDeserialize(std::vector); + }; + + struct Shr { + friend bool operator==(const Shr&, const Shr&); + std::vector bincodeSerialize() const; + static Shr bincodeDeserialize(std::vector); + }; + + std::variant value; + + friend bool operator==(const BinaryIntOp&, const BinaryIntOp&); + std::vector bincodeSerialize() const; + static BinaryIntOp bincodeDeserialize(std::vector); + }; + + struct MemoryAddress { + uint64_t value; + + friend bool operator==(const MemoryAddress&, const MemoryAddress&); + std::vector bincodeSerialize() const; + static MemoryAddress bincodeDeserialize(std::vector); + }; + + struct HeapArray { + Program::MemoryAddress pointer; + uint64_t size; + + friend bool operator==(const HeapArray&, const HeapArray&); + std::vector bincodeSerialize() const; + static HeapArray bincodeDeserialize(std::vector); + }; + + struct HeapVector { + Program::MemoryAddress pointer; + Program::MemoryAddress size; + + friend bool operator==(const HeapVector&, const HeapVector&); + std::vector bincodeSerialize() const; + static HeapVector bincodeDeserialize(std::vector); + }; + + struct BlackBoxOp { + + struct Blake2s { + Program::HeapVector message; + Program::HeapArray output; + + friend bool operator==(const Blake2s&, const Blake2s&); + std::vector bincodeSerialize() const; + static Blake2s bincodeDeserialize(std::vector); + }; + + struct Blake3 { + Program::HeapVector message; + Program::HeapArray output; + + friend bool operator==(const Blake3&, const Blake3&); + std::vector bincodeSerialize() const; + static Blake3 bincodeDeserialize(std::vector); + }; + + struct Keccak256 { + Program::HeapVector message; + Program::HeapArray output; + + friend bool operator==(const Keccak256&, const Keccak256&); + std::vector bincodeSerialize() const; + static Keccak256 bincodeDeserialize(std::vector); + }; + + struct Keccakf1600 { + Program::HeapVector message; + Program::HeapArray output; + + friend bool operator==(const Keccakf1600&, const Keccakf1600&); + std::vector bincodeSerialize() const; + static Keccakf1600 bincodeDeserialize(std::vector); + }; + + struct EcdsaSecp256k1 { + Program::HeapVector hashed_msg; + Program::HeapArray public_key_x; + Program::HeapArray public_key_y; + Program::HeapArray signature; + Program::MemoryAddress result; + + friend bool operator==(const EcdsaSecp256k1&, const EcdsaSecp256k1&); + std::vector bincodeSerialize() const; + static EcdsaSecp256k1 bincodeDeserialize(std::vector); + }; + + struct EcdsaSecp256r1 { + Program::HeapVector hashed_msg; + Program::HeapArray public_key_x; + Program::HeapArray public_key_y; + Program::HeapArray signature; + Program::MemoryAddress result; + + friend bool operator==(const EcdsaSecp256r1&, const EcdsaSecp256r1&); + std::vector bincodeSerialize() const; + static EcdsaSecp256r1 bincodeDeserialize(std::vector); + }; + + struct SchnorrVerify { + Program::MemoryAddress public_key_x; + Program::MemoryAddress public_key_y; + Program::HeapVector message; + Program::HeapVector signature; + Program::MemoryAddress result; + + friend bool operator==(const SchnorrVerify&, const SchnorrVerify&); + std::vector bincodeSerialize() const; + static SchnorrVerify bincodeDeserialize(std::vector); + }; + + struct PedersenCommitment { + Program::HeapVector inputs; + Program::MemoryAddress domain_separator; + Program::HeapArray output; + + friend bool operator==(const PedersenCommitment&, const PedersenCommitment&); + std::vector bincodeSerialize() const; + static PedersenCommitment bincodeDeserialize(std::vector); + }; + + struct PedersenHash { + Program::HeapVector inputs; + Program::MemoryAddress domain_separator; + Program::MemoryAddress output; + + friend bool operator==(const PedersenHash&, const PedersenHash&); + std::vector bincodeSerialize() const; + static PedersenHash bincodeDeserialize(std::vector); + }; + + struct FixedBaseScalarMul { + Program::MemoryAddress low; + Program::MemoryAddress high; + Program::HeapArray result; + + friend bool operator==(const FixedBaseScalarMul&, const FixedBaseScalarMul&); + std::vector bincodeSerialize() const; + static FixedBaseScalarMul bincodeDeserialize(std::vector); + }; + + struct VariableBaseScalarMul { + Program::MemoryAddress point_x; + Program::MemoryAddress point_y; + Program::MemoryAddress scalar_low; + Program::MemoryAddress scalar_high; + Program::HeapArray result; + + friend bool operator==(const VariableBaseScalarMul&, const VariableBaseScalarMul&); + std::vector bincodeSerialize() const; + static VariableBaseScalarMul bincodeDeserialize(std::vector); + }; + + struct EmbeddedCurveAdd { + Program::MemoryAddress input1_x; + Program::MemoryAddress input1_y; + Program::MemoryAddress input2_x; + Program::MemoryAddress input2_y; + Program::HeapArray result; + + friend bool operator==(const EmbeddedCurveAdd&, const EmbeddedCurveAdd&); + std::vector bincodeSerialize() const; + static EmbeddedCurveAdd bincodeDeserialize(std::vector); + }; + + struct BigIntAdd { + Program::MemoryAddress lhs; + Program::MemoryAddress rhs; + Program::MemoryAddress output; + + friend bool operator==(const BigIntAdd&, const BigIntAdd&); + std::vector bincodeSerialize() const; + static BigIntAdd bincodeDeserialize(std::vector); + }; + + struct BigIntSub { + Program::MemoryAddress lhs; + Program::MemoryAddress rhs; + Program::MemoryAddress output; + + friend bool operator==(const BigIntSub&, const BigIntSub&); + std::vector bincodeSerialize() const; + static BigIntSub bincodeDeserialize(std::vector); + }; + + struct BigIntMul { + Program::MemoryAddress lhs; + Program::MemoryAddress rhs; + Program::MemoryAddress output; + + friend bool operator==(const BigIntMul&, const BigIntMul&); + std::vector bincodeSerialize() const; + static BigIntMul bincodeDeserialize(std::vector); + }; + + struct BigIntDiv { + Program::MemoryAddress lhs; + Program::MemoryAddress rhs; + Program::MemoryAddress output; + + friend bool operator==(const BigIntDiv&, const BigIntDiv&); + std::vector bincodeSerialize() const; + static BigIntDiv bincodeDeserialize(std::vector); + }; + + struct BigIntFromLeBytes { + Program::HeapVector inputs; + Program::HeapVector modulus; + Program::MemoryAddress output; + + friend bool operator==(const BigIntFromLeBytes&, const BigIntFromLeBytes&); + std::vector bincodeSerialize() const; + static BigIntFromLeBytes bincodeDeserialize(std::vector); + }; + + struct BigIntToLeBytes { + Program::MemoryAddress input; + Program::HeapVector output; + + friend bool operator==(const BigIntToLeBytes&, const BigIntToLeBytes&); + std::vector bincodeSerialize() const; + static BigIntToLeBytes bincodeDeserialize(std::vector); + }; + + struct Poseidon2Permutation { + Program::HeapVector message; + Program::HeapArray output; + Program::MemoryAddress len; + + friend bool operator==(const Poseidon2Permutation&, const Poseidon2Permutation&); + std::vector bincodeSerialize() const; + static Poseidon2Permutation bincodeDeserialize(std::vector); + }; + + struct Sha256Compression { + Program::HeapVector input; + Program::HeapVector hash_values; + Program::HeapArray output; + + friend bool operator==(const Sha256Compression&, const Sha256Compression&); + std::vector bincodeSerialize() const; + static Sha256Compression bincodeDeserialize(std::vector); + }; + + std::variant value; + + friend bool operator==(const BlackBoxOp&, const BlackBoxOp&); + std::vector bincodeSerialize() const; + static BlackBoxOp bincodeDeserialize(std::vector); + }; + + struct HeapValueType; + + struct HeapValueType { + + struct Simple { + uint32_t value; + + friend bool operator==(const Simple&, const Simple&); + std::vector bincodeSerialize() const; + static Simple bincodeDeserialize(std::vector); + }; + + struct Array { + std::vector value_types; + uint64_t size; + + friend bool operator==(const Array&, const Array&); + std::vector bincodeSerialize() const; + static Array bincodeDeserialize(std::vector); + }; + + struct Vector { + std::vector value_types; + + friend bool operator==(const Vector&, const Vector&); + std::vector bincodeSerialize() const; + static Vector bincodeDeserialize(std::vector); + }; + + std::variant value; + + friend bool operator==(const HeapValueType&, const HeapValueType&); + std::vector bincodeSerialize() const; + static HeapValueType bincodeDeserialize(std::vector); + }; + + struct ValueOrArray { + + struct MemoryAddress { + Program::MemoryAddress value; + + friend bool operator==(const MemoryAddress&, const MemoryAddress&); + std::vector bincodeSerialize() const; + static MemoryAddress bincodeDeserialize(std::vector); + }; + + struct HeapArray { + Program::HeapArray value; + + friend bool operator==(const HeapArray&, const HeapArray&); + std::vector bincodeSerialize() const; + static HeapArray bincodeDeserialize(std::vector); + }; + + struct HeapVector { + Program::HeapVector value; + + friend bool operator==(const HeapVector&, const HeapVector&); + std::vector bincodeSerialize() const; + static HeapVector bincodeDeserialize(std::vector); + }; + + std::variant value; + + friend bool operator==(const ValueOrArray&, const ValueOrArray&); + std::vector bincodeSerialize() const; + static ValueOrArray bincodeDeserialize(std::vector); + }; + + struct BrilligOpcode { + + struct BinaryFieldOp { + Program::MemoryAddress destination; + Program::BinaryFieldOp op; + Program::MemoryAddress lhs; + Program::MemoryAddress rhs; + + friend bool operator==(const BinaryFieldOp&, const BinaryFieldOp&); + std::vector bincodeSerialize() const; + static BinaryFieldOp bincodeDeserialize(std::vector); + }; + + struct BinaryIntOp { + Program::MemoryAddress destination; + Program::BinaryIntOp op; + uint32_t bit_size; + Program::MemoryAddress lhs; + Program::MemoryAddress rhs; + + friend bool operator==(const BinaryIntOp&, const BinaryIntOp&); + std::vector bincodeSerialize() const; + static BinaryIntOp bincodeDeserialize(std::vector); + }; + + struct Cast { + Program::MemoryAddress destination; + Program::MemoryAddress source; + uint32_t bit_size; + + friend bool operator==(const Cast&, const Cast&); + std::vector bincodeSerialize() const; + static Cast bincodeDeserialize(std::vector); + }; + + struct JumpIfNot { + Program::MemoryAddress condition; + uint64_t location; + + friend bool operator==(const JumpIfNot&, const JumpIfNot&); + std::vector bincodeSerialize() const; + static JumpIfNot bincodeDeserialize(std::vector); + }; + + struct JumpIf { + Program::MemoryAddress condition; + uint64_t location; + + friend bool operator==(const JumpIf&, const JumpIf&); + std::vector bincodeSerialize() const; + static JumpIf bincodeDeserialize(std::vector); + }; + + struct Jump { + uint64_t location; + + friend bool operator==(const Jump&, const Jump&); + std::vector bincodeSerialize() const; + static Jump bincodeDeserialize(std::vector); + }; + + struct CalldataCopy { + Program::MemoryAddress destination_address; + uint64_t size; + uint64_t offset; + + friend bool operator==(const CalldataCopy&, const CalldataCopy&); + std::vector bincodeSerialize() const; + static CalldataCopy bincodeDeserialize(std::vector); + }; + + struct Call { + uint64_t location; + + friend bool operator==(const Call&, const Call&); + std::vector bincodeSerialize() const; + static Call bincodeDeserialize(std::vector); + }; + + struct Const { + Program::MemoryAddress destination; + uint32_t bit_size; + std::string value; + + friend bool operator==(const Const&, const Const&); + std::vector bincodeSerialize() const; + static Const bincodeDeserialize(std::vector); + }; + + struct Return { + friend bool operator==(const Return&, const Return&); + std::vector bincodeSerialize() const; + static Return bincodeDeserialize(std::vector); + }; + + struct ForeignCall { + std::string function; + std::vector destinations; + std::vector destination_value_types; + std::vector inputs; + std::vector input_value_types; + + friend bool operator==(const ForeignCall&, const ForeignCall&); + std::vector bincodeSerialize() const; + static ForeignCall bincodeDeserialize(std::vector); + }; + + struct Mov { + Program::MemoryAddress destination; + Program::MemoryAddress source; + + friend bool operator==(const Mov&, const Mov&); + std::vector bincodeSerialize() const; + static Mov bincodeDeserialize(std::vector); + }; + + struct ConditionalMov { + Program::MemoryAddress destination; + Program::MemoryAddress source_a; + Program::MemoryAddress source_b; + Program::MemoryAddress condition; + + friend bool operator==(const ConditionalMov&, const ConditionalMov&); + std::vector bincodeSerialize() const; + static ConditionalMov bincodeDeserialize(std::vector); + }; + + struct Load { + Program::MemoryAddress destination; + Program::MemoryAddress source_pointer; + + friend bool operator==(const Load&, const Load&); + std::vector bincodeSerialize() const; + static Load bincodeDeserialize(std::vector); + }; + + struct Store { + Program::MemoryAddress destination_pointer; + Program::MemoryAddress source; + + friend bool operator==(const Store&, const Store&); + std::vector bincodeSerialize() const; + static Store bincodeDeserialize(std::vector); + }; + + struct BlackBox { + Program::BlackBoxOp value; + + friend bool operator==(const BlackBox&, const BlackBox&); + std::vector bincodeSerialize() const; + static BlackBox bincodeDeserialize(std::vector); + }; + + struct Trap { + Program::HeapArray revert_data; + + friend bool operator==(const Trap&, const Trap&); + std::vector bincodeSerialize() const; + static Trap bincodeDeserialize(std::vector); + }; + + struct Stop { + uint64_t return_data_offset; + uint64_t return_data_size; + + friend bool operator==(const Stop&, const Stop&); + std::vector bincodeSerialize() const; + static Stop bincodeDeserialize(std::vector); + }; + + std::variant value; + + friend bool operator==(const BrilligOpcode&, const BrilligOpcode&); + std::vector bincodeSerialize() const; + static BrilligOpcode bincodeDeserialize(std::vector); + }; + + struct ExpressionOrMemory { - std::variant value; + struct Expression { + Program::Expression value; + + friend bool operator==(const Expression&, const Expression&); + std::vector bincodeSerialize() const; + static Expression bincodeDeserialize(std::vector); + }; + + struct Memory { + Program::BlockId value; + + friend bool operator==(const Memory&, const Memory&); + std::vector bincodeSerialize() const; + static Memory bincodeDeserialize(std::vector); + }; + + std::variant value; + + friend bool operator==(const ExpressionOrMemory&, const ExpressionOrMemory&); + std::vector bincodeSerialize() const; + static ExpressionOrMemory bincodeDeserialize(std::vector); + }; - friend bool operator==(const AssertionPayload &, const AssertionPayload &); - std::vector bincodeSerialize() const; - static AssertionPayload bincodeDeserialize(std::vector); -}; + struct AssertionPayload { + + struct StaticString { + std::string value; -struct ExpressionWidth { + friend bool operator==(const StaticString&, const StaticString&); + std::vector bincodeSerialize() const; + static StaticString bincodeDeserialize(std::vector); + }; + + struct Dynamic { + std::tuple> value; + + friend bool operator==(const Dynamic&, const Dynamic&); + std::vector bincodeSerialize() const; + static Dynamic bincodeDeserialize(std::vector); + }; - struct Unbounded { - friend bool operator==(const Unbounded &, const Unbounded &); - std::vector bincodeSerialize() const; - static Unbounded bincodeDeserialize(std::vector); - }; + std::variant value; - struct Bounded { - uint64_t width; + friend bool operator==(const AssertionPayload&, const AssertionPayload&); + std::vector bincodeSerialize() const; + static AssertionPayload bincodeDeserialize(std::vector); + }; - friend bool operator==(const Bounded &, const Bounded &); - std::vector bincodeSerialize() const; - static Bounded bincodeDeserialize(std::vector); - }; + struct ExpressionWidth { - std::variant value; + struct Unbounded { + friend bool operator==(const Unbounded&, const Unbounded&); + std::vector bincodeSerialize() const; + static Unbounded bincodeDeserialize(std::vector); + }; - friend bool operator==(const ExpressionWidth &, const ExpressionWidth &); - std::vector bincodeSerialize() const; - static ExpressionWidth bincodeDeserialize(std::vector); -}; + struct Bounded { + uint64_t width; -struct OpcodeLocation { + friend bool operator==(const Bounded&, const Bounded&); + std::vector bincodeSerialize() const; + static Bounded bincodeDeserialize(std::vector); + }; - struct Acir { - uint64_t value; + std::variant value; - friend bool operator==(const Acir &, const Acir &); - std::vector bincodeSerialize() const; - static Acir bincodeDeserialize(std::vector); - }; + friend bool operator==(const ExpressionWidth&, const ExpressionWidth&); + std::vector bincodeSerialize() const; + static ExpressionWidth bincodeDeserialize(std::vector); + }; - struct Brillig { - uint64_t acir_index; - uint64_t brillig_index; + struct OpcodeLocation { - friend bool operator==(const Brillig &, const Brillig &); - std::vector bincodeSerialize() const; - static Brillig bincodeDeserialize(std::vector); - }; + struct Acir { + uint64_t value; - std::variant value; + friend bool operator==(const Acir&, const Acir&); + std::vector bincodeSerialize() const; + static Acir bincodeDeserialize(std::vector); + }; - friend bool operator==(const OpcodeLocation &, const OpcodeLocation &); - std::vector bincodeSerialize() const; - static OpcodeLocation bincodeDeserialize(std::vector); -}; + struct Brillig { + uint64_t acir_index; + uint64_t brillig_index; -struct PublicInputs { - std::vector value; + friend bool operator==(const Brillig&, const Brillig&); + std::vector bincodeSerialize() const; + static Brillig bincodeDeserialize(std::vector); + }; - friend bool operator==(const PublicInputs &, const PublicInputs &); - std::vector bincodeSerialize() const; - static PublicInputs bincodeDeserialize(std::vector); -}; + std::variant value; -struct Circuit { - uint32_t current_witness_index; - std::vector opcodes; - Program::ExpressionWidth expression_width; - std::vector private_parameters; - Program::PublicInputs public_parameters; - Program::PublicInputs return_values; - std::vector> - assert_messages; - bool recursive; + friend bool operator==(const OpcodeLocation&, const OpcodeLocation&); + std::vector bincodeSerialize() const; + static OpcodeLocation bincodeDeserialize(std::vector); + }; - friend bool operator==(const Circuit &, const Circuit &); - std::vector bincodeSerialize() const; - static Circuit bincodeDeserialize(std::vector); -}; + struct PublicInputs { + std::vector value; -struct BrilligBytecode { - std::vector bytecode; + friend bool operator==(const PublicInputs&, const PublicInputs&); + std::vector bincodeSerialize() const; + static PublicInputs bincodeDeserialize(std::vector); + }; - friend bool operator==(const BrilligBytecode &, const BrilligBytecode &); - std::vector bincodeSerialize() const; - static BrilligBytecode bincodeDeserialize(std::vector); -}; + struct Circuit { + uint32_t current_witness_index; + std::vector opcodes; + Program::ExpressionWidth expression_width; + std::vector private_parameters; + Program::PublicInputs public_parameters; + Program::PublicInputs return_values; + std::vector> assert_messages; + bool recursive; -struct Program { - std::vector functions; - std::vector unconstrained_functions; + friend bool operator==(const Circuit&, const Circuit&); + std::vector bincodeSerialize() const; + static Circuit bincodeDeserialize(std::vector); + }; - friend bool operator==(const Program &, const Program &); - std::vector bincodeSerialize() const; - static Program bincodeDeserialize(std::vector); -}; + struct BrilligBytecode { + std::vector bytecode; + + friend bool operator==(const BrilligBytecode&, const BrilligBytecode&); + std::vector bincodeSerialize() const; + static BrilligBytecode bincodeDeserialize(std::vector); + }; + + struct Program { + std::vector functions; + std::vector unconstrained_functions; + + friend bool operator==(const Program&, const Program&); + std::vector bincodeSerialize() const; + static Program bincodeDeserialize(std::vector); + }; } // end of namespace Program + namespace Program { -inline bool operator==(const AssertionPayload &lhs, - const AssertionPayload &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const AssertionPayload &lhs, const AssertionPayload &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector AssertionPayload::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector AssertionPayload::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline AssertionPayload -AssertionPayload::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline AssertionPayload AssertionPayload::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::AssertionPayload &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.value, serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::AssertionPayload &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.value, serializer); + serializer.decrease_container_depth(); } template <> template -Program::AssertionPayload -serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::AssertionPayload obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::AssertionPayload serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::AssertionPayload obj; + obj.value = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const AssertionPayload::StaticString &lhs, - const AssertionPayload::StaticString &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const AssertionPayload::StaticString &lhs, const AssertionPayload::StaticString &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector -AssertionPayload::StaticString::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); -} + inline std::vector AssertionPayload::StaticString::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline AssertionPayload::StaticString -AssertionPayload::StaticString::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline AssertionPayload::StaticString AssertionPayload::StaticString::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::AssertionPayload::StaticString &obj, - Serializer &serializer) { - serde::Serializable::serialize(obj.value, serializer); +void serde::Serializable::serialize(const Program::AssertionPayload::StaticString &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.value, serializer); } template <> template -Program::AssertionPayload::StaticString -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::AssertionPayload::StaticString obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::AssertionPayload::StaticString serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::AssertionPayload::StaticString obj; + obj.value = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const AssertionPayload::Dynamic &lhs, - const AssertionPayload::Dynamic &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const AssertionPayload::Dynamic &lhs, const AssertionPayload::Dynamic &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector -AssertionPayload::Dynamic::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector AssertionPayload::Dynamic::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline AssertionPayload::Dynamic -AssertionPayload::Dynamic::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline AssertionPayload::Dynamic AssertionPayload::Dynamic::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::AssertionPayload::Dynamic &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.value, serializer); +void serde::Serializable::serialize(const Program::AssertionPayload::Dynamic &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.value, serializer); } template <> template -Program::AssertionPayload::Dynamic -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::AssertionPayload::Dynamic obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::AssertionPayload::Dynamic serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::AssertionPayload::Dynamic obj; + obj.value = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BinaryFieldOp &lhs, const BinaryFieldOp &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const BinaryFieldOp &lhs, const BinaryFieldOp &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector BinaryFieldOp::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BinaryFieldOp::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BinaryFieldOp -BinaryFieldOp::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BinaryFieldOp BinaryFieldOp::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BinaryFieldOp &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.value, serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::BinaryFieldOp &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.value, serializer); + serializer.decrease_container_depth(); } template <> template -Program::BinaryFieldOp -serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::BinaryFieldOp obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::BinaryFieldOp serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::BinaryFieldOp obj; + obj.value = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const BinaryFieldOp::Add &lhs, - const BinaryFieldOp::Add &rhs) { - return true; -} + inline bool operator==(const BinaryFieldOp::Add &lhs, const BinaryFieldOp::Add &rhs) { + return true; + } -inline std::vector BinaryFieldOp::Add::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BinaryFieldOp::Add::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BinaryFieldOp::Add -BinaryFieldOp::Add::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BinaryFieldOp::Add BinaryFieldOp::Add::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BinaryFieldOp::Add &obj, Serializer &serializer) {} +void serde::Serializable::serialize(const Program::BinaryFieldOp::Add &obj, Serializer &serializer) { +} template <> template -Program::BinaryFieldOp::Add -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryFieldOp::Add obj; - return obj; +Program::BinaryFieldOp::Add serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryFieldOp::Add obj; + return obj; } namespace Program { -inline bool operator==(const BinaryFieldOp::Sub &lhs, - const BinaryFieldOp::Sub &rhs) { - return true; -} + inline bool operator==(const BinaryFieldOp::Sub &lhs, const BinaryFieldOp::Sub &rhs) { + return true; + } -inline std::vector BinaryFieldOp::Sub::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BinaryFieldOp::Sub::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BinaryFieldOp::Sub -BinaryFieldOp::Sub::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BinaryFieldOp::Sub BinaryFieldOp::Sub::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BinaryFieldOp::Sub &obj, Serializer &serializer) {} +void serde::Serializable::serialize(const Program::BinaryFieldOp::Sub &obj, Serializer &serializer) { +} template <> template -Program::BinaryFieldOp::Sub -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryFieldOp::Sub obj; - return obj; +Program::BinaryFieldOp::Sub serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryFieldOp::Sub obj; + return obj; } namespace Program { -inline bool operator==(const BinaryFieldOp::Mul &lhs, - const BinaryFieldOp::Mul &rhs) { - return true; -} + inline bool operator==(const BinaryFieldOp::Mul &lhs, const BinaryFieldOp::Mul &rhs) { + return true; + } -inline std::vector BinaryFieldOp::Mul::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BinaryFieldOp::Mul::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BinaryFieldOp::Mul -BinaryFieldOp::Mul::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BinaryFieldOp::Mul BinaryFieldOp::Mul::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BinaryFieldOp::Mul &obj, Serializer &serializer) {} +void serde::Serializable::serialize(const Program::BinaryFieldOp::Mul &obj, Serializer &serializer) { +} template <> template -Program::BinaryFieldOp::Mul -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryFieldOp::Mul obj; - return obj; +Program::BinaryFieldOp::Mul serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryFieldOp::Mul obj; + return obj; } namespace Program { -inline bool operator==(const BinaryFieldOp::Div &lhs, - const BinaryFieldOp::Div &rhs) { - return true; -} + inline bool operator==(const BinaryFieldOp::Div &lhs, const BinaryFieldOp::Div &rhs) { + return true; + } -inline std::vector BinaryFieldOp::Div::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BinaryFieldOp::Div::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BinaryFieldOp::Div -BinaryFieldOp::Div::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BinaryFieldOp::Div BinaryFieldOp::Div::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BinaryFieldOp::Div &obj, Serializer &serializer) {} +void serde::Serializable::serialize(const Program::BinaryFieldOp::Div &obj, Serializer &serializer) { +} template <> template -Program::BinaryFieldOp::Div -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryFieldOp::Div obj; - return obj; +Program::BinaryFieldOp::Div serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryFieldOp::Div obj; + return obj; } namespace Program { -inline bool operator==(const BinaryFieldOp::IntegerDiv &lhs, - const BinaryFieldOp::IntegerDiv &rhs) { - return true; -} + inline bool operator==(const BinaryFieldOp::IntegerDiv &lhs, const BinaryFieldOp::IntegerDiv &rhs) { + return true; + } -inline std::vector -BinaryFieldOp::IntegerDiv::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BinaryFieldOp::IntegerDiv::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BinaryFieldOp::IntegerDiv -BinaryFieldOp::IntegerDiv::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BinaryFieldOp::IntegerDiv BinaryFieldOp::IntegerDiv::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BinaryFieldOp::IntegerDiv &obj, Serializer &serializer) {} +void serde::Serializable::serialize(const Program::BinaryFieldOp::IntegerDiv &obj, Serializer &serializer) { +} template <> template -Program::BinaryFieldOp::IntegerDiv -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryFieldOp::IntegerDiv obj; - return obj; +Program::BinaryFieldOp::IntegerDiv serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryFieldOp::IntegerDiv obj; + return obj; } namespace Program { -inline bool operator==(const BinaryFieldOp::Equals &lhs, - const BinaryFieldOp::Equals &rhs) { - return true; -} + inline bool operator==(const BinaryFieldOp::Equals &lhs, const BinaryFieldOp::Equals &rhs) { + return true; + } -inline std::vector BinaryFieldOp::Equals::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BinaryFieldOp::Equals::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BinaryFieldOp::Equals -BinaryFieldOp::Equals::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BinaryFieldOp::Equals BinaryFieldOp::Equals::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BinaryFieldOp::Equals &obj, Serializer &serializer) {} +void serde::Serializable::serialize(const Program::BinaryFieldOp::Equals &obj, Serializer &serializer) { +} template <> template -Program::BinaryFieldOp::Equals -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryFieldOp::Equals obj; - return obj; +Program::BinaryFieldOp::Equals serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryFieldOp::Equals obj; + return obj; } namespace Program { -inline bool operator==(const BinaryFieldOp::LessThan &lhs, - const BinaryFieldOp::LessThan &rhs) { - return true; -} + inline bool operator==(const BinaryFieldOp::LessThan &lhs, const BinaryFieldOp::LessThan &rhs) { + return true; + } -inline std::vector BinaryFieldOp::LessThan::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BinaryFieldOp::LessThan::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BinaryFieldOp::LessThan -BinaryFieldOp::LessThan::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BinaryFieldOp::LessThan BinaryFieldOp::LessThan::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BinaryFieldOp::LessThan &obj, Serializer &serializer) {} +void serde::Serializable::serialize(const Program::BinaryFieldOp::LessThan &obj, Serializer &serializer) { +} template <> template -Program::BinaryFieldOp::LessThan -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryFieldOp::LessThan obj; - return obj; +Program::BinaryFieldOp::LessThan serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryFieldOp::LessThan obj; + return obj; } namespace Program { -inline bool operator==(const BinaryFieldOp::LessThanEquals &lhs, - const BinaryFieldOp::LessThanEquals &rhs) { - return true; -} + inline bool operator==(const BinaryFieldOp::LessThanEquals &lhs, const BinaryFieldOp::LessThanEquals &rhs) { + return true; + } -inline std::vector -BinaryFieldOp::LessThanEquals::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); -} + inline std::vector BinaryFieldOp::LessThanEquals::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BinaryFieldOp::LessThanEquals -BinaryFieldOp::LessThanEquals::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BinaryFieldOp::LessThanEquals BinaryFieldOp::LessThanEquals::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BinaryFieldOp::LessThanEquals &obj, Serializer &serializer) { +void serde::Serializable::serialize(const Program::BinaryFieldOp::LessThanEquals &obj, Serializer &serializer) { } template <> template -Program::BinaryFieldOp::LessThanEquals -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryFieldOp::LessThanEquals obj; - return obj; +Program::BinaryFieldOp::LessThanEquals serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryFieldOp::LessThanEquals obj; + return obj; } namespace Program { -inline bool operator==(const BinaryIntOp &lhs, const BinaryIntOp &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const BinaryIntOp &lhs, const BinaryIntOp &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector BinaryIntOp::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BinaryIntOp::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BinaryIntOp BinaryIntOp::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BinaryIntOp BinaryIntOp::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BinaryIntOp &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.value, serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::BinaryIntOp &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.value, serializer); + serializer.decrease_container_depth(); } template <> template -Program::BinaryIntOp serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::BinaryIntOp obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::BinaryIntOp serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::BinaryIntOp obj; + obj.value = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const BinaryIntOp::Add &lhs, - const BinaryIntOp::Add &rhs) { - return true; -} + inline bool operator==(const BinaryIntOp::Add &lhs, const BinaryIntOp::Add &rhs) { + return true; + } -inline std::vector BinaryIntOp::Add::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BinaryIntOp::Add::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BinaryIntOp::Add -BinaryIntOp::Add::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BinaryIntOp::Add BinaryIntOp::Add::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BinaryIntOp::Add &obj, Serializer &serializer) {} +void serde::Serializable::serialize(const Program::BinaryIntOp::Add &obj, Serializer &serializer) { +} template <> template -Program::BinaryIntOp::Add -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryIntOp::Add obj; - return obj; +Program::BinaryIntOp::Add serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryIntOp::Add obj; + return obj; } namespace Program { -inline bool operator==(const BinaryIntOp::Sub &lhs, - const BinaryIntOp::Sub &rhs) { - return true; -} + inline bool operator==(const BinaryIntOp::Sub &lhs, const BinaryIntOp::Sub &rhs) { + return true; + } -inline std::vector BinaryIntOp::Sub::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BinaryIntOp::Sub::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BinaryIntOp::Sub -BinaryIntOp::Sub::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BinaryIntOp::Sub BinaryIntOp::Sub::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BinaryIntOp::Sub &obj, Serializer &serializer) {} +void serde::Serializable::serialize(const Program::BinaryIntOp::Sub &obj, Serializer &serializer) { +} template <> template -Program::BinaryIntOp::Sub -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryIntOp::Sub obj; - return obj; +Program::BinaryIntOp::Sub serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryIntOp::Sub obj; + return obj; } namespace Program { -inline bool operator==(const BinaryIntOp::Mul &lhs, - const BinaryIntOp::Mul &rhs) { - return true; -} + inline bool operator==(const BinaryIntOp::Mul &lhs, const BinaryIntOp::Mul &rhs) { + return true; + } -inline std::vector BinaryIntOp::Mul::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BinaryIntOp::Mul::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BinaryIntOp::Mul -BinaryIntOp::Mul::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BinaryIntOp::Mul BinaryIntOp::Mul::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BinaryIntOp::Mul &obj, Serializer &serializer) {} +void serde::Serializable::serialize(const Program::BinaryIntOp::Mul &obj, Serializer &serializer) { +} template <> template -Program::BinaryIntOp::Mul -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryIntOp::Mul obj; - return obj; +Program::BinaryIntOp::Mul serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryIntOp::Mul obj; + return obj; } namespace Program { -inline bool operator==(const BinaryIntOp::Div &lhs, - const BinaryIntOp::Div &rhs) { - return true; -} + inline bool operator==(const BinaryIntOp::Div &lhs, const BinaryIntOp::Div &rhs) { + return true; + } -inline std::vector BinaryIntOp::Div::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BinaryIntOp::Div::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BinaryIntOp::Div -BinaryIntOp::Div::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BinaryIntOp::Div BinaryIntOp::Div::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BinaryIntOp::Div &obj, Serializer &serializer) {} +void serde::Serializable::serialize(const Program::BinaryIntOp::Div &obj, Serializer &serializer) { +} template <> template -Program::BinaryIntOp::Div -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryIntOp::Div obj; - return obj; +Program::BinaryIntOp::Div serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryIntOp::Div obj; + return obj; } namespace Program { -inline bool operator==(const BinaryIntOp::Equals &lhs, - const BinaryIntOp::Equals &rhs) { - return true; -} + inline bool operator==(const BinaryIntOp::Equals &lhs, const BinaryIntOp::Equals &rhs) { + return true; + } -inline std::vector BinaryIntOp::Equals::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BinaryIntOp::Equals::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BinaryIntOp::Equals -BinaryIntOp::Equals::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BinaryIntOp::Equals BinaryIntOp::Equals::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BinaryIntOp::Equals &obj, Serializer &serializer) {} +void serde::Serializable::serialize(const Program::BinaryIntOp::Equals &obj, Serializer &serializer) { +} template <> template -Program::BinaryIntOp::Equals -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryIntOp::Equals obj; - return obj; +Program::BinaryIntOp::Equals serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryIntOp::Equals obj; + return obj; } namespace Program { -inline bool operator==(const BinaryIntOp::LessThan &lhs, - const BinaryIntOp::LessThan &rhs) { - return true; -} + inline bool operator==(const BinaryIntOp::LessThan &lhs, const BinaryIntOp::LessThan &rhs) { + return true; + } -inline std::vector BinaryIntOp::LessThan::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BinaryIntOp::LessThan::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BinaryIntOp::LessThan -BinaryIntOp::LessThan::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BinaryIntOp::LessThan BinaryIntOp::LessThan::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BinaryIntOp::LessThan &obj, Serializer &serializer) {} +void serde::Serializable::serialize(const Program::BinaryIntOp::LessThan &obj, Serializer &serializer) { +} template <> template -Program::BinaryIntOp::LessThan -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryIntOp::LessThan obj; - return obj; +Program::BinaryIntOp::LessThan serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryIntOp::LessThan obj; + return obj; } namespace Program { -inline bool operator==(const BinaryIntOp::LessThanEquals &lhs, - const BinaryIntOp::LessThanEquals &rhs) { - return true; -} + inline bool operator==(const BinaryIntOp::LessThanEquals &lhs, const BinaryIntOp::LessThanEquals &rhs) { + return true; + } -inline std::vector -BinaryIntOp::LessThanEquals::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); -} + inline std::vector BinaryIntOp::LessThanEquals::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BinaryIntOp::LessThanEquals -BinaryIntOp::LessThanEquals::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BinaryIntOp::LessThanEquals BinaryIntOp::LessThanEquals::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BinaryIntOp::LessThanEquals &obj, Serializer &serializer) {} +void serde::Serializable::serialize(const Program::BinaryIntOp::LessThanEquals &obj, Serializer &serializer) { +} template <> template -Program::BinaryIntOp::LessThanEquals -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryIntOp::LessThanEquals obj; - return obj; +Program::BinaryIntOp::LessThanEquals serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryIntOp::LessThanEquals obj; + return obj; } namespace Program { -inline bool operator==(const BinaryIntOp::And &lhs, - const BinaryIntOp::And &rhs) { - return true; -} + inline bool operator==(const BinaryIntOp::And &lhs, const BinaryIntOp::And &rhs) { + return true; + } -inline std::vector BinaryIntOp::And::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BinaryIntOp::And::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BinaryIntOp::And -BinaryIntOp::And::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BinaryIntOp::And BinaryIntOp::And::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BinaryIntOp::And &obj, Serializer &serializer) {} +void serde::Serializable::serialize(const Program::BinaryIntOp::And &obj, Serializer &serializer) { +} template <> template -Program::BinaryIntOp::And -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryIntOp::And obj; - return obj; +Program::BinaryIntOp::And serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryIntOp::And obj; + return obj; } namespace Program { -inline bool operator==(const BinaryIntOp::Or &lhs, const BinaryIntOp::Or &rhs) { - return true; -} + inline bool operator==(const BinaryIntOp::Or &lhs, const BinaryIntOp::Or &rhs) { + return true; + } -inline std::vector BinaryIntOp::Or::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BinaryIntOp::Or::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BinaryIntOp::Or -BinaryIntOp::Or::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BinaryIntOp::Or BinaryIntOp::Or::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BinaryIntOp::Or &obj, Serializer &serializer) {} +void serde::Serializable::serialize(const Program::BinaryIntOp::Or &obj, Serializer &serializer) { +} template <> template -Program::BinaryIntOp::Or -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryIntOp::Or obj; - return obj; +Program::BinaryIntOp::Or serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryIntOp::Or obj; + return obj; } namespace Program { -inline bool operator==(const BinaryIntOp::Xor &lhs, - const BinaryIntOp::Xor &rhs) { - return true; -} + inline bool operator==(const BinaryIntOp::Xor &lhs, const BinaryIntOp::Xor &rhs) { + return true; + } -inline std::vector BinaryIntOp::Xor::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BinaryIntOp::Xor::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BinaryIntOp::Xor -BinaryIntOp::Xor::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BinaryIntOp::Xor BinaryIntOp::Xor::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BinaryIntOp::Xor &obj, Serializer &serializer) {} +void serde::Serializable::serialize(const Program::BinaryIntOp::Xor &obj, Serializer &serializer) { +} template <> template -Program::BinaryIntOp::Xor -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryIntOp::Xor obj; - return obj; +Program::BinaryIntOp::Xor serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryIntOp::Xor obj; + return obj; } namespace Program { -inline bool operator==(const BinaryIntOp::Shl &lhs, - const BinaryIntOp::Shl &rhs) { - return true; -} + inline bool operator==(const BinaryIntOp::Shl &lhs, const BinaryIntOp::Shl &rhs) { + return true; + } -inline std::vector BinaryIntOp::Shl::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BinaryIntOp::Shl::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BinaryIntOp::Shl -BinaryIntOp::Shl::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BinaryIntOp::Shl BinaryIntOp::Shl::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BinaryIntOp::Shl &obj, Serializer &serializer) {} +void serde::Serializable::serialize(const Program::BinaryIntOp::Shl &obj, Serializer &serializer) { +} template <> template -Program::BinaryIntOp::Shl -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryIntOp::Shl obj; - return obj; +Program::BinaryIntOp::Shl serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryIntOp::Shl obj; + return obj; } namespace Program { -inline bool operator==(const BinaryIntOp::Shr &lhs, - const BinaryIntOp::Shr &rhs) { - return true; -} + inline bool operator==(const BinaryIntOp::Shr &lhs, const BinaryIntOp::Shr &rhs) { + return true; + } -inline std::vector BinaryIntOp::Shr::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BinaryIntOp::Shr::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BinaryIntOp::Shr -BinaryIntOp::Shr::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BinaryIntOp::Shr BinaryIntOp::Shr::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BinaryIntOp::Shr &obj, Serializer &serializer) {} +void serde::Serializable::serialize(const Program::BinaryIntOp::Shr &obj, Serializer &serializer) { +} template <> template -Program::BinaryIntOp::Shr -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryIntOp::Shr obj; - return obj; +Program::BinaryIntOp::Shr serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryIntOp::Shr obj; + return obj; } namespace Program { -inline bool operator==(const BlackBoxFuncCall &lhs, - const BlackBoxFuncCall &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxFuncCall &lhs, const BlackBoxFuncCall &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector BlackBoxFuncCall::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxFuncCall::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxFuncCall -BlackBoxFuncCall::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxFuncCall BlackBoxFuncCall::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxFuncCall &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.value, serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::BlackBoxFuncCall &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.value, serializer); + serializer.decrease_container_depth(); } template <> template -Program::BlackBoxFuncCall -serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::BlackBoxFuncCall obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::BlackBoxFuncCall serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::BlackBoxFuncCall obj; + obj.value = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const BlackBoxFuncCall::AND &lhs, - const BlackBoxFuncCall::AND &rhs) { - if (!(lhs.lhs == rhs.lhs)) { - return false; - } - if (!(lhs.rhs == rhs.rhs)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxFuncCall::AND &lhs, const BlackBoxFuncCall::AND &rhs) { + if (!(lhs.lhs == rhs.lhs)) { return false; } + if (!(lhs.rhs == rhs.rhs)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } -inline std::vector BlackBoxFuncCall::AND::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxFuncCall::AND::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxFuncCall::AND -BlackBoxFuncCall::AND::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxFuncCall::AND BlackBoxFuncCall::AND::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxFuncCall::AND &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.lhs, serializer); - serde::Serializable::serialize(obj.rhs, serializer); - serde::Serializable::serialize(obj.output, serializer); +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::AND &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.lhs, serializer); + serde::Serializable::serialize(obj.rhs, serializer); + serde::Serializable::serialize(obj.output, serializer); } template <> template -Program::BlackBoxFuncCall::AND -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxFuncCall::AND obj; - obj.lhs = serde::Deserializable::deserialize(deserializer); - obj.rhs = serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxFuncCall::AND serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::AND obj; + obj.lhs = serde::Deserializable::deserialize(deserializer); + obj.rhs = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxFuncCall::XOR &lhs, - const BlackBoxFuncCall::XOR &rhs) { - if (!(lhs.lhs == rhs.lhs)) { - return false; - } - if (!(lhs.rhs == rhs.rhs)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxFuncCall::XOR &lhs, const BlackBoxFuncCall::XOR &rhs) { + if (!(lhs.lhs == rhs.lhs)) { return false; } + if (!(lhs.rhs == rhs.rhs)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } -inline std::vector BlackBoxFuncCall::XOR::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxFuncCall::XOR::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxFuncCall::XOR -BlackBoxFuncCall::XOR::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxFuncCall::XOR BlackBoxFuncCall::XOR::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxFuncCall::XOR &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.lhs, serializer); - serde::Serializable::serialize(obj.rhs, serializer); - serde::Serializable::serialize(obj.output, serializer); +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::XOR &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.lhs, serializer); + serde::Serializable::serialize(obj.rhs, serializer); + serde::Serializable::serialize(obj.output, serializer); } template <> template -Program::BlackBoxFuncCall::XOR -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxFuncCall::XOR obj; - obj.lhs = serde::Deserializable::deserialize(deserializer); - obj.rhs = serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxFuncCall::XOR serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::XOR obj; + obj.lhs = serde::Deserializable::deserialize(deserializer); + obj.rhs = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxFuncCall::RANGE &lhs, - const BlackBoxFuncCall::RANGE &rhs) { - if (!(lhs.input == rhs.input)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxFuncCall::RANGE &lhs, const BlackBoxFuncCall::RANGE &rhs) { + if (!(lhs.input == rhs.input)) { return false; } + return true; + } -inline std::vector BlackBoxFuncCall::RANGE::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxFuncCall::RANGE::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxFuncCall::RANGE -BlackBoxFuncCall::RANGE::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxFuncCall::RANGE BlackBoxFuncCall::RANGE::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxFuncCall::RANGE &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.input, serializer); +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::RANGE &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.input, serializer); } template <> template -Program::BlackBoxFuncCall::RANGE -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxFuncCall::RANGE obj; - obj.input = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxFuncCall::RANGE serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::RANGE obj; + obj.input = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxFuncCall::Blake2s &lhs, - const BlackBoxFuncCall::Blake2s &rhs) { - if (!(lhs.inputs == rhs.inputs)) { - return false; - } - if (!(lhs.outputs == rhs.outputs)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxFuncCall::Blake2s &lhs, const BlackBoxFuncCall::Blake2s &rhs) { + if (!(lhs.inputs == rhs.inputs)) { return false; } + if (!(lhs.outputs == rhs.outputs)) { return false; } + return true; + } -inline std::vector -BlackBoxFuncCall::Blake2s::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxFuncCall::Blake2s::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxFuncCall::Blake2s -BlackBoxFuncCall::Blake2s::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxFuncCall::Blake2s BlackBoxFuncCall::Blake2s::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxFuncCall::Blake2s &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.inputs, serializer); - serde::Serializable::serialize(obj.outputs, - serializer); +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::Blake2s &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.inputs, serializer); + serde::Serializable::serialize(obj.outputs, serializer); } template <> template -Program::BlackBoxFuncCall::Blake2s -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxFuncCall::Blake2s obj; - obj.inputs = - serde::Deserializable::deserialize(deserializer); - obj.outputs = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxFuncCall::Blake2s serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::Blake2s obj; + obj.inputs = serde::Deserializable::deserialize(deserializer); + obj.outputs = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxFuncCall::Blake3 &lhs, - const BlackBoxFuncCall::Blake3 &rhs) { - if (!(lhs.inputs == rhs.inputs)) { - return false; - } - if (!(lhs.outputs == rhs.outputs)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxFuncCall::Blake3 &lhs, const BlackBoxFuncCall::Blake3 &rhs) { + if (!(lhs.inputs == rhs.inputs)) { return false; } + if (!(lhs.outputs == rhs.outputs)) { return false; } + return true; + } -inline std::vector BlackBoxFuncCall::Blake3::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxFuncCall::Blake3::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxFuncCall::Blake3 -BlackBoxFuncCall::Blake3::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxFuncCall::Blake3 BlackBoxFuncCall::Blake3::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxFuncCall::Blake3 &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.inputs, serializer); - serde::Serializable::serialize(obj.outputs, - serializer); +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::Blake3 &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.inputs, serializer); + serde::Serializable::serialize(obj.outputs, serializer); } template <> template -Program::BlackBoxFuncCall::Blake3 -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxFuncCall::Blake3 obj; - obj.inputs = - serde::Deserializable::deserialize(deserializer); - obj.outputs = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxFuncCall::Blake3 serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::Blake3 obj; + obj.inputs = serde::Deserializable::deserialize(deserializer); + obj.outputs = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxFuncCall::SchnorrVerify &lhs, - const BlackBoxFuncCall::SchnorrVerify &rhs) { - if (!(lhs.public_key_x == rhs.public_key_x)) { - return false; - } - if (!(lhs.public_key_y == rhs.public_key_y)) { - return false; - } - if (!(lhs.signature == rhs.signature)) { - return false; - } - if (!(lhs.message == rhs.message)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxFuncCall::SchnorrVerify &lhs, const BlackBoxFuncCall::SchnorrVerify &rhs) { + if (!(lhs.public_key_x == rhs.public_key_x)) { return false; } + if (!(lhs.public_key_y == rhs.public_key_y)) { return false; } + if (!(lhs.signature == rhs.signature)) { return false; } + if (!(lhs.message == rhs.message)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } -inline std::vector -BlackBoxFuncCall::SchnorrVerify::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxFuncCall::SchnorrVerify::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxFuncCall::SchnorrVerify -BlackBoxFuncCall::SchnorrVerify::bincodeDeserialize( - std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxFuncCall::SchnorrVerify BlackBoxFuncCall::SchnorrVerify::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxFuncCall::SchnorrVerify &obj, - Serializer &serializer) { - serde::Serializable::serialize(obj.public_key_x, - serializer); - serde::Serializable::serialize(obj.public_key_y, - serializer); - serde::Serializable::serialize(obj.signature, - serializer); - serde::Serializable::serialize(obj.message, - serializer); - serde::Serializable::serialize(obj.output, serializer); +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::SchnorrVerify &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.public_key_x, serializer); + serde::Serializable::serialize(obj.public_key_y, serializer); + serde::Serializable::serialize(obj.signature, serializer); + serde::Serializable::serialize(obj.message, serializer); + serde::Serializable::serialize(obj.output, serializer); } template <> template -Program::BlackBoxFuncCall::SchnorrVerify -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxFuncCall::SchnorrVerify obj; - obj.public_key_x = - serde::Deserializable::deserialize( - deserializer); - obj.public_key_y = - serde::Deserializable::deserialize( - deserializer); - obj.signature = - serde::Deserializable::deserialize(deserializer); - obj.message = - serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; -} - -namespace Program { - -inline bool operator==(const BlackBoxFuncCall::PedersenCommitment &lhs, - const BlackBoxFuncCall::PedersenCommitment &rhs) { - if (!(lhs.inputs == rhs.inputs)) { - return false; - } - if (!(lhs.domain_separator == rhs.domain_separator)) { - return false; - } - if (!(lhs.outputs == rhs.outputs)) { - return false; - } - return true; +Program::BlackBoxFuncCall::SchnorrVerify serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::SchnorrVerify obj; + obj.public_key_x = serde::Deserializable::deserialize(deserializer); + obj.public_key_y = serde::Deserializable::deserialize(deserializer); + obj.signature = serde::Deserializable::deserialize(deserializer); + obj.message = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; } -inline std::vector -BlackBoxFuncCall::PedersenCommitment::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize( - *this, serializer); - return std::move(serializer).bytes(); -} +namespace Program { -inline BlackBoxFuncCall::PedersenCommitment -BlackBoxFuncCall::PedersenCommitment::bincodeDeserialize( - std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline bool operator==(const BlackBoxFuncCall::PedersenCommitment &lhs, const BlackBoxFuncCall::PedersenCommitment &rhs) { + if (!(lhs.inputs == rhs.inputs)) { return false; } + if (!(lhs.domain_separator == rhs.domain_separator)) { return false; } + if (!(lhs.outputs == rhs.outputs)) { return false; } + return true; + } + + inline std::vector BlackBoxFuncCall::PedersenCommitment::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BlackBoxFuncCall::PedersenCommitment BlackBoxFuncCall::PedersenCommitment::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable:: - serialize(const Program::BlackBoxFuncCall::PedersenCommitment &obj, - Serializer &serializer) { - serde::Serializable::serialize(obj.inputs, serializer); - serde::Serializable::serialize( - obj.domain_separator, serializer); - serde::Serializable::serialize(obj.outputs, - serializer); +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::PedersenCommitment &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.inputs, serializer); + serde::Serializable::serialize(obj.domain_separator, serializer); + serde::Serializable::serialize(obj.outputs, serializer); } template <> template -Program::BlackBoxFuncCall::PedersenCommitment -serde::Deserializable:: - deserialize(Deserializer &deserializer) { - Program::BlackBoxFuncCall::PedersenCommitment obj; - obj.inputs = - serde::Deserializable::deserialize(deserializer); - obj.domain_separator = - serde::Deserializable::deserialize( - deserializer); - obj.outputs = - serde::Deserializable::deserialize(deserializer); - return obj; -} - -namespace Program { - -inline bool operator==(const BlackBoxFuncCall::PedersenHash &lhs, - const BlackBoxFuncCall::PedersenHash &rhs) { - if (!(lhs.inputs == rhs.inputs)) { - return false; - } - if (!(lhs.domain_separator == rhs.domain_separator)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; +Program::BlackBoxFuncCall::PedersenCommitment serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::PedersenCommitment obj; + obj.inputs = serde::Deserializable::deserialize(deserializer); + obj.domain_separator = serde::Deserializable::deserialize(deserializer); + obj.outputs = serde::Deserializable::deserialize(deserializer); + return obj; } -inline std::vector -BlackBoxFuncCall::PedersenHash::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); -} +namespace Program { -inline BlackBoxFuncCall::PedersenHash -BlackBoxFuncCall::PedersenHash::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline bool operator==(const BlackBoxFuncCall::PedersenHash &lhs, const BlackBoxFuncCall::PedersenHash &rhs) { + if (!(lhs.inputs == rhs.inputs)) { return false; } + if (!(lhs.domain_separator == rhs.domain_separator)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } + + inline std::vector BlackBoxFuncCall::PedersenHash::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BlackBoxFuncCall::PedersenHash BlackBoxFuncCall::PedersenHash::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxFuncCall::PedersenHash &obj, - Serializer &serializer) { - serde::Serializable::serialize(obj.inputs, serializer); - serde::Serializable::serialize( - obj.domain_separator, serializer); - serde::Serializable::serialize(obj.output, serializer); +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::PedersenHash &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.inputs, serializer); + serde::Serializable::serialize(obj.domain_separator, serializer); + serde::Serializable::serialize(obj.output, serializer); } template <> template -Program::BlackBoxFuncCall::PedersenHash -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxFuncCall::PedersenHash obj; - obj.inputs = - serde::Deserializable::deserialize(deserializer); - obj.domain_separator = - serde::Deserializable::deserialize( - deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxFuncCall::PedersenHash serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::PedersenHash obj; + obj.inputs = serde::Deserializable::deserialize(deserializer); + obj.domain_separator = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxFuncCall::EcdsaSecp256k1 &lhs, - const BlackBoxFuncCall::EcdsaSecp256k1 &rhs) { - if (!(lhs.public_key_x == rhs.public_key_x)) { - return false; - } - if (!(lhs.public_key_y == rhs.public_key_y)) { - return false; - } - if (!(lhs.signature == rhs.signature)) { - return false; - } - if (!(lhs.hashed_message == rhs.hashed_message)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; -} - -inline std::vector -BlackBoxFuncCall::EcdsaSecp256k1::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); -} - -inline BlackBoxFuncCall::EcdsaSecp256k1 -BlackBoxFuncCall::EcdsaSecp256k1::bincodeDeserialize( - std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} - -} // end of namespace Program + inline bool operator==(const BlackBoxFuncCall::EcdsaSecp256k1 &lhs, const BlackBoxFuncCall::EcdsaSecp256k1 &rhs) { + if (!(lhs.public_key_x == rhs.public_key_x)) { return false; } + if (!(lhs.public_key_y == rhs.public_key_y)) { return false; } + if (!(lhs.signature == rhs.signature)) { return false; } + if (!(lhs.hashed_message == rhs.hashed_message)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } + + inline std::vector BlackBoxFuncCall::EcdsaSecp256k1::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BlackBoxFuncCall::EcdsaSecp256k1 BlackBoxFuncCall::EcdsaSecp256k1::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxFuncCall::EcdsaSecp256k1 &obj, - Serializer &serializer) { - serde::Serializable::serialize(obj.public_key_x, - serializer); - serde::Serializable::serialize(obj.public_key_y, - serializer); - serde::Serializable::serialize(obj.signature, - serializer); - serde::Serializable::serialize( - obj.hashed_message, serializer); - serde::Serializable::serialize(obj.output, serializer); -} - -template <> -template -Program::BlackBoxFuncCall::EcdsaSecp256k1 -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxFuncCall::EcdsaSecp256k1 obj; - obj.public_key_x = - serde::Deserializable::deserialize( - deserializer); - obj.public_key_y = - serde::Deserializable::deserialize( - deserializer); - obj.signature = - serde::Deserializable::deserialize(deserializer); - obj.hashed_message = - serde::Deserializable::deserialize( - deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; -} - -namespace Program { - -inline bool operator==(const BlackBoxFuncCall::EcdsaSecp256r1 &lhs, - const BlackBoxFuncCall::EcdsaSecp256r1 &rhs) { - if (!(lhs.public_key_x == rhs.public_key_x)) { - return false; - } - if (!(lhs.public_key_y == rhs.public_key_y)) { - return false; - } - if (!(lhs.signature == rhs.signature)) { - return false; - } - if (!(lhs.hashed_message == rhs.hashed_message)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; -} - -inline std::vector -BlackBoxFuncCall::EcdsaSecp256r1::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); -} - -inline BlackBoxFuncCall::EcdsaSecp256r1 -BlackBoxFuncCall::EcdsaSecp256r1::bincodeDeserialize( - std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} - -} // end of namespace Program - -template <> -template -void serde::Serializable::serialize( - const Program::BlackBoxFuncCall::EcdsaSecp256r1 &obj, - Serializer &serializer) { - serde::Serializable::serialize(obj.public_key_x, - serializer); - serde::Serializable::serialize(obj.public_key_y, - serializer); - serde::Serializable::serialize(obj.signature, - serializer); - serde::Serializable::serialize( - obj.hashed_message, serializer); - serde::Serializable::serialize(obj.output, serializer); -} - -template <> -template -Program::BlackBoxFuncCall::EcdsaSecp256r1 -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxFuncCall::EcdsaSecp256r1 obj; - obj.public_key_x = - serde::Deserializable::deserialize( - deserializer); - obj.public_key_y = - serde::Deserializable::deserialize( - deserializer); - obj.signature = - serde::Deserializable::deserialize(deserializer); - obj.hashed_message = - serde::Deserializable::deserialize( - deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; -} - -namespace Program { - -inline bool operator==(const BlackBoxFuncCall::FixedBaseScalarMul &lhs, - const BlackBoxFuncCall::FixedBaseScalarMul &rhs) { - if (!(lhs.low == rhs.low)) { - return false; - } - if (!(lhs.high == rhs.high)) { - return false; - } - if (!(lhs.outputs == rhs.outputs)) { - return false; - } - return true; +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::EcdsaSecp256k1 &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.public_key_x, serializer); + serde::Serializable::serialize(obj.public_key_y, serializer); + serde::Serializable::serialize(obj.signature, serializer); + serde::Serializable::serialize(obj.hashed_message, serializer); + serde::Serializable::serialize(obj.output, serializer); } -inline std::vector -BlackBoxFuncCall::FixedBaseScalarMul::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize( - *this, serializer); - return std::move(serializer).bytes(); -} - -inline BlackBoxFuncCall::FixedBaseScalarMul -BlackBoxFuncCall::FixedBaseScalarMul::bincodeDeserialize( - std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; +template <> +template +Program::BlackBoxFuncCall::EcdsaSecp256k1 serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::EcdsaSecp256k1 obj; + obj.public_key_x = serde::Deserializable::deserialize(deserializer); + obj.public_key_y = serde::Deserializable::deserialize(deserializer); + obj.signature = serde::Deserializable::deserialize(deserializer); + obj.hashed_message = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; } +namespace Program { + + inline bool operator==(const BlackBoxFuncCall::EcdsaSecp256r1 &lhs, const BlackBoxFuncCall::EcdsaSecp256r1 &rhs) { + if (!(lhs.public_key_x == rhs.public_key_x)) { return false; } + if (!(lhs.public_key_y == rhs.public_key_y)) { return false; } + if (!(lhs.signature == rhs.signature)) { return false; } + if (!(lhs.hashed_message == rhs.hashed_message)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } + + inline std::vector BlackBoxFuncCall::EcdsaSecp256r1::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BlackBoxFuncCall::EcdsaSecp256r1 BlackBoxFuncCall::EcdsaSecp256r1::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + } // end of namespace Program - -template <> -template -void serde::Serializable:: - serialize(const Program::BlackBoxFuncCall::FixedBaseScalarMul &obj, - Serializer &serializer) { - serde::Serializable::serialize(obj.low, serializer); - serde::Serializable::serialize(obj.high, serializer); - serde::Serializable::serialize(obj.outputs, - serializer); + +template <> +template +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::EcdsaSecp256r1 &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.public_key_x, serializer); + serde::Serializable::serialize(obj.public_key_y, serializer); + serde::Serializable::serialize(obj.signature, serializer); + serde::Serializable::serialize(obj.hashed_message, serializer); + serde::Serializable::serialize(obj.output, serializer); } template <> template -Program::BlackBoxFuncCall::FixedBaseScalarMul -serde::Deserializable:: - deserialize(Deserializer &deserializer) { - Program::BlackBoxFuncCall::FixedBaseScalarMul obj; - obj.low = serde::Deserializable::deserialize(deserializer); - obj.high = - serde::Deserializable::deserialize(deserializer); - obj.outputs = - serde::Deserializable::deserialize(deserializer); - return obj; -} - -namespace Program { - -inline bool operator==(const BlackBoxFuncCall::VariableBaseScalarMul &lhs, - const BlackBoxFuncCall::VariableBaseScalarMul &rhs) { - if (!(lhs.point_x == rhs.point_x)) { - return false; - } - if (!(lhs.point_y == rhs.point_y)) { - return false; - } - if (!(lhs.scalar_low == rhs.scalar_low)) { - return false; - } - if (!(lhs.scalar_high == rhs.scalar_high)) { - return false; - } - if (!(lhs.outputs == rhs.outputs)) { - return false; - } - return true; -} - -inline std::vector -BlackBoxFuncCall::VariableBaseScalarMul::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize( - *this, serializer); - return std::move(serializer).bytes(); +Program::BlackBoxFuncCall::EcdsaSecp256r1 serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::EcdsaSecp256r1 obj; + obj.public_key_x = serde::Deserializable::deserialize(deserializer); + obj.public_key_y = serde::Deserializable::deserialize(deserializer); + obj.signature = serde::Deserializable::deserialize(deserializer); + obj.hashed_message = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; } -inline BlackBoxFuncCall::VariableBaseScalarMul -BlackBoxFuncCall::VariableBaseScalarMul::bincodeDeserialize( - std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable< - BlackBoxFuncCall::VariableBaseScalarMul>::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} - -} // end of namespace Program - -template <> -template -void serde::Serializable:: - serialize(const Program::BlackBoxFuncCall::VariableBaseScalarMul &obj, - Serializer &serializer) { - serde::Serializable::serialize(obj.point_x, - serializer); - serde::Serializable::serialize(obj.point_y, - serializer); - serde::Serializable::serialize(obj.scalar_low, - serializer); - serde::Serializable::serialize(obj.scalar_high, - serializer); - serde::Serializable::serialize(obj.outputs, - serializer); -} - -template <> -template -Program::BlackBoxFuncCall::VariableBaseScalarMul -serde::Deserializable:: - deserialize(Deserializer &deserializer) { - Program::BlackBoxFuncCall::VariableBaseScalarMul obj; - obj.point_x = - serde::Deserializable::deserialize(deserializer); - obj.point_y = - serde::Deserializable::deserialize(deserializer); - obj.scalar_low = serde::Deserializable::deserialize( - deserializer); - obj.scalar_high = - serde::Deserializable::deserialize( - deserializer); - obj.outputs = - serde::Deserializable::deserialize(deserializer); - return obj; -} - -namespace Program { - -inline bool operator==(const BlackBoxFuncCall::EmbeddedCurveAdd &lhs, - const BlackBoxFuncCall::EmbeddedCurveAdd &rhs) { - if (!(lhs.input1_x == rhs.input1_x)) { - return false; - } - if (!(lhs.input1_y == rhs.input1_y)) { - return false; - } - if (!(lhs.input2_x == rhs.input2_x)) { - return false; - } - if (!(lhs.input2_y == rhs.input2_y)) { - return false; - } - if (!(lhs.outputs == rhs.outputs)) { - return false; - } - return true; -} - -inline std::vector -BlackBoxFuncCall::EmbeddedCurveAdd::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize( - *this, serializer); - return std::move(serializer).bytes(); -} - -inline BlackBoxFuncCall::EmbeddedCurveAdd -BlackBoxFuncCall::EmbeddedCurveAdd::bincodeDeserialize( - std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} - -} // end of namespace Program +namespace Program { + + inline bool operator==(const BlackBoxFuncCall::FixedBaseScalarMul &lhs, const BlackBoxFuncCall::FixedBaseScalarMul &rhs) { + if (!(lhs.low == rhs.low)) { return false; } + if (!(lhs.high == rhs.high)) { return false; } + if (!(lhs.outputs == rhs.outputs)) { return false; } + return true; + } + + inline std::vector BlackBoxFuncCall::FixedBaseScalarMul::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BlackBoxFuncCall::FixedBaseScalarMul BlackBoxFuncCall::FixedBaseScalarMul::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program template <> template -void serde::Serializable:: - serialize(const Program::BlackBoxFuncCall::EmbeddedCurveAdd &obj, - Serializer &serializer) { - serde::Serializable::serialize(obj.input1_x, - serializer); - serde::Serializable::serialize(obj.input1_y, - serializer); - serde::Serializable::serialize(obj.input2_x, - serializer); - serde::Serializable::serialize(obj.input2_y, - serializer); - serde::Serializable::serialize(obj.outputs, - serializer); +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::FixedBaseScalarMul &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.low, serializer); + serde::Serializable::serialize(obj.high, serializer); + serde::Serializable::serialize(obj.outputs, serializer); } -template <> -template -Program::BlackBoxFuncCall::EmbeddedCurveAdd -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxFuncCall::EmbeddedCurveAdd obj; - obj.input1_x = - serde::Deserializable::deserialize(deserializer); - obj.input1_y = - serde::Deserializable::deserialize(deserializer); - obj.input2_x = - serde::Deserializable::deserialize(deserializer); - obj.input2_y = - serde::Deserializable::deserialize(deserializer); - obj.outputs = - serde::Deserializable::deserialize(deserializer); - return obj; +template <> +template +Program::BlackBoxFuncCall::FixedBaseScalarMul serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::FixedBaseScalarMul obj; + obj.low = serde::Deserializable::deserialize(deserializer); + obj.high = serde::Deserializable::deserialize(deserializer); + obj.outputs = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxFuncCall::Keccak256 &lhs, - const BlackBoxFuncCall::Keccak256 &rhs) { - if (!(lhs.inputs == rhs.inputs)) { - return false; - } - if (!(lhs.var_message_size == rhs.var_message_size)) { - return false; - } - if (!(lhs.outputs == rhs.outputs)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxFuncCall::VariableBaseScalarMul &lhs, const BlackBoxFuncCall::VariableBaseScalarMul &rhs) { + if (!(lhs.point_x == rhs.point_x)) { return false; } + if (!(lhs.point_y == rhs.point_y)) { return false; } + if (!(lhs.scalar_low == rhs.scalar_low)) { return false; } + if (!(lhs.scalar_high == rhs.scalar_high)) { return false; } + if (!(lhs.outputs == rhs.outputs)) { return false; } + return true; + } -inline std::vector -BlackBoxFuncCall::Keccak256::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxFuncCall::VariableBaseScalarMul::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxFuncCall::Keccak256 -BlackBoxFuncCall::Keccak256::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxFuncCall::VariableBaseScalarMul BlackBoxFuncCall::VariableBaseScalarMul::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxFuncCall::Keccak256 &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.inputs, serializer); - serde::Serializable::serialize( - obj.var_message_size, serializer); - serde::Serializable::serialize(obj.outputs, - serializer); +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::VariableBaseScalarMul &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.point_x, serializer); + serde::Serializable::serialize(obj.point_y, serializer); + serde::Serializable::serialize(obj.scalar_low, serializer); + serde::Serializable::serialize(obj.scalar_high, serializer); + serde::Serializable::serialize(obj.outputs, serializer); } template <> template -Program::BlackBoxFuncCall::Keccak256 -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxFuncCall::Keccak256 obj; - obj.inputs = - serde::Deserializable::deserialize(deserializer); - obj.var_message_size = - serde::Deserializable::deserialize( - deserializer); - obj.outputs = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxFuncCall::VariableBaseScalarMul serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::VariableBaseScalarMul obj; + obj.point_x = serde::Deserializable::deserialize(deserializer); + obj.point_y = serde::Deserializable::deserialize(deserializer); + obj.scalar_low = serde::Deserializable::deserialize(deserializer); + obj.scalar_high = serde::Deserializable::deserialize(deserializer); + obj.outputs = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxFuncCall::Keccakf1600 &lhs, - const BlackBoxFuncCall::Keccakf1600 &rhs) { - if (!(lhs.inputs == rhs.inputs)) { - return false; - } - if (!(lhs.outputs == rhs.outputs)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxFuncCall::EmbeddedCurveAdd &lhs, const BlackBoxFuncCall::EmbeddedCurveAdd &rhs) { + if (!(lhs.input1_x == rhs.input1_x)) { return false; } + if (!(lhs.input1_y == rhs.input1_y)) { return false; } + if (!(lhs.input2_x == rhs.input2_x)) { return false; } + if (!(lhs.input2_y == rhs.input2_y)) { return false; } + if (!(lhs.outputs == rhs.outputs)) { return false; } + return true; + } -inline std::vector -BlackBoxFuncCall::Keccakf1600::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxFuncCall::EmbeddedCurveAdd::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxFuncCall::Keccakf1600 -BlackBoxFuncCall::Keccakf1600::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxFuncCall::EmbeddedCurveAdd BlackBoxFuncCall::EmbeddedCurveAdd::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxFuncCall::Keccakf1600 &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.inputs, serializer); - serde::Serializable::serialize(obj.outputs, - serializer); +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::EmbeddedCurveAdd &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.input1_x, serializer); + serde::Serializable::serialize(obj.input1_y, serializer); + serde::Serializable::serialize(obj.input2_x, serializer); + serde::Serializable::serialize(obj.input2_y, serializer); + serde::Serializable::serialize(obj.outputs, serializer); } template <> template -Program::BlackBoxFuncCall::Keccakf1600 -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxFuncCall::Keccakf1600 obj; - obj.inputs = - serde::Deserializable::deserialize(deserializer); - obj.outputs = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxFuncCall::EmbeddedCurveAdd serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::EmbeddedCurveAdd obj; + obj.input1_x = serde::Deserializable::deserialize(deserializer); + obj.input1_y = serde::Deserializable::deserialize(deserializer); + obj.input2_x = serde::Deserializable::deserialize(deserializer); + obj.input2_y = serde::Deserializable::deserialize(deserializer); + obj.outputs = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxFuncCall::RecursiveAggregation &lhs, - const BlackBoxFuncCall::RecursiveAggregation &rhs) { - if (!(lhs.verification_key == rhs.verification_key)) { - return false; - } - if (!(lhs.proof == rhs.proof)) { - return false; - } - if (!(lhs.public_inputs == rhs.public_inputs)) { - return false; - } - if (!(lhs.key_hash == rhs.key_hash)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxFuncCall::Keccak256 &lhs, const BlackBoxFuncCall::Keccak256 &rhs) { + if (!(lhs.inputs == rhs.inputs)) { return false; } + if (!(lhs.var_message_size == rhs.var_message_size)) { return false; } + if (!(lhs.outputs == rhs.outputs)) { return false; } + return true; + } -inline std::vector -BlackBoxFuncCall::RecursiveAggregation::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize( - *this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxFuncCall::Keccak256::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxFuncCall::RecursiveAggregation -BlackBoxFuncCall::RecursiveAggregation::bincodeDeserialize( - std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable< - BlackBoxFuncCall::RecursiveAggregation>::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxFuncCall::Keccak256 BlackBoxFuncCall::Keccak256::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable:: - serialize(const Program::BlackBoxFuncCall::RecursiveAggregation &obj, - Serializer &serializer) { - serde::Serializable::serialize( - obj.verification_key, serializer); - serde::Serializable::serialize(obj.proof, serializer); - serde::Serializable::serialize(obj.public_inputs, - serializer); - serde::Serializable::serialize(obj.key_hash, - serializer); +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::Keccak256 &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.inputs, serializer); + serde::Serializable::serialize(obj.var_message_size, serializer); + serde::Serializable::serialize(obj.outputs, serializer); } template <> template -Program::BlackBoxFuncCall::RecursiveAggregation -serde::Deserializable:: - deserialize(Deserializer &deserializer) { - Program::BlackBoxFuncCall::RecursiveAggregation obj; - obj.verification_key = - serde::Deserializable::deserialize( - deserializer); - obj.proof = - serde::Deserializable::deserialize(deserializer); - obj.public_inputs = - serde::Deserializable::deserialize( - deserializer); - obj.key_hash = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxFuncCall::Keccak256 serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::Keccak256 obj; + obj.inputs = serde::Deserializable::deserialize(deserializer); + obj.var_message_size = serde::Deserializable::deserialize(deserializer); + obj.outputs = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxFuncCall::BigIntAdd &lhs, - const BlackBoxFuncCall::BigIntAdd &rhs) { - if (!(lhs.lhs == rhs.lhs)) { - return false; - } - if (!(lhs.rhs == rhs.rhs)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxFuncCall::Keccakf1600 &lhs, const BlackBoxFuncCall::Keccakf1600 &rhs) { + if (!(lhs.inputs == rhs.inputs)) { return false; } + if (!(lhs.outputs == rhs.outputs)) { return false; } + return true; + } -inline std::vector -BlackBoxFuncCall::BigIntAdd::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxFuncCall::Keccakf1600::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxFuncCall::BigIntAdd -BlackBoxFuncCall::BigIntAdd::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxFuncCall::Keccakf1600 BlackBoxFuncCall::Keccakf1600::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxFuncCall::BigIntAdd &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.lhs, serializer); - serde::Serializable::serialize(obj.rhs, serializer); - serde::Serializable::serialize(obj.output, serializer); +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::Keccakf1600 &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.inputs, serializer); + serde::Serializable::serialize(obj.outputs, serializer); } template <> template -Program::BlackBoxFuncCall::BigIntAdd -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxFuncCall::BigIntAdd obj; - obj.lhs = serde::Deserializable::deserialize(deserializer); - obj.rhs = serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxFuncCall::Keccakf1600 serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::Keccakf1600 obj; + obj.inputs = serde::Deserializable::deserialize(deserializer); + obj.outputs = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxFuncCall::BigIntSub &lhs, - const BlackBoxFuncCall::BigIntSub &rhs) { - if (!(lhs.lhs == rhs.lhs)) { - return false; - } - if (!(lhs.rhs == rhs.rhs)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxFuncCall::RecursiveAggregation &lhs, const BlackBoxFuncCall::RecursiveAggregation &rhs) { + if (!(lhs.verification_key == rhs.verification_key)) { return false; } + if (!(lhs.proof == rhs.proof)) { return false; } + if (!(lhs.public_inputs == rhs.public_inputs)) { return false; } + if (!(lhs.key_hash == rhs.key_hash)) { return false; } + return true; + } -inline std::vector -BlackBoxFuncCall::BigIntSub::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxFuncCall::RecursiveAggregation::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxFuncCall::BigIntSub -BlackBoxFuncCall::BigIntSub::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxFuncCall::RecursiveAggregation BlackBoxFuncCall::RecursiveAggregation::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxFuncCall::BigIntSub &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.lhs, serializer); - serde::Serializable::serialize(obj.rhs, serializer); - serde::Serializable::serialize(obj.output, serializer); +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::RecursiveAggregation &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.verification_key, serializer); + serde::Serializable::serialize(obj.proof, serializer); + serde::Serializable::serialize(obj.public_inputs, serializer); + serde::Serializable::serialize(obj.key_hash, serializer); } template <> template -Program::BlackBoxFuncCall::BigIntSub -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxFuncCall::BigIntSub obj; - obj.lhs = serde::Deserializable::deserialize(deserializer); - obj.rhs = serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxFuncCall::RecursiveAggregation serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::RecursiveAggregation obj; + obj.verification_key = serde::Deserializable::deserialize(deserializer); + obj.proof = serde::Deserializable::deserialize(deserializer); + obj.public_inputs = serde::Deserializable::deserialize(deserializer); + obj.key_hash = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxFuncCall::BigIntMul &lhs, - const BlackBoxFuncCall::BigIntMul &rhs) { - if (!(lhs.lhs == rhs.lhs)) { - return false; - } - if (!(lhs.rhs == rhs.rhs)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxFuncCall::BigIntAdd &lhs, const BlackBoxFuncCall::BigIntAdd &rhs) { + if (!(lhs.lhs == rhs.lhs)) { return false; } + if (!(lhs.rhs == rhs.rhs)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } -inline std::vector -BlackBoxFuncCall::BigIntMul::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxFuncCall::BigIntAdd::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxFuncCall::BigIntMul -BlackBoxFuncCall::BigIntMul::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxFuncCall::BigIntAdd BlackBoxFuncCall::BigIntAdd::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxFuncCall::BigIntMul &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.lhs, serializer); - serde::Serializable::serialize(obj.rhs, serializer); - serde::Serializable::serialize(obj.output, serializer); +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::BigIntAdd &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.lhs, serializer); + serde::Serializable::serialize(obj.rhs, serializer); + serde::Serializable::serialize(obj.output, serializer); } template <> template -Program::BlackBoxFuncCall::BigIntMul -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxFuncCall::BigIntMul obj; - obj.lhs = serde::Deserializable::deserialize(deserializer); - obj.rhs = serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxFuncCall::BigIntAdd serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::BigIntAdd obj; + obj.lhs = serde::Deserializable::deserialize(deserializer); + obj.rhs = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxFuncCall::BigIntDiv &lhs, - const BlackBoxFuncCall::BigIntDiv &rhs) { - if (!(lhs.lhs == rhs.lhs)) { - return false; - } - if (!(lhs.rhs == rhs.rhs)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxFuncCall::BigIntSub &lhs, const BlackBoxFuncCall::BigIntSub &rhs) { + if (!(lhs.lhs == rhs.lhs)) { return false; } + if (!(lhs.rhs == rhs.rhs)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } -inline std::vector -BlackBoxFuncCall::BigIntDiv::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxFuncCall::BigIntSub::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxFuncCall::BigIntDiv -BlackBoxFuncCall::BigIntDiv::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxFuncCall::BigIntSub BlackBoxFuncCall::BigIntSub::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxFuncCall::BigIntDiv &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.lhs, serializer); - serde::Serializable::serialize(obj.rhs, serializer); - serde::Serializable::serialize(obj.output, serializer); +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::BigIntSub &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.lhs, serializer); + serde::Serializable::serialize(obj.rhs, serializer); + serde::Serializable::serialize(obj.output, serializer); } template <> template -Program::BlackBoxFuncCall::BigIntDiv -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxFuncCall::BigIntDiv obj; - obj.lhs = serde::Deserializable::deserialize(deserializer); - obj.rhs = serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxFuncCall::BigIntSub serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::BigIntSub obj; + obj.lhs = serde::Deserializable::deserialize(deserializer); + obj.rhs = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxFuncCall::BigIntFromLeBytes &lhs, - const BlackBoxFuncCall::BigIntFromLeBytes &rhs) { - if (!(lhs.inputs == rhs.inputs)) { - return false; - } - if (!(lhs.modulus == rhs.modulus)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxFuncCall::BigIntMul &lhs, const BlackBoxFuncCall::BigIntMul &rhs) { + if (!(lhs.lhs == rhs.lhs)) { return false; } + if (!(lhs.rhs == rhs.rhs)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } -inline std::vector -BlackBoxFuncCall::BigIntFromLeBytes::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize( - *this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxFuncCall::BigIntMul::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxFuncCall::BigIntFromLeBytes -BlackBoxFuncCall::BigIntFromLeBytes::bincodeDeserialize( - std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxFuncCall::BigIntMul BlackBoxFuncCall::BigIntMul::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable:: - serialize(const Program::BlackBoxFuncCall::BigIntFromLeBytes &obj, - Serializer &serializer) { - serde::Serializable::serialize(obj.inputs, serializer); - serde::Serializable::serialize(obj.modulus, - serializer); - serde::Serializable::serialize(obj.output, serializer); +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::BigIntMul &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.lhs, serializer); + serde::Serializable::serialize(obj.rhs, serializer); + serde::Serializable::serialize(obj.output, serializer); } template <> template -Program::BlackBoxFuncCall::BigIntFromLeBytes -serde::Deserializable:: - deserialize(Deserializer &deserializer) { - Program::BlackBoxFuncCall::BigIntFromLeBytes obj; - obj.inputs = - serde::Deserializable::deserialize(deserializer); - obj.modulus = - serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxFuncCall::BigIntMul serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::BigIntMul obj; + obj.lhs = serde::Deserializable::deserialize(deserializer); + obj.rhs = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxFuncCall::BigIntToLeBytes &lhs, - const BlackBoxFuncCall::BigIntToLeBytes &rhs) { - if (!(lhs.input == rhs.input)) { - return false; - } - if (!(lhs.outputs == rhs.outputs)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxFuncCall::BigIntDiv &lhs, const BlackBoxFuncCall::BigIntDiv &rhs) { + if (!(lhs.lhs == rhs.lhs)) { return false; } + if (!(lhs.rhs == rhs.rhs)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } -inline std::vector -BlackBoxFuncCall::BigIntToLeBytes::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxFuncCall::BigIntDiv::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxFuncCall::BigIntToLeBytes -BlackBoxFuncCall::BigIntToLeBytes::bincodeDeserialize( - std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxFuncCall::BigIntDiv BlackBoxFuncCall::BigIntDiv::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxFuncCall::BigIntToLeBytes &obj, - Serializer &serializer) { - serde::Serializable::serialize(obj.input, serializer); - serde::Serializable::serialize(obj.outputs, - serializer); +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::BigIntDiv &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.lhs, serializer); + serde::Serializable::serialize(obj.rhs, serializer); + serde::Serializable::serialize(obj.output, serializer); } template <> template -Program::BlackBoxFuncCall::BigIntToLeBytes -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxFuncCall::BigIntToLeBytes obj; - obj.input = - serde::Deserializable::deserialize(deserializer); - obj.outputs = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxFuncCall::BigIntDiv serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::BigIntDiv obj; + obj.lhs = serde::Deserializable::deserialize(deserializer); + obj.rhs = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxFuncCall::Poseidon2Permutation &lhs, - const BlackBoxFuncCall::Poseidon2Permutation &rhs) { - if (!(lhs.inputs == rhs.inputs)) { - return false; - } - if (!(lhs.outputs == rhs.outputs)) { - return false; - } - if (!(lhs.len == rhs.len)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxFuncCall::BigIntFromLeBytes &lhs, const BlackBoxFuncCall::BigIntFromLeBytes &rhs) { + if (!(lhs.inputs == rhs.inputs)) { return false; } + if (!(lhs.modulus == rhs.modulus)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } -inline std::vector -BlackBoxFuncCall::Poseidon2Permutation::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize( - *this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxFuncCall::BigIntFromLeBytes::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxFuncCall::Poseidon2Permutation -BlackBoxFuncCall::Poseidon2Permutation::bincodeDeserialize( - std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable< - BlackBoxFuncCall::Poseidon2Permutation>::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxFuncCall::BigIntFromLeBytes BlackBoxFuncCall::BigIntFromLeBytes::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable:: - serialize(const Program::BlackBoxFuncCall::Poseidon2Permutation &obj, - Serializer &serializer) { - serde::Serializable::serialize(obj.inputs, serializer); - serde::Serializable::serialize(obj.outputs, - serializer); - serde::Serializable::serialize(obj.len, serializer); +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::BigIntFromLeBytes &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.inputs, serializer); + serde::Serializable::serialize(obj.modulus, serializer); + serde::Serializable::serialize(obj.output, serializer); } template <> template -Program::BlackBoxFuncCall::Poseidon2Permutation -serde::Deserializable:: - deserialize(Deserializer &deserializer) { - Program::BlackBoxFuncCall::Poseidon2Permutation obj; - obj.inputs = - serde::Deserializable::deserialize(deserializer); - obj.outputs = - serde::Deserializable::deserialize(deserializer); - obj.len = serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxFuncCall::BigIntFromLeBytes serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::BigIntFromLeBytes obj; + obj.inputs = serde::Deserializable::deserialize(deserializer); + obj.modulus = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxFuncCall::Sha256Compression &lhs, - const BlackBoxFuncCall::Sha256Compression &rhs) { - if (!(lhs.inputs == rhs.inputs)) { - return false; - } - if (!(lhs.hash_values == rhs.hash_values)) { - return false; - } - if (!(lhs.outputs == rhs.outputs)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxFuncCall::BigIntToLeBytes &lhs, const BlackBoxFuncCall::BigIntToLeBytes &rhs) { + if (!(lhs.input == rhs.input)) { return false; } + if (!(lhs.outputs == rhs.outputs)) { return false; } + return true; + } -inline std::vector -BlackBoxFuncCall::Sha256Compression::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize( - *this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxFuncCall::BigIntToLeBytes::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxFuncCall::Sha256Compression -BlackBoxFuncCall::Sha256Compression::bincodeDeserialize( - std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxFuncCall::BigIntToLeBytes BlackBoxFuncCall::BigIntToLeBytes::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable:: - serialize(const Program::BlackBoxFuncCall::Sha256Compression &obj, - Serializer &serializer) { - serde::Serializable::serialize(obj.inputs, serializer); - serde::Serializable::serialize(obj.hash_values, - serializer); - serde::Serializable::serialize(obj.outputs, - serializer); +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::BigIntToLeBytes &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.input, serializer); + serde::Serializable::serialize(obj.outputs, serializer); } template <> template -Program::BlackBoxFuncCall::Sha256Compression -serde::Deserializable:: - deserialize(Deserializer &deserializer) { - Program::BlackBoxFuncCall::Sha256Compression obj; - obj.inputs = - serde::Deserializable::deserialize(deserializer); - obj.hash_values = - serde::Deserializable::deserialize( - deserializer); - obj.outputs = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxFuncCall::BigIntToLeBytes serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::BigIntToLeBytes obj; + obj.input = serde::Deserializable::deserialize(deserializer); + obj.outputs = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxOp &lhs, const BlackBoxOp &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxFuncCall::Poseidon2Permutation &lhs, const BlackBoxFuncCall::Poseidon2Permutation &rhs) { + if (!(lhs.inputs == rhs.inputs)) { return false; } + if (!(lhs.outputs == rhs.outputs)) { return false; } + if (!(lhs.len == rhs.len)) { return false; } + return true; + } -inline std::vector BlackBoxOp::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxFuncCall::Poseidon2Permutation::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxOp BlackBoxOp::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxFuncCall::Poseidon2Permutation BlackBoxFuncCall::Poseidon2Permutation::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxOp &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.value, serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::Poseidon2Permutation &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.inputs, serializer); + serde::Serializable::serialize(obj.outputs, serializer); + serde::Serializable::serialize(obj.len, serializer); } template <> template -Program::BlackBoxOp serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::BlackBoxOp obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::BlackBoxFuncCall::Poseidon2Permutation serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::Poseidon2Permutation obj; + obj.inputs = serde::Deserializable::deserialize(deserializer); + obj.outputs = serde::Deserializable::deserialize(deserializer); + obj.len = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxOp::Blake2s &lhs, - const BlackBoxOp::Blake2s &rhs) { - if (!(lhs.message == rhs.message)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxFuncCall::Sha256Compression &lhs, const BlackBoxFuncCall::Sha256Compression &rhs) { + if (!(lhs.inputs == rhs.inputs)) { return false; } + if (!(lhs.hash_values == rhs.hash_values)) { return false; } + if (!(lhs.outputs == rhs.outputs)) { return false; } + return true; + } -inline std::vector BlackBoxOp::Blake2s::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxFuncCall::Sha256Compression::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxOp::Blake2s -BlackBoxOp::Blake2s::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxFuncCall::Sha256Compression BlackBoxFuncCall::Sha256Compression::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxOp::Blake2s &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.message, - serializer); - serde::Serializable::serialize(obj.output, serializer); +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::Sha256Compression &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.inputs, serializer); + serde::Serializable::serialize(obj.hash_values, serializer); + serde::Serializable::serialize(obj.outputs, serializer); } template <> template -Program::BlackBoxOp::Blake2s -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxOp::Blake2s obj; - obj.message = - serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxFuncCall::Sha256Compression serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::Sha256Compression obj; + obj.inputs = serde::Deserializable::deserialize(deserializer); + obj.hash_values = serde::Deserializable::deserialize(deserializer); + obj.outputs = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxOp::Blake3 &lhs, - const BlackBoxOp::Blake3 &rhs) { - if (!(lhs.message == rhs.message)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxOp &lhs, const BlackBoxOp &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector BlackBoxOp::Blake3::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxOp::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxOp::Blake3 -BlackBoxOp::Blake3::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxOp BlackBoxOp::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxOp::Blake3 &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.message, - serializer); - serde::Serializable::serialize(obj.output, serializer); +void serde::Serializable::serialize(const Program::BlackBoxOp &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.value, serializer); + serializer.decrease_container_depth(); } template <> template -Program::BlackBoxOp::Blake3 -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxOp::Blake3 obj; - obj.message = - serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxOp serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::BlackBoxOp obj; + obj.value = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const BlackBoxOp::Keccak256 &lhs, - const BlackBoxOp::Keccak256 &rhs) { - if (!(lhs.message == rhs.message)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxOp::Blake2s &lhs, const BlackBoxOp::Blake2s &rhs) { + if (!(lhs.message == rhs.message)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } -inline std::vector BlackBoxOp::Keccak256::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxOp::Blake2s::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxOp::Keccak256 -BlackBoxOp::Keccak256::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxOp::Blake2s BlackBoxOp::Blake2s::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxOp::Keccak256 &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.message, - serializer); - serde::Serializable::serialize(obj.output, serializer); +void serde::Serializable::serialize(const Program::BlackBoxOp::Blake2s &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.message, serializer); + serde::Serializable::serialize(obj.output, serializer); } template <> template -Program::BlackBoxOp::Keccak256 -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxOp::Keccak256 obj; - obj.message = - serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxOp::Blake2s serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxOp::Blake2s obj; + obj.message = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxOp::Keccakf1600 &lhs, - const BlackBoxOp::Keccakf1600 &rhs) { - if (!(lhs.message == rhs.message)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxOp::Blake3 &lhs, const BlackBoxOp::Blake3 &rhs) { + if (!(lhs.message == rhs.message)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } -inline std::vector BlackBoxOp::Keccakf1600::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxOp::Blake3::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxOp::Keccakf1600 -BlackBoxOp::Keccakf1600::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxOp::Blake3 BlackBoxOp::Blake3::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxOp::Keccakf1600 &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.message, - serializer); - serde::Serializable::serialize(obj.output, serializer); +void serde::Serializable::serialize(const Program::BlackBoxOp::Blake3 &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.message, serializer); + serde::Serializable::serialize(obj.output, serializer); } template <> template -Program::BlackBoxOp::Keccakf1600 -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxOp::Keccakf1600 obj; - obj.message = - serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxOp::Blake3 serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxOp::Blake3 obj; + obj.message = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxOp::EcdsaSecp256k1 &lhs, - const BlackBoxOp::EcdsaSecp256k1 &rhs) { - if (!(lhs.hashed_msg == rhs.hashed_msg)) { - return false; - } - if (!(lhs.public_key_x == rhs.public_key_x)) { - return false; - } - if (!(lhs.public_key_y == rhs.public_key_y)) { - return false; - } - if (!(lhs.signature == rhs.signature)) { - return false; - } - if (!(lhs.result == rhs.result)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxOp::Keccak256 &lhs, const BlackBoxOp::Keccak256 &rhs) { + if (!(lhs.message == rhs.message)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } -inline std::vector -BlackBoxOp::EcdsaSecp256k1::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxOp::Keccak256::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxOp::EcdsaSecp256k1 -BlackBoxOp::EcdsaSecp256k1::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxOp::Keccak256 BlackBoxOp::Keccak256::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxOp::EcdsaSecp256k1 &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.hashed_msg, - serializer); - serde::Serializable::serialize(obj.public_key_x, - serializer); - serde::Serializable::serialize(obj.public_key_y, - serializer); - serde::Serializable::serialize(obj.signature, - serializer); - serde::Serializable::serialize(obj.result, serializer); +void serde::Serializable::serialize(const Program::BlackBoxOp::Keccak256 &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.message, serializer); + serde::Serializable::serialize(obj.output, serializer); } template <> template -Program::BlackBoxOp::EcdsaSecp256k1 -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxOp::EcdsaSecp256k1 obj; - obj.hashed_msg = serde::Deserializable::deserialize( - deserializer); - obj.public_key_x = - serde::Deserializable::deserialize( - deserializer); - obj.public_key_y = - serde::Deserializable::deserialize( - deserializer); - obj.signature = - serde::Deserializable::deserialize(deserializer); - obj.result = - serde::Deserializable::deserialize(deserializer); - return obj; -} - -namespace Program { - -inline bool operator==(const BlackBoxOp::EcdsaSecp256r1 &lhs, - const BlackBoxOp::EcdsaSecp256r1 &rhs) { - if (!(lhs.hashed_msg == rhs.hashed_msg)) { - return false; - } - if (!(lhs.public_key_x == rhs.public_key_x)) { - return false; - } - if (!(lhs.public_key_y == rhs.public_key_y)) { - return false; - } - if (!(lhs.signature == rhs.signature)) { - return false; - } - if (!(lhs.result == rhs.result)) { - return false; - } - return true; -} - -inline std::vector -BlackBoxOp::EcdsaSecp256r1::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} - -inline BlackBoxOp::EcdsaSecp256r1 -BlackBoxOp::EcdsaSecp256r1::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; +Program::BlackBoxOp::Keccak256 serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxOp::Keccak256 obj; + obj.message = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; } +namespace Program { + + inline bool operator==(const BlackBoxOp::Keccakf1600 &lhs, const BlackBoxOp::Keccakf1600 &rhs) { + if (!(lhs.message == rhs.message)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } + + inline std::vector BlackBoxOp::Keccakf1600::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BlackBoxOp::Keccakf1600 BlackBoxOp::Keccakf1600::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + } // end of namespace Program template <> -template -void serde::Serializable::serialize( - const Program::BlackBoxOp::EcdsaSecp256r1 &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.hashed_msg, - serializer); - serde::Serializable::serialize(obj.public_key_x, - serializer); - serde::Serializable::serialize(obj.public_key_y, - serializer); - serde::Serializable::serialize(obj.signature, - serializer); - serde::Serializable::serialize(obj.result, serializer); -} - +template +void serde::Serializable::serialize(const Program::BlackBoxOp::Keccakf1600 &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.message, serializer); + serde::Serializable::serialize(obj.output, serializer); +} + template <> template -Program::BlackBoxOp::EcdsaSecp256r1 -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxOp::EcdsaSecp256r1 obj; - obj.hashed_msg = serde::Deserializable::deserialize( - deserializer); - obj.public_key_x = - serde::Deserializable::deserialize( - deserializer); - obj.public_key_y = - serde::Deserializable::deserialize( - deserializer); - obj.signature = - serde::Deserializable::deserialize(deserializer); - obj.result = - serde::Deserializable::deserialize(deserializer); - return obj; -} - -namespace Program { - -inline bool operator==(const BlackBoxOp::SchnorrVerify &lhs, - const BlackBoxOp::SchnorrVerify &rhs) { - if (!(lhs.public_key_x == rhs.public_key_x)) { - return false; - } - if (!(lhs.public_key_y == rhs.public_key_y)) { - return false; - } - if (!(lhs.message == rhs.message)) { - return false; - } - if (!(lhs.signature == rhs.signature)) { - return false; - } - if (!(lhs.result == rhs.result)) { - return false; - } - return true; -} - -inline std::vector -BlackBoxOp::SchnorrVerify::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); +Program::BlackBoxOp::Keccakf1600 serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxOp::Keccakf1600 obj; + obj.message = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; } -inline BlackBoxOp::SchnorrVerify -BlackBoxOp::SchnorrVerify::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} +namespace Program { + + inline bool operator==(const BlackBoxOp::EcdsaSecp256k1 &lhs, const BlackBoxOp::EcdsaSecp256k1 &rhs) { + if (!(lhs.hashed_msg == rhs.hashed_msg)) { return false; } + if (!(lhs.public_key_x == rhs.public_key_x)) { return false; } + if (!(lhs.public_key_y == rhs.public_key_y)) { return false; } + if (!(lhs.signature == rhs.signature)) { return false; } + if (!(lhs.result == rhs.result)) { return false; } + return true; + } + + inline std::vector BlackBoxOp::EcdsaSecp256k1::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BlackBoxOp::EcdsaSecp256k1 BlackBoxOp::EcdsaSecp256k1::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxOp::SchnorrVerify &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.public_key_x, - serializer); - serde::Serializable::serialize(obj.public_key_y, - serializer); - serde::Serializable::serialize(obj.message, - serializer); - serde::Serializable::serialize(obj.signature, - serializer); - serde::Serializable::serialize(obj.result, serializer); +void serde::Serializable::serialize(const Program::BlackBoxOp::EcdsaSecp256k1 &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.hashed_msg, serializer); + serde::Serializable::serialize(obj.public_key_x, serializer); + serde::Serializable::serialize(obj.public_key_y, serializer); + serde::Serializable::serialize(obj.signature, serializer); + serde::Serializable::serialize(obj.result, serializer); } template <> template -Program::BlackBoxOp::SchnorrVerify -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxOp::SchnorrVerify obj; - obj.public_key_x = - serde::Deserializable::deserialize( - deserializer); - obj.public_key_y = - serde::Deserializable::deserialize( - deserializer); - obj.message = - serde::Deserializable::deserialize(deserializer); - obj.signature = - serde::Deserializable::deserialize(deserializer); - obj.result = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxOp::EcdsaSecp256k1 serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxOp::EcdsaSecp256k1 obj; + obj.hashed_msg = serde::Deserializable::deserialize(deserializer); + obj.public_key_x = serde::Deserializable::deserialize(deserializer); + obj.public_key_y = serde::Deserializable::deserialize(deserializer); + obj.signature = serde::Deserializable::deserialize(deserializer); + obj.result = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxOp::PedersenCommitment &lhs, - const BlackBoxOp::PedersenCommitment &rhs) { - if (!(lhs.inputs == rhs.inputs)) { - return false; - } - if (!(lhs.domain_separator == rhs.domain_separator)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxOp::EcdsaSecp256r1 &lhs, const BlackBoxOp::EcdsaSecp256r1 &rhs) { + if (!(lhs.hashed_msg == rhs.hashed_msg)) { return false; } + if (!(lhs.public_key_x == rhs.public_key_x)) { return false; } + if (!(lhs.public_key_y == rhs.public_key_y)) { return false; } + if (!(lhs.signature == rhs.signature)) { return false; } + if (!(lhs.result == rhs.result)) { return false; } + return true; + } -inline std::vector -BlackBoxOp::PedersenCommitment::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxOp::EcdsaSecp256r1::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxOp::PedersenCommitment -BlackBoxOp::PedersenCommitment::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxOp::EcdsaSecp256r1 BlackBoxOp::EcdsaSecp256r1::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxOp::PedersenCommitment &obj, - Serializer &serializer) { - serde::Serializable::serialize(obj.inputs, serializer); - serde::Serializable::serialize( - obj.domain_separator, serializer); - serde::Serializable::serialize(obj.output, serializer); +void serde::Serializable::serialize(const Program::BlackBoxOp::EcdsaSecp256r1 &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.hashed_msg, serializer); + serde::Serializable::serialize(obj.public_key_x, serializer); + serde::Serializable::serialize(obj.public_key_y, serializer); + serde::Serializable::serialize(obj.signature, serializer); + serde::Serializable::serialize(obj.result, serializer); } template <> template -Program::BlackBoxOp::PedersenCommitment -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxOp::PedersenCommitment obj; - obj.inputs = - serde::Deserializable::deserialize(deserializer); - obj.domain_separator = - serde::Deserializable::deserialize( - deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxOp::EcdsaSecp256r1 serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxOp::EcdsaSecp256r1 obj; + obj.hashed_msg = serde::Deserializable::deserialize(deserializer); + obj.public_key_x = serde::Deserializable::deserialize(deserializer); + obj.public_key_y = serde::Deserializable::deserialize(deserializer); + obj.signature = serde::Deserializable::deserialize(deserializer); + obj.result = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxOp::PedersenHash &lhs, - const BlackBoxOp::PedersenHash &rhs) { - if (!(lhs.inputs == rhs.inputs)) { - return false; - } - if (!(lhs.domain_separator == rhs.domain_separator)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxOp::SchnorrVerify &lhs, const BlackBoxOp::SchnorrVerify &rhs) { + if (!(lhs.public_key_x == rhs.public_key_x)) { return false; } + if (!(lhs.public_key_y == rhs.public_key_y)) { return false; } + if (!(lhs.message == rhs.message)) { return false; } + if (!(lhs.signature == rhs.signature)) { return false; } + if (!(lhs.result == rhs.result)) { return false; } + return true; + } -inline std::vector BlackBoxOp::PedersenHash::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxOp::SchnorrVerify::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxOp::PedersenHash -BlackBoxOp::PedersenHash::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxOp::SchnorrVerify BlackBoxOp::SchnorrVerify::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxOp::PedersenHash &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.inputs, serializer); - serde::Serializable::serialize( - obj.domain_separator, serializer); - serde::Serializable::serialize(obj.output, serializer); +void serde::Serializable::serialize(const Program::BlackBoxOp::SchnorrVerify &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.public_key_x, serializer); + serde::Serializable::serialize(obj.public_key_y, serializer); + serde::Serializable::serialize(obj.message, serializer); + serde::Serializable::serialize(obj.signature, serializer); + serde::Serializable::serialize(obj.result, serializer); } template <> template -Program::BlackBoxOp::PedersenHash -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxOp::PedersenHash obj; - obj.inputs = - serde::Deserializable::deserialize(deserializer); - obj.domain_separator = - serde::Deserializable::deserialize( - deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxOp::SchnorrVerify serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxOp::SchnorrVerify obj; + obj.public_key_x = serde::Deserializable::deserialize(deserializer); + obj.public_key_y = serde::Deserializable::deserialize(deserializer); + obj.message = serde::Deserializable::deserialize(deserializer); + obj.signature = serde::Deserializable::deserialize(deserializer); + obj.result = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxOp::FixedBaseScalarMul &lhs, - const BlackBoxOp::FixedBaseScalarMul &rhs) { - if (!(lhs.low == rhs.low)) { - return false; - } - if (!(lhs.high == rhs.high)) { - return false; - } - if (!(lhs.result == rhs.result)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxOp::PedersenCommitment &lhs, const BlackBoxOp::PedersenCommitment &rhs) { + if (!(lhs.inputs == rhs.inputs)) { return false; } + if (!(lhs.domain_separator == rhs.domain_separator)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } -inline std::vector -BlackBoxOp::FixedBaseScalarMul::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxOp::PedersenCommitment::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxOp::FixedBaseScalarMul -BlackBoxOp::FixedBaseScalarMul::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxOp::PedersenCommitment BlackBoxOp::PedersenCommitment::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxOp::FixedBaseScalarMul &obj, - Serializer &serializer) { - serde::Serializable::serialize(obj.low, serializer); - serde::Serializable::serialize(obj.high, serializer); - serde::Serializable::serialize(obj.result, serializer); +void serde::Serializable::serialize(const Program::BlackBoxOp::PedersenCommitment &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.inputs, serializer); + serde::Serializable::serialize(obj.domain_separator, serializer); + serde::Serializable::serialize(obj.output, serializer); } template <> template -Program::BlackBoxOp::FixedBaseScalarMul -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxOp::FixedBaseScalarMul obj; - obj.low = serde::Deserializable::deserialize(deserializer); - obj.high = - serde::Deserializable::deserialize(deserializer); - obj.result = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxOp::PedersenCommitment serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxOp::PedersenCommitment obj; + obj.inputs = serde::Deserializable::deserialize(deserializer); + obj.domain_separator = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxOp::VariableBaseScalarMul &lhs, - const BlackBoxOp::VariableBaseScalarMul &rhs) { - if (!(lhs.point_x == rhs.point_x)) { - return false; - } - if (!(lhs.point_y == rhs.point_y)) { - return false; - } - if (!(lhs.scalar_low == rhs.scalar_low)) { - return false; - } - if (!(lhs.scalar_high == rhs.scalar_high)) { - return false; - } - if (!(lhs.result == rhs.result)) { - return false; - } - return true; -} - -inline std::vector -BlackBoxOp::VariableBaseScalarMul::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); -} + inline bool operator==(const BlackBoxOp::PedersenHash &lhs, const BlackBoxOp::PedersenHash &rhs) { + if (!(lhs.inputs == rhs.inputs)) { return false; } + if (!(lhs.domain_separator == rhs.domain_separator)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } -inline BlackBoxOp::VariableBaseScalarMul -BlackBoxOp::VariableBaseScalarMul::bincodeDeserialize( - std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline std::vector BlackBoxOp::PedersenHash::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BlackBoxOp::PedersenHash BlackBoxOp::PedersenHash::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxOp::VariableBaseScalarMul &obj, - Serializer &serializer) { - serde::Serializable::serialize(obj.point_x, - serializer); - serde::Serializable::serialize(obj.point_y, - serializer); - serde::Serializable::serialize(obj.scalar_low, - serializer); - serde::Serializable::serialize(obj.scalar_high, - serializer); - serde::Serializable::serialize(obj.result, serializer); +void serde::Serializable::serialize(const Program::BlackBoxOp::PedersenHash &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.inputs, serializer); + serde::Serializable::serialize(obj.domain_separator, serializer); + serde::Serializable::serialize(obj.output, serializer); } template <> template -Program::BlackBoxOp::VariableBaseScalarMul -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxOp::VariableBaseScalarMul obj; - obj.point_x = - serde::Deserializable::deserialize(deserializer); - obj.point_y = - serde::Deserializable::deserialize(deserializer); - obj.scalar_low = serde::Deserializable::deserialize( - deserializer); - obj.scalar_high = - serde::Deserializable::deserialize( - deserializer); - obj.result = - serde::Deserializable::deserialize(deserializer); - return obj; -} - -namespace Program { - -inline bool operator==(const BlackBoxOp::EmbeddedCurveAdd &lhs, - const BlackBoxOp::EmbeddedCurveAdd &rhs) { - if (!(lhs.input1_x == rhs.input1_x)) { - return false; - } - if (!(lhs.input1_y == rhs.input1_y)) { - return false; - } - if (!(lhs.input2_x == rhs.input2_x)) { - return false; - } - if (!(lhs.input2_y == rhs.input2_y)) { - return false; - } - if (!(lhs.result == rhs.result)) { - return false; - } - return true; -} - -inline std::vector -BlackBoxOp::EmbeddedCurveAdd::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); +Program::BlackBoxOp::PedersenHash serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxOp::PedersenHash obj; + obj.inputs = serde::Deserializable::deserialize(deserializer); + obj.domain_separator = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; } -inline BlackBoxOp::EmbeddedCurveAdd -BlackBoxOp::EmbeddedCurveAdd::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} +namespace Program { + + inline bool operator==(const BlackBoxOp::FixedBaseScalarMul &lhs, const BlackBoxOp::FixedBaseScalarMul &rhs) { + if (!(lhs.low == rhs.low)) { return false; } + if (!(lhs.high == rhs.high)) { return false; } + if (!(lhs.result == rhs.result)) { return false; } + return true; + } + + inline std::vector BlackBoxOp::FixedBaseScalarMul::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BlackBoxOp::FixedBaseScalarMul BlackBoxOp::FixedBaseScalarMul::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxOp::EmbeddedCurveAdd &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.input1_x, - serializer); - serde::Serializable::serialize(obj.input1_y, - serializer); - serde::Serializable::serialize(obj.input2_x, - serializer); - serde::Serializable::serialize(obj.input2_y, - serializer); - serde::Serializable::serialize(obj.result, serializer); +void serde::Serializable::serialize(const Program::BlackBoxOp::FixedBaseScalarMul &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.low, serializer); + serde::Serializable::serialize(obj.high, serializer); + serde::Serializable::serialize(obj.result, serializer); } template <> template -Program::BlackBoxOp::EmbeddedCurveAdd -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxOp::EmbeddedCurveAdd obj; - obj.input1_x = - serde::Deserializable::deserialize(deserializer); - obj.input1_y = - serde::Deserializable::deserialize(deserializer); - obj.input2_x = - serde::Deserializable::deserialize(deserializer); - obj.input2_y = - serde::Deserializable::deserialize(deserializer); - obj.result = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxOp::FixedBaseScalarMul serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxOp::FixedBaseScalarMul obj; + obj.low = serde::Deserializable::deserialize(deserializer); + obj.high = serde::Deserializable::deserialize(deserializer); + obj.result = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxOp::BigIntAdd &lhs, - const BlackBoxOp::BigIntAdd &rhs) { - if (!(lhs.lhs == rhs.lhs)) { - return false; - } - if (!(lhs.rhs == rhs.rhs)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxOp::VariableBaseScalarMul &lhs, const BlackBoxOp::VariableBaseScalarMul &rhs) { + if (!(lhs.point_x == rhs.point_x)) { return false; } + if (!(lhs.point_y == rhs.point_y)) { return false; } + if (!(lhs.scalar_low == rhs.scalar_low)) { return false; } + if (!(lhs.scalar_high == rhs.scalar_high)) { return false; } + if (!(lhs.result == rhs.result)) { return false; } + return true; + } -inline std::vector BlackBoxOp::BigIntAdd::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxOp::VariableBaseScalarMul::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxOp::BigIntAdd -BlackBoxOp::BigIntAdd::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxOp::VariableBaseScalarMul BlackBoxOp::VariableBaseScalarMul::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxOp::BigIntAdd &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.lhs, serializer); - serde::Serializable::serialize(obj.rhs, serializer); - serde::Serializable::serialize(obj.output, serializer); +void serde::Serializable::serialize(const Program::BlackBoxOp::VariableBaseScalarMul &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.point_x, serializer); + serde::Serializable::serialize(obj.point_y, serializer); + serde::Serializable::serialize(obj.scalar_low, serializer); + serde::Serializable::serialize(obj.scalar_high, serializer); + serde::Serializable::serialize(obj.result, serializer); } template <> template -Program::BlackBoxOp::BigIntAdd -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxOp::BigIntAdd obj; - obj.lhs = serde::Deserializable::deserialize(deserializer); - obj.rhs = serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxOp::VariableBaseScalarMul serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxOp::VariableBaseScalarMul obj; + obj.point_x = serde::Deserializable::deserialize(deserializer); + obj.point_y = serde::Deserializable::deserialize(deserializer); + obj.scalar_low = serde::Deserializable::deserialize(deserializer); + obj.scalar_high = serde::Deserializable::deserialize(deserializer); + obj.result = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxOp::BigIntSub &lhs, - const BlackBoxOp::BigIntSub &rhs) { - if (!(lhs.lhs == rhs.lhs)) { - return false; - } - if (!(lhs.rhs == rhs.rhs)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxOp::EmbeddedCurveAdd &lhs, const BlackBoxOp::EmbeddedCurveAdd &rhs) { + if (!(lhs.input1_x == rhs.input1_x)) { return false; } + if (!(lhs.input1_y == rhs.input1_y)) { return false; } + if (!(lhs.input2_x == rhs.input2_x)) { return false; } + if (!(lhs.input2_y == rhs.input2_y)) { return false; } + if (!(lhs.result == rhs.result)) { return false; } + return true; + } -inline std::vector BlackBoxOp::BigIntSub::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxOp::EmbeddedCurveAdd::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxOp::BigIntSub -BlackBoxOp::BigIntSub::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxOp::EmbeddedCurveAdd BlackBoxOp::EmbeddedCurveAdd::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxOp::BigIntSub &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.lhs, serializer); - serde::Serializable::serialize(obj.rhs, serializer); - serde::Serializable::serialize(obj.output, serializer); +void serde::Serializable::serialize(const Program::BlackBoxOp::EmbeddedCurveAdd &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.input1_x, serializer); + serde::Serializable::serialize(obj.input1_y, serializer); + serde::Serializable::serialize(obj.input2_x, serializer); + serde::Serializable::serialize(obj.input2_y, serializer); + serde::Serializable::serialize(obj.result, serializer); } template <> template -Program::BlackBoxOp::BigIntSub -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxOp::BigIntSub obj; - obj.lhs = serde::Deserializable::deserialize(deserializer); - obj.rhs = serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxOp::EmbeddedCurveAdd serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxOp::EmbeddedCurveAdd obj; + obj.input1_x = serde::Deserializable::deserialize(deserializer); + obj.input1_y = serde::Deserializable::deserialize(deserializer); + obj.input2_x = serde::Deserializable::deserialize(deserializer); + obj.input2_y = serde::Deserializable::deserialize(deserializer); + obj.result = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxOp::BigIntMul &lhs, - const BlackBoxOp::BigIntMul &rhs) { - if (!(lhs.lhs == rhs.lhs)) { - return false; - } - if (!(lhs.rhs == rhs.rhs)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxOp::BigIntAdd &lhs, const BlackBoxOp::BigIntAdd &rhs) { + if (!(lhs.lhs == rhs.lhs)) { return false; } + if (!(lhs.rhs == rhs.rhs)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } -inline std::vector BlackBoxOp::BigIntMul::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxOp::BigIntAdd::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxOp::BigIntMul -BlackBoxOp::BigIntMul::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxOp::BigIntAdd BlackBoxOp::BigIntAdd::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxOp::BigIntMul &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.lhs, serializer); - serde::Serializable::serialize(obj.rhs, serializer); - serde::Serializable::serialize(obj.output, serializer); +void serde::Serializable::serialize(const Program::BlackBoxOp::BigIntAdd &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.lhs, serializer); + serde::Serializable::serialize(obj.rhs, serializer); + serde::Serializable::serialize(obj.output, serializer); } template <> template -Program::BlackBoxOp::BigIntMul -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxOp::BigIntMul obj; - obj.lhs = serde::Deserializable::deserialize(deserializer); - obj.rhs = serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxOp::BigIntAdd serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxOp::BigIntAdd obj; + obj.lhs = serde::Deserializable::deserialize(deserializer); + obj.rhs = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxOp::BigIntDiv &lhs, - const BlackBoxOp::BigIntDiv &rhs) { - if (!(lhs.lhs == rhs.lhs)) { - return false; - } - if (!(lhs.rhs == rhs.rhs)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxOp::BigIntSub &lhs, const BlackBoxOp::BigIntSub &rhs) { + if (!(lhs.lhs == rhs.lhs)) { return false; } + if (!(lhs.rhs == rhs.rhs)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } -inline std::vector BlackBoxOp::BigIntDiv::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxOp::BigIntSub::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxOp::BigIntDiv -BlackBoxOp::BigIntDiv::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxOp::BigIntSub BlackBoxOp::BigIntSub::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxOp::BigIntDiv &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.lhs, serializer); - serde::Serializable::serialize(obj.rhs, serializer); - serde::Serializable::serialize(obj.output, serializer); +void serde::Serializable::serialize(const Program::BlackBoxOp::BigIntSub &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.lhs, serializer); + serde::Serializable::serialize(obj.rhs, serializer); + serde::Serializable::serialize(obj.output, serializer); } template <> template -Program::BlackBoxOp::BigIntDiv -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxOp::BigIntDiv obj; - obj.lhs = serde::Deserializable::deserialize(deserializer); - obj.rhs = serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxOp::BigIntSub serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxOp::BigIntSub obj; + obj.lhs = serde::Deserializable::deserialize(deserializer); + obj.rhs = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxOp::BigIntFromLeBytes &lhs, - const BlackBoxOp::BigIntFromLeBytes &rhs) { - if (!(lhs.inputs == rhs.inputs)) { - return false; - } - if (!(lhs.modulus == rhs.modulus)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxOp::BigIntMul &lhs, const BlackBoxOp::BigIntMul &rhs) { + if (!(lhs.lhs == rhs.lhs)) { return false; } + if (!(lhs.rhs == rhs.rhs)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } -inline std::vector -BlackBoxOp::BigIntFromLeBytes::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxOp::BigIntMul::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxOp::BigIntFromLeBytes -BlackBoxOp::BigIntFromLeBytes::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxOp::BigIntMul BlackBoxOp::BigIntMul::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxOp::BigIntFromLeBytes &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.inputs, serializer); - serde::Serializable::serialize(obj.modulus, - serializer); - serde::Serializable::serialize(obj.output, serializer); +void serde::Serializable::serialize(const Program::BlackBoxOp::BigIntMul &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.lhs, serializer); + serde::Serializable::serialize(obj.rhs, serializer); + serde::Serializable::serialize(obj.output, serializer); } template <> template -Program::BlackBoxOp::BigIntFromLeBytes -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxOp::BigIntFromLeBytes obj; - obj.inputs = - serde::Deserializable::deserialize(deserializer); - obj.modulus = - serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxOp::BigIntMul serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxOp::BigIntMul obj; + obj.lhs = serde::Deserializable::deserialize(deserializer); + obj.rhs = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxOp::BigIntToLeBytes &lhs, - const BlackBoxOp::BigIntToLeBytes &rhs) { - if (!(lhs.input == rhs.input)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxOp::BigIntDiv &lhs, const BlackBoxOp::BigIntDiv &rhs) { + if (!(lhs.lhs == rhs.lhs)) { return false; } + if (!(lhs.rhs == rhs.rhs)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } -inline std::vector -BlackBoxOp::BigIntToLeBytes::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxOp::BigIntDiv::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxOp::BigIntToLeBytes -BlackBoxOp::BigIntToLeBytes::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxOp::BigIntDiv BlackBoxOp::BigIntDiv::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxOp::BigIntToLeBytes &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.input, serializer); - serde::Serializable::serialize(obj.output, serializer); +void serde::Serializable::serialize(const Program::BlackBoxOp::BigIntDiv &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.lhs, serializer); + serde::Serializable::serialize(obj.rhs, serializer); + serde::Serializable::serialize(obj.output, serializer); } template <> template -Program::BlackBoxOp::BigIntToLeBytes -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxOp::BigIntToLeBytes obj; - obj.input = - serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxOp::BigIntDiv serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxOp::BigIntDiv obj; + obj.lhs = serde::Deserializable::deserialize(deserializer); + obj.rhs = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxOp::Poseidon2Permutation &lhs, - const BlackBoxOp::Poseidon2Permutation &rhs) { - if (!(lhs.message == rhs.message)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - if (!(lhs.len == rhs.len)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxOp::BigIntFromLeBytes &lhs, const BlackBoxOp::BigIntFromLeBytes &rhs) { + if (!(lhs.inputs == rhs.inputs)) { return false; } + if (!(lhs.modulus == rhs.modulus)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } -inline std::vector -BlackBoxOp::Poseidon2Permutation::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxOp::BigIntFromLeBytes::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxOp::Poseidon2Permutation -BlackBoxOp::Poseidon2Permutation::bincodeDeserialize( - std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxOp::BigIntFromLeBytes BlackBoxOp::BigIntFromLeBytes::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxOp::Poseidon2Permutation &obj, - Serializer &serializer) { - serde::Serializable::serialize(obj.message, - serializer); - serde::Serializable::serialize(obj.output, serializer); - serde::Serializable::serialize(obj.len, serializer); +void serde::Serializable::serialize(const Program::BlackBoxOp::BigIntFromLeBytes &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.inputs, serializer); + serde::Serializable::serialize(obj.modulus, serializer); + serde::Serializable::serialize(obj.output, serializer); } template <> template -Program::BlackBoxOp::Poseidon2Permutation -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxOp::Poseidon2Permutation obj; - obj.message = - serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - obj.len = serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxOp::BigIntFromLeBytes serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxOp::BigIntFromLeBytes obj; + obj.inputs = serde::Deserializable::deserialize(deserializer); + obj.modulus = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxOp::Sha256Compression &lhs, - const BlackBoxOp::Sha256Compression &rhs) { - if (!(lhs.input == rhs.input)) { - return false; - } - if (!(lhs.hash_values == rhs.hash_values)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxOp::BigIntToLeBytes &lhs, const BlackBoxOp::BigIntToLeBytes &rhs) { + if (!(lhs.input == rhs.input)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } -inline std::vector -BlackBoxOp::Sha256Compression::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxOp::BigIntToLeBytes::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxOp::Sha256Compression -BlackBoxOp::Sha256Compression::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxOp::BigIntToLeBytes BlackBoxOp::BigIntToLeBytes::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxOp::Sha256Compression &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.input, serializer); - serde::Serializable::serialize(obj.hash_values, - serializer); - serde::Serializable::serialize(obj.output, serializer); +void serde::Serializable::serialize(const Program::BlackBoxOp::BigIntToLeBytes &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.input, serializer); + serde::Serializable::serialize(obj.output, serializer); } template <> template -Program::BlackBoxOp::Sha256Compression -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxOp::Sha256Compression obj; - obj.input = - serde::Deserializable::deserialize(deserializer); - obj.hash_values = - serde::Deserializable::deserialize( - deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxOp::BigIntToLeBytes serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxOp::BigIntToLeBytes obj; + obj.input = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlockId &lhs, const BlockId &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxOp::Poseidon2Permutation &lhs, const BlackBoxOp::Poseidon2Permutation &rhs) { + if (!(lhs.message == rhs.message)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + if (!(lhs.len == rhs.len)) { return false; } + return true; + } -inline std::vector BlockId::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxOp::Poseidon2Permutation::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlockId BlockId::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxOp::Poseidon2Permutation BlackBoxOp::Poseidon2Permutation::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlockId &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.value, serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::BlackBoxOp::Poseidon2Permutation &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.message, serializer); + serde::Serializable::serialize(obj.output, serializer); + serde::Serializable::serialize(obj.len, serializer); } template <> template -Program::BlockId serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::BlockId obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::BlackBoxOp::Poseidon2Permutation serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxOp::Poseidon2Permutation obj; + obj.message = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + obj.len = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BrilligBytecode &lhs, const BrilligBytecode &rhs) { - if (!(lhs.bytecode == rhs.bytecode)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxOp::Sha256Compression &lhs, const BlackBoxOp::Sha256Compression &rhs) { + if (!(lhs.input == rhs.input)) { return false; } + if (!(lhs.hash_values == rhs.hash_values)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } -inline std::vector BrilligBytecode::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxOp::Sha256Compression::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BrilligBytecode -BrilligBytecode::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxOp::Sha256Compression BlackBoxOp::Sha256Compression::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BrilligBytecode &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.bytecode, - serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::BlackBoxOp::Sha256Compression &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.input, serializer); + serde::Serializable::serialize(obj.hash_values, serializer); + serde::Serializable::serialize(obj.output, serializer); } template <> template -Program::BrilligBytecode -serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::BrilligBytecode obj; - obj.bytecode = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::BlackBoxOp::Sha256Compression serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxOp::Sha256Compression obj; + obj.input = serde::Deserializable::deserialize(deserializer); + obj.hash_values = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BrilligInputs &lhs, const BrilligInputs &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const BlockId &lhs, const BlockId &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector BrilligInputs::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlockId::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BrilligInputs -BrilligInputs::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlockId BlockId::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BrilligInputs &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.value, serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::BlockId &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.value, serializer); + serializer.decrease_container_depth(); } template <> template -Program::BrilligInputs -serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::BrilligInputs obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::BlockId serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::BlockId obj; + obj.value = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const BrilligInputs::Single &lhs, - const BrilligInputs::Single &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const BrilligBytecode &lhs, const BrilligBytecode &rhs) { + if (!(lhs.bytecode == rhs.bytecode)) { return false; } + return true; + } -inline std::vector BrilligInputs::Single::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BrilligBytecode::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BrilligInputs::Single -BrilligInputs::Single::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BrilligBytecode BrilligBytecode::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BrilligInputs::Single &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.value, serializer); +void serde::Serializable::serialize(const Program::BrilligBytecode &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.bytecode, serializer); + serializer.decrease_container_depth(); } template <> template -Program::BrilligInputs::Single -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligInputs::Single obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BrilligBytecode serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::BrilligBytecode obj; + obj.bytecode = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const BrilligInputs::Array &lhs, - const BrilligInputs::Array &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const BrilligInputs &lhs, const BrilligInputs &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector BrilligInputs::Array::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BrilligInputs::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BrilligInputs::Array -BrilligInputs::Array::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BrilligInputs BrilligInputs::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BrilligInputs::Array &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.value, serializer); +void serde::Serializable::serialize(const Program::BrilligInputs &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.value, serializer); + serializer.decrease_container_depth(); } template <> template -Program::BrilligInputs::Array -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligInputs::Array obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BrilligInputs serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::BrilligInputs obj; + obj.value = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const BrilligInputs::MemoryArray &lhs, - const BrilligInputs::MemoryArray &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const BrilligInputs::Single &lhs, const BrilligInputs::Single &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector -BrilligInputs::MemoryArray::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BrilligInputs::Single::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BrilligInputs::MemoryArray -BrilligInputs::MemoryArray::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BrilligInputs::Single BrilligInputs::Single::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BrilligInputs::MemoryArray &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.value, serializer); +void serde::Serializable::serialize(const Program::BrilligInputs::Single &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.value, serializer); } template <> template -Program::BrilligInputs::MemoryArray -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligInputs::MemoryArray obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BrilligInputs::Single serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligInputs::Single obj; + obj.value = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BrilligOpcode &lhs, const BrilligOpcode &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const BrilligInputs::Array &lhs, const BrilligInputs::Array &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector BrilligOpcode::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BrilligInputs::Array::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BrilligOpcode -BrilligOpcode::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BrilligInputs::Array BrilligInputs::Array::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BrilligOpcode &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.value, serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::BrilligInputs::Array &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.value, serializer); } template <> template -Program::BrilligOpcode -serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::BrilligOpcode obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::BrilligInputs::Array serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligInputs::Array obj; + obj.value = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BrilligOpcode::BinaryFieldOp &lhs, - const BrilligOpcode::BinaryFieldOp &rhs) { - if (!(lhs.destination == rhs.destination)) { - return false; - } - if (!(lhs.op == rhs.op)) { - return false; - } - if (!(lhs.lhs == rhs.lhs)) { - return false; - } - if (!(lhs.rhs == rhs.rhs)) { - return false; - } - return true; -} + inline bool operator==(const BrilligInputs::MemoryArray &lhs, const BrilligInputs::MemoryArray &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector -BrilligOpcode::BinaryFieldOp::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); -} + inline std::vector BrilligInputs::MemoryArray::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BrilligOpcode::BinaryFieldOp -BrilligOpcode::BinaryFieldOp::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BrilligInputs::MemoryArray BrilligInputs::MemoryArray::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BrilligOpcode::BinaryFieldOp &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.destination, - serializer); - serde::Serializable::serialize(obj.op, serializer); - serde::Serializable::serialize(obj.lhs, serializer); - serde::Serializable::serialize(obj.rhs, serializer); +void serde::Serializable::serialize(const Program::BrilligInputs::MemoryArray &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.value, serializer); } template <> template -Program::BrilligOpcode::BinaryFieldOp -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOpcode::BinaryFieldOp obj; - obj.destination = - serde::Deserializable::deserialize( - deserializer); - obj.op = serde::Deserializable::deserialize(deserializer); - obj.lhs = serde::Deserializable::deserialize(deserializer); - obj.rhs = serde::Deserializable::deserialize(deserializer); - return obj; +Program::BrilligInputs::MemoryArray serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligInputs::MemoryArray obj; + obj.value = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BrilligOpcode::BinaryIntOp &lhs, - const BrilligOpcode::BinaryIntOp &rhs) { - if (!(lhs.destination == rhs.destination)) { - return false; - } - if (!(lhs.op == rhs.op)) { - return false; - } - if (!(lhs.bit_size == rhs.bit_size)) { - return false; - } - if (!(lhs.lhs == rhs.lhs)) { - return false; - } - if (!(lhs.rhs == rhs.rhs)) { - return false; - } - return true; -} + inline bool operator==(const BrilligOpcode &lhs, const BrilligOpcode &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector -BrilligOpcode::BinaryIntOp::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BrilligOpcode::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BrilligOpcode::BinaryIntOp -BrilligOpcode::BinaryIntOp::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BrilligOpcode BrilligOpcode::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BrilligOpcode::BinaryIntOp &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.destination, - serializer); - serde::Serializable::serialize(obj.op, serializer); - serde::Serializable::serialize(obj.bit_size, - serializer); - serde::Serializable::serialize(obj.lhs, serializer); - serde::Serializable::serialize(obj.rhs, serializer); +void serde::Serializable::serialize(const Program::BrilligOpcode &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.value, serializer); + serializer.decrease_container_depth(); } template <> template -Program::BrilligOpcode::BinaryIntOp -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOpcode::BinaryIntOp obj; - obj.destination = - serde::Deserializable::deserialize( - deserializer); - obj.op = serde::Deserializable::deserialize(deserializer); - obj.bit_size = - serde::Deserializable::deserialize(deserializer); - obj.lhs = serde::Deserializable::deserialize(deserializer); - obj.rhs = serde::Deserializable::deserialize(deserializer); - return obj; +Program::BrilligOpcode serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::BrilligOpcode obj; + obj.value = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const BrilligOpcode::Cast &lhs, - const BrilligOpcode::Cast &rhs) { - if (!(lhs.destination == rhs.destination)) { - return false; - } - if (!(lhs.source == rhs.source)) { - return false; - } - if (!(lhs.bit_size == rhs.bit_size)) { - return false; - } - return true; -} + inline bool operator==(const BrilligOpcode::BinaryFieldOp &lhs, const BrilligOpcode::BinaryFieldOp &rhs) { + if (!(lhs.destination == rhs.destination)) { return false; } + if (!(lhs.op == rhs.op)) { return false; } + if (!(lhs.lhs == rhs.lhs)) { return false; } + if (!(lhs.rhs == rhs.rhs)) { return false; } + return true; + } -inline std::vector BrilligOpcode::Cast::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BrilligOpcode::BinaryFieldOp::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BrilligOpcode::Cast -BrilligOpcode::Cast::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BrilligOpcode::BinaryFieldOp BrilligOpcode::BinaryFieldOp::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BrilligOpcode::Cast &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.destination, - serializer); - serde::Serializable::serialize(obj.source, serializer); - serde::Serializable::serialize(obj.bit_size, - serializer); +void serde::Serializable::serialize(const Program::BrilligOpcode::BinaryFieldOp &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.destination, serializer); + serde::Serializable::serialize(obj.op, serializer); + serde::Serializable::serialize(obj.lhs, serializer); + serde::Serializable::serialize(obj.rhs, serializer); } template <> template -Program::BrilligOpcode::Cast -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOpcode::Cast obj; - obj.destination = - serde::Deserializable::deserialize( - deserializer); - obj.source = - serde::Deserializable::deserialize(deserializer); - obj.bit_size = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BrilligOpcode::BinaryFieldOp serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOpcode::BinaryFieldOp obj; + obj.destination = serde::Deserializable::deserialize(deserializer); + obj.op = serde::Deserializable::deserialize(deserializer); + obj.lhs = serde::Deserializable::deserialize(deserializer); + obj.rhs = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BrilligOpcode::JumpIfNot &lhs, - const BrilligOpcode::JumpIfNot &rhs) { - if (!(lhs.condition == rhs.condition)) { - return false; - } - if (!(lhs.location == rhs.location)) { - return false; - } - return true; -} + inline bool operator==(const BrilligOpcode::BinaryIntOp &lhs, const BrilligOpcode::BinaryIntOp &rhs) { + if (!(lhs.destination == rhs.destination)) { return false; } + if (!(lhs.op == rhs.op)) { return false; } + if (!(lhs.bit_size == rhs.bit_size)) { return false; } + if (!(lhs.lhs == rhs.lhs)) { return false; } + if (!(lhs.rhs == rhs.rhs)) { return false; } + return true; + } -inline std::vector BrilligOpcode::JumpIfNot::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BrilligOpcode::BinaryIntOp::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BrilligOpcode::JumpIfNot -BrilligOpcode::JumpIfNot::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BrilligOpcode::BinaryIntOp BrilligOpcode::BinaryIntOp::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BrilligOpcode::JumpIfNot &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.condition, - serializer); - serde::Serializable::serialize(obj.location, - serializer); +void serde::Serializable::serialize(const Program::BrilligOpcode::BinaryIntOp &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.destination, serializer); + serde::Serializable::serialize(obj.op, serializer); + serde::Serializable::serialize(obj.bit_size, serializer); + serde::Serializable::serialize(obj.lhs, serializer); + serde::Serializable::serialize(obj.rhs, serializer); } template <> template -Program::BrilligOpcode::JumpIfNot -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOpcode::JumpIfNot obj; - obj.condition = - serde::Deserializable::deserialize(deserializer); - obj.location = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BrilligOpcode::BinaryIntOp serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOpcode::BinaryIntOp obj; + obj.destination = serde::Deserializable::deserialize(deserializer); + obj.op = serde::Deserializable::deserialize(deserializer); + obj.bit_size = serde::Deserializable::deserialize(deserializer); + obj.lhs = serde::Deserializable::deserialize(deserializer); + obj.rhs = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BrilligOpcode::JumpIf &lhs, - const BrilligOpcode::JumpIf &rhs) { - if (!(lhs.condition == rhs.condition)) { - return false; - } - if (!(lhs.location == rhs.location)) { - return false; - } - return true; -} + inline bool operator==(const BrilligOpcode::Cast &lhs, const BrilligOpcode::Cast &rhs) { + if (!(lhs.destination == rhs.destination)) { return false; } + if (!(lhs.source == rhs.source)) { return false; } + if (!(lhs.bit_size == rhs.bit_size)) { return false; } + return true; + } -inline std::vector BrilligOpcode::JumpIf::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BrilligOpcode::Cast::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BrilligOpcode::JumpIf -BrilligOpcode::JumpIf::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BrilligOpcode::Cast BrilligOpcode::Cast::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BrilligOpcode::JumpIf &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.condition, - serializer); - serde::Serializable::serialize(obj.location, - serializer); +void serde::Serializable::serialize(const Program::BrilligOpcode::Cast &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.destination, serializer); + serde::Serializable::serialize(obj.source, serializer); + serde::Serializable::serialize(obj.bit_size, serializer); } template <> template -Program::BrilligOpcode::JumpIf -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOpcode::JumpIf obj; - obj.condition = - serde::Deserializable::deserialize(deserializer); - obj.location = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BrilligOpcode::Cast serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOpcode::Cast obj; + obj.destination = serde::Deserializable::deserialize(deserializer); + obj.source = serde::Deserializable::deserialize(deserializer); + obj.bit_size = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BrilligOpcode::Jump &lhs, - const BrilligOpcode::Jump &rhs) { - if (!(lhs.location == rhs.location)) { - return false; - } - return true; -} + inline bool operator==(const BrilligOpcode::JumpIfNot &lhs, const BrilligOpcode::JumpIfNot &rhs) { + if (!(lhs.condition == rhs.condition)) { return false; } + if (!(lhs.location == rhs.location)) { return false; } + return true; + } -inline std::vector BrilligOpcode::Jump::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BrilligOpcode::JumpIfNot::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BrilligOpcode::Jump -BrilligOpcode::Jump::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BrilligOpcode::JumpIfNot BrilligOpcode::JumpIfNot::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BrilligOpcode::Jump &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.location, - serializer); +void serde::Serializable::serialize(const Program::BrilligOpcode::JumpIfNot &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.condition, serializer); + serde::Serializable::serialize(obj.location, serializer); } template <> template -Program::BrilligOpcode::Jump -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOpcode::Jump obj; - obj.location = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BrilligOpcode::JumpIfNot serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOpcode::JumpIfNot obj; + obj.condition = serde::Deserializable::deserialize(deserializer); + obj.location = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BrilligOpcode::CalldataCopy &lhs, - const BrilligOpcode::CalldataCopy &rhs) { - if (!(lhs.destination_address == rhs.destination_address)) { - return false; - } - if (!(lhs.size == rhs.size)) { - return false; - } - if (!(lhs.offset == rhs.offset)) { - return false; - } - return true; -} + inline bool operator==(const BrilligOpcode::JumpIf &lhs, const BrilligOpcode::JumpIf &rhs) { + if (!(lhs.condition == rhs.condition)) { return false; } + if (!(lhs.location == rhs.location)) { return false; } + return true; + } -inline std::vector -BrilligOpcode::CalldataCopy::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); -} + inline std::vector BrilligOpcode::JumpIf::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BrilligOpcode::CalldataCopy -BrilligOpcode::CalldataCopy::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BrilligOpcode::JumpIf BrilligOpcode::JumpIf::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BrilligOpcode::CalldataCopy &obj, Serializer &serializer) { - serde::Serializable::serialize( - obj.destination_address, serializer); - serde::Serializable::serialize(obj.size, serializer); - serde::Serializable::serialize(obj.offset, serializer); +void serde::Serializable::serialize(const Program::BrilligOpcode::JumpIf &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.condition, serializer); + serde::Serializable::serialize(obj.location, serializer); } template <> template -Program::BrilligOpcode::CalldataCopy -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOpcode::CalldataCopy obj; - obj.destination_address = - serde::Deserializable::deserialize( - deserializer); - obj.size = - serde::Deserializable::deserialize(deserializer); - obj.offset = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BrilligOpcode::JumpIf serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOpcode::JumpIf obj; + obj.condition = serde::Deserializable::deserialize(deserializer); + obj.location = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BrilligOpcode::Call &lhs, - const BrilligOpcode::Call &rhs) { - if (!(lhs.location == rhs.location)) { - return false; - } - return true; -} + inline bool operator==(const BrilligOpcode::Jump &lhs, const BrilligOpcode::Jump &rhs) { + if (!(lhs.location == rhs.location)) { return false; } + return true; + } -inline std::vector BrilligOpcode::Call::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BrilligOpcode::Jump::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BrilligOpcode::Call -BrilligOpcode::Call::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BrilligOpcode::Jump BrilligOpcode::Jump::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BrilligOpcode::Call &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.location, - serializer); +void serde::Serializable::serialize(const Program::BrilligOpcode::Jump &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.location, serializer); } template <> template -Program::BrilligOpcode::Call -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOpcode::Call obj; - obj.location = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BrilligOpcode::Jump serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOpcode::Jump obj; + obj.location = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BrilligOpcode::Const &lhs, - const BrilligOpcode::Const &rhs) { - if (!(lhs.destination == rhs.destination)) { - return false; - } - if (!(lhs.bit_size == rhs.bit_size)) { - return false; - } - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const BrilligOpcode::CalldataCopy &lhs, const BrilligOpcode::CalldataCopy &rhs) { + if (!(lhs.destination_address == rhs.destination_address)) { return false; } + if (!(lhs.size == rhs.size)) { return false; } + if (!(lhs.offset == rhs.offset)) { return false; } + return true; + } -inline std::vector BrilligOpcode::Const::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BrilligOpcode::CalldataCopy::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BrilligOpcode::Const -BrilligOpcode::Const::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BrilligOpcode::CalldataCopy BrilligOpcode::CalldataCopy::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BrilligOpcode::Const &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.destination, - serializer); - serde::Serializable::serialize(obj.bit_size, - serializer); - serde::Serializable::serialize(obj.value, serializer); +void serde::Serializable::serialize(const Program::BrilligOpcode::CalldataCopy &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.destination_address, serializer); + serde::Serializable::serialize(obj.size, serializer); + serde::Serializable::serialize(obj.offset, serializer); } template <> template -Program::BrilligOpcode::Const -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOpcode::Const obj; - obj.destination = - serde::Deserializable::deserialize( - deserializer); - obj.bit_size = - serde::Deserializable::deserialize(deserializer); - obj.value = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BrilligOpcode::CalldataCopy serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOpcode::CalldataCopy obj; + obj.destination_address = serde::Deserializable::deserialize(deserializer); + obj.size = serde::Deserializable::deserialize(deserializer); + obj.offset = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BrilligOpcode::Return &lhs, - const BrilligOpcode::Return &rhs) { - return true; -} + inline bool operator==(const BrilligOpcode::Call &lhs, const BrilligOpcode::Call &rhs) { + if (!(lhs.location == rhs.location)) { return false; } + return true; + } -inline std::vector BrilligOpcode::Return::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BrilligOpcode::Call::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BrilligOpcode::Return -BrilligOpcode::Return::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BrilligOpcode::Call BrilligOpcode::Call::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BrilligOpcode::Return &obj, Serializer &serializer) {} +void serde::Serializable::serialize(const Program::BrilligOpcode::Call &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.location, serializer); +} template <> template -Program::BrilligOpcode::Return -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOpcode::Return obj; - return obj; +Program::BrilligOpcode::Call serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOpcode::Call obj; + obj.location = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BrilligOpcode::ForeignCall &lhs, - const BrilligOpcode::ForeignCall &rhs) { - if (!(lhs.function == rhs.function)) { - return false; - } - if (!(lhs.destinations == rhs.destinations)) { - return false; - } - if (!(lhs.destination_value_types == rhs.destination_value_types)) { - return false; - } - if (!(lhs.inputs == rhs.inputs)) { - return false; - } - if (!(lhs.input_value_types == rhs.input_value_types)) { - return false; - } - return true; -} + inline bool operator==(const BrilligOpcode::Const &lhs, const BrilligOpcode::Const &rhs) { + if (!(lhs.destination == rhs.destination)) { return false; } + if (!(lhs.bit_size == rhs.bit_size)) { return false; } + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector -BrilligOpcode::ForeignCall::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BrilligOpcode::Const::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BrilligOpcode::ForeignCall -BrilligOpcode::ForeignCall::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BrilligOpcode::Const BrilligOpcode::Const::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BrilligOpcode::ForeignCall &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.function, - serializer); - serde::Serializable::serialize(obj.destinations, - serializer); - serde::Serializable::serialize( - obj.destination_value_types, serializer); - serde::Serializable::serialize(obj.inputs, serializer); - serde::Serializable::serialize( - obj.input_value_types, serializer); +void serde::Serializable::serialize(const Program::BrilligOpcode::Const &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.destination, serializer); + serde::Serializable::serialize(obj.bit_size, serializer); + serde::Serializable::serialize(obj.value, serializer); } template <> template -Program::BrilligOpcode::ForeignCall -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOpcode::ForeignCall obj; - obj.function = - serde::Deserializable::deserialize(deserializer); - obj.destinations = - serde::Deserializable::deserialize( - deserializer); - obj.destination_value_types = - serde::Deserializable::deserialize( - deserializer); - obj.inputs = - serde::Deserializable::deserialize(deserializer); - obj.input_value_types = - serde::Deserializable::deserialize( - deserializer); - return obj; +Program::BrilligOpcode::Const serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOpcode::Const obj; + obj.destination = serde::Deserializable::deserialize(deserializer); + obj.bit_size = serde::Deserializable::deserialize(deserializer); + obj.value = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BrilligOpcode::Mov &lhs, - const BrilligOpcode::Mov &rhs) { - if (!(lhs.destination == rhs.destination)) { - return false; - } - if (!(lhs.source == rhs.source)) { - return false; - } - return true; -} + inline bool operator==(const BrilligOpcode::Return &lhs, const BrilligOpcode::Return &rhs) { + return true; + } -inline std::vector BrilligOpcode::Mov::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BrilligOpcode::Return::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BrilligOpcode::Mov -BrilligOpcode::Mov::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BrilligOpcode::Return BrilligOpcode::Return::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BrilligOpcode::Mov &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.destination, - serializer); - serde::Serializable::serialize(obj.source, serializer); +void serde::Serializable::serialize(const Program::BrilligOpcode::Return &obj, Serializer &serializer) { } template <> template -Program::BrilligOpcode::Mov -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOpcode::Mov obj; - obj.destination = - serde::Deserializable::deserialize( - deserializer); - obj.source = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BrilligOpcode::Return serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOpcode::Return obj; + return obj; } namespace Program { -inline bool operator==(const BrilligOpcode::ConditionalMov &lhs, - const BrilligOpcode::ConditionalMov &rhs) { - if (!(lhs.destination == rhs.destination)) { - return false; - } - if (!(lhs.source_a == rhs.source_a)) { - return false; - } - if (!(lhs.source_b == rhs.source_b)) { - return false; - } - if (!(lhs.condition == rhs.condition)) { - return false; - } - return true; -} + inline bool operator==(const BrilligOpcode::ForeignCall &lhs, const BrilligOpcode::ForeignCall &rhs) { + if (!(lhs.function == rhs.function)) { return false; } + if (!(lhs.destinations == rhs.destinations)) { return false; } + if (!(lhs.destination_value_types == rhs.destination_value_types)) { return false; } + if (!(lhs.inputs == rhs.inputs)) { return false; } + if (!(lhs.input_value_types == rhs.input_value_types)) { return false; } + return true; + } -inline std::vector -BrilligOpcode::ConditionalMov::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); -} + inline std::vector BrilligOpcode::ForeignCall::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BrilligOpcode::ConditionalMov -BrilligOpcode::ConditionalMov::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BrilligOpcode::ForeignCall BrilligOpcode::ForeignCall::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BrilligOpcode::ConditionalMov &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.destination, - serializer); - serde::Serializable::serialize(obj.source_a, - serializer); - serde::Serializable::serialize(obj.source_b, - serializer); - serde::Serializable::serialize(obj.condition, - serializer); +void serde::Serializable::serialize(const Program::BrilligOpcode::ForeignCall &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.function, serializer); + serde::Serializable::serialize(obj.destinations, serializer); + serde::Serializable::serialize(obj.destination_value_types, serializer); + serde::Serializable::serialize(obj.inputs, serializer); + serde::Serializable::serialize(obj.input_value_types, serializer); } template <> template -Program::BrilligOpcode::ConditionalMov -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOpcode::ConditionalMov obj; - obj.destination = - serde::Deserializable::deserialize( - deserializer); - obj.source_a = - serde::Deserializable::deserialize(deserializer); - obj.source_b = - serde::Deserializable::deserialize(deserializer); - obj.condition = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BrilligOpcode::ForeignCall serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOpcode::ForeignCall obj; + obj.function = serde::Deserializable::deserialize(deserializer); + obj.destinations = serde::Deserializable::deserialize(deserializer); + obj.destination_value_types = serde::Deserializable::deserialize(deserializer); + obj.inputs = serde::Deserializable::deserialize(deserializer); + obj.input_value_types = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BrilligOpcode::Load &lhs, - const BrilligOpcode::Load &rhs) { - if (!(lhs.destination == rhs.destination)) { - return false; - } - if (!(lhs.source_pointer == rhs.source_pointer)) { - return false; - } - return true; -} + inline bool operator==(const BrilligOpcode::Mov &lhs, const BrilligOpcode::Mov &rhs) { + if (!(lhs.destination == rhs.destination)) { return false; } + if (!(lhs.source == rhs.source)) { return false; } + return true; + } -inline std::vector BrilligOpcode::Load::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BrilligOpcode::Mov::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BrilligOpcode::Load -BrilligOpcode::Load::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BrilligOpcode::Mov BrilligOpcode::Mov::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BrilligOpcode::Load &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.destination, - serializer); - serde::Serializable::serialize( - obj.source_pointer, serializer); +void serde::Serializable::serialize(const Program::BrilligOpcode::Mov &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.destination, serializer); + serde::Serializable::serialize(obj.source, serializer); } template <> template -Program::BrilligOpcode::Load -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOpcode::Load obj; - obj.destination = - serde::Deserializable::deserialize( - deserializer); - obj.source_pointer = - serde::Deserializable::deserialize( - deserializer); - return obj; +Program::BrilligOpcode::Mov serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOpcode::Mov obj; + obj.destination = serde::Deserializable::deserialize(deserializer); + obj.source = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BrilligOpcode::Store &lhs, - const BrilligOpcode::Store &rhs) { - if (!(lhs.destination_pointer == rhs.destination_pointer)) { - return false; - } - if (!(lhs.source == rhs.source)) { - return false; - } - return true; -} + inline bool operator==(const BrilligOpcode::ConditionalMov &lhs, const BrilligOpcode::ConditionalMov &rhs) { + if (!(lhs.destination == rhs.destination)) { return false; } + if (!(lhs.source_a == rhs.source_a)) { return false; } + if (!(lhs.source_b == rhs.source_b)) { return false; } + if (!(lhs.condition == rhs.condition)) { return false; } + return true; + } -inline std::vector BrilligOpcode::Store::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BrilligOpcode::ConditionalMov::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BrilligOpcode::Store -BrilligOpcode::Store::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BrilligOpcode::ConditionalMov BrilligOpcode::ConditionalMov::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BrilligOpcode::Store &obj, Serializer &serializer) { - serde::Serializable::serialize( - obj.destination_pointer, serializer); - serde::Serializable::serialize(obj.source, serializer); +void serde::Serializable::serialize(const Program::BrilligOpcode::ConditionalMov &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.destination, serializer); + serde::Serializable::serialize(obj.source_a, serializer); + serde::Serializable::serialize(obj.source_b, serializer); + serde::Serializable::serialize(obj.condition, serializer); } template <> template -Program::BrilligOpcode::Store -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOpcode::Store obj; - obj.destination_pointer = - serde::Deserializable::deserialize( - deserializer); - obj.source = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BrilligOpcode::ConditionalMov serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOpcode::ConditionalMov obj; + obj.destination = serde::Deserializable::deserialize(deserializer); + obj.source_a = serde::Deserializable::deserialize(deserializer); + obj.source_b = serde::Deserializable::deserialize(deserializer); + obj.condition = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BrilligOpcode::BlackBox &lhs, - const BrilligOpcode::BlackBox &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const BrilligOpcode::Load &lhs, const BrilligOpcode::Load &rhs) { + if (!(lhs.destination == rhs.destination)) { return false; } + if (!(lhs.source_pointer == rhs.source_pointer)) { return false; } + return true; + } -inline std::vector BrilligOpcode::BlackBox::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BrilligOpcode::Load::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BrilligOpcode::BlackBox -BrilligOpcode::BlackBox::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BrilligOpcode::Load BrilligOpcode::Load::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BrilligOpcode::BlackBox &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.value, serializer); +void serde::Serializable::serialize(const Program::BrilligOpcode::Load &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.destination, serializer); + serde::Serializable::serialize(obj.source_pointer, serializer); } template <> template -Program::BrilligOpcode::BlackBox -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOpcode::BlackBox obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BrilligOpcode::Load serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOpcode::Load obj; + obj.destination = serde::Deserializable::deserialize(deserializer); + obj.source_pointer = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BrilligOpcode::Trap &lhs, - const BrilligOpcode::Trap &rhs) { - if (!(lhs.revert_data == rhs.revert_data)) { - return false; - } - return true; -} + inline bool operator==(const BrilligOpcode::Store &lhs, const BrilligOpcode::Store &rhs) { + if (!(lhs.destination_pointer == rhs.destination_pointer)) { return false; } + if (!(lhs.source == rhs.source)) { return false; } + return true; + } -inline std::vector BrilligOpcode::Trap::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BrilligOpcode::Store::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BrilligOpcode::Trap -BrilligOpcode::Trap::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BrilligOpcode::Store BrilligOpcode::Store::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BrilligOpcode::Trap &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.revert_data, - serializer); +void serde::Serializable::serialize(const Program::BrilligOpcode::Store &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.destination_pointer, serializer); + serde::Serializable::serialize(obj.source, serializer); } template <> template -Program::BrilligOpcode::Trap -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOpcode::Trap obj; - obj.revert_data = - serde::Deserializable::deserialize( - deserializer); - return obj; +Program::BrilligOpcode::Store serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOpcode::Store obj; + obj.destination_pointer = serde::Deserializable::deserialize(deserializer); + obj.source = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BrilligOpcode::Stop &lhs, - const BrilligOpcode::Stop &rhs) { - if (!(lhs.return_data_offset == rhs.return_data_offset)) { - return false; - } - if (!(lhs.return_data_size == rhs.return_data_size)) { - return false; - } - return true; -} + inline bool operator==(const BrilligOpcode::BlackBox &lhs, const BrilligOpcode::BlackBox &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector BrilligOpcode::Stop::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BrilligOpcode::BlackBox::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BrilligOpcode::Stop -BrilligOpcode::Stop::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BrilligOpcode::BlackBox BrilligOpcode::BlackBox::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BrilligOpcode::Stop &obj, Serializer &serializer) { - serde::Serializable::serialize( - obj.return_data_offset, serializer); - serde::Serializable::serialize( - obj.return_data_size, serializer); +void serde::Serializable::serialize(const Program::BrilligOpcode::BlackBox &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.value, serializer); } template <> template -Program::BrilligOpcode::Stop -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOpcode::Stop obj; - obj.return_data_offset = - serde::Deserializable::deserialize( - deserializer); - obj.return_data_size = - serde::Deserializable::deserialize( - deserializer); - return obj; +Program::BrilligOpcode::BlackBox serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOpcode::BlackBox obj; + obj.value = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BrilligOutputs &lhs, const BrilligOutputs &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const BrilligOpcode::Trap &lhs, const BrilligOpcode::Trap &rhs) { + if (!(lhs.revert_data == rhs.revert_data)) { return false; } + return true; + } -inline std::vector BrilligOutputs::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BrilligOpcode::Trap::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BrilligOutputs -BrilligOutputs::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BrilligOpcode::Trap BrilligOpcode::Trap::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BrilligOutputs &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.value, serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::BrilligOpcode::Trap &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.revert_data, serializer); } template <> template -Program::BrilligOutputs -serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::BrilligOutputs obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::BrilligOpcode::Trap serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOpcode::Trap obj; + obj.revert_data = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BrilligOutputs::Simple &lhs, - const BrilligOutputs::Simple &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const BrilligOpcode::Stop &lhs, const BrilligOpcode::Stop &rhs) { + if (!(lhs.return_data_offset == rhs.return_data_offset)) { return false; } + if (!(lhs.return_data_size == rhs.return_data_size)) { return false; } + return true; + } -inline std::vector BrilligOutputs::Simple::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BrilligOpcode::Stop::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BrilligOutputs::Simple -BrilligOutputs::Simple::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BrilligOpcode::Stop BrilligOpcode::Stop::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BrilligOutputs::Simple &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.value, serializer); +void serde::Serializable::serialize(const Program::BrilligOpcode::Stop &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.return_data_offset, serializer); + serde::Serializable::serialize(obj.return_data_size, serializer); } template <> template -Program::BrilligOutputs::Simple -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOutputs::Simple obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BrilligOpcode::Stop serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOpcode::Stop obj; + obj.return_data_offset = serde::Deserializable::deserialize(deserializer); + obj.return_data_size = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BrilligOutputs::Array &lhs, - const BrilligOutputs::Array &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const BrilligOutputs &lhs, const BrilligOutputs &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector BrilligOutputs::Array::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BrilligOutputs::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BrilligOutputs::Array -BrilligOutputs::Array::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BrilligOutputs BrilligOutputs::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BrilligOutputs::Array &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.value, serializer); +void serde::Serializable::serialize(const Program::BrilligOutputs &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.value, serializer); + serializer.decrease_container_depth(); } template <> template -Program::BrilligOutputs::Array -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOutputs::Array obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BrilligOutputs serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::BrilligOutputs obj; + obj.value = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const Circuit &lhs, const Circuit &rhs) { - if (!(lhs.current_witness_index == rhs.current_witness_index)) { - return false; - } - if (!(lhs.opcodes == rhs.opcodes)) { - return false; - } - if (!(lhs.expression_width == rhs.expression_width)) { - return false; - } - if (!(lhs.private_parameters == rhs.private_parameters)) { - return false; - } - if (!(lhs.public_parameters == rhs.public_parameters)) { - return false; - } - if (!(lhs.return_values == rhs.return_values)) { - return false; - } - if (!(lhs.assert_messages == rhs.assert_messages)) { - return false; - } - if (!(lhs.recursive == rhs.recursive)) { - return false; - } - return true; -} + inline bool operator==(const BrilligOutputs::Simple &lhs, const BrilligOutputs::Simple &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector Circuit::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BrilligOutputs::Simple::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline Circuit Circuit::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BrilligOutputs::Simple BrilligOutputs::Simple::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::Circuit &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize( - obj.current_witness_index, serializer); - serde::Serializable::serialize(obj.opcodes, - serializer); - serde::Serializable::serialize( - obj.expression_width, serializer); - serde::Serializable::serialize( - obj.private_parameters, serializer); - serde::Serializable::serialize( - obj.public_parameters, serializer); - serde::Serializable::serialize(obj.return_values, - serializer); - serde::Serializable::serialize( - obj.assert_messages, serializer); - serde::Serializable::serialize(obj.recursive, - serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::BrilligOutputs::Simple &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.value, serializer); } template <> template -Program::Circuit serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::Circuit obj; - obj.current_witness_index = - serde::Deserializable::deserialize( - deserializer); - obj.opcodes = - serde::Deserializable::deserialize(deserializer); - obj.expression_width = - serde::Deserializable::deserialize( - deserializer); - obj.private_parameters = - serde::Deserializable::deserialize( - deserializer); - obj.public_parameters = - serde::Deserializable::deserialize( - deserializer); - obj.return_values = - serde::Deserializable::deserialize( - deserializer); - obj.assert_messages = - serde::Deserializable::deserialize( - deserializer); - obj.recursive = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::BrilligOutputs::Simple serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOutputs::Simple obj; + obj.value = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const Directive &lhs, const Directive &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const BrilligOutputs::Array &lhs, const BrilligOutputs::Array &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector Directive::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BrilligOutputs::Array::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline Directive Directive::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BrilligOutputs::Array BrilligOutputs::Array::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::Directive &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.value, serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::BrilligOutputs::Array &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.value, serializer); } template <> template -Program::Directive serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::Directive obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::BrilligOutputs::Array serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOutputs::Array obj; + obj.value = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const Directive::ToLeRadix &lhs, - const Directive::ToLeRadix &rhs) { - if (!(lhs.a == rhs.a)) { - return false; - } - if (!(lhs.b == rhs.b)) { - return false; - } - if (!(lhs.radix == rhs.radix)) { - return false; - } - return true; -} + inline bool operator==(const Circuit &lhs, const Circuit &rhs) { + if (!(lhs.current_witness_index == rhs.current_witness_index)) { return false; } + if (!(lhs.opcodes == rhs.opcodes)) { return false; } + if (!(lhs.expression_width == rhs.expression_width)) { return false; } + if (!(lhs.private_parameters == rhs.private_parameters)) { return false; } + if (!(lhs.public_parameters == rhs.public_parameters)) { return false; } + if (!(lhs.return_values == rhs.return_values)) { return false; } + if (!(lhs.assert_messages == rhs.assert_messages)) { return false; } + if (!(lhs.recursive == rhs.recursive)) { return false; } + return true; + } -inline std::vector Directive::ToLeRadix::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector Circuit::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline Directive::ToLeRadix -Directive::ToLeRadix::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline Circuit Circuit::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::Directive::ToLeRadix &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.a, serializer); - serde::Serializable::serialize(obj.b, serializer); - serde::Serializable::serialize(obj.radix, serializer); +void serde::Serializable::serialize(const Program::Circuit &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.current_witness_index, serializer); + serde::Serializable::serialize(obj.opcodes, serializer); + serde::Serializable::serialize(obj.expression_width, serializer); + serde::Serializable::serialize(obj.private_parameters, serializer); + serde::Serializable::serialize(obj.public_parameters, serializer); + serde::Serializable::serialize(obj.return_values, serializer); + serde::Serializable::serialize(obj.assert_messages, serializer); + serde::Serializable::serialize(obj.recursive, serializer); + serializer.decrease_container_depth(); } template <> template -Program::Directive::ToLeRadix -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::Directive::ToLeRadix obj; - obj.a = serde::Deserializable::deserialize(deserializer); - obj.b = serde::Deserializable::deserialize(deserializer); - obj.radix = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::Circuit serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::Circuit obj; + obj.current_witness_index = serde::Deserializable::deserialize(deserializer); + obj.opcodes = serde::Deserializable::deserialize(deserializer); + obj.expression_width = serde::Deserializable::deserialize(deserializer); + obj.private_parameters = serde::Deserializable::deserialize(deserializer); + obj.public_parameters = serde::Deserializable::deserialize(deserializer); + obj.return_values = serde::Deserializable::deserialize(deserializer); + obj.assert_messages = serde::Deserializable::deserialize(deserializer); + obj.recursive = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const Expression &lhs, const Expression &rhs) { - if (!(lhs.mul_terms == rhs.mul_terms)) { - return false; - } - if (!(lhs.linear_combinations == rhs.linear_combinations)) { - return false; - } - if (!(lhs.q_c == rhs.q_c)) { - return false; - } - return true; -} + inline bool operator==(const Directive &lhs, const Directive &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector Expression::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector Directive::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline Expression Expression::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline Directive Directive::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::Expression &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.mul_terms, - serializer); - serde::Serializable::serialize( - obj.linear_combinations, serializer); - serde::Serializable::serialize(obj.q_c, serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::Directive &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.value, serializer); + serializer.decrease_container_depth(); } template <> template -Program::Expression serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::Expression obj; - obj.mul_terms = - serde::Deserializable::deserialize(deserializer); - obj.linear_combinations = - serde::Deserializable::deserialize( - deserializer); - obj.q_c = serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::Directive serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::Directive obj; + obj.value = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const ExpressionOrMemory &lhs, - const ExpressionOrMemory &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const Directive::ToLeRadix &lhs, const Directive::ToLeRadix &rhs) { + if (!(lhs.a == rhs.a)) { return false; } + if (!(lhs.b == rhs.b)) { return false; } + if (!(lhs.radix == rhs.radix)) { return false; } + return true; + } -inline std::vector ExpressionOrMemory::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector Directive::ToLeRadix::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline ExpressionOrMemory -ExpressionOrMemory::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline Directive::ToLeRadix Directive::ToLeRadix::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::ExpressionOrMemory &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.value, serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::Directive::ToLeRadix &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.a, serializer); + serde::Serializable::serialize(obj.b, serializer); + serde::Serializable::serialize(obj.radix, serializer); } template <> template -Program::ExpressionOrMemory -serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::ExpressionOrMemory obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::Directive::ToLeRadix serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::Directive::ToLeRadix obj; + obj.a = serde::Deserializable::deserialize(deserializer); + obj.b = serde::Deserializable::deserialize(deserializer); + obj.radix = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const ExpressionOrMemory::Expression &lhs, - const ExpressionOrMemory::Expression &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const Expression &lhs, const Expression &rhs) { + if (!(lhs.mul_terms == rhs.mul_terms)) { return false; } + if (!(lhs.linear_combinations == rhs.linear_combinations)) { return false; } + if (!(lhs.q_c == rhs.q_c)) { return false; } + return true; + } -inline std::vector -ExpressionOrMemory::Expression::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); -} + inline std::vector Expression::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline ExpressionOrMemory::Expression -ExpressionOrMemory::Expression::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline Expression Expression::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::ExpressionOrMemory::Expression &obj, - Serializer &serializer) { - serde::Serializable::serialize(obj.value, serializer); +void serde::Serializable::serialize(const Program::Expression &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.mul_terms, serializer); + serde::Serializable::serialize(obj.linear_combinations, serializer); + serde::Serializable::serialize(obj.q_c, serializer); + serializer.decrease_container_depth(); } template <> template -Program::ExpressionOrMemory::Expression -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::ExpressionOrMemory::Expression obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::Expression serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::Expression obj; + obj.mul_terms = serde::Deserializable::deserialize(deserializer); + obj.linear_combinations = serde::Deserializable::deserialize(deserializer); + obj.q_c = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const ExpressionOrMemory::Memory &lhs, - const ExpressionOrMemory::Memory &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const ExpressionOrMemory &lhs, const ExpressionOrMemory &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector -ExpressionOrMemory::Memory::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector ExpressionOrMemory::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline ExpressionOrMemory::Memory -ExpressionOrMemory::Memory::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline ExpressionOrMemory ExpressionOrMemory::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::ExpressionOrMemory::Memory &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.value, serializer); +void serde::Serializable::serialize(const Program::ExpressionOrMemory &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.value, serializer); + serializer.decrease_container_depth(); } template <> template -Program::ExpressionOrMemory::Memory -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::ExpressionOrMemory::Memory obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::ExpressionOrMemory serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::ExpressionOrMemory obj; + obj.value = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const ExpressionWidth &lhs, const ExpressionWidth &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const ExpressionOrMemory::Expression &lhs, const ExpressionOrMemory::Expression &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector ExpressionWidth::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector ExpressionOrMemory::Expression::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline ExpressionWidth -ExpressionWidth::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline ExpressionOrMemory::Expression ExpressionOrMemory::Expression::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::ExpressionWidth &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.value, serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::ExpressionOrMemory::Expression &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.value, serializer); } template <> template -Program::ExpressionWidth -serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::ExpressionWidth obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::ExpressionOrMemory::Expression serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::ExpressionOrMemory::Expression obj; + obj.value = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const ExpressionWidth::Unbounded &lhs, - const ExpressionWidth::Unbounded &rhs) { - return true; -} + inline bool operator==(const ExpressionOrMemory::Memory &lhs, const ExpressionOrMemory::Memory &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector -ExpressionWidth::Unbounded::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector ExpressionOrMemory::Memory::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline ExpressionWidth::Unbounded -ExpressionWidth::Unbounded::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline ExpressionOrMemory::Memory ExpressionOrMemory::Memory::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::ExpressionWidth::Unbounded &obj, Serializer &serializer) {} +void serde::Serializable::serialize(const Program::ExpressionOrMemory::Memory &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.value, serializer); +} template <> template -Program::ExpressionWidth::Unbounded -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::ExpressionWidth::Unbounded obj; - return obj; +Program::ExpressionOrMemory::Memory serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::ExpressionOrMemory::Memory obj; + obj.value = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const ExpressionWidth::Bounded &lhs, - const ExpressionWidth::Bounded &rhs) { - if (!(lhs.width == rhs.width)) { - return false; - } - return true; -} + inline bool operator==(const ExpressionWidth &lhs, const ExpressionWidth &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector ExpressionWidth::Bounded::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector ExpressionWidth::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline ExpressionWidth::Bounded -ExpressionWidth::Bounded::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline ExpressionWidth ExpressionWidth::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::ExpressionWidth::Bounded &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.width, serializer); +void serde::Serializable::serialize(const Program::ExpressionWidth &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.value, serializer); + serializer.decrease_container_depth(); } template <> template -Program::ExpressionWidth::Bounded -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::ExpressionWidth::Bounded obj; - obj.width = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::ExpressionWidth serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::ExpressionWidth obj; + obj.value = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const FunctionInput &lhs, const FunctionInput &rhs) { - if (!(lhs.witness == rhs.witness)) { - return false; - } - if (!(lhs.num_bits == rhs.num_bits)) { - return false; - } - return true; -} + inline bool operator==(const ExpressionWidth::Unbounded &lhs, const ExpressionWidth::Unbounded &rhs) { + return true; + } -inline std::vector FunctionInput::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector ExpressionWidth::Unbounded::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline FunctionInput -FunctionInput::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline ExpressionWidth::Unbounded ExpressionWidth::Unbounded::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::FunctionInput &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.witness, - serializer); - serde::Serializable::serialize(obj.num_bits, - serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::ExpressionWidth::Unbounded &obj, Serializer &serializer) { } template <> template -Program::FunctionInput -serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::FunctionInput obj; - obj.witness = - serde::Deserializable::deserialize(deserializer); - obj.num_bits = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::ExpressionWidth::Unbounded serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::ExpressionWidth::Unbounded obj; + return obj; } namespace Program { -inline bool operator==(const HeapArray &lhs, const HeapArray &rhs) { - if (!(lhs.pointer == rhs.pointer)) { - return false; - } - if (!(lhs.size == rhs.size)) { - return false; - } - return true; -} + inline bool operator==(const ExpressionWidth::Bounded &lhs, const ExpressionWidth::Bounded &rhs) { + if (!(lhs.width == rhs.width)) { return false; } + return true; + } -inline std::vector HeapArray::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector ExpressionWidth::Bounded::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline HeapArray HeapArray::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline ExpressionWidth::Bounded ExpressionWidth::Bounded::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::HeapArray &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.pointer, - serializer); - serde::Serializable::serialize(obj.size, serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::ExpressionWidth::Bounded &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.width, serializer); } template <> template -Program::HeapArray serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::HeapArray obj; - obj.pointer = - serde::Deserializable::deserialize(deserializer); - obj.size = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::ExpressionWidth::Bounded serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::ExpressionWidth::Bounded obj; + obj.width = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const HeapValueType &lhs, const HeapValueType &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const FunctionInput &lhs, const FunctionInput &rhs) { + if (!(lhs.witness == rhs.witness)) { return false; } + if (!(lhs.num_bits == rhs.num_bits)) { return false; } + return true; + } -inline std::vector HeapValueType::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector FunctionInput::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline HeapValueType -HeapValueType::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline FunctionInput FunctionInput::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::HeapValueType &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.value, serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::FunctionInput &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.witness, serializer); + serde::Serializable::serialize(obj.num_bits, serializer); + serializer.decrease_container_depth(); } template <> template -Program::HeapValueType -serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::HeapValueType obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::FunctionInput serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::FunctionInput obj; + obj.witness = serde::Deserializable::deserialize(deserializer); + obj.num_bits = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const HeapValueType::Simple &lhs, - const HeapValueType::Simple &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const HeapArray &lhs, const HeapArray &rhs) { + if (!(lhs.pointer == rhs.pointer)) { return false; } + if (!(lhs.size == rhs.size)) { return false; } + return true; + } -inline std::vector HeapValueType::Simple::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector HeapArray::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline HeapValueType::Simple -HeapValueType::Simple::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline HeapArray HeapArray::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::HeapValueType::Simple &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.value, serializer); +void serde::Serializable::serialize(const Program::HeapArray &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.pointer, serializer); + serde::Serializable::serialize(obj.size, serializer); + serializer.decrease_container_depth(); } template <> template -Program::HeapValueType::Simple -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::HeapValueType::Simple obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::HeapArray serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::HeapArray obj; + obj.pointer = serde::Deserializable::deserialize(deserializer); + obj.size = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const HeapValueType::Array &lhs, - const HeapValueType::Array &rhs) { - if (!(lhs.value_types == rhs.value_types)) { - return false; - } - if (!(lhs.size == rhs.size)) { - return false; - } - return true; -} + inline bool operator==(const HeapValueType &lhs, const HeapValueType &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector HeapValueType::Array::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector HeapValueType::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline HeapValueType::Array -HeapValueType::Array::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline HeapValueType HeapValueType::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::HeapValueType::Array &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.value_types, - serializer); - serde::Serializable::serialize(obj.size, serializer); +void serde::Serializable::serialize(const Program::HeapValueType &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.value, serializer); + serializer.decrease_container_depth(); } template <> template -Program::HeapValueType::Array -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::HeapValueType::Array obj; - obj.value_types = - serde::Deserializable::deserialize( - deserializer); - obj.size = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::HeapValueType serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::HeapValueType obj; + obj.value = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const HeapValueType::Vector &lhs, - const HeapValueType::Vector &rhs) { - if (!(lhs.value_types == rhs.value_types)) { - return false; - } - return true; -} + inline bool operator==(const HeapValueType::Simple &lhs, const HeapValueType::Simple &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector HeapValueType::Vector::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector HeapValueType::Simple::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline HeapValueType::Vector -HeapValueType::Vector::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline HeapValueType::Simple HeapValueType::Simple::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::HeapValueType::Vector &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.value_types, - serializer); +void serde::Serializable::serialize(const Program::HeapValueType::Simple &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.value, serializer); } template <> template -Program::HeapValueType::Vector -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::HeapValueType::Vector obj; - obj.value_types = - serde::Deserializable::deserialize( - deserializer); - return obj; +Program::HeapValueType::Simple serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::HeapValueType::Simple obj; + obj.value = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const HeapVector &lhs, const HeapVector &rhs) { - if (!(lhs.pointer == rhs.pointer)) { - return false; - } - if (!(lhs.size == rhs.size)) { - return false; - } - return true; -} + inline bool operator==(const HeapValueType::Array &lhs, const HeapValueType::Array &rhs) { + if (!(lhs.value_types == rhs.value_types)) { return false; } + if (!(lhs.size == rhs.size)) { return false; } + return true; + } -inline std::vector HeapVector::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector HeapValueType::Array::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline HeapVector HeapVector::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline HeapValueType::Array HeapValueType::Array::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::HeapVector &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.pointer, - serializer); - serde::Serializable::serialize(obj.size, serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::HeapValueType::Array &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.value_types, serializer); + serde::Serializable::serialize(obj.size, serializer); } template <> template -Program::HeapVector serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::HeapVector obj; - obj.pointer = - serde::Deserializable::deserialize(deserializer); - obj.size = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::HeapValueType::Array serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::HeapValueType::Array obj; + obj.value_types = serde::Deserializable::deserialize(deserializer); + obj.size = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const MemOp &lhs, const MemOp &rhs) { - if (!(lhs.operation == rhs.operation)) { - return false; - } - if (!(lhs.index == rhs.index)) { - return false; - } - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const HeapValueType::Vector &lhs, const HeapValueType::Vector &rhs) { + if (!(lhs.value_types == rhs.value_types)) { return false; } + return true; + } -inline std::vector MemOp::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector HeapValueType::Vector::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline MemOp MemOp::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline HeapValueType::Vector HeapValueType::Vector::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize(const Program::MemOp &obj, - Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.operation, - serializer); - serde::Serializable::serialize(obj.index, serializer); - serde::Serializable::serialize(obj.value, serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::HeapValueType::Vector &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.value_types, serializer); } template <> template -Program::MemOp -serde::Deserializable::deserialize(Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::MemOp obj; - obj.operation = - serde::Deserializable::deserialize(deserializer); - obj.index = - serde::Deserializable::deserialize(deserializer); - obj.value = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::HeapValueType::Vector serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::HeapValueType::Vector obj; + obj.value_types = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const MemoryAddress &lhs, const MemoryAddress &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const HeapVector &lhs, const HeapVector &rhs) { + if (!(lhs.pointer == rhs.pointer)) { return false; } + if (!(lhs.size == rhs.size)) { return false; } + return true; + } -inline std::vector MemoryAddress::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector HeapVector::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline MemoryAddress -MemoryAddress::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline HeapVector HeapVector::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::MemoryAddress &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.value, serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::HeapVector &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.pointer, serializer); + serde::Serializable::serialize(obj.size, serializer); + serializer.decrease_container_depth(); } template <> template -Program::MemoryAddress -serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::MemoryAddress obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::HeapVector serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::HeapVector obj; + obj.pointer = serde::Deserializable::deserialize(deserializer); + obj.size = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const Opcode &lhs, const Opcode &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const MemOp &lhs, const MemOp &rhs) { + if (!(lhs.operation == rhs.operation)) { return false; } + if (!(lhs.index == rhs.index)) { return false; } + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector Opcode::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector MemOp::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline Opcode Opcode::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline MemOp MemOp::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize(const Program::Opcode &obj, - Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.value, serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::MemOp &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.operation, serializer); + serde::Serializable::serialize(obj.index, serializer); + serde::Serializable::serialize(obj.value, serializer); + serializer.decrease_container_depth(); } template <> template -Program::Opcode serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::Opcode obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::MemOp serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::MemOp obj; + obj.operation = serde::Deserializable::deserialize(deserializer); + obj.index = serde::Deserializable::deserialize(deserializer); + obj.value = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const Opcode::AssertZero &lhs, - const Opcode::AssertZero &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const MemoryAddress &lhs, const MemoryAddress &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector Opcode::AssertZero::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector MemoryAddress::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline Opcode::AssertZero -Opcode::AssertZero::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline MemoryAddress MemoryAddress::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::Opcode::AssertZero &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.value, serializer); +void serde::Serializable::serialize(const Program::MemoryAddress &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.value, serializer); + serializer.decrease_container_depth(); } template <> template -Program::Opcode::AssertZero -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::Opcode::AssertZero obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::MemoryAddress serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::MemoryAddress obj; + obj.value = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const Opcode::BlackBoxFuncCall &lhs, - const Opcode::BlackBoxFuncCall &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const Opcode &lhs, const Opcode &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector Opcode::BlackBoxFuncCall::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector Opcode::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline Opcode::BlackBoxFuncCall -Opcode::BlackBoxFuncCall::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline Opcode Opcode::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::Opcode::BlackBoxFuncCall &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.value, serializer); +void serde::Serializable::serialize(const Program::Opcode &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.value, serializer); + serializer.decrease_container_depth(); } template <> template -Program::Opcode::BlackBoxFuncCall -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::Opcode::BlackBoxFuncCall obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::Opcode serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::Opcode obj; + obj.value = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const Opcode::Directive &lhs, - const Opcode::Directive &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const Opcode::AssertZero &lhs, const Opcode::AssertZero &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector Opcode::Directive::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector Opcode::AssertZero::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline Opcode::Directive -Opcode::Directive::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline Opcode::AssertZero Opcode::AssertZero::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::Opcode::Directive &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.value, serializer); +void serde::Serializable::serialize(const Program::Opcode::AssertZero &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.value, serializer); } template <> template -Program::Opcode::Directive -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::Opcode::Directive obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::Opcode::AssertZero serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::Opcode::AssertZero obj; + obj.value = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const Opcode::MemoryOp &lhs, - const Opcode::MemoryOp &rhs) { - if (!(lhs.block_id == rhs.block_id)) { - return false; - } - if (!(lhs.op == rhs.op)) { - return false; - } - if (!(lhs.predicate == rhs.predicate)) { - return false; - } - return true; -} + inline bool operator==(const Opcode::BlackBoxFuncCall &lhs, const Opcode::BlackBoxFuncCall &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector Opcode::MemoryOp::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector Opcode::BlackBoxFuncCall::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline Opcode::MemoryOp -Opcode::MemoryOp::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline Opcode::BlackBoxFuncCall Opcode::BlackBoxFuncCall::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::Opcode::MemoryOp &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.block_id, - serializer); - serde::Serializable::serialize(obj.op, serializer); - serde::Serializable::serialize(obj.predicate, - serializer); +void serde::Serializable::serialize(const Program::Opcode::BlackBoxFuncCall &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.value, serializer); } template <> template -Program::Opcode::MemoryOp -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::Opcode::MemoryOp obj; - obj.block_id = - serde::Deserializable::deserialize(deserializer); - obj.op = serde::Deserializable::deserialize(deserializer); - obj.predicate = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::Opcode::BlackBoxFuncCall serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::Opcode::BlackBoxFuncCall obj; + obj.value = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const Opcode::MemoryInit &lhs, - const Opcode::MemoryInit &rhs) { - if (!(lhs.block_id == rhs.block_id)) { - return false; - } - if (!(lhs.init == rhs.init)) { - return false; - } - return true; -} + inline bool operator==(const Opcode::Directive &lhs, const Opcode::Directive &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector Opcode::MemoryInit::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector Opcode::Directive::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline Opcode::MemoryInit -Opcode::MemoryInit::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline Opcode::Directive Opcode::Directive::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::Opcode::MemoryInit &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.block_id, - serializer); - serde::Serializable::serialize(obj.init, serializer); +void serde::Serializable::serialize(const Program::Opcode::Directive &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.value, serializer); } template <> template -Program::Opcode::MemoryInit -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::Opcode::MemoryInit obj; - obj.block_id = - serde::Deserializable::deserialize(deserializer); - obj.init = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::Opcode::Directive serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::Opcode::Directive obj; + obj.value = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const Opcode::BrilligCall &lhs, - const Opcode::BrilligCall &rhs) { - if (!(lhs.id == rhs.id)) { - return false; - } - if (!(lhs.inputs == rhs.inputs)) { - return false; - } - if (!(lhs.outputs == rhs.outputs)) { - return false; - } - if (!(lhs.predicate == rhs.predicate)) { - return false; - } - return true; -} + inline bool operator==(const Opcode::MemoryOp &lhs, const Opcode::MemoryOp &rhs) { + if (!(lhs.block_id == rhs.block_id)) { return false; } + if (!(lhs.op == rhs.op)) { return false; } + if (!(lhs.predicate == rhs.predicate)) { return false; } + return true; + } -inline std::vector Opcode::BrilligCall::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector Opcode::MemoryOp::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline Opcode::BrilligCall -Opcode::BrilligCall::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline Opcode::MemoryOp Opcode::MemoryOp::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::Opcode::BrilligCall &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.id, serializer); - serde::Serializable::serialize(obj.inputs, serializer); - serde::Serializable::serialize(obj.outputs, - serializer); - serde::Serializable::serialize(obj.predicate, - serializer); +void serde::Serializable::serialize(const Program::Opcode::MemoryOp &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.block_id, serializer); + serde::Serializable::serialize(obj.op, serializer); + serde::Serializable::serialize(obj.predicate, serializer); } template <> template -Program::Opcode::BrilligCall -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::Opcode::BrilligCall obj; - obj.id = serde::Deserializable::deserialize(deserializer); - obj.inputs = - serde::Deserializable::deserialize(deserializer); - obj.outputs = - serde::Deserializable::deserialize(deserializer); - obj.predicate = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::Opcode::MemoryOp serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::Opcode::MemoryOp obj; + obj.block_id = serde::Deserializable::deserialize(deserializer); + obj.op = serde::Deserializable::deserialize(deserializer); + obj.predicate = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const Opcode::Call &lhs, const Opcode::Call &rhs) { - if (!(lhs.id == rhs.id)) { - return false; - } - if (!(lhs.inputs == rhs.inputs)) { - return false; - } - if (!(lhs.outputs == rhs.outputs)) { - return false; - } - if (!(lhs.predicate == rhs.predicate)) { - return false; - } - return true; -} + inline bool operator==(const Opcode::MemoryInit &lhs, const Opcode::MemoryInit &rhs) { + if (!(lhs.block_id == rhs.block_id)) { return false; } + if (!(lhs.init == rhs.init)) { return false; } + return true; + } -inline std::vector Opcode::Call::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector Opcode::MemoryInit::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline Opcode::Call -Opcode::Call::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline Opcode::MemoryInit Opcode::MemoryInit::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::Opcode::Call &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.id, serializer); - serde::Serializable::serialize(obj.inputs, serializer); - serde::Serializable::serialize(obj.outputs, - serializer); - serde::Serializable::serialize(obj.predicate, - serializer); +void serde::Serializable::serialize(const Program::Opcode::MemoryInit &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.block_id, serializer); + serde::Serializable::serialize(obj.init, serializer); } template <> template -Program::Opcode::Call serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::Opcode::Call obj; - obj.id = serde::Deserializable::deserialize(deserializer); - obj.inputs = - serde::Deserializable::deserialize(deserializer); - obj.outputs = - serde::Deserializable::deserialize(deserializer); - obj.predicate = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::Opcode::MemoryInit serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::Opcode::MemoryInit obj; + obj.block_id = serde::Deserializable::deserialize(deserializer); + obj.init = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const OpcodeLocation &lhs, const OpcodeLocation &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const Opcode::BrilligCall &lhs, const Opcode::BrilligCall &rhs) { + if (!(lhs.id == rhs.id)) { return false; } + if (!(lhs.inputs == rhs.inputs)) { return false; } + if (!(lhs.outputs == rhs.outputs)) { return false; } + if (!(lhs.predicate == rhs.predicate)) { return false; } + return true; + } -inline std::vector OpcodeLocation::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector Opcode::BrilligCall::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline OpcodeLocation -OpcodeLocation::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline Opcode::BrilligCall Opcode::BrilligCall::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::OpcodeLocation &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.value, serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::Opcode::BrilligCall &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.id, serializer); + serde::Serializable::serialize(obj.inputs, serializer); + serde::Serializable::serialize(obj.outputs, serializer); + serde::Serializable::serialize(obj.predicate, serializer); } template <> template -Program::OpcodeLocation -serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::OpcodeLocation obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::Opcode::BrilligCall serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::Opcode::BrilligCall obj; + obj.id = serde::Deserializable::deserialize(deserializer); + obj.inputs = serde::Deserializable::deserialize(deserializer); + obj.outputs = serde::Deserializable::deserialize(deserializer); + obj.predicate = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const OpcodeLocation::Acir &lhs, - const OpcodeLocation::Acir &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const Opcode::Call &lhs, const Opcode::Call &rhs) { + if (!(lhs.id == rhs.id)) { return false; } + if (!(lhs.inputs == rhs.inputs)) { return false; } + if (!(lhs.outputs == rhs.outputs)) { return false; } + if (!(lhs.predicate == rhs.predicate)) { return false; } + return true; + } -inline std::vector OpcodeLocation::Acir::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector Opcode::Call::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline OpcodeLocation::Acir -OpcodeLocation::Acir::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline Opcode::Call Opcode::Call::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::OpcodeLocation::Acir &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.value, serializer); +void serde::Serializable::serialize(const Program::Opcode::Call &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.id, serializer); + serde::Serializable::serialize(obj.inputs, serializer); + serde::Serializable::serialize(obj.outputs, serializer); + serde::Serializable::serialize(obj.predicate, serializer); } template <> template -Program::OpcodeLocation::Acir -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::OpcodeLocation::Acir obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::Opcode::Call serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::Opcode::Call obj; + obj.id = serde::Deserializable::deserialize(deserializer); + obj.inputs = serde::Deserializable::deserialize(deserializer); + obj.outputs = serde::Deserializable::deserialize(deserializer); + obj.predicate = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const OpcodeLocation::Brillig &lhs, - const OpcodeLocation::Brillig &rhs) { - if (!(lhs.acir_index == rhs.acir_index)) { - return false; - } - if (!(lhs.brillig_index == rhs.brillig_index)) { - return false; - } - return true; -} + inline bool operator==(const OpcodeLocation &lhs, const OpcodeLocation &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector OpcodeLocation::Brillig::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector OpcodeLocation::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline OpcodeLocation::Brillig -OpcodeLocation::Brillig::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline OpcodeLocation OpcodeLocation::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::OpcodeLocation::Brillig &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.acir_index, - serializer); - serde::Serializable::serialize(obj.brillig_index, - serializer); +void serde::Serializable::serialize(const Program::OpcodeLocation &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.value, serializer); + serializer.decrease_container_depth(); } template <> template -Program::OpcodeLocation::Brillig -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::OpcodeLocation::Brillig obj; - obj.acir_index = serde::Deserializable::deserialize( - deserializer); - obj.brillig_index = - serde::Deserializable::deserialize( - deserializer); - return obj; +Program::OpcodeLocation serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::OpcodeLocation obj; + obj.value = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const Program &lhs, const Program &rhs) { - if (!(lhs.functions == rhs.functions)) { - return false; - } - if (!(lhs.unconstrained_functions == rhs.unconstrained_functions)) { - return false; - } - return true; -} + inline bool operator==(const OpcodeLocation::Acir &lhs, const OpcodeLocation::Acir &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector Program::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector OpcodeLocation::Acir::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline Program Program::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline OpcodeLocation::Acir OpcodeLocation::Acir::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::Program &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.functions, - serializer); - serde::Serializable::serialize( - obj.unconstrained_functions, serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::OpcodeLocation::Acir &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.value, serializer); } template <> template -Program::Program serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::Program obj; - obj.functions = - serde::Deserializable::deserialize(deserializer); - obj.unconstrained_functions = - serde::Deserializable::deserialize( - deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::OpcodeLocation::Acir serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::OpcodeLocation::Acir obj; + obj.value = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const PublicInputs &lhs, const PublicInputs &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const OpcodeLocation::Brillig &lhs, const OpcodeLocation::Brillig &rhs) { + if (!(lhs.acir_index == rhs.acir_index)) { return false; } + if (!(lhs.brillig_index == rhs.brillig_index)) { return false; } + return true; + } -inline std::vector PublicInputs::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector OpcodeLocation::Brillig::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline PublicInputs -PublicInputs::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline OpcodeLocation::Brillig OpcodeLocation::Brillig::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::PublicInputs &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.value, serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::OpcodeLocation::Brillig &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.acir_index, serializer); + serde::Serializable::serialize(obj.brillig_index, serializer); } template <> template -Program::PublicInputs serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::PublicInputs obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::OpcodeLocation::Brillig serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::OpcodeLocation::Brillig obj; + obj.acir_index = serde::Deserializable::deserialize(deserializer); + obj.brillig_index = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const ValueOrArray &lhs, const ValueOrArray &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const Program &lhs, const Program &rhs) { + if (!(lhs.functions == rhs.functions)) { return false; } + if (!(lhs.unconstrained_functions == rhs.unconstrained_functions)) { return false; } + return true; + } -inline std::vector ValueOrArray::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector Program::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline ValueOrArray -ValueOrArray::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline Program Program::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::ValueOrArray &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.value, serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::Program &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.functions, serializer); + serde::Serializable::serialize(obj.unconstrained_functions, serializer); + serializer.decrease_container_depth(); } template <> template -Program::ValueOrArray serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::ValueOrArray obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::Program serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::Program obj; + obj.functions = serde::Deserializable::deserialize(deserializer); + obj.unconstrained_functions = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const ValueOrArray::MemoryAddress &lhs, - const ValueOrArray::MemoryAddress &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const PublicInputs &lhs, const PublicInputs &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector -ValueOrArray::MemoryAddress::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); -} + inline std::vector PublicInputs::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline ValueOrArray::MemoryAddress -ValueOrArray::MemoryAddress::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline PublicInputs PublicInputs::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::ValueOrArray::MemoryAddress &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.value, serializer); +void serde::Serializable::serialize(const Program::PublicInputs &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.value, serializer); + serializer.decrease_container_depth(); } template <> template -Program::ValueOrArray::MemoryAddress -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::ValueOrArray::MemoryAddress obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::PublicInputs serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::PublicInputs obj; + obj.value = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const ValueOrArray::HeapArray &lhs, - const ValueOrArray::HeapArray &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const ValueOrArray &lhs, const ValueOrArray &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector ValueOrArray::HeapArray::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector ValueOrArray::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline ValueOrArray::HeapArray -ValueOrArray::HeapArray::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline ValueOrArray ValueOrArray::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::ValueOrArray::HeapArray &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.value, serializer); +void serde::Serializable::serialize(const Program::ValueOrArray &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.value, serializer); + serializer.decrease_container_depth(); } template <> template -Program::ValueOrArray::HeapArray -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::ValueOrArray::HeapArray obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::ValueOrArray serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::ValueOrArray obj; + obj.value = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const ValueOrArray::HeapVector &lhs, - const ValueOrArray::HeapVector &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const ValueOrArray::MemoryAddress &lhs, const ValueOrArray::MemoryAddress &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } + + inline std::vector ValueOrArray::MemoryAddress::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline std::vector ValueOrArray::HeapVector::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); + inline ValueOrArray::MemoryAddress ValueOrArray::MemoryAddress::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::ValueOrArray::MemoryAddress &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.value, serializer); } -inline ValueOrArray::HeapVector -ValueOrArray::HeapVector::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; +template <> +template +Program::ValueOrArray::MemoryAddress serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::ValueOrArray::MemoryAddress obj; + obj.value = serde::Deserializable::deserialize(deserializer); + return obj; } +namespace Program { + + inline bool operator==(const ValueOrArray::HeapArray &lhs, const ValueOrArray::HeapArray &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } + + inline std::vector ValueOrArray::HeapArray::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline ValueOrArray::HeapArray ValueOrArray::HeapArray::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::ValueOrArray::HeapVector &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.value, serializer); +void serde::Serializable::serialize(const Program::ValueOrArray::HeapArray &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.value, serializer); } template <> template -Program::ValueOrArray::HeapVector -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::ValueOrArray::HeapVector obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::ValueOrArray::HeapArray serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::ValueOrArray::HeapArray obj; + obj.value = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const Witness &lhs, const Witness &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const ValueOrArray::HeapVector &lhs, const ValueOrArray::HeapVector &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } + + inline std::vector ValueOrArray::HeapVector::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline ValueOrArray::HeapVector ValueOrArray::HeapVector::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } -inline std::vector Witness::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::ValueOrArray::HeapVector &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.value, serializer); } -inline Witness Witness::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; +template <> +template +Program::ValueOrArray::HeapVector serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::ValueOrArray::HeapVector obj; + obj.value = serde::Deserializable::deserialize(deserializer); + return obj; } +namespace Program { + + inline bool operator==(const Witness &lhs, const Witness &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } + + inline std::vector Witness::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline Witness Witness::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::Witness &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.value, serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::Witness &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.value, serializer); + serializer.decrease_container_depth(); } template <> template -Program::Witness serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::Witness obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::Witness serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::Witness obj; + obj.value = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } From b096e2ef450eaddcce87dbd0bd9d86eec2f38660 Mon Sep 17 00:00:00 2001 From: guipublic Date: Wed, 8 May 2024 15:59:54 +0000 Subject: [PATCH 47/98] re-generate serialisation format --- .../dsl/acir_format/serde/acir.hpp | 64 - .../noir-repo/acvm-repo/acir/codegen/acir.cpp | 11855 +++++++--------- 2 files changed, 4986 insertions(+), 6933 deletions(-) diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/serde/acir.hpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/serde/acir.hpp index f5b32cec0d5..8dc2c4d9786 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/serde/acir.hpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/serde/acir.hpp @@ -676,7 +676,6 @@ struct BlackBoxOp { Program::HeapVector inputs; Program::HeapArray iv; Program::HeapArray key; - Program::MemoryAddress length; Program::HeapVector outputs; friend bool operator==(const AES128Encrypt&, const AES128Encrypt&); @@ -684,15 +683,6 @@ struct BlackBoxOp { static AES128Encrypt bincodeDeserialize(std::vector); }; - struct Sha256 { - Program::HeapVector message; - Program::HeapArray output; - - friend bool operator==(const Sha256&, const Sha256&); - std::vector bincodeSerialize() const; - static Sha256 bincodeDeserialize(std::vector); - }; - struct Blake2s { Program::HeapVector message; Program::HeapArray output; @@ -3876,9 +3866,6 @@ inline bool operator==(const BlackBoxOp::AES128Encrypt& lhs, const BlackBoxOp::A if (!(lhs.key == rhs.key)) { return false; } - if (!(lhs.length == rhs.length)) { - return false; - } if (!(lhs.outputs == rhs.outputs)) { return false; } @@ -3930,57 +3917,6 @@ Program::BlackBoxOp::AES128Encrypt serde::Deserializable BlackBoxOp::Sha256::bincodeSerialize() const -{ - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} - -inline BlackBoxOp::Sha256 BlackBoxOp::Sha256::bincodeDeserialize(std::vector input) -{ - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw_or_abort("Some input bytes were not read"); - } - return value; -} - -} // end of namespace Program - -template <> -template -void serde::Serializable::serialize(const Program::BlackBoxOp::Sha256& obj, - Serializer& serializer) -{ - serde::Serializable::serialize(obj.message, serializer); - serde::Serializable::serialize(obj.output, serializer); -} - -template <> -template -Program::BlackBoxOp::Sha256 serde::Deserializable::deserialize(Deserializer& deserializer) -{ - Program::BlackBoxOp::Sha256 obj; - obj.message = serde::Deserializable::deserialize(deserializer); - obj.output = serde::Deserializable::deserialize(deserializer); - return obj; -} - -namespace Program { - inline bool operator==(const BlackBoxOp::Blake2s& lhs, const BlackBoxOp::Blake2s& rhs) { if (!(lhs.message == rhs.message)) { diff --git a/noir/noir-repo/acvm-repo/acir/codegen/acir.cpp b/noir/noir-repo/acvm-repo/acir/codegen/acir.cpp index 3a3bd2502a9..bb15f83b4c9 100644 --- a/noir/noir-repo/acvm-repo/acir/codegen/acir.cpp +++ b/noir/noir-repo/acvm-repo/acir/codegen/acir.cpp @@ -1,8941 +1,7058 @@ #pragma once -#include "bincode.hpp" #include "serde.hpp" +#include "bincode.hpp" namespace Program { -struct Witness { - uint32_t value; - - friend bool operator==(const Witness &, const Witness &); - std::vector bincodeSerialize() const; - static Witness bincodeDeserialize(std::vector); -}; - -struct FunctionInput { - Program::Witness witness; - uint32_t num_bits; - - friend bool operator==(const FunctionInput &, const FunctionInput &); - std::vector bincodeSerialize() const; - static FunctionInput bincodeDeserialize(std::vector); -}; - -struct BlackBoxFuncCall { - - struct AES128Encrypt { - std::vector inputs; - std::array iv; - std::array key; - std::vector outputs; - - friend bool operator==(const AES128Encrypt &, const AES128Encrypt &); - std::vector bincodeSerialize() const; - static AES128Encrypt bincodeDeserialize(std::vector); - }; - - struct AND { - Program::FunctionInput lhs; - Program::FunctionInput rhs; - Program::Witness output; - - friend bool operator==(const AND &, const AND &); - std::vector bincodeSerialize() const; - static AND bincodeDeserialize(std::vector); - }; - - struct XOR { - Program::FunctionInput lhs; - Program::FunctionInput rhs; - Program::Witness output; - - friend bool operator==(const XOR &, const XOR &); - std::vector bincodeSerialize() const; - static XOR bincodeDeserialize(std::vector); - }; - - struct RANGE { - Program::FunctionInput input; - - friend bool operator==(const RANGE &, const RANGE &); - std::vector bincodeSerialize() const; - static RANGE bincodeDeserialize(std::vector); - }; - - struct Blake2s { - std::vector inputs; - std::array outputs; - - friend bool operator==(const Blake2s &, const Blake2s &); - std::vector bincodeSerialize() const; - static Blake2s bincodeDeserialize(std::vector); - }; - - struct Blake3 { - std::vector inputs; - std::array outputs; - - friend bool operator==(const Blake3 &, const Blake3 &); - std::vector bincodeSerialize() const; - static Blake3 bincodeDeserialize(std::vector); - }; - - struct SchnorrVerify { - Program::FunctionInput public_key_x; - Program::FunctionInput public_key_y; - std::array signature; - std::vector message; - Program::Witness output; - - friend bool operator==(const SchnorrVerify &, const SchnorrVerify &); - std::vector bincodeSerialize() const; - static SchnorrVerify bincodeDeserialize(std::vector); - }; - - struct PedersenCommitment { - std::vector inputs; - uint32_t domain_separator; - std::array outputs; - - friend bool operator==(const PedersenCommitment &, - const PedersenCommitment &); - std::vector bincodeSerialize() const; - static PedersenCommitment bincodeDeserialize(std::vector); - }; - - struct PedersenHash { - std::vector inputs; - uint32_t domain_separator; - Program::Witness output; - - friend bool operator==(const PedersenHash &, const PedersenHash &); - std::vector bincodeSerialize() const; - static PedersenHash bincodeDeserialize(std::vector); - }; - - struct EcdsaSecp256k1 { - std::array public_key_x; - std::array public_key_y; - std::array signature; - std::array hashed_message; - Program::Witness output; - - friend bool operator==(const EcdsaSecp256k1 &, const EcdsaSecp256k1 &); - std::vector bincodeSerialize() const; - static EcdsaSecp256k1 bincodeDeserialize(std::vector); - }; - - struct EcdsaSecp256r1 { - std::array public_key_x; - std::array public_key_y; - std::array signature; - std::array hashed_message; - Program::Witness output; - - friend bool operator==(const EcdsaSecp256r1 &, const EcdsaSecp256r1 &); - std::vector bincodeSerialize() const; - static EcdsaSecp256r1 bincodeDeserialize(std::vector); - }; - - struct MultiScalarMul { - std::vector points; - std::vector scalars; - std::array outputs; - - friend bool operator==(const MultiScalarMul &, const MultiScalarMul &); - std::vector bincodeSerialize() const; - static MultiScalarMul bincodeDeserialize(std::vector); - }; - - struct EmbeddedCurveAdd { - Program::FunctionInput input1_x; - Program::FunctionInput input1_y; - Program::FunctionInput input2_x; - Program::FunctionInput input2_y; - std::array outputs; - - friend bool operator==(const EmbeddedCurveAdd &, const EmbeddedCurveAdd &); - std::vector bincodeSerialize() const; - static EmbeddedCurveAdd bincodeDeserialize(std::vector); - }; - - struct Keccak256 { - std::vector inputs; - Program::FunctionInput var_message_size; - std::array outputs; - - friend bool operator==(const Keccak256 &, const Keccak256 &); - std::vector bincodeSerialize() const; - static Keccak256 bincodeDeserialize(std::vector); - }; - - struct Keccakf1600 { - std::array inputs; - std::array outputs; - - friend bool operator==(const Keccakf1600 &, const Keccakf1600 &); - std::vector bincodeSerialize() const; - static Keccakf1600 bincodeDeserialize(std::vector); - }; - - struct RecursiveAggregation { - std::vector verification_key; - std::vector proof; - std::vector public_inputs; - Program::FunctionInput key_hash; - - friend bool operator==(const RecursiveAggregation &, - const RecursiveAggregation &); - std::vector bincodeSerialize() const; - static RecursiveAggregation bincodeDeserialize(std::vector); - }; - - struct BigIntAdd { - uint32_t lhs; - uint32_t rhs; - uint32_t output; - - friend bool operator==(const BigIntAdd &, const BigIntAdd &); - std::vector bincodeSerialize() const; - static BigIntAdd bincodeDeserialize(std::vector); - }; - - struct BigIntSub { - uint32_t lhs; - uint32_t rhs; - uint32_t output; - - friend bool operator==(const BigIntSub &, const BigIntSub &); - std::vector bincodeSerialize() const; - static BigIntSub bincodeDeserialize(std::vector); - }; - - struct BigIntMul { - uint32_t lhs; - uint32_t rhs; - uint32_t output; - - friend bool operator==(const BigIntMul &, const BigIntMul &); - std::vector bincodeSerialize() const; - static BigIntMul bincodeDeserialize(std::vector); - }; - - struct BigIntDiv { - uint32_t lhs; - uint32_t rhs; - uint32_t output; - - friend bool operator==(const BigIntDiv &, const BigIntDiv &); - std::vector bincodeSerialize() const; - static BigIntDiv bincodeDeserialize(std::vector); - }; - - struct BigIntFromLeBytes { - std::vector inputs; - std::vector modulus; - uint32_t output; - - friend bool operator==(const BigIntFromLeBytes &, - const BigIntFromLeBytes &); - std::vector bincodeSerialize() const; - static BigIntFromLeBytes bincodeDeserialize(std::vector); - }; - - struct BigIntToLeBytes { - uint32_t input; - std::vector outputs; - - friend bool operator==(const BigIntToLeBytes &, const BigIntToLeBytes &); - std::vector bincodeSerialize() const; - static BigIntToLeBytes bincodeDeserialize(std::vector); - }; - - struct Poseidon2Permutation { - std::vector inputs; - std::vector outputs; - uint32_t len; - - friend bool operator==(const Poseidon2Permutation &, - const Poseidon2Permutation &); - std::vector bincodeSerialize() const; - static Poseidon2Permutation bincodeDeserialize(std::vector); - }; - - struct Sha256Compression { - std::array inputs; - std::array hash_values; - std::array outputs; - - friend bool operator==(const Sha256Compression &, - const Sha256Compression &); - std::vector bincodeSerialize() const; - static Sha256Compression bincodeDeserialize(std::vector); - }; - - std::variant - value; - - friend bool operator==(const BlackBoxFuncCall &, const BlackBoxFuncCall &); - std::vector bincodeSerialize() const; - static BlackBoxFuncCall bincodeDeserialize(std::vector); -}; - -struct BlockId { - uint32_t value; - - friend bool operator==(const BlockId &, const BlockId &); - std::vector bincodeSerialize() const; - static BlockId bincodeDeserialize(std::vector); -}; - -struct BlockType { - - struct Memory { - friend bool operator==(const Memory &, const Memory &); - std::vector bincodeSerialize() const; - static Memory bincodeDeserialize(std::vector); - }; - - struct CallData { - friend bool operator==(const CallData &, const CallData &); - std::vector bincodeSerialize() const; - static CallData bincodeDeserialize(std::vector); - }; - - struct ReturnData { - friend bool operator==(const ReturnData &, const ReturnData &); - std::vector bincodeSerialize() const; - static ReturnData bincodeDeserialize(std::vector); - }; - - std::variant value; - - friend bool operator==(const BlockType &, const BlockType &); - std::vector bincodeSerialize() const; - static BlockType bincodeDeserialize(std::vector); -}; - -struct Expression { - std::vector> - mul_terms; - std::vector> linear_combinations; - std::string q_c; - - friend bool operator==(const Expression &, const Expression &); - std::vector bincodeSerialize() const; - static Expression bincodeDeserialize(std::vector); -}; - -struct BrilligInputs { - - struct Single { - Program::Expression value; - - friend bool operator==(const Single &, const Single &); - std::vector bincodeSerialize() const; - static Single bincodeDeserialize(std::vector); - }; - - struct Array { - std::vector value; - - friend bool operator==(const Array &, const Array &); - std::vector bincodeSerialize() const; - static Array bincodeDeserialize(std::vector); - }; - - struct MemoryArray { - Program::BlockId value; - - friend bool operator==(const MemoryArray &, const MemoryArray &); - std::vector bincodeSerialize() const; - static MemoryArray bincodeDeserialize(std::vector); - }; - - std::variant value; - - friend bool operator==(const BrilligInputs &, const BrilligInputs &); - std::vector bincodeSerialize() const; - static BrilligInputs bincodeDeserialize(std::vector); -}; - -struct BrilligOutputs { - - struct Simple { - Program::Witness value; - - friend bool operator==(const Simple &, const Simple &); - std::vector bincodeSerialize() const; - static Simple bincodeDeserialize(std::vector); - }; - - struct Array { - std::vector value; - - friend bool operator==(const Array &, const Array &); - std::vector bincodeSerialize() const; - static Array bincodeDeserialize(std::vector); - }; - - std::variant value; - - friend bool operator==(const BrilligOutputs &, const BrilligOutputs &); - std::vector bincodeSerialize() const; - static BrilligOutputs bincodeDeserialize(std::vector); -}; - -struct Directive { - - struct ToLeRadix { - Program::Expression a; - std::vector b; - uint32_t radix; - - friend bool operator==(const ToLeRadix &, const ToLeRadix &); - std::vector bincodeSerialize() const; - static ToLeRadix bincodeDeserialize(std::vector); - }; - - std::variant value; - - friend bool operator==(const Directive &, const Directive &); - std::vector bincodeSerialize() const; - static Directive bincodeDeserialize(std::vector); -}; - -struct MemOp { - Program::Expression operation; - Program::Expression index; - Program::Expression value; - - friend bool operator==(const MemOp &, const MemOp &); - std::vector bincodeSerialize() const; - static MemOp bincodeDeserialize(std::vector); -}; - -struct Opcode { - - struct AssertZero { - Program::Expression value; - - friend bool operator==(const AssertZero &, const AssertZero &); - std::vector bincodeSerialize() const; - static AssertZero bincodeDeserialize(std::vector); - }; - - struct BlackBoxFuncCall { - Program::BlackBoxFuncCall value; - - friend bool operator==(const BlackBoxFuncCall &, const BlackBoxFuncCall &); - std::vector bincodeSerialize() const; - static BlackBoxFuncCall bincodeDeserialize(std::vector); - }; - - struct Directive { - Program::Directive value; - - friend bool operator==(const Directive &, const Directive &); - std::vector bincodeSerialize() const; - static Directive bincodeDeserialize(std::vector); - }; - - struct MemoryOp { - Program::BlockId block_id; - Program::MemOp op; - std::optional predicate; - - friend bool operator==(const MemoryOp &, const MemoryOp &); - std::vector bincodeSerialize() const; - static MemoryOp bincodeDeserialize(std::vector); - }; - - struct MemoryInit { - Program::BlockId block_id; - std::vector init; - Program::BlockType block_type; - - friend bool operator==(const MemoryInit &, const MemoryInit &); - std::vector bincodeSerialize() const; - static MemoryInit bincodeDeserialize(std::vector); - }; - - struct BrilligCall { - uint32_t id; - std::vector inputs; - std::vector outputs; - std::optional predicate; - - friend bool operator==(const BrilligCall &, const BrilligCall &); - std::vector bincodeSerialize() const; - static BrilligCall bincodeDeserialize(std::vector); - }; - - struct Call { - uint32_t id; - std::vector inputs; - std::vector outputs; - std::optional predicate; - - friend bool operator==(const Call &, const Call &); - std::vector bincodeSerialize() const; - static Call bincodeDeserialize(std::vector); - }; - - std::variant - value; - - friend bool operator==(const Opcode &, const Opcode &); - std::vector bincodeSerialize() const; - static Opcode bincodeDeserialize(std::vector); -}; - -struct BinaryFieldOp { - - struct Add { - friend bool operator==(const Add &, const Add &); - std::vector bincodeSerialize() const; - static Add bincodeDeserialize(std::vector); - }; - - struct Sub { - friend bool operator==(const Sub &, const Sub &); - std::vector bincodeSerialize() const; - static Sub bincodeDeserialize(std::vector); - }; - - struct Mul { - friend bool operator==(const Mul &, const Mul &); - std::vector bincodeSerialize() const; - static Mul bincodeDeserialize(std::vector); - }; - - struct Div { - friend bool operator==(const Div &, const Div &); - std::vector bincodeSerialize() const; - static Div bincodeDeserialize(std::vector); - }; - - struct IntegerDiv { - friend bool operator==(const IntegerDiv &, const IntegerDiv &); - std::vector bincodeSerialize() const; - static IntegerDiv bincodeDeserialize(std::vector); - }; - - struct Equals { - friend bool operator==(const Equals &, const Equals &); - std::vector bincodeSerialize() const; - static Equals bincodeDeserialize(std::vector); - }; - - struct LessThan { - friend bool operator==(const LessThan &, const LessThan &); - std::vector bincodeSerialize() const; - static LessThan bincodeDeserialize(std::vector); - }; - - struct LessThanEquals { - friend bool operator==(const LessThanEquals &, const LessThanEquals &); - std::vector bincodeSerialize() const; - static LessThanEquals bincodeDeserialize(std::vector); - }; - - std::variant - value; - - friend bool operator==(const BinaryFieldOp &, const BinaryFieldOp &); - std::vector bincodeSerialize() const; - static BinaryFieldOp bincodeDeserialize(std::vector); -}; - -struct BinaryIntOp { - - struct Add { - friend bool operator==(const Add &, const Add &); - std::vector bincodeSerialize() const; - static Add bincodeDeserialize(std::vector); - }; - - struct Sub { - friend bool operator==(const Sub &, const Sub &); - std::vector bincodeSerialize() const; - static Sub bincodeDeserialize(std::vector); - }; - - struct Mul { - friend bool operator==(const Mul &, const Mul &); - std::vector bincodeSerialize() const; - static Mul bincodeDeserialize(std::vector); - }; - - struct Div { - friend bool operator==(const Div &, const Div &); - std::vector bincodeSerialize() const; - static Div bincodeDeserialize(std::vector); - }; - - struct Equals { - friend bool operator==(const Equals &, const Equals &); - std::vector bincodeSerialize() const; - static Equals bincodeDeserialize(std::vector); - }; - - struct LessThan { - friend bool operator==(const LessThan &, const LessThan &); - std::vector bincodeSerialize() const; - static LessThan bincodeDeserialize(std::vector); - }; - - struct LessThanEquals { - friend bool operator==(const LessThanEquals &, const LessThanEquals &); - std::vector bincodeSerialize() const; - static LessThanEquals bincodeDeserialize(std::vector); - }; - - struct And { - friend bool operator==(const And &, const And &); - std::vector bincodeSerialize() const; - static And bincodeDeserialize(std::vector); - }; - - struct Or { - friend bool operator==(const Or &, const Or &); - std::vector bincodeSerialize() const; - static Or bincodeDeserialize(std::vector); - }; - - struct Xor { - friend bool operator==(const Xor &, const Xor &); - std::vector bincodeSerialize() const; - static Xor bincodeDeserialize(std::vector); - }; - - struct Shl { - friend bool operator==(const Shl &, const Shl &); - std::vector bincodeSerialize() const; - static Shl bincodeDeserialize(std::vector); - }; - - struct Shr { - friend bool operator==(const Shr &, const Shr &); - std::vector bincodeSerialize() const; - static Shr bincodeDeserialize(std::vector); - }; - - std::variant - value; - - friend bool operator==(const BinaryIntOp &, const BinaryIntOp &); - std::vector bincodeSerialize() const; - static BinaryIntOp bincodeDeserialize(std::vector); -}; - -struct MemoryAddress { - uint64_t value; - - friend bool operator==(const MemoryAddress &, const MemoryAddress &); - std::vector bincodeSerialize() const; - static MemoryAddress bincodeDeserialize(std::vector); -}; - -struct HeapArray { - Program::MemoryAddress pointer; - uint64_t size; - - friend bool operator==(const HeapArray &, const HeapArray &); - std::vector bincodeSerialize() const; - static HeapArray bincodeDeserialize(std::vector); -}; - -struct HeapVector { - Program::MemoryAddress pointer; - Program::MemoryAddress size; - - friend bool operator==(const HeapVector &, const HeapVector &); - std::vector bincodeSerialize() const; - static HeapVector bincodeDeserialize(std::vector); -}; - -struct BlackBoxOp { - - struct AES128Encrypt { - Program::HeapVector inputs; - Program::HeapArray iv; - Program::HeapArray key; - Program::HeapVector outputs; - - friend bool operator==(const AES128Encrypt &, const AES128Encrypt &); - std::vector bincodeSerialize() const; - static AES128Encrypt bincodeDeserialize(std::vector); - }; - - struct Blake2s { - Program::HeapVector message; - Program::HeapArray output; - - friend bool operator==(const Blake2s &, const Blake2s &); - std::vector bincodeSerialize() const; - static Blake2s bincodeDeserialize(std::vector); - }; - - struct Blake3 { - Program::HeapVector message; - Program::HeapArray output; - - friend bool operator==(const Blake3 &, const Blake3 &); - std::vector bincodeSerialize() const; - static Blake3 bincodeDeserialize(std::vector); - }; - - struct Keccak256 { - Program::HeapVector message; - Program::HeapArray output; - - friend bool operator==(const Keccak256 &, const Keccak256 &); - std::vector bincodeSerialize() const; - static Keccak256 bincodeDeserialize(std::vector); - }; - - struct Keccakf1600 { - Program::HeapVector message; - Program::HeapArray output; - - friend bool operator==(const Keccakf1600 &, const Keccakf1600 &); - std::vector bincodeSerialize() const; - static Keccakf1600 bincodeDeserialize(std::vector); - }; - - struct EcdsaSecp256k1 { - Program::HeapVector hashed_msg; - Program::HeapArray public_key_x; - Program::HeapArray public_key_y; - Program::HeapArray signature; - Program::MemoryAddress result; - - friend bool operator==(const EcdsaSecp256k1 &, const EcdsaSecp256k1 &); - std::vector bincodeSerialize() const; - static EcdsaSecp256k1 bincodeDeserialize(std::vector); - }; - - struct EcdsaSecp256r1 { - Program::HeapVector hashed_msg; - Program::HeapArray public_key_x; - Program::HeapArray public_key_y; - Program::HeapArray signature; - Program::MemoryAddress result; - - friend bool operator==(const EcdsaSecp256r1 &, const EcdsaSecp256r1 &); - std::vector bincodeSerialize() const; - static EcdsaSecp256r1 bincodeDeserialize(std::vector); - }; - - struct SchnorrVerify { - Program::MemoryAddress public_key_x; - Program::MemoryAddress public_key_y; - Program::HeapVector message; - Program::HeapVector signature; - Program::MemoryAddress result; - - friend bool operator==(const SchnorrVerify &, const SchnorrVerify &); - std::vector bincodeSerialize() const; - static SchnorrVerify bincodeDeserialize(std::vector); - }; - - struct PedersenCommitment { - Program::HeapVector inputs; - Program::MemoryAddress domain_separator; - Program::HeapArray output; - - friend bool operator==(const PedersenCommitment &, - const PedersenCommitment &); - std::vector bincodeSerialize() const; - static PedersenCommitment bincodeDeserialize(std::vector); - }; - - struct PedersenHash { - Program::HeapVector inputs; - Program::MemoryAddress domain_separator; - Program::MemoryAddress output; - - friend bool operator==(const PedersenHash &, const PedersenHash &); - std::vector bincodeSerialize() const; - static PedersenHash bincodeDeserialize(std::vector); - }; - - struct MultiScalarMul { - Program::HeapVector points; - Program::HeapVector scalars; - Program::HeapArray outputs; - - friend bool operator==(const MultiScalarMul &, const MultiScalarMul &); - std::vector bincodeSerialize() const; - static MultiScalarMul bincodeDeserialize(std::vector); - }; - - struct EmbeddedCurveAdd { - Program::MemoryAddress input1_x; - Program::MemoryAddress input1_y; - Program::MemoryAddress input2_x; - Program::MemoryAddress input2_y; - Program::HeapArray result; - - friend bool operator==(const EmbeddedCurveAdd &, const EmbeddedCurveAdd &); - std::vector bincodeSerialize() const; - static EmbeddedCurveAdd bincodeDeserialize(std::vector); - }; - - struct BigIntAdd { - Program::MemoryAddress lhs; - Program::MemoryAddress rhs; - Program::MemoryAddress output; - - friend bool operator==(const BigIntAdd &, const BigIntAdd &); - std::vector bincodeSerialize() const; - static BigIntAdd bincodeDeserialize(std::vector); - }; - - struct BigIntSub { - Program::MemoryAddress lhs; - Program::MemoryAddress rhs; - Program::MemoryAddress output; - - friend bool operator==(const BigIntSub &, const BigIntSub &); - std::vector bincodeSerialize() const; - static BigIntSub bincodeDeserialize(std::vector); - }; - - struct BigIntMul { - Program::MemoryAddress lhs; - Program::MemoryAddress rhs; - Program::MemoryAddress output; - - friend bool operator==(const BigIntMul &, const BigIntMul &); - std::vector bincodeSerialize() const; - static BigIntMul bincodeDeserialize(std::vector); - }; - - struct BigIntDiv { - Program::MemoryAddress lhs; - Program::MemoryAddress rhs; - Program::MemoryAddress output; - - friend bool operator==(const BigIntDiv &, const BigIntDiv &); - std::vector bincodeSerialize() const; - static BigIntDiv bincodeDeserialize(std::vector); - }; - - struct BigIntFromLeBytes { - Program::HeapVector inputs; - Program::HeapVector modulus; - Program::MemoryAddress output; - - friend bool operator==(const BigIntFromLeBytes &, - const BigIntFromLeBytes &); - std::vector bincodeSerialize() const; - static BigIntFromLeBytes bincodeDeserialize(std::vector); - }; - - struct BigIntToLeBytes { - Program::MemoryAddress input; - Program::HeapVector output; - - friend bool operator==(const BigIntToLeBytes &, const BigIntToLeBytes &); - std::vector bincodeSerialize() const; - static BigIntToLeBytes bincodeDeserialize(std::vector); - }; - - struct Poseidon2Permutation { - Program::HeapVector message; - Program::HeapArray output; - Program::MemoryAddress len; - - friend bool operator==(const Poseidon2Permutation &, - const Poseidon2Permutation &); - std::vector bincodeSerialize() const; - static Poseidon2Permutation bincodeDeserialize(std::vector); - }; - - struct Sha256Compression { - Program::HeapVector input; - Program::HeapVector hash_values; - Program::HeapArray output; - - friend bool operator==(const Sha256Compression &, - const Sha256Compression &); - std::vector bincodeSerialize() const; - static Sha256Compression bincodeDeserialize(std::vector); - }; - - std::variant - value; - - friend bool operator==(const BlackBoxOp &, const BlackBoxOp &); - std::vector bincodeSerialize() const; - static BlackBoxOp bincodeDeserialize(std::vector); -}; - -struct HeapValueType; - -struct HeapValueType { - - struct Simple { - uint32_t value; - - friend bool operator==(const Simple &, const Simple &); - std::vector bincodeSerialize() const; - static Simple bincodeDeserialize(std::vector); - }; - - struct Array { - std::vector value_types; - uint64_t size; - - friend bool operator==(const Array &, const Array &); - std::vector bincodeSerialize() const; - static Array bincodeDeserialize(std::vector); - }; - - struct Vector { - std::vector value_types; - - friend bool operator==(const Vector &, const Vector &); - std::vector bincodeSerialize() const; - static Vector bincodeDeserialize(std::vector); - }; - - std::variant value; - - friend bool operator==(const HeapValueType &, const HeapValueType &); - std::vector bincodeSerialize() const; - static HeapValueType bincodeDeserialize(std::vector); -}; - -struct ValueOrArray { - - struct MemoryAddress { - Program::MemoryAddress value; - - friend bool operator==(const MemoryAddress &, const MemoryAddress &); - std::vector bincodeSerialize() const; - static MemoryAddress bincodeDeserialize(std::vector); - }; - - struct HeapArray { - Program::HeapArray value; - - friend bool operator==(const HeapArray &, const HeapArray &); - std::vector bincodeSerialize() const; - static HeapArray bincodeDeserialize(std::vector); - }; - - struct HeapVector { - Program::HeapVector value; - - friend bool operator==(const HeapVector &, const HeapVector &); - std::vector bincodeSerialize() const; - static HeapVector bincodeDeserialize(std::vector); - }; - - std::variant value; - - friend bool operator==(const ValueOrArray &, const ValueOrArray &); - std::vector bincodeSerialize() const; - static ValueOrArray bincodeDeserialize(std::vector); -}; - -struct BrilligOpcode { - - struct BinaryFieldOp { - Program::MemoryAddress destination; - Program::BinaryFieldOp op; - Program::MemoryAddress lhs; - Program::MemoryAddress rhs; - - friend bool operator==(const BinaryFieldOp &, const BinaryFieldOp &); - std::vector bincodeSerialize() const; - static BinaryFieldOp bincodeDeserialize(std::vector); - }; - - struct BinaryIntOp { - Program::MemoryAddress destination; - Program::BinaryIntOp op; - uint32_t bit_size; - Program::MemoryAddress lhs; - Program::MemoryAddress rhs; - - friend bool operator==(const BinaryIntOp &, const BinaryIntOp &); - std::vector bincodeSerialize() const; - static BinaryIntOp bincodeDeserialize(std::vector); - }; - - struct Cast { - Program::MemoryAddress destination; - Program::MemoryAddress source; - uint32_t bit_size; - - friend bool operator==(const Cast &, const Cast &); - std::vector bincodeSerialize() const; - static Cast bincodeDeserialize(std::vector); - }; - - struct JumpIfNot { - Program::MemoryAddress condition; - uint64_t location; - - friend bool operator==(const JumpIfNot &, const JumpIfNot &); - std::vector bincodeSerialize() const; - static JumpIfNot bincodeDeserialize(std::vector); - }; - - struct JumpIf { - Program::MemoryAddress condition; - uint64_t location; - - friend bool operator==(const JumpIf &, const JumpIf &); - std::vector bincodeSerialize() const; - static JumpIf bincodeDeserialize(std::vector); - }; - - struct Jump { - uint64_t location; - - friend bool operator==(const Jump &, const Jump &); - std::vector bincodeSerialize() const; - static Jump bincodeDeserialize(std::vector); - }; - - struct CalldataCopy { - Program::MemoryAddress destination_address; - uint64_t size; - uint64_t offset; - - friend bool operator==(const CalldataCopy &, const CalldataCopy &); - std::vector bincodeSerialize() const; - static CalldataCopy bincodeDeserialize(std::vector); - }; - - struct Call { - uint64_t location; - - friend bool operator==(const Call &, const Call &); - std::vector bincodeSerialize() const; - static Call bincodeDeserialize(std::vector); - }; - - struct Const { - Program::MemoryAddress destination; - uint32_t bit_size; - std::string value; - - friend bool operator==(const Const &, const Const &); - std::vector bincodeSerialize() const; - static Const bincodeDeserialize(std::vector); - }; - - struct Return { - friend bool operator==(const Return &, const Return &); - std::vector bincodeSerialize() const; - static Return bincodeDeserialize(std::vector); - }; - - struct ForeignCall { - std::string function; - std::vector destinations; - std::vector destination_value_types; - std::vector inputs; - std::vector input_value_types; - - friend bool operator==(const ForeignCall &, const ForeignCall &); - std::vector bincodeSerialize() const; - static ForeignCall bincodeDeserialize(std::vector); - }; - - struct Mov { - Program::MemoryAddress destination; - Program::MemoryAddress source; - - friend bool operator==(const Mov &, const Mov &); - std::vector bincodeSerialize() const; - static Mov bincodeDeserialize(std::vector); - }; - - struct ConditionalMov { - Program::MemoryAddress destination; - Program::MemoryAddress source_a; - Program::MemoryAddress source_b; - Program::MemoryAddress condition; - - friend bool operator==(const ConditionalMov &, const ConditionalMov &); - std::vector bincodeSerialize() const; - static ConditionalMov bincodeDeserialize(std::vector); - }; - - struct Load { - Program::MemoryAddress destination; - Program::MemoryAddress source_pointer; - - friend bool operator==(const Load &, const Load &); - std::vector bincodeSerialize() const; - static Load bincodeDeserialize(std::vector); - }; - - struct Store { - Program::MemoryAddress destination_pointer; - Program::MemoryAddress source; - - friend bool operator==(const Store &, const Store &); - std::vector bincodeSerialize() const; - static Store bincodeDeserialize(std::vector); - }; - - struct BlackBox { - Program::BlackBoxOp value; - - friend bool operator==(const BlackBox &, const BlackBox &); - std::vector bincodeSerialize() const; - static BlackBox bincodeDeserialize(std::vector); - }; - - struct Trap { - Program::HeapArray revert_data; - - friend bool operator==(const Trap &, const Trap &); - std::vector bincodeSerialize() const; - static Trap bincodeDeserialize(std::vector); - }; - - struct Stop { - uint64_t return_data_offset; - uint64_t return_data_size; - - friend bool operator==(const Stop &, const Stop &); - std::vector bincodeSerialize() const; - static Stop bincodeDeserialize(std::vector); - }; - - std::variant - value; - - friend bool operator==(const BrilligOpcode &, const BrilligOpcode &); - std::vector bincodeSerialize() const; - static BrilligOpcode bincodeDeserialize(std::vector); -}; - -struct ExpressionOrMemory { - - struct Expression { - Program::Expression value; - - friend bool operator==(const Expression &, const Expression &); - std::vector bincodeSerialize() const; - static Expression bincodeDeserialize(std::vector); - }; - - struct Memory { - Program::BlockId value; - - friend bool operator==(const Memory &, const Memory &); - std::vector bincodeSerialize() const; - static Memory bincodeDeserialize(std::vector); - }; - - std::variant value; - - friend bool operator==(const ExpressionOrMemory &, - const ExpressionOrMemory &); - std::vector bincodeSerialize() const; - static ExpressionOrMemory bincodeDeserialize(std::vector); -}; - -struct AssertionPayload { - - struct StaticString { - std::string value; - - friend bool operator==(const StaticString &, const StaticString &); - std::vector bincodeSerialize() const; - static StaticString bincodeDeserialize(std::vector); - }; - - struct Dynamic { - std::tuple> value; - - friend bool operator==(const Dynamic &, const Dynamic &); - std::vector bincodeSerialize() const; - static Dynamic bincodeDeserialize(std::vector); - }; + struct Witness { + uint32_t value; + + friend bool operator==(const Witness&, const Witness&); + std::vector bincodeSerialize() const; + static Witness bincodeDeserialize(std::vector); + }; + + struct FunctionInput { + Program::Witness witness; + uint32_t num_bits; + + friend bool operator==(const FunctionInput&, const FunctionInput&); + std::vector bincodeSerialize() const; + static FunctionInput bincodeDeserialize(std::vector); + }; + + struct BlackBoxFuncCall { + + struct AES128Encrypt { + std::vector inputs; + std::array iv; + std::array key; + std::vector outputs; + + friend bool operator==(const AES128Encrypt&, const AES128Encrypt&); + std::vector bincodeSerialize() const; + static AES128Encrypt bincodeDeserialize(std::vector); + }; + + struct AND { + Program::FunctionInput lhs; + Program::FunctionInput rhs; + Program::Witness output; + + friend bool operator==(const AND&, const AND&); + std::vector bincodeSerialize() const; + static AND bincodeDeserialize(std::vector); + }; + + struct XOR { + Program::FunctionInput lhs; + Program::FunctionInput rhs; + Program::Witness output; + + friend bool operator==(const XOR&, const XOR&); + std::vector bincodeSerialize() const; + static XOR bincodeDeserialize(std::vector); + }; + + struct RANGE { + Program::FunctionInput input; + + friend bool operator==(const RANGE&, const RANGE&); + std::vector bincodeSerialize() const; + static RANGE bincodeDeserialize(std::vector); + }; + + struct Blake2s { + std::vector inputs; + std::array outputs; + + friend bool operator==(const Blake2s&, const Blake2s&); + std::vector bincodeSerialize() const; + static Blake2s bincodeDeserialize(std::vector); + }; + + struct Blake3 { + std::vector inputs; + std::array outputs; + + friend bool operator==(const Blake3&, const Blake3&); + std::vector bincodeSerialize() const; + static Blake3 bincodeDeserialize(std::vector); + }; + + struct SchnorrVerify { + Program::FunctionInput public_key_x; + Program::FunctionInput public_key_y; + std::array signature; + std::vector message; + Program::Witness output; + + friend bool operator==(const SchnorrVerify&, const SchnorrVerify&); + std::vector bincodeSerialize() const; + static SchnorrVerify bincodeDeserialize(std::vector); + }; + + struct PedersenCommitment { + std::vector inputs; + uint32_t domain_separator; + std::array outputs; + + friend bool operator==(const PedersenCommitment&, const PedersenCommitment&); + std::vector bincodeSerialize() const; + static PedersenCommitment bincodeDeserialize(std::vector); + }; + + struct PedersenHash { + std::vector inputs; + uint32_t domain_separator; + Program::Witness output; + + friend bool operator==(const PedersenHash&, const PedersenHash&); + std::vector bincodeSerialize() const; + static PedersenHash bincodeDeserialize(std::vector); + }; + + struct EcdsaSecp256k1 { + std::array public_key_x; + std::array public_key_y; + std::array signature; + std::array hashed_message; + Program::Witness output; + + friend bool operator==(const EcdsaSecp256k1&, const EcdsaSecp256k1&); + std::vector bincodeSerialize() const; + static EcdsaSecp256k1 bincodeDeserialize(std::vector); + }; + + struct EcdsaSecp256r1 { + std::array public_key_x; + std::array public_key_y; + std::array signature; + std::array hashed_message; + Program::Witness output; + + friend bool operator==(const EcdsaSecp256r1&, const EcdsaSecp256r1&); + std::vector bincodeSerialize() const; + static EcdsaSecp256r1 bincodeDeserialize(std::vector); + }; + + struct MultiScalarMul { + std::vector points; + std::vector scalars; + std::array outputs; + + friend bool operator==(const MultiScalarMul&, const MultiScalarMul&); + std::vector bincodeSerialize() const; + static MultiScalarMul bincodeDeserialize(std::vector); + }; + + struct EmbeddedCurveAdd { + Program::FunctionInput input1_x; + Program::FunctionInput input1_y; + Program::FunctionInput input2_x; + Program::FunctionInput input2_y; + std::array outputs; + + friend bool operator==(const EmbeddedCurveAdd&, const EmbeddedCurveAdd&); + std::vector bincodeSerialize() const; + static EmbeddedCurveAdd bincodeDeserialize(std::vector); + }; + + struct Keccak256 { + std::vector inputs; + Program::FunctionInput var_message_size; + std::array outputs; + + friend bool operator==(const Keccak256&, const Keccak256&); + std::vector bincodeSerialize() const; + static Keccak256 bincodeDeserialize(std::vector); + }; + + struct Keccakf1600 { + std::array inputs; + std::array outputs; + + friend bool operator==(const Keccakf1600&, const Keccakf1600&); + std::vector bincodeSerialize() const; + static Keccakf1600 bincodeDeserialize(std::vector); + }; + + struct RecursiveAggregation { + std::vector verification_key; + std::vector proof; + std::vector public_inputs; + Program::FunctionInput key_hash; + + friend bool operator==(const RecursiveAggregation&, const RecursiveAggregation&); + std::vector bincodeSerialize() const; + static RecursiveAggregation bincodeDeserialize(std::vector); + }; + + struct BigIntAdd { + uint32_t lhs; + uint32_t rhs; + uint32_t output; + + friend bool operator==(const BigIntAdd&, const BigIntAdd&); + std::vector bincodeSerialize() const; + static BigIntAdd bincodeDeserialize(std::vector); + }; + + struct BigIntSub { + uint32_t lhs; + uint32_t rhs; + uint32_t output; + + friend bool operator==(const BigIntSub&, const BigIntSub&); + std::vector bincodeSerialize() const; + static BigIntSub bincodeDeserialize(std::vector); + }; + + struct BigIntMul { + uint32_t lhs; + uint32_t rhs; + uint32_t output; + + friend bool operator==(const BigIntMul&, const BigIntMul&); + std::vector bincodeSerialize() const; + static BigIntMul bincodeDeserialize(std::vector); + }; + + struct BigIntDiv { + uint32_t lhs; + uint32_t rhs; + uint32_t output; + + friend bool operator==(const BigIntDiv&, const BigIntDiv&); + std::vector bincodeSerialize() const; + static BigIntDiv bincodeDeserialize(std::vector); + }; + + struct BigIntFromLeBytes { + std::vector inputs; + std::vector modulus; + uint32_t output; + + friend bool operator==(const BigIntFromLeBytes&, const BigIntFromLeBytes&); + std::vector bincodeSerialize() const; + static BigIntFromLeBytes bincodeDeserialize(std::vector); + }; + + struct BigIntToLeBytes { + uint32_t input; + std::vector outputs; + + friend bool operator==(const BigIntToLeBytes&, const BigIntToLeBytes&); + std::vector bincodeSerialize() const; + static BigIntToLeBytes bincodeDeserialize(std::vector); + }; + + struct Poseidon2Permutation { + std::vector inputs; + std::vector outputs; + uint32_t len; + + friend bool operator==(const Poseidon2Permutation&, const Poseidon2Permutation&); + std::vector bincodeSerialize() const; + static Poseidon2Permutation bincodeDeserialize(std::vector); + }; + + struct Sha256Compression { + std::array inputs; + std::array hash_values; + std::array outputs; + + friend bool operator==(const Sha256Compression&, const Sha256Compression&); + std::vector bincodeSerialize() const; + static Sha256Compression bincodeDeserialize(std::vector); + }; + + std::variant value; + + friend bool operator==(const BlackBoxFuncCall&, const BlackBoxFuncCall&); + std::vector bincodeSerialize() const; + static BlackBoxFuncCall bincodeDeserialize(std::vector); + }; + + struct BlockId { + uint32_t value; + + friend bool operator==(const BlockId&, const BlockId&); + std::vector bincodeSerialize() const; + static BlockId bincodeDeserialize(std::vector); + }; + + struct BlockType { + + struct Memory { + friend bool operator==(const Memory&, const Memory&); + std::vector bincodeSerialize() const; + static Memory bincodeDeserialize(std::vector); + }; + + struct CallData { + friend bool operator==(const CallData&, const CallData&); + std::vector bincodeSerialize() const; + static CallData bincodeDeserialize(std::vector); + }; + + struct ReturnData { + friend bool operator==(const ReturnData&, const ReturnData&); + std::vector bincodeSerialize() const; + static ReturnData bincodeDeserialize(std::vector); + }; + + std::variant value; + + friend bool operator==(const BlockType&, const BlockType&); + std::vector bincodeSerialize() const; + static BlockType bincodeDeserialize(std::vector); + }; + + struct Expression { + std::vector> mul_terms; + std::vector> linear_combinations; + std::string q_c; + + friend bool operator==(const Expression&, const Expression&); + std::vector bincodeSerialize() const; + static Expression bincodeDeserialize(std::vector); + }; + + struct BrilligInputs { + + struct Single { + Program::Expression value; + + friend bool operator==(const Single&, const Single&); + std::vector bincodeSerialize() const; + static Single bincodeDeserialize(std::vector); + }; + + struct Array { + std::vector value; + + friend bool operator==(const Array&, const Array&); + std::vector bincodeSerialize() const; + static Array bincodeDeserialize(std::vector); + }; + + struct MemoryArray { + Program::BlockId value; + + friend bool operator==(const MemoryArray&, const MemoryArray&); + std::vector bincodeSerialize() const; + static MemoryArray bincodeDeserialize(std::vector); + }; + + std::variant value; + + friend bool operator==(const BrilligInputs&, const BrilligInputs&); + std::vector bincodeSerialize() const; + static BrilligInputs bincodeDeserialize(std::vector); + }; + + struct BrilligOutputs { + + struct Simple { + Program::Witness value; + + friend bool operator==(const Simple&, const Simple&); + std::vector bincodeSerialize() const; + static Simple bincodeDeserialize(std::vector); + }; + + struct Array { + std::vector value; + + friend bool operator==(const Array&, const Array&); + std::vector bincodeSerialize() const; + static Array bincodeDeserialize(std::vector); + }; + + std::variant value; + + friend bool operator==(const BrilligOutputs&, const BrilligOutputs&); + std::vector bincodeSerialize() const; + static BrilligOutputs bincodeDeserialize(std::vector); + }; + + struct Directive { + + struct ToLeRadix { + Program::Expression a; + std::vector b; + uint32_t radix; + + friend bool operator==(const ToLeRadix&, const ToLeRadix&); + std::vector bincodeSerialize() const; + static ToLeRadix bincodeDeserialize(std::vector); + }; + + std::variant value; + + friend bool operator==(const Directive&, const Directive&); + std::vector bincodeSerialize() const; + static Directive bincodeDeserialize(std::vector); + }; + + struct MemOp { + Program::Expression operation; + Program::Expression index; + Program::Expression value; + + friend bool operator==(const MemOp&, const MemOp&); + std::vector bincodeSerialize() const; + static MemOp bincodeDeserialize(std::vector); + }; + + struct Opcode { + + struct AssertZero { + Program::Expression value; + + friend bool operator==(const AssertZero&, const AssertZero&); + std::vector bincodeSerialize() const; + static AssertZero bincodeDeserialize(std::vector); + }; + + struct BlackBoxFuncCall { + Program::BlackBoxFuncCall value; + + friend bool operator==(const BlackBoxFuncCall&, const BlackBoxFuncCall&); + std::vector bincodeSerialize() const; + static BlackBoxFuncCall bincodeDeserialize(std::vector); + }; + + struct Directive { + Program::Directive value; + + friend bool operator==(const Directive&, const Directive&); + std::vector bincodeSerialize() const; + static Directive bincodeDeserialize(std::vector); + }; + + struct MemoryOp { + Program::BlockId block_id; + Program::MemOp op; + std::optional predicate; + + friend bool operator==(const MemoryOp&, const MemoryOp&); + std::vector bincodeSerialize() const; + static MemoryOp bincodeDeserialize(std::vector); + }; + + struct MemoryInit { + Program::BlockId block_id; + std::vector init; + Program::BlockType block_type; + + friend bool operator==(const MemoryInit&, const MemoryInit&); + std::vector bincodeSerialize() const; + static MemoryInit bincodeDeserialize(std::vector); + }; + + struct BrilligCall { + uint32_t id; + std::vector inputs; + std::vector outputs; + std::optional predicate; + + friend bool operator==(const BrilligCall&, const BrilligCall&); + std::vector bincodeSerialize() const; + static BrilligCall bincodeDeserialize(std::vector); + }; + + struct Call { + uint32_t id; + std::vector inputs; + std::vector outputs; + std::optional predicate; + + friend bool operator==(const Call&, const Call&); + std::vector bincodeSerialize() const; + static Call bincodeDeserialize(std::vector); + }; + + std::variant value; + + friend bool operator==(const Opcode&, const Opcode&); + std::vector bincodeSerialize() const; + static Opcode bincodeDeserialize(std::vector); + }; + + struct BinaryFieldOp { + + struct Add { + friend bool operator==(const Add&, const Add&); + std::vector bincodeSerialize() const; + static Add bincodeDeserialize(std::vector); + }; + + struct Sub { + friend bool operator==(const Sub&, const Sub&); + std::vector bincodeSerialize() const; + static Sub bincodeDeserialize(std::vector); + }; + + struct Mul { + friend bool operator==(const Mul&, const Mul&); + std::vector bincodeSerialize() const; + static Mul bincodeDeserialize(std::vector); + }; + + struct Div { + friend bool operator==(const Div&, const Div&); + std::vector bincodeSerialize() const; + static Div bincodeDeserialize(std::vector); + }; + + struct IntegerDiv { + friend bool operator==(const IntegerDiv&, const IntegerDiv&); + std::vector bincodeSerialize() const; + static IntegerDiv bincodeDeserialize(std::vector); + }; + + struct Equals { + friend bool operator==(const Equals&, const Equals&); + std::vector bincodeSerialize() const; + static Equals bincodeDeserialize(std::vector); + }; + + struct LessThan { + friend bool operator==(const LessThan&, const LessThan&); + std::vector bincodeSerialize() const; + static LessThan bincodeDeserialize(std::vector); + }; + + struct LessThanEquals { + friend bool operator==(const LessThanEquals&, const LessThanEquals&); + std::vector bincodeSerialize() const; + static LessThanEquals bincodeDeserialize(std::vector); + }; + + std::variant value; + + friend bool operator==(const BinaryFieldOp&, const BinaryFieldOp&); + std::vector bincodeSerialize() const; + static BinaryFieldOp bincodeDeserialize(std::vector); + }; + + struct BinaryIntOp { + + struct Add { + friend bool operator==(const Add&, const Add&); + std::vector bincodeSerialize() const; + static Add bincodeDeserialize(std::vector); + }; + + struct Sub { + friend bool operator==(const Sub&, const Sub&); + std::vector bincodeSerialize() const; + static Sub bincodeDeserialize(std::vector); + }; + + struct Mul { + friend bool operator==(const Mul&, const Mul&); + std::vector bincodeSerialize() const; + static Mul bincodeDeserialize(std::vector); + }; + + struct Div { + friend bool operator==(const Div&, const Div&); + std::vector bincodeSerialize() const; + static Div bincodeDeserialize(std::vector); + }; + + struct Equals { + friend bool operator==(const Equals&, const Equals&); + std::vector bincodeSerialize() const; + static Equals bincodeDeserialize(std::vector); + }; + + struct LessThan { + friend bool operator==(const LessThan&, const LessThan&); + std::vector bincodeSerialize() const; + static LessThan bincodeDeserialize(std::vector); + }; + + struct LessThanEquals { + friend bool operator==(const LessThanEquals&, const LessThanEquals&); + std::vector bincodeSerialize() const; + static LessThanEquals bincodeDeserialize(std::vector); + }; + + struct And { + friend bool operator==(const And&, const And&); + std::vector bincodeSerialize() const; + static And bincodeDeserialize(std::vector); + }; + + struct Or { + friend bool operator==(const Or&, const Or&); + std::vector bincodeSerialize() const; + static Or bincodeDeserialize(std::vector); + }; + + struct Xor { + friend bool operator==(const Xor&, const Xor&); + std::vector bincodeSerialize() const; + static Xor bincodeDeserialize(std::vector); + }; + + struct Shl { + friend bool operator==(const Shl&, const Shl&); + std::vector bincodeSerialize() const; + static Shl bincodeDeserialize(std::vector); + }; + + struct Shr { + friend bool operator==(const Shr&, const Shr&); + std::vector bincodeSerialize() const; + static Shr bincodeDeserialize(std::vector); + }; + + std::variant value; + + friend bool operator==(const BinaryIntOp&, const BinaryIntOp&); + std::vector bincodeSerialize() const; + static BinaryIntOp bincodeDeserialize(std::vector); + }; + + struct MemoryAddress { + uint64_t value; + + friend bool operator==(const MemoryAddress&, const MemoryAddress&); + std::vector bincodeSerialize() const; + static MemoryAddress bincodeDeserialize(std::vector); + }; + + struct HeapArray { + Program::MemoryAddress pointer; + uint64_t size; + + friend bool operator==(const HeapArray&, const HeapArray&); + std::vector bincodeSerialize() const; + static HeapArray bincodeDeserialize(std::vector); + }; + + struct HeapVector { + Program::MemoryAddress pointer; + Program::MemoryAddress size; + + friend bool operator==(const HeapVector&, const HeapVector&); + std::vector bincodeSerialize() const; + static HeapVector bincodeDeserialize(std::vector); + }; + + struct BlackBoxOp { + + struct AES128Encrypt { + Program::HeapVector inputs; + Program::HeapArray iv; + Program::HeapArray key; + Program::HeapVector outputs; + + friend bool operator==(const AES128Encrypt&, const AES128Encrypt&); + std::vector bincodeSerialize() const; + static AES128Encrypt bincodeDeserialize(std::vector); + }; + + struct Blake2s { + Program::HeapVector message; + Program::HeapArray output; + + friend bool operator==(const Blake2s&, const Blake2s&); + std::vector bincodeSerialize() const; + static Blake2s bincodeDeserialize(std::vector); + }; + + struct Blake3 { + Program::HeapVector message; + Program::HeapArray output; + + friend bool operator==(const Blake3&, const Blake3&); + std::vector bincodeSerialize() const; + static Blake3 bincodeDeserialize(std::vector); + }; + + struct Keccak256 { + Program::HeapVector message; + Program::HeapArray output; + + friend bool operator==(const Keccak256&, const Keccak256&); + std::vector bincodeSerialize() const; + static Keccak256 bincodeDeserialize(std::vector); + }; + + struct Keccakf1600 { + Program::HeapVector message; + Program::HeapArray output; + + friend bool operator==(const Keccakf1600&, const Keccakf1600&); + std::vector bincodeSerialize() const; + static Keccakf1600 bincodeDeserialize(std::vector); + }; + + struct EcdsaSecp256k1 { + Program::HeapVector hashed_msg; + Program::HeapArray public_key_x; + Program::HeapArray public_key_y; + Program::HeapArray signature; + Program::MemoryAddress result; + + friend bool operator==(const EcdsaSecp256k1&, const EcdsaSecp256k1&); + std::vector bincodeSerialize() const; + static EcdsaSecp256k1 bincodeDeserialize(std::vector); + }; + + struct EcdsaSecp256r1 { + Program::HeapVector hashed_msg; + Program::HeapArray public_key_x; + Program::HeapArray public_key_y; + Program::HeapArray signature; + Program::MemoryAddress result; + + friend bool operator==(const EcdsaSecp256r1&, const EcdsaSecp256r1&); + std::vector bincodeSerialize() const; + static EcdsaSecp256r1 bincodeDeserialize(std::vector); + }; + + struct SchnorrVerify { + Program::MemoryAddress public_key_x; + Program::MemoryAddress public_key_y; + Program::HeapVector message; + Program::HeapVector signature; + Program::MemoryAddress result; + + friend bool operator==(const SchnorrVerify&, const SchnorrVerify&); + std::vector bincodeSerialize() const; + static SchnorrVerify bincodeDeserialize(std::vector); + }; + + struct PedersenCommitment { + Program::HeapVector inputs; + Program::MemoryAddress domain_separator; + Program::HeapArray output; + + friend bool operator==(const PedersenCommitment&, const PedersenCommitment&); + std::vector bincodeSerialize() const; + static PedersenCommitment bincodeDeserialize(std::vector); + }; + + struct PedersenHash { + Program::HeapVector inputs; + Program::MemoryAddress domain_separator; + Program::MemoryAddress output; + + friend bool operator==(const PedersenHash&, const PedersenHash&); + std::vector bincodeSerialize() const; + static PedersenHash bincodeDeserialize(std::vector); + }; + + struct MultiScalarMul { + Program::HeapVector points; + Program::HeapVector scalars; + Program::HeapArray outputs; + + friend bool operator==(const MultiScalarMul&, const MultiScalarMul&); + std::vector bincodeSerialize() const; + static MultiScalarMul bincodeDeserialize(std::vector); + }; + + struct EmbeddedCurveAdd { + Program::MemoryAddress input1_x; + Program::MemoryAddress input1_y; + Program::MemoryAddress input2_x; + Program::MemoryAddress input2_y; + Program::HeapArray result; + + friend bool operator==(const EmbeddedCurveAdd&, const EmbeddedCurveAdd&); + std::vector bincodeSerialize() const; + static EmbeddedCurveAdd bincodeDeserialize(std::vector); + }; + + struct BigIntAdd { + Program::MemoryAddress lhs; + Program::MemoryAddress rhs; + Program::MemoryAddress output; + + friend bool operator==(const BigIntAdd&, const BigIntAdd&); + std::vector bincodeSerialize() const; + static BigIntAdd bincodeDeserialize(std::vector); + }; + + struct BigIntSub { + Program::MemoryAddress lhs; + Program::MemoryAddress rhs; + Program::MemoryAddress output; + + friend bool operator==(const BigIntSub&, const BigIntSub&); + std::vector bincodeSerialize() const; + static BigIntSub bincodeDeserialize(std::vector); + }; + + struct BigIntMul { + Program::MemoryAddress lhs; + Program::MemoryAddress rhs; + Program::MemoryAddress output; + + friend bool operator==(const BigIntMul&, const BigIntMul&); + std::vector bincodeSerialize() const; + static BigIntMul bincodeDeserialize(std::vector); + }; + + struct BigIntDiv { + Program::MemoryAddress lhs; + Program::MemoryAddress rhs; + Program::MemoryAddress output; + + friend bool operator==(const BigIntDiv&, const BigIntDiv&); + std::vector bincodeSerialize() const; + static BigIntDiv bincodeDeserialize(std::vector); + }; + + struct BigIntFromLeBytes { + Program::HeapVector inputs; + Program::HeapVector modulus; + Program::MemoryAddress output; + + friend bool operator==(const BigIntFromLeBytes&, const BigIntFromLeBytes&); + std::vector bincodeSerialize() const; + static BigIntFromLeBytes bincodeDeserialize(std::vector); + }; + + struct BigIntToLeBytes { + Program::MemoryAddress input; + Program::HeapVector output; + + friend bool operator==(const BigIntToLeBytes&, const BigIntToLeBytes&); + std::vector bincodeSerialize() const; + static BigIntToLeBytes bincodeDeserialize(std::vector); + }; + + struct Poseidon2Permutation { + Program::HeapVector message; + Program::HeapArray output; + Program::MemoryAddress len; + + friend bool operator==(const Poseidon2Permutation&, const Poseidon2Permutation&); + std::vector bincodeSerialize() const; + static Poseidon2Permutation bincodeDeserialize(std::vector); + }; + + struct Sha256Compression { + Program::HeapVector input; + Program::HeapVector hash_values; + Program::HeapArray output; + + friend bool operator==(const Sha256Compression&, const Sha256Compression&); + std::vector bincodeSerialize() const; + static Sha256Compression bincodeDeserialize(std::vector); + }; + + std::variant value; + + friend bool operator==(const BlackBoxOp&, const BlackBoxOp&); + std::vector bincodeSerialize() const; + static BlackBoxOp bincodeDeserialize(std::vector); + }; + + struct HeapValueType; + + struct HeapValueType { + + struct Simple { + uint32_t value; + + friend bool operator==(const Simple&, const Simple&); + std::vector bincodeSerialize() const; + static Simple bincodeDeserialize(std::vector); + }; + + struct Array { + std::vector value_types; + uint64_t size; + + friend bool operator==(const Array&, const Array&); + std::vector bincodeSerialize() const; + static Array bincodeDeserialize(std::vector); + }; + + struct Vector { + std::vector value_types; + + friend bool operator==(const Vector&, const Vector&); + std::vector bincodeSerialize() const; + static Vector bincodeDeserialize(std::vector); + }; + + std::variant value; + + friend bool operator==(const HeapValueType&, const HeapValueType&); + std::vector bincodeSerialize() const; + static HeapValueType bincodeDeserialize(std::vector); + }; + + struct ValueOrArray { + + struct MemoryAddress { + Program::MemoryAddress value; + + friend bool operator==(const MemoryAddress&, const MemoryAddress&); + std::vector bincodeSerialize() const; + static MemoryAddress bincodeDeserialize(std::vector); + }; + + struct HeapArray { + Program::HeapArray value; + + friend bool operator==(const HeapArray&, const HeapArray&); + std::vector bincodeSerialize() const; + static HeapArray bincodeDeserialize(std::vector); + }; + + struct HeapVector { + Program::HeapVector value; + + friend bool operator==(const HeapVector&, const HeapVector&); + std::vector bincodeSerialize() const; + static HeapVector bincodeDeserialize(std::vector); + }; + + std::variant value; + + friend bool operator==(const ValueOrArray&, const ValueOrArray&); + std::vector bincodeSerialize() const; + static ValueOrArray bincodeDeserialize(std::vector); + }; + + struct BrilligOpcode { + + struct BinaryFieldOp { + Program::MemoryAddress destination; + Program::BinaryFieldOp op; + Program::MemoryAddress lhs; + Program::MemoryAddress rhs; + + friend bool operator==(const BinaryFieldOp&, const BinaryFieldOp&); + std::vector bincodeSerialize() const; + static BinaryFieldOp bincodeDeserialize(std::vector); + }; + + struct BinaryIntOp { + Program::MemoryAddress destination; + Program::BinaryIntOp op; + uint32_t bit_size; + Program::MemoryAddress lhs; + Program::MemoryAddress rhs; + + friend bool operator==(const BinaryIntOp&, const BinaryIntOp&); + std::vector bincodeSerialize() const; + static BinaryIntOp bincodeDeserialize(std::vector); + }; + + struct Cast { + Program::MemoryAddress destination; + Program::MemoryAddress source; + uint32_t bit_size; + + friend bool operator==(const Cast&, const Cast&); + std::vector bincodeSerialize() const; + static Cast bincodeDeserialize(std::vector); + }; + + struct JumpIfNot { + Program::MemoryAddress condition; + uint64_t location; + + friend bool operator==(const JumpIfNot&, const JumpIfNot&); + std::vector bincodeSerialize() const; + static JumpIfNot bincodeDeserialize(std::vector); + }; + + struct JumpIf { + Program::MemoryAddress condition; + uint64_t location; + + friend bool operator==(const JumpIf&, const JumpIf&); + std::vector bincodeSerialize() const; + static JumpIf bincodeDeserialize(std::vector); + }; + + struct Jump { + uint64_t location; + + friend bool operator==(const Jump&, const Jump&); + std::vector bincodeSerialize() const; + static Jump bincodeDeserialize(std::vector); + }; + + struct CalldataCopy { + Program::MemoryAddress destination_address; + uint64_t size; + uint64_t offset; + + friend bool operator==(const CalldataCopy&, const CalldataCopy&); + std::vector bincodeSerialize() const; + static CalldataCopy bincodeDeserialize(std::vector); + }; + + struct Call { + uint64_t location; + + friend bool operator==(const Call&, const Call&); + std::vector bincodeSerialize() const; + static Call bincodeDeserialize(std::vector); + }; + + struct Const { + Program::MemoryAddress destination; + uint32_t bit_size; + std::string value; + + friend bool operator==(const Const&, const Const&); + std::vector bincodeSerialize() const; + static Const bincodeDeserialize(std::vector); + }; + + struct Return { + friend bool operator==(const Return&, const Return&); + std::vector bincodeSerialize() const; + static Return bincodeDeserialize(std::vector); + }; + + struct ForeignCall { + std::string function; + std::vector destinations; + std::vector destination_value_types; + std::vector inputs; + std::vector input_value_types; + + friend bool operator==(const ForeignCall&, const ForeignCall&); + std::vector bincodeSerialize() const; + static ForeignCall bincodeDeserialize(std::vector); + }; + + struct Mov { + Program::MemoryAddress destination; + Program::MemoryAddress source; + + friend bool operator==(const Mov&, const Mov&); + std::vector bincodeSerialize() const; + static Mov bincodeDeserialize(std::vector); + }; + + struct ConditionalMov { + Program::MemoryAddress destination; + Program::MemoryAddress source_a; + Program::MemoryAddress source_b; + Program::MemoryAddress condition; + + friend bool operator==(const ConditionalMov&, const ConditionalMov&); + std::vector bincodeSerialize() const; + static ConditionalMov bincodeDeserialize(std::vector); + }; + + struct Load { + Program::MemoryAddress destination; + Program::MemoryAddress source_pointer; + + friend bool operator==(const Load&, const Load&); + std::vector bincodeSerialize() const; + static Load bincodeDeserialize(std::vector); + }; + + struct Store { + Program::MemoryAddress destination_pointer; + Program::MemoryAddress source; + + friend bool operator==(const Store&, const Store&); + std::vector bincodeSerialize() const; + static Store bincodeDeserialize(std::vector); + }; + + struct BlackBox { + Program::BlackBoxOp value; + + friend bool operator==(const BlackBox&, const BlackBox&); + std::vector bincodeSerialize() const; + static BlackBox bincodeDeserialize(std::vector); + }; + + struct Trap { + Program::HeapArray revert_data; + + friend bool operator==(const Trap&, const Trap&); + std::vector bincodeSerialize() const; + static Trap bincodeDeserialize(std::vector); + }; + + struct Stop { + uint64_t return_data_offset; + uint64_t return_data_size; + + friend bool operator==(const Stop&, const Stop&); + std::vector bincodeSerialize() const; + static Stop bincodeDeserialize(std::vector); + }; + + std::variant value; + + friend bool operator==(const BrilligOpcode&, const BrilligOpcode&); + std::vector bincodeSerialize() const; + static BrilligOpcode bincodeDeserialize(std::vector); + }; + + struct ExpressionOrMemory { + + struct Expression { + Program::Expression value; + + friend bool operator==(const Expression&, const Expression&); + std::vector bincodeSerialize() const; + static Expression bincodeDeserialize(std::vector); + }; + + struct Memory { + Program::BlockId value; + + friend bool operator==(const Memory&, const Memory&); + std::vector bincodeSerialize() const; + static Memory bincodeDeserialize(std::vector); + }; + + std::variant value; + + friend bool operator==(const ExpressionOrMemory&, const ExpressionOrMemory&); + std::vector bincodeSerialize() const; + static ExpressionOrMemory bincodeDeserialize(std::vector); + }; + + struct AssertionPayload { + + struct StaticString { + std::string value; - std::variant value; + friend bool operator==(const StaticString&, const StaticString&); + std::vector bincodeSerialize() const; + static StaticString bincodeDeserialize(std::vector); + }; + + struct Dynamic { + std::tuple> value; + + friend bool operator==(const Dynamic&, const Dynamic&); + std::vector bincodeSerialize() const; + static Dynamic bincodeDeserialize(std::vector); + }; - friend bool operator==(const AssertionPayload &, const AssertionPayload &); - std::vector bincodeSerialize() const; - static AssertionPayload bincodeDeserialize(std::vector); -}; + std::variant value; -struct ExpressionWidth { + friend bool operator==(const AssertionPayload&, const AssertionPayload&); + std::vector bincodeSerialize() const; + static AssertionPayload bincodeDeserialize(std::vector); + }; - struct Unbounded { - friend bool operator==(const Unbounded &, const Unbounded &); - std::vector bincodeSerialize() const; - static Unbounded bincodeDeserialize(std::vector); - }; + struct ExpressionWidth { - struct Bounded { - uint64_t width; + struct Unbounded { + friend bool operator==(const Unbounded&, const Unbounded&); + std::vector bincodeSerialize() const; + static Unbounded bincodeDeserialize(std::vector); + }; - friend bool operator==(const Bounded &, const Bounded &); - std::vector bincodeSerialize() const; - static Bounded bincodeDeserialize(std::vector); - }; + struct Bounded { + uint64_t width; - std::variant value; + friend bool operator==(const Bounded&, const Bounded&); + std::vector bincodeSerialize() const; + static Bounded bincodeDeserialize(std::vector); + }; - friend bool operator==(const ExpressionWidth &, const ExpressionWidth &); - std::vector bincodeSerialize() const; - static ExpressionWidth bincodeDeserialize(std::vector); -}; + std::variant value; -struct OpcodeLocation { + friend bool operator==(const ExpressionWidth&, const ExpressionWidth&); + std::vector bincodeSerialize() const; + static ExpressionWidth bincodeDeserialize(std::vector); + }; - struct Acir { - uint64_t value; + struct OpcodeLocation { - friend bool operator==(const Acir &, const Acir &); - std::vector bincodeSerialize() const; - static Acir bincodeDeserialize(std::vector); - }; + struct Acir { + uint64_t value; - struct Brillig { - uint64_t acir_index; - uint64_t brillig_index; + friend bool operator==(const Acir&, const Acir&); + std::vector bincodeSerialize() const; + static Acir bincodeDeserialize(std::vector); + }; - friend bool operator==(const Brillig &, const Brillig &); - std::vector bincodeSerialize() const; - static Brillig bincodeDeserialize(std::vector); - }; + struct Brillig { + uint64_t acir_index; + uint64_t brillig_index; - std::variant value; + friend bool operator==(const Brillig&, const Brillig&); + std::vector bincodeSerialize() const; + static Brillig bincodeDeserialize(std::vector); + }; - friend bool operator==(const OpcodeLocation &, const OpcodeLocation &); - std::vector bincodeSerialize() const; - static OpcodeLocation bincodeDeserialize(std::vector); -}; + std::variant value; -struct PublicInputs { - std::vector value; + friend bool operator==(const OpcodeLocation&, const OpcodeLocation&); + std::vector bincodeSerialize() const; + static OpcodeLocation bincodeDeserialize(std::vector); + }; - friend bool operator==(const PublicInputs &, const PublicInputs &); - std::vector bincodeSerialize() const; - static PublicInputs bincodeDeserialize(std::vector); -}; + struct PublicInputs { + std::vector value; -struct Circuit { - uint32_t current_witness_index; - std::vector opcodes; - Program::ExpressionWidth expression_width; - std::vector private_parameters; - Program::PublicInputs public_parameters; - Program::PublicInputs return_values; - std::vector> - assert_messages; - bool recursive; + friend bool operator==(const PublicInputs&, const PublicInputs&); + std::vector bincodeSerialize() const; + static PublicInputs bincodeDeserialize(std::vector); + }; - friend bool operator==(const Circuit &, const Circuit &); - std::vector bincodeSerialize() const; - static Circuit bincodeDeserialize(std::vector); -}; + struct Circuit { + uint32_t current_witness_index; + std::vector opcodes; + Program::ExpressionWidth expression_width; + std::vector private_parameters; + Program::PublicInputs public_parameters; + Program::PublicInputs return_values; + std::vector> assert_messages; + bool recursive; -struct BrilligBytecode { - std::vector bytecode; + friend bool operator==(const Circuit&, const Circuit&); + std::vector bincodeSerialize() const; + static Circuit bincodeDeserialize(std::vector); + }; - friend bool operator==(const BrilligBytecode &, const BrilligBytecode &); - std::vector bincodeSerialize() const; - static BrilligBytecode bincodeDeserialize(std::vector); -}; + struct BrilligBytecode { + std::vector bytecode; -struct Program { - std::vector functions; - std::vector unconstrained_functions; + friend bool operator==(const BrilligBytecode&, const BrilligBytecode&); + std::vector bincodeSerialize() const; + static BrilligBytecode bincodeDeserialize(std::vector); + }; - friend bool operator==(const Program &, const Program &); - std::vector bincodeSerialize() const; - static Program bincodeDeserialize(std::vector); -}; + struct Program { + std::vector functions; + std::vector unconstrained_functions; + + friend bool operator==(const Program&, const Program&); + std::vector bincodeSerialize() const; + static Program bincodeDeserialize(std::vector); + }; } // end of namespace Program + namespace Program { -inline bool operator==(const AssertionPayload &lhs, - const AssertionPayload &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const AssertionPayload &lhs, const AssertionPayload &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector AssertionPayload::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector AssertionPayload::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline AssertionPayload -AssertionPayload::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline AssertionPayload AssertionPayload::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::AssertionPayload &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.value, serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::AssertionPayload &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.value, serializer); + serializer.decrease_container_depth(); } template <> template -Program::AssertionPayload -serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::AssertionPayload obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::AssertionPayload serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::AssertionPayload obj; + obj.value = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const AssertionPayload::StaticString &lhs, - const AssertionPayload::StaticString &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const AssertionPayload::StaticString &lhs, const AssertionPayload::StaticString &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector -AssertionPayload::StaticString::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); -} + inline std::vector AssertionPayload::StaticString::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline AssertionPayload::StaticString -AssertionPayload::StaticString::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline AssertionPayload::StaticString AssertionPayload::StaticString::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::AssertionPayload::StaticString &obj, - Serializer &serializer) { - serde::Serializable::serialize(obj.value, serializer); +void serde::Serializable::serialize(const Program::AssertionPayload::StaticString &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.value, serializer); } template <> template -Program::AssertionPayload::StaticString -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::AssertionPayload::StaticString obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::AssertionPayload::StaticString serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::AssertionPayload::StaticString obj; + obj.value = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const AssertionPayload::Dynamic &lhs, - const AssertionPayload::Dynamic &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const AssertionPayload::Dynamic &lhs, const AssertionPayload::Dynamic &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector -AssertionPayload::Dynamic::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector AssertionPayload::Dynamic::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline AssertionPayload::Dynamic -AssertionPayload::Dynamic::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline AssertionPayload::Dynamic AssertionPayload::Dynamic::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::AssertionPayload::Dynamic &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.value, serializer); +void serde::Serializable::serialize(const Program::AssertionPayload::Dynamic &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.value, serializer); } template <> template -Program::AssertionPayload::Dynamic -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::AssertionPayload::Dynamic obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::AssertionPayload::Dynamic serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::AssertionPayload::Dynamic obj; + obj.value = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BinaryFieldOp &lhs, const BinaryFieldOp &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const BinaryFieldOp &lhs, const BinaryFieldOp &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector BinaryFieldOp::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BinaryFieldOp::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BinaryFieldOp -BinaryFieldOp::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BinaryFieldOp BinaryFieldOp::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BinaryFieldOp &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.value, serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::BinaryFieldOp &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.value, serializer); + serializer.decrease_container_depth(); } template <> template -Program::BinaryFieldOp -serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::BinaryFieldOp obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::BinaryFieldOp serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::BinaryFieldOp obj; + obj.value = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const BinaryFieldOp::Add &lhs, - const BinaryFieldOp::Add &rhs) { - return true; -} + inline bool operator==(const BinaryFieldOp::Add &lhs, const BinaryFieldOp::Add &rhs) { + return true; + } -inline std::vector BinaryFieldOp::Add::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BinaryFieldOp::Add::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BinaryFieldOp::Add -BinaryFieldOp::Add::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BinaryFieldOp::Add BinaryFieldOp::Add::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BinaryFieldOp::Add &obj, Serializer &serializer) {} +void serde::Serializable::serialize(const Program::BinaryFieldOp::Add &obj, Serializer &serializer) { +} template <> template -Program::BinaryFieldOp::Add -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryFieldOp::Add obj; - return obj; +Program::BinaryFieldOp::Add serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryFieldOp::Add obj; + return obj; } namespace Program { -inline bool operator==(const BinaryFieldOp::Sub &lhs, - const BinaryFieldOp::Sub &rhs) { - return true; -} + inline bool operator==(const BinaryFieldOp::Sub &lhs, const BinaryFieldOp::Sub &rhs) { + return true; + } -inline std::vector BinaryFieldOp::Sub::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BinaryFieldOp::Sub::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BinaryFieldOp::Sub -BinaryFieldOp::Sub::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BinaryFieldOp::Sub BinaryFieldOp::Sub::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BinaryFieldOp::Sub &obj, Serializer &serializer) {} +void serde::Serializable::serialize(const Program::BinaryFieldOp::Sub &obj, Serializer &serializer) { +} template <> template -Program::BinaryFieldOp::Sub -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryFieldOp::Sub obj; - return obj; +Program::BinaryFieldOp::Sub serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryFieldOp::Sub obj; + return obj; } namespace Program { -inline bool operator==(const BinaryFieldOp::Mul &lhs, - const BinaryFieldOp::Mul &rhs) { - return true; -} + inline bool operator==(const BinaryFieldOp::Mul &lhs, const BinaryFieldOp::Mul &rhs) { + return true; + } -inline std::vector BinaryFieldOp::Mul::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BinaryFieldOp::Mul::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BinaryFieldOp::Mul -BinaryFieldOp::Mul::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BinaryFieldOp::Mul BinaryFieldOp::Mul::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BinaryFieldOp::Mul &obj, Serializer &serializer) {} +void serde::Serializable::serialize(const Program::BinaryFieldOp::Mul &obj, Serializer &serializer) { +} template <> template -Program::BinaryFieldOp::Mul -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryFieldOp::Mul obj; - return obj; +Program::BinaryFieldOp::Mul serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryFieldOp::Mul obj; + return obj; } namespace Program { -inline bool operator==(const BinaryFieldOp::Div &lhs, - const BinaryFieldOp::Div &rhs) { - return true; -} + inline bool operator==(const BinaryFieldOp::Div &lhs, const BinaryFieldOp::Div &rhs) { + return true; + } -inline std::vector BinaryFieldOp::Div::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BinaryFieldOp::Div::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BinaryFieldOp::Div -BinaryFieldOp::Div::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BinaryFieldOp::Div BinaryFieldOp::Div::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BinaryFieldOp::Div &obj, Serializer &serializer) {} +void serde::Serializable::serialize(const Program::BinaryFieldOp::Div &obj, Serializer &serializer) { +} template <> template -Program::BinaryFieldOp::Div -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryFieldOp::Div obj; - return obj; +Program::BinaryFieldOp::Div serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryFieldOp::Div obj; + return obj; } namespace Program { -inline bool operator==(const BinaryFieldOp::IntegerDiv &lhs, - const BinaryFieldOp::IntegerDiv &rhs) { - return true; -} + inline bool operator==(const BinaryFieldOp::IntegerDiv &lhs, const BinaryFieldOp::IntegerDiv &rhs) { + return true; + } -inline std::vector -BinaryFieldOp::IntegerDiv::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BinaryFieldOp::IntegerDiv::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BinaryFieldOp::IntegerDiv -BinaryFieldOp::IntegerDiv::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BinaryFieldOp::IntegerDiv BinaryFieldOp::IntegerDiv::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BinaryFieldOp::IntegerDiv &obj, Serializer &serializer) {} +void serde::Serializable::serialize(const Program::BinaryFieldOp::IntegerDiv &obj, Serializer &serializer) { +} template <> template -Program::BinaryFieldOp::IntegerDiv -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryFieldOp::IntegerDiv obj; - return obj; +Program::BinaryFieldOp::IntegerDiv serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryFieldOp::IntegerDiv obj; + return obj; } namespace Program { -inline bool operator==(const BinaryFieldOp::Equals &lhs, - const BinaryFieldOp::Equals &rhs) { - return true; -} + inline bool operator==(const BinaryFieldOp::Equals &lhs, const BinaryFieldOp::Equals &rhs) { + return true; + } -inline std::vector BinaryFieldOp::Equals::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BinaryFieldOp::Equals::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BinaryFieldOp::Equals -BinaryFieldOp::Equals::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BinaryFieldOp::Equals BinaryFieldOp::Equals::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BinaryFieldOp::Equals &obj, Serializer &serializer) {} +void serde::Serializable::serialize(const Program::BinaryFieldOp::Equals &obj, Serializer &serializer) { +} template <> template -Program::BinaryFieldOp::Equals -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryFieldOp::Equals obj; - return obj; +Program::BinaryFieldOp::Equals serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryFieldOp::Equals obj; + return obj; } namespace Program { -inline bool operator==(const BinaryFieldOp::LessThan &lhs, - const BinaryFieldOp::LessThan &rhs) { - return true; -} + inline bool operator==(const BinaryFieldOp::LessThan &lhs, const BinaryFieldOp::LessThan &rhs) { + return true; + } -inline std::vector BinaryFieldOp::LessThan::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BinaryFieldOp::LessThan::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BinaryFieldOp::LessThan -BinaryFieldOp::LessThan::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BinaryFieldOp::LessThan BinaryFieldOp::LessThan::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BinaryFieldOp::LessThan &obj, Serializer &serializer) {} +void serde::Serializable::serialize(const Program::BinaryFieldOp::LessThan &obj, Serializer &serializer) { +} template <> template -Program::BinaryFieldOp::LessThan -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryFieldOp::LessThan obj; - return obj; +Program::BinaryFieldOp::LessThan serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryFieldOp::LessThan obj; + return obj; } namespace Program { -inline bool operator==(const BinaryFieldOp::LessThanEquals &lhs, - const BinaryFieldOp::LessThanEquals &rhs) { - return true; -} + inline bool operator==(const BinaryFieldOp::LessThanEquals &lhs, const BinaryFieldOp::LessThanEquals &rhs) { + return true; + } -inline std::vector -BinaryFieldOp::LessThanEquals::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); -} + inline std::vector BinaryFieldOp::LessThanEquals::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BinaryFieldOp::LessThanEquals -BinaryFieldOp::LessThanEquals::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BinaryFieldOp::LessThanEquals BinaryFieldOp::LessThanEquals::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BinaryFieldOp::LessThanEquals &obj, Serializer &serializer) { +void serde::Serializable::serialize(const Program::BinaryFieldOp::LessThanEquals &obj, Serializer &serializer) { } template <> template -Program::BinaryFieldOp::LessThanEquals -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryFieldOp::LessThanEquals obj; - return obj; +Program::BinaryFieldOp::LessThanEquals serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryFieldOp::LessThanEquals obj; + return obj; } namespace Program { -inline bool operator==(const BinaryIntOp &lhs, const BinaryIntOp &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const BinaryIntOp &lhs, const BinaryIntOp &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector BinaryIntOp::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BinaryIntOp::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BinaryIntOp BinaryIntOp::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BinaryIntOp BinaryIntOp::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BinaryIntOp &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.value, serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::BinaryIntOp &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.value, serializer); + serializer.decrease_container_depth(); } template <> template -Program::BinaryIntOp serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::BinaryIntOp obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::BinaryIntOp serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::BinaryIntOp obj; + obj.value = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const BinaryIntOp::Add &lhs, - const BinaryIntOp::Add &rhs) { - return true; -} + inline bool operator==(const BinaryIntOp::Add &lhs, const BinaryIntOp::Add &rhs) { + return true; + } -inline std::vector BinaryIntOp::Add::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BinaryIntOp::Add::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BinaryIntOp::Add -BinaryIntOp::Add::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BinaryIntOp::Add BinaryIntOp::Add::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BinaryIntOp::Add &obj, Serializer &serializer) {} +void serde::Serializable::serialize(const Program::BinaryIntOp::Add &obj, Serializer &serializer) { +} template <> template -Program::BinaryIntOp::Add -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryIntOp::Add obj; - return obj; +Program::BinaryIntOp::Add serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryIntOp::Add obj; + return obj; } namespace Program { -inline bool operator==(const BinaryIntOp::Sub &lhs, - const BinaryIntOp::Sub &rhs) { - return true; -} + inline bool operator==(const BinaryIntOp::Sub &lhs, const BinaryIntOp::Sub &rhs) { + return true; + } -inline std::vector BinaryIntOp::Sub::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BinaryIntOp::Sub::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BinaryIntOp::Sub -BinaryIntOp::Sub::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BinaryIntOp::Sub BinaryIntOp::Sub::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BinaryIntOp::Sub &obj, Serializer &serializer) {} +void serde::Serializable::serialize(const Program::BinaryIntOp::Sub &obj, Serializer &serializer) { +} template <> template -Program::BinaryIntOp::Sub -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryIntOp::Sub obj; - return obj; +Program::BinaryIntOp::Sub serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryIntOp::Sub obj; + return obj; } namespace Program { -inline bool operator==(const BinaryIntOp::Mul &lhs, - const BinaryIntOp::Mul &rhs) { - return true; -} + inline bool operator==(const BinaryIntOp::Mul &lhs, const BinaryIntOp::Mul &rhs) { + return true; + } -inline std::vector BinaryIntOp::Mul::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BinaryIntOp::Mul::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BinaryIntOp::Mul -BinaryIntOp::Mul::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BinaryIntOp::Mul BinaryIntOp::Mul::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BinaryIntOp::Mul &obj, Serializer &serializer) {} +void serde::Serializable::serialize(const Program::BinaryIntOp::Mul &obj, Serializer &serializer) { +} template <> template -Program::BinaryIntOp::Mul -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryIntOp::Mul obj; - return obj; +Program::BinaryIntOp::Mul serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryIntOp::Mul obj; + return obj; } namespace Program { -inline bool operator==(const BinaryIntOp::Div &lhs, - const BinaryIntOp::Div &rhs) { - return true; -} + inline bool operator==(const BinaryIntOp::Div &lhs, const BinaryIntOp::Div &rhs) { + return true; + } -inline std::vector BinaryIntOp::Div::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BinaryIntOp::Div::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BinaryIntOp::Div -BinaryIntOp::Div::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BinaryIntOp::Div BinaryIntOp::Div::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BinaryIntOp::Div &obj, Serializer &serializer) {} +void serde::Serializable::serialize(const Program::BinaryIntOp::Div &obj, Serializer &serializer) { +} template <> template -Program::BinaryIntOp::Div -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryIntOp::Div obj; - return obj; +Program::BinaryIntOp::Div serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryIntOp::Div obj; + return obj; } namespace Program { -inline bool operator==(const BinaryIntOp::Equals &lhs, - const BinaryIntOp::Equals &rhs) { - return true; -} + inline bool operator==(const BinaryIntOp::Equals &lhs, const BinaryIntOp::Equals &rhs) { + return true; + } -inline std::vector BinaryIntOp::Equals::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BinaryIntOp::Equals::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BinaryIntOp::Equals -BinaryIntOp::Equals::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BinaryIntOp::Equals BinaryIntOp::Equals::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BinaryIntOp::Equals &obj, Serializer &serializer) {} +void serde::Serializable::serialize(const Program::BinaryIntOp::Equals &obj, Serializer &serializer) { +} template <> template -Program::BinaryIntOp::Equals -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryIntOp::Equals obj; - return obj; +Program::BinaryIntOp::Equals serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryIntOp::Equals obj; + return obj; } namespace Program { -inline bool operator==(const BinaryIntOp::LessThan &lhs, - const BinaryIntOp::LessThan &rhs) { - return true; -} + inline bool operator==(const BinaryIntOp::LessThan &lhs, const BinaryIntOp::LessThan &rhs) { + return true; + } -inline std::vector BinaryIntOp::LessThan::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BinaryIntOp::LessThan::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BinaryIntOp::LessThan -BinaryIntOp::LessThan::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BinaryIntOp::LessThan BinaryIntOp::LessThan::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BinaryIntOp::LessThan &obj, Serializer &serializer) {} +void serde::Serializable::serialize(const Program::BinaryIntOp::LessThan &obj, Serializer &serializer) { +} template <> template -Program::BinaryIntOp::LessThan -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryIntOp::LessThan obj; - return obj; +Program::BinaryIntOp::LessThan serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryIntOp::LessThan obj; + return obj; } namespace Program { -inline bool operator==(const BinaryIntOp::LessThanEquals &lhs, - const BinaryIntOp::LessThanEquals &rhs) { - return true; -} + inline bool operator==(const BinaryIntOp::LessThanEquals &lhs, const BinaryIntOp::LessThanEquals &rhs) { + return true; + } -inline std::vector -BinaryIntOp::LessThanEquals::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); -} + inline std::vector BinaryIntOp::LessThanEquals::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BinaryIntOp::LessThanEquals -BinaryIntOp::LessThanEquals::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BinaryIntOp::LessThanEquals BinaryIntOp::LessThanEquals::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BinaryIntOp::LessThanEquals &obj, Serializer &serializer) {} +void serde::Serializable::serialize(const Program::BinaryIntOp::LessThanEquals &obj, Serializer &serializer) { +} template <> template -Program::BinaryIntOp::LessThanEquals -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryIntOp::LessThanEquals obj; - return obj; +Program::BinaryIntOp::LessThanEquals serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryIntOp::LessThanEquals obj; + return obj; } namespace Program { -inline bool operator==(const BinaryIntOp::And &lhs, - const BinaryIntOp::And &rhs) { - return true; -} + inline bool operator==(const BinaryIntOp::And &lhs, const BinaryIntOp::And &rhs) { + return true; + } -inline std::vector BinaryIntOp::And::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BinaryIntOp::And::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BinaryIntOp::And -BinaryIntOp::And::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BinaryIntOp::And BinaryIntOp::And::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BinaryIntOp::And &obj, Serializer &serializer) {} +void serde::Serializable::serialize(const Program::BinaryIntOp::And &obj, Serializer &serializer) { +} template <> template -Program::BinaryIntOp::And -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryIntOp::And obj; - return obj; +Program::BinaryIntOp::And serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryIntOp::And obj; + return obj; } namespace Program { -inline bool operator==(const BinaryIntOp::Or &lhs, const BinaryIntOp::Or &rhs) { - return true; -} + inline bool operator==(const BinaryIntOp::Or &lhs, const BinaryIntOp::Or &rhs) { + return true; + } -inline std::vector BinaryIntOp::Or::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BinaryIntOp::Or::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BinaryIntOp::Or -BinaryIntOp::Or::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BinaryIntOp::Or BinaryIntOp::Or::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BinaryIntOp::Or &obj, Serializer &serializer) {} +void serde::Serializable::serialize(const Program::BinaryIntOp::Or &obj, Serializer &serializer) { +} template <> template -Program::BinaryIntOp::Or -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryIntOp::Or obj; - return obj; +Program::BinaryIntOp::Or serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryIntOp::Or obj; + return obj; } namespace Program { -inline bool operator==(const BinaryIntOp::Xor &lhs, - const BinaryIntOp::Xor &rhs) { - return true; -} + inline bool operator==(const BinaryIntOp::Xor &lhs, const BinaryIntOp::Xor &rhs) { + return true; + } -inline std::vector BinaryIntOp::Xor::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BinaryIntOp::Xor::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BinaryIntOp::Xor -BinaryIntOp::Xor::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BinaryIntOp::Xor BinaryIntOp::Xor::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BinaryIntOp::Xor &obj, Serializer &serializer) {} +void serde::Serializable::serialize(const Program::BinaryIntOp::Xor &obj, Serializer &serializer) { +} template <> template -Program::BinaryIntOp::Xor -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryIntOp::Xor obj; - return obj; +Program::BinaryIntOp::Xor serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryIntOp::Xor obj; + return obj; } namespace Program { -inline bool operator==(const BinaryIntOp::Shl &lhs, - const BinaryIntOp::Shl &rhs) { - return true; -} + inline bool operator==(const BinaryIntOp::Shl &lhs, const BinaryIntOp::Shl &rhs) { + return true; + } -inline std::vector BinaryIntOp::Shl::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BinaryIntOp::Shl::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BinaryIntOp::Shl -BinaryIntOp::Shl::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BinaryIntOp::Shl BinaryIntOp::Shl::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BinaryIntOp::Shl &obj, Serializer &serializer) {} +void serde::Serializable::serialize(const Program::BinaryIntOp::Shl &obj, Serializer &serializer) { +} template <> template -Program::BinaryIntOp::Shl -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryIntOp::Shl obj; - return obj; +Program::BinaryIntOp::Shl serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryIntOp::Shl obj; + return obj; } namespace Program { -inline bool operator==(const BinaryIntOp::Shr &lhs, - const BinaryIntOp::Shr &rhs) { - return true; -} + inline bool operator==(const BinaryIntOp::Shr &lhs, const BinaryIntOp::Shr &rhs) { + return true; + } -inline std::vector BinaryIntOp::Shr::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BinaryIntOp::Shr::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BinaryIntOp::Shr -BinaryIntOp::Shr::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BinaryIntOp::Shr BinaryIntOp::Shr::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BinaryIntOp::Shr &obj, Serializer &serializer) {} +void serde::Serializable::serialize(const Program::BinaryIntOp::Shr &obj, Serializer &serializer) { +} template <> template -Program::BinaryIntOp::Shr -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryIntOp::Shr obj; - return obj; +Program::BinaryIntOp::Shr serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryIntOp::Shr obj; + return obj; } namespace Program { -inline bool operator==(const BlackBoxFuncCall &lhs, - const BlackBoxFuncCall &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxFuncCall &lhs, const BlackBoxFuncCall &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector BlackBoxFuncCall::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxFuncCall::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxFuncCall -BlackBoxFuncCall::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxFuncCall BlackBoxFuncCall::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxFuncCall &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.value, serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::BlackBoxFuncCall &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.value, serializer); + serializer.decrease_container_depth(); } template <> template -Program::BlackBoxFuncCall -serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::BlackBoxFuncCall obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::BlackBoxFuncCall serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::BlackBoxFuncCall obj; + obj.value = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const BlackBoxFuncCall::AES128Encrypt &lhs, - const BlackBoxFuncCall::AES128Encrypt &rhs) { - if (!(lhs.inputs == rhs.inputs)) { - return false; - } - if (!(lhs.iv == rhs.iv)) { - return false; - } - if (!(lhs.key == rhs.key)) { - return false; - } - if (!(lhs.outputs == rhs.outputs)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxFuncCall::AES128Encrypt &lhs, const BlackBoxFuncCall::AES128Encrypt &rhs) { + if (!(lhs.inputs == rhs.inputs)) { return false; } + if (!(lhs.iv == rhs.iv)) { return false; } + if (!(lhs.key == rhs.key)) { return false; } + if (!(lhs.outputs == rhs.outputs)) { return false; } + return true; + } -inline std::vector -BlackBoxFuncCall::AES128Encrypt::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxFuncCall::AES128Encrypt::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxFuncCall::AES128Encrypt -BlackBoxFuncCall::AES128Encrypt::bincodeDeserialize( - std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxFuncCall::AES128Encrypt BlackBoxFuncCall::AES128Encrypt::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxFuncCall::AES128Encrypt &obj, - Serializer &serializer) { - serde::Serializable::serialize(obj.inputs, serializer); - serde::Serializable::serialize(obj.iv, serializer); - serde::Serializable::serialize(obj.key, serializer); - serde::Serializable::serialize(obj.outputs, - serializer); +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::AES128Encrypt &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.inputs, serializer); + serde::Serializable::serialize(obj.iv, serializer); + serde::Serializable::serialize(obj.key, serializer); + serde::Serializable::serialize(obj.outputs, serializer); } template <> template -Program::BlackBoxFuncCall::AES128Encrypt -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxFuncCall::AES128Encrypt obj; - obj.inputs = - serde::Deserializable::deserialize(deserializer); - obj.iv = serde::Deserializable::deserialize(deserializer); - obj.key = serde::Deserializable::deserialize(deserializer); - obj.outputs = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxFuncCall::AES128Encrypt serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::AES128Encrypt obj; + obj.inputs = serde::Deserializable::deserialize(deserializer); + obj.iv = serde::Deserializable::deserialize(deserializer); + obj.key = serde::Deserializable::deserialize(deserializer); + obj.outputs = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxFuncCall::AND &lhs, - const BlackBoxFuncCall::AND &rhs) { - if (!(lhs.lhs == rhs.lhs)) { - return false; - } - if (!(lhs.rhs == rhs.rhs)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxFuncCall::AND &lhs, const BlackBoxFuncCall::AND &rhs) { + if (!(lhs.lhs == rhs.lhs)) { return false; } + if (!(lhs.rhs == rhs.rhs)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } -inline std::vector BlackBoxFuncCall::AND::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxFuncCall::AND::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxFuncCall::AND -BlackBoxFuncCall::AND::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxFuncCall::AND BlackBoxFuncCall::AND::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxFuncCall::AND &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.lhs, serializer); - serde::Serializable::serialize(obj.rhs, serializer); - serde::Serializable::serialize(obj.output, serializer); +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::AND &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.lhs, serializer); + serde::Serializable::serialize(obj.rhs, serializer); + serde::Serializable::serialize(obj.output, serializer); } template <> template -Program::BlackBoxFuncCall::AND -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxFuncCall::AND obj; - obj.lhs = serde::Deserializable::deserialize(deserializer); - obj.rhs = serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxFuncCall::AND serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::AND obj; + obj.lhs = serde::Deserializable::deserialize(deserializer); + obj.rhs = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxFuncCall::XOR &lhs, - const BlackBoxFuncCall::XOR &rhs) { - if (!(lhs.lhs == rhs.lhs)) { - return false; - } - if (!(lhs.rhs == rhs.rhs)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxFuncCall::XOR &lhs, const BlackBoxFuncCall::XOR &rhs) { + if (!(lhs.lhs == rhs.lhs)) { return false; } + if (!(lhs.rhs == rhs.rhs)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } -inline std::vector BlackBoxFuncCall::XOR::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxFuncCall::XOR::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxFuncCall::XOR -BlackBoxFuncCall::XOR::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxFuncCall::XOR BlackBoxFuncCall::XOR::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxFuncCall::XOR &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.lhs, serializer); - serde::Serializable::serialize(obj.rhs, serializer); - serde::Serializable::serialize(obj.output, serializer); +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::XOR &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.lhs, serializer); + serde::Serializable::serialize(obj.rhs, serializer); + serde::Serializable::serialize(obj.output, serializer); } template <> template -Program::BlackBoxFuncCall::XOR -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxFuncCall::XOR obj; - obj.lhs = serde::Deserializable::deserialize(deserializer); - obj.rhs = serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxFuncCall::XOR serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::XOR obj; + obj.lhs = serde::Deserializable::deserialize(deserializer); + obj.rhs = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxFuncCall::RANGE &lhs, - const BlackBoxFuncCall::RANGE &rhs) { - if (!(lhs.input == rhs.input)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxFuncCall::RANGE &lhs, const BlackBoxFuncCall::RANGE &rhs) { + if (!(lhs.input == rhs.input)) { return false; } + return true; + } -inline std::vector BlackBoxFuncCall::RANGE::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxFuncCall::RANGE::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxFuncCall::RANGE -BlackBoxFuncCall::RANGE::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxFuncCall::RANGE BlackBoxFuncCall::RANGE::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxFuncCall::RANGE &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.input, serializer); +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::RANGE &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.input, serializer); } template <> template -Program::BlackBoxFuncCall::RANGE -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxFuncCall::RANGE obj; - obj.input = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxFuncCall::RANGE serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::RANGE obj; + obj.input = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxFuncCall::Blake2s &lhs, - const BlackBoxFuncCall::Blake2s &rhs) { - if (!(lhs.inputs == rhs.inputs)) { - return false; - } - if (!(lhs.outputs == rhs.outputs)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxFuncCall::Blake2s &lhs, const BlackBoxFuncCall::Blake2s &rhs) { + if (!(lhs.inputs == rhs.inputs)) { return false; } + if (!(lhs.outputs == rhs.outputs)) { return false; } + return true; + } -inline std::vector -BlackBoxFuncCall::Blake2s::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxFuncCall::Blake2s::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxFuncCall::Blake2s -BlackBoxFuncCall::Blake2s::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxFuncCall::Blake2s BlackBoxFuncCall::Blake2s::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxFuncCall::Blake2s &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.inputs, serializer); - serde::Serializable::serialize(obj.outputs, - serializer); +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::Blake2s &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.inputs, serializer); + serde::Serializable::serialize(obj.outputs, serializer); } template <> template -Program::BlackBoxFuncCall::Blake2s -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxFuncCall::Blake2s obj; - obj.inputs = - serde::Deserializable::deserialize(deserializer); - obj.outputs = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxFuncCall::Blake2s serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::Blake2s obj; + obj.inputs = serde::Deserializable::deserialize(deserializer); + obj.outputs = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxFuncCall::Blake3 &lhs, - const BlackBoxFuncCall::Blake3 &rhs) { - if (!(lhs.inputs == rhs.inputs)) { - return false; - } - if (!(lhs.outputs == rhs.outputs)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxFuncCall::Blake3 &lhs, const BlackBoxFuncCall::Blake3 &rhs) { + if (!(lhs.inputs == rhs.inputs)) { return false; } + if (!(lhs.outputs == rhs.outputs)) { return false; } + return true; + } -inline std::vector BlackBoxFuncCall::Blake3::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxFuncCall::Blake3::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxFuncCall::Blake3 -BlackBoxFuncCall::Blake3::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxFuncCall::Blake3 BlackBoxFuncCall::Blake3::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxFuncCall::Blake3 &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.inputs, serializer); - serde::Serializable::serialize(obj.outputs, - serializer); +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::Blake3 &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.inputs, serializer); + serde::Serializable::serialize(obj.outputs, serializer); } template <> template -Program::BlackBoxFuncCall::Blake3 -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxFuncCall::Blake3 obj; - obj.inputs = - serde::Deserializable::deserialize(deserializer); - obj.outputs = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxFuncCall::Blake3 serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::Blake3 obj; + obj.inputs = serde::Deserializable::deserialize(deserializer); + obj.outputs = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxFuncCall::SchnorrVerify &lhs, - const BlackBoxFuncCall::SchnorrVerify &rhs) { - if (!(lhs.public_key_x == rhs.public_key_x)) { - return false; - } - if (!(lhs.public_key_y == rhs.public_key_y)) { - return false; - } - if (!(lhs.signature == rhs.signature)) { - return false; - } - if (!(lhs.message == rhs.message)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxFuncCall::SchnorrVerify &lhs, const BlackBoxFuncCall::SchnorrVerify &rhs) { + if (!(lhs.public_key_x == rhs.public_key_x)) { return false; } + if (!(lhs.public_key_y == rhs.public_key_y)) { return false; } + if (!(lhs.signature == rhs.signature)) { return false; } + if (!(lhs.message == rhs.message)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } -inline std::vector -BlackBoxFuncCall::SchnorrVerify::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxFuncCall::SchnorrVerify::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxFuncCall::SchnorrVerify -BlackBoxFuncCall::SchnorrVerify::bincodeDeserialize( - std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxFuncCall::SchnorrVerify BlackBoxFuncCall::SchnorrVerify::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxFuncCall::SchnorrVerify &obj, - Serializer &serializer) { - serde::Serializable::serialize(obj.public_key_x, - serializer); - serde::Serializable::serialize(obj.public_key_y, - serializer); - serde::Serializable::serialize(obj.signature, - serializer); - serde::Serializable::serialize(obj.message, - serializer); - serde::Serializable::serialize(obj.output, serializer); +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::SchnorrVerify &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.public_key_x, serializer); + serde::Serializable::serialize(obj.public_key_y, serializer); + serde::Serializable::serialize(obj.signature, serializer); + serde::Serializable::serialize(obj.message, serializer); + serde::Serializable::serialize(obj.output, serializer); } template <> template -Program::BlackBoxFuncCall::SchnorrVerify -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxFuncCall::SchnorrVerify obj; - obj.public_key_x = - serde::Deserializable::deserialize( - deserializer); - obj.public_key_y = - serde::Deserializable::deserialize( - deserializer); - obj.signature = - serde::Deserializable::deserialize(deserializer); - obj.message = - serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; -} - -namespace Program { - -inline bool operator==(const BlackBoxFuncCall::PedersenCommitment &lhs, - const BlackBoxFuncCall::PedersenCommitment &rhs) { - if (!(lhs.inputs == rhs.inputs)) { - return false; - } - if (!(lhs.domain_separator == rhs.domain_separator)) { - return false; - } - if (!(lhs.outputs == rhs.outputs)) { - return false; - } - return true; +Program::BlackBoxFuncCall::SchnorrVerify serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::SchnorrVerify obj; + obj.public_key_x = serde::Deserializable::deserialize(deserializer); + obj.public_key_y = serde::Deserializable::deserialize(deserializer); + obj.signature = serde::Deserializable::deserialize(deserializer); + obj.message = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; } -inline std::vector -BlackBoxFuncCall::PedersenCommitment::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize( - *this, serializer); - return std::move(serializer).bytes(); -} +namespace Program { -inline BlackBoxFuncCall::PedersenCommitment -BlackBoxFuncCall::PedersenCommitment::bincodeDeserialize( - std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline bool operator==(const BlackBoxFuncCall::PedersenCommitment &lhs, const BlackBoxFuncCall::PedersenCommitment &rhs) { + if (!(lhs.inputs == rhs.inputs)) { return false; } + if (!(lhs.domain_separator == rhs.domain_separator)) { return false; } + if (!(lhs.outputs == rhs.outputs)) { return false; } + return true; + } + + inline std::vector BlackBoxFuncCall::PedersenCommitment::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BlackBoxFuncCall::PedersenCommitment BlackBoxFuncCall::PedersenCommitment::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable:: - serialize(const Program::BlackBoxFuncCall::PedersenCommitment &obj, - Serializer &serializer) { - serde::Serializable::serialize(obj.inputs, serializer); - serde::Serializable::serialize( - obj.domain_separator, serializer); - serde::Serializable::serialize(obj.outputs, - serializer); +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::PedersenCommitment &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.inputs, serializer); + serde::Serializable::serialize(obj.domain_separator, serializer); + serde::Serializable::serialize(obj.outputs, serializer); } template <> template -Program::BlackBoxFuncCall::PedersenCommitment -serde::Deserializable:: - deserialize(Deserializer &deserializer) { - Program::BlackBoxFuncCall::PedersenCommitment obj; - obj.inputs = - serde::Deserializable::deserialize(deserializer); - obj.domain_separator = - serde::Deserializable::deserialize( - deserializer); - obj.outputs = - serde::Deserializable::deserialize(deserializer); - return obj; -} - -namespace Program { - -inline bool operator==(const BlackBoxFuncCall::PedersenHash &lhs, - const BlackBoxFuncCall::PedersenHash &rhs) { - if (!(lhs.inputs == rhs.inputs)) { - return false; - } - if (!(lhs.domain_separator == rhs.domain_separator)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; +Program::BlackBoxFuncCall::PedersenCommitment serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::PedersenCommitment obj; + obj.inputs = serde::Deserializable::deserialize(deserializer); + obj.domain_separator = serde::Deserializable::deserialize(deserializer); + obj.outputs = serde::Deserializable::deserialize(deserializer); + return obj; } -inline std::vector -BlackBoxFuncCall::PedersenHash::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); -} +namespace Program { -inline BlackBoxFuncCall::PedersenHash -BlackBoxFuncCall::PedersenHash::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline bool operator==(const BlackBoxFuncCall::PedersenHash &lhs, const BlackBoxFuncCall::PedersenHash &rhs) { + if (!(lhs.inputs == rhs.inputs)) { return false; } + if (!(lhs.domain_separator == rhs.domain_separator)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } + + inline std::vector BlackBoxFuncCall::PedersenHash::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BlackBoxFuncCall::PedersenHash BlackBoxFuncCall::PedersenHash::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxFuncCall::PedersenHash &obj, - Serializer &serializer) { - serde::Serializable::serialize(obj.inputs, serializer); - serde::Serializable::serialize( - obj.domain_separator, serializer); - serde::Serializable::serialize(obj.output, serializer); +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::PedersenHash &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.inputs, serializer); + serde::Serializable::serialize(obj.domain_separator, serializer); + serde::Serializable::serialize(obj.output, serializer); } template <> template -Program::BlackBoxFuncCall::PedersenHash -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxFuncCall::PedersenHash obj; - obj.inputs = - serde::Deserializable::deserialize(deserializer); - obj.domain_separator = - serde::Deserializable::deserialize( - deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxFuncCall::PedersenHash serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::PedersenHash obj; + obj.inputs = serde::Deserializable::deserialize(deserializer); + obj.domain_separator = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxFuncCall::EcdsaSecp256k1 &lhs, - const BlackBoxFuncCall::EcdsaSecp256k1 &rhs) { - if (!(lhs.public_key_x == rhs.public_key_x)) { - return false; - } - if (!(lhs.public_key_y == rhs.public_key_y)) { - return false; - } - if (!(lhs.signature == rhs.signature)) { - return false; - } - if (!(lhs.hashed_message == rhs.hashed_message)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; -} - -inline std::vector -BlackBoxFuncCall::EcdsaSecp256k1::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); -} - -inline BlackBoxFuncCall::EcdsaSecp256k1 -BlackBoxFuncCall::EcdsaSecp256k1::bincodeDeserialize( - std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} - -} // end of namespace Program + inline bool operator==(const BlackBoxFuncCall::EcdsaSecp256k1 &lhs, const BlackBoxFuncCall::EcdsaSecp256k1 &rhs) { + if (!(lhs.public_key_x == rhs.public_key_x)) { return false; } + if (!(lhs.public_key_y == rhs.public_key_y)) { return false; } + if (!(lhs.signature == rhs.signature)) { return false; } + if (!(lhs.hashed_message == rhs.hashed_message)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } + + inline std::vector BlackBoxFuncCall::EcdsaSecp256k1::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BlackBoxFuncCall::EcdsaSecp256k1 BlackBoxFuncCall::EcdsaSecp256k1::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxFuncCall::EcdsaSecp256k1 &obj, - Serializer &serializer) { - serde::Serializable::serialize(obj.public_key_x, - serializer); - serde::Serializable::serialize(obj.public_key_y, - serializer); - serde::Serializable::serialize(obj.signature, - serializer); - serde::Serializable::serialize( - obj.hashed_message, serializer); - serde::Serializable::serialize(obj.output, serializer); -} - -template <> -template -Program::BlackBoxFuncCall::EcdsaSecp256k1 -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxFuncCall::EcdsaSecp256k1 obj; - obj.public_key_x = - serde::Deserializable::deserialize( - deserializer); - obj.public_key_y = - serde::Deserializable::deserialize( - deserializer); - obj.signature = - serde::Deserializable::deserialize(deserializer); - obj.hashed_message = - serde::Deserializable::deserialize( - deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; -} - -namespace Program { - -inline bool operator==(const BlackBoxFuncCall::EcdsaSecp256r1 &lhs, - const BlackBoxFuncCall::EcdsaSecp256r1 &rhs) { - if (!(lhs.public_key_x == rhs.public_key_x)) { - return false; - } - if (!(lhs.public_key_y == rhs.public_key_y)) { - return false; - } - if (!(lhs.signature == rhs.signature)) { - return false; - } - if (!(lhs.hashed_message == rhs.hashed_message)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; -} - -inline std::vector -BlackBoxFuncCall::EcdsaSecp256r1::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); -} - -inline BlackBoxFuncCall::EcdsaSecp256r1 -BlackBoxFuncCall::EcdsaSecp256r1::bincodeDeserialize( - std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} - -} // end of namespace Program - -template <> -template -void serde::Serializable::serialize( - const Program::BlackBoxFuncCall::EcdsaSecp256r1 &obj, - Serializer &serializer) { - serde::Serializable::serialize(obj.public_key_x, - serializer); - serde::Serializable::serialize(obj.public_key_y, - serializer); - serde::Serializable::serialize(obj.signature, - serializer); - serde::Serializable::serialize( - obj.hashed_message, serializer); - serde::Serializable::serialize(obj.output, serializer); -} - -template <> -template -Program::BlackBoxFuncCall::EcdsaSecp256r1 -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxFuncCall::EcdsaSecp256r1 obj; - obj.public_key_x = - serde::Deserializable::deserialize( - deserializer); - obj.public_key_y = - serde::Deserializable::deserialize( - deserializer); - obj.signature = - serde::Deserializable::deserialize(deserializer); - obj.hashed_message = - serde::Deserializable::deserialize( - deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; -} - -namespace Program { - -inline bool operator==(const BlackBoxFuncCall::MultiScalarMul &lhs, - const BlackBoxFuncCall::MultiScalarMul &rhs) { - if (!(lhs.points == rhs.points)) { - return false; - } - if (!(lhs.scalars == rhs.scalars)) { - return false; - } - if (!(lhs.outputs == rhs.outputs)) { - return false; - } - return true; +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::EcdsaSecp256k1 &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.public_key_x, serializer); + serde::Serializable::serialize(obj.public_key_y, serializer); + serde::Serializable::serialize(obj.signature, serializer); + serde::Serializable::serialize(obj.hashed_message, serializer); + serde::Serializable::serialize(obj.output, serializer); } -inline std::vector -BlackBoxFuncCall::MultiScalarMul::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); -} - -inline BlackBoxFuncCall::MultiScalarMul -BlackBoxFuncCall::MultiScalarMul::bincodeDeserialize( - std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; +template <> +template +Program::BlackBoxFuncCall::EcdsaSecp256k1 serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::EcdsaSecp256k1 obj; + obj.public_key_x = serde::Deserializable::deserialize(deserializer); + obj.public_key_y = serde::Deserializable::deserialize(deserializer); + obj.signature = serde::Deserializable::deserialize(deserializer); + obj.hashed_message = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; } +namespace Program { + + inline bool operator==(const BlackBoxFuncCall::EcdsaSecp256r1 &lhs, const BlackBoxFuncCall::EcdsaSecp256r1 &rhs) { + if (!(lhs.public_key_x == rhs.public_key_x)) { return false; } + if (!(lhs.public_key_y == rhs.public_key_y)) { return false; } + if (!(lhs.signature == rhs.signature)) { return false; } + if (!(lhs.hashed_message == rhs.hashed_message)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } + + inline std::vector BlackBoxFuncCall::EcdsaSecp256r1::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BlackBoxFuncCall::EcdsaSecp256r1 BlackBoxFuncCall::EcdsaSecp256r1::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + } // end of namespace Program - -template <> -template -void serde::Serializable::serialize( - const Program::BlackBoxFuncCall::MultiScalarMul &obj, - Serializer &serializer) { - serde::Serializable::serialize(obj.points, serializer); - serde::Serializable::serialize(obj.scalars, - serializer); - serde::Serializable::serialize(obj.outputs, - serializer); + +template <> +template +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::EcdsaSecp256r1 &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.public_key_x, serializer); + serde::Serializable::serialize(obj.public_key_y, serializer); + serde::Serializable::serialize(obj.signature, serializer); + serde::Serializable::serialize(obj.hashed_message, serializer); + serde::Serializable::serialize(obj.output, serializer); } template <> template -Program::BlackBoxFuncCall::MultiScalarMul -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxFuncCall::MultiScalarMul obj; - obj.points = - serde::Deserializable::deserialize(deserializer); - obj.scalars = - serde::Deserializable::deserialize(deserializer); - obj.outputs = - serde::Deserializable::deserialize(deserializer); - return obj; -} - -namespace Program { - -inline bool operator==(const BlackBoxFuncCall::EmbeddedCurveAdd &lhs, - const BlackBoxFuncCall::EmbeddedCurveAdd &rhs) { - if (!(lhs.input1_x == rhs.input1_x)) { - return false; - } - if (!(lhs.input1_y == rhs.input1_y)) { - return false; - } - if (!(lhs.input2_x == rhs.input2_x)) { - return false; - } - if (!(lhs.input2_y == rhs.input2_y)) { - return false; - } - if (!(lhs.outputs == rhs.outputs)) { - return false; - } - return true; +Program::BlackBoxFuncCall::EcdsaSecp256r1 serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::EcdsaSecp256r1 obj; + obj.public_key_x = serde::Deserializable::deserialize(deserializer); + obj.public_key_y = serde::Deserializable::deserialize(deserializer); + obj.signature = serde::Deserializable::deserialize(deserializer); + obj.hashed_message = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; } -inline std::vector -BlackBoxFuncCall::EmbeddedCurveAdd::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize( - *this, serializer); - return std::move(serializer).bytes(); -} +namespace Program { -inline BlackBoxFuncCall::EmbeddedCurveAdd -BlackBoxFuncCall::EmbeddedCurveAdd::bincodeDeserialize( - std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline bool operator==(const BlackBoxFuncCall::MultiScalarMul &lhs, const BlackBoxFuncCall::MultiScalarMul &rhs) { + if (!(lhs.points == rhs.points)) { return false; } + if (!(lhs.scalars == rhs.scalars)) { return false; } + if (!(lhs.outputs == rhs.outputs)) { return false; } + return true; + } + + inline std::vector BlackBoxFuncCall::MultiScalarMul::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BlackBoxFuncCall::MultiScalarMul BlackBoxFuncCall::MultiScalarMul::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable:: - serialize(const Program::BlackBoxFuncCall::EmbeddedCurveAdd &obj, - Serializer &serializer) { - serde::Serializable::serialize(obj.input1_x, - serializer); - serde::Serializable::serialize(obj.input1_y, - serializer); - serde::Serializable::serialize(obj.input2_x, - serializer); - serde::Serializable::serialize(obj.input2_y, - serializer); - serde::Serializable::serialize(obj.outputs, - serializer); +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::MultiScalarMul &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.points, serializer); + serde::Serializable::serialize(obj.scalars, serializer); + serde::Serializable::serialize(obj.outputs, serializer); } template <> template -Program::BlackBoxFuncCall::EmbeddedCurveAdd -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxFuncCall::EmbeddedCurveAdd obj; - obj.input1_x = - serde::Deserializable::deserialize(deserializer); - obj.input1_y = - serde::Deserializable::deserialize(deserializer); - obj.input2_x = - serde::Deserializable::deserialize(deserializer); - obj.input2_y = - serde::Deserializable::deserialize(deserializer); - obj.outputs = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxFuncCall::MultiScalarMul serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::MultiScalarMul obj; + obj.points = serde::Deserializable::deserialize(deserializer); + obj.scalars = serde::Deserializable::deserialize(deserializer); + obj.outputs = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxFuncCall::Keccak256 &lhs, - const BlackBoxFuncCall::Keccak256 &rhs) { - if (!(lhs.inputs == rhs.inputs)) { - return false; - } - if (!(lhs.var_message_size == rhs.var_message_size)) { - return false; - } - if (!(lhs.outputs == rhs.outputs)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxFuncCall::EmbeddedCurveAdd &lhs, const BlackBoxFuncCall::EmbeddedCurveAdd &rhs) { + if (!(lhs.input1_x == rhs.input1_x)) { return false; } + if (!(lhs.input1_y == rhs.input1_y)) { return false; } + if (!(lhs.input2_x == rhs.input2_x)) { return false; } + if (!(lhs.input2_y == rhs.input2_y)) { return false; } + if (!(lhs.outputs == rhs.outputs)) { return false; } + return true; + } -inline std::vector -BlackBoxFuncCall::Keccak256::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxFuncCall::EmbeddedCurveAdd::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxFuncCall::Keccak256 -BlackBoxFuncCall::Keccak256::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxFuncCall::EmbeddedCurveAdd BlackBoxFuncCall::EmbeddedCurveAdd::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxFuncCall::Keccak256 &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.inputs, serializer); - serde::Serializable::serialize( - obj.var_message_size, serializer); - serde::Serializable::serialize(obj.outputs, - serializer); +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::EmbeddedCurveAdd &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.input1_x, serializer); + serde::Serializable::serialize(obj.input1_y, serializer); + serde::Serializable::serialize(obj.input2_x, serializer); + serde::Serializable::serialize(obj.input2_y, serializer); + serde::Serializable::serialize(obj.outputs, serializer); } template <> template -Program::BlackBoxFuncCall::Keccak256 -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxFuncCall::Keccak256 obj; - obj.inputs = - serde::Deserializable::deserialize(deserializer); - obj.var_message_size = - serde::Deserializable::deserialize( - deserializer); - obj.outputs = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxFuncCall::EmbeddedCurveAdd serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::EmbeddedCurveAdd obj; + obj.input1_x = serde::Deserializable::deserialize(deserializer); + obj.input1_y = serde::Deserializable::deserialize(deserializer); + obj.input2_x = serde::Deserializable::deserialize(deserializer); + obj.input2_y = serde::Deserializable::deserialize(deserializer); + obj.outputs = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxFuncCall::Keccakf1600 &lhs, - const BlackBoxFuncCall::Keccakf1600 &rhs) { - if (!(lhs.inputs == rhs.inputs)) { - return false; - } - if (!(lhs.outputs == rhs.outputs)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxFuncCall::Keccak256 &lhs, const BlackBoxFuncCall::Keccak256 &rhs) { + if (!(lhs.inputs == rhs.inputs)) { return false; } + if (!(lhs.var_message_size == rhs.var_message_size)) { return false; } + if (!(lhs.outputs == rhs.outputs)) { return false; } + return true; + } -inline std::vector -BlackBoxFuncCall::Keccakf1600::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxFuncCall::Keccak256::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxFuncCall::Keccakf1600 -BlackBoxFuncCall::Keccakf1600::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxFuncCall::Keccak256 BlackBoxFuncCall::Keccak256::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxFuncCall::Keccakf1600 &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.inputs, serializer); - serde::Serializable::serialize(obj.outputs, - serializer); +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::Keccak256 &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.inputs, serializer); + serde::Serializable::serialize(obj.var_message_size, serializer); + serde::Serializable::serialize(obj.outputs, serializer); } template <> template -Program::BlackBoxFuncCall::Keccakf1600 -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxFuncCall::Keccakf1600 obj; - obj.inputs = - serde::Deserializable::deserialize(deserializer); - obj.outputs = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxFuncCall::Keccak256 serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::Keccak256 obj; + obj.inputs = serde::Deserializable::deserialize(deserializer); + obj.var_message_size = serde::Deserializable::deserialize(deserializer); + obj.outputs = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxFuncCall::RecursiveAggregation &lhs, - const BlackBoxFuncCall::RecursiveAggregation &rhs) { - if (!(lhs.verification_key == rhs.verification_key)) { - return false; - } - if (!(lhs.proof == rhs.proof)) { - return false; - } - if (!(lhs.public_inputs == rhs.public_inputs)) { - return false; - } - if (!(lhs.key_hash == rhs.key_hash)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxFuncCall::Keccakf1600 &lhs, const BlackBoxFuncCall::Keccakf1600 &rhs) { + if (!(lhs.inputs == rhs.inputs)) { return false; } + if (!(lhs.outputs == rhs.outputs)) { return false; } + return true; + } -inline std::vector -BlackBoxFuncCall::RecursiveAggregation::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize( - *this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxFuncCall::Keccakf1600::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxFuncCall::RecursiveAggregation -BlackBoxFuncCall::RecursiveAggregation::bincodeDeserialize( - std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable< - BlackBoxFuncCall::RecursiveAggregation>::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxFuncCall::Keccakf1600 BlackBoxFuncCall::Keccakf1600::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable:: - serialize(const Program::BlackBoxFuncCall::RecursiveAggregation &obj, - Serializer &serializer) { - serde::Serializable::serialize( - obj.verification_key, serializer); - serde::Serializable::serialize(obj.proof, serializer); - serde::Serializable::serialize(obj.public_inputs, - serializer); - serde::Serializable::serialize(obj.key_hash, - serializer); +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::Keccakf1600 &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.inputs, serializer); + serde::Serializable::serialize(obj.outputs, serializer); } template <> template -Program::BlackBoxFuncCall::RecursiveAggregation -serde::Deserializable:: - deserialize(Deserializer &deserializer) { - Program::BlackBoxFuncCall::RecursiveAggregation obj; - obj.verification_key = - serde::Deserializable::deserialize( - deserializer); - obj.proof = - serde::Deserializable::deserialize(deserializer); - obj.public_inputs = - serde::Deserializable::deserialize( - deserializer); - obj.key_hash = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxFuncCall::Keccakf1600 serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::Keccakf1600 obj; + obj.inputs = serde::Deserializable::deserialize(deserializer); + obj.outputs = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxFuncCall::BigIntAdd &lhs, - const BlackBoxFuncCall::BigIntAdd &rhs) { - if (!(lhs.lhs == rhs.lhs)) { - return false; - } - if (!(lhs.rhs == rhs.rhs)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxFuncCall::RecursiveAggregation &lhs, const BlackBoxFuncCall::RecursiveAggregation &rhs) { + if (!(lhs.verification_key == rhs.verification_key)) { return false; } + if (!(lhs.proof == rhs.proof)) { return false; } + if (!(lhs.public_inputs == rhs.public_inputs)) { return false; } + if (!(lhs.key_hash == rhs.key_hash)) { return false; } + return true; + } -inline std::vector -BlackBoxFuncCall::BigIntAdd::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxFuncCall::RecursiveAggregation::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxFuncCall::BigIntAdd -BlackBoxFuncCall::BigIntAdd::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxFuncCall::RecursiveAggregation BlackBoxFuncCall::RecursiveAggregation::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxFuncCall::BigIntAdd &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.lhs, serializer); - serde::Serializable::serialize(obj.rhs, serializer); - serde::Serializable::serialize(obj.output, serializer); +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::RecursiveAggregation &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.verification_key, serializer); + serde::Serializable::serialize(obj.proof, serializer); + serde::Serializable::serialize(obj.public_inputs, serializer); + serde::Serializable::serialize(obj.key_hash, serializer); } template <> template -Program::BlackBoxFuncCall::BigIntAdd -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxFuncCall::BigIntAdd obj; - obj.lhs = serde::Deserializable::deserialize(deserializer); - obj.rhs = serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxFuncCall::RecursiveAggregation serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::RecursiveAggregation obj; + obj.verification_key = serde::Deserializable::deserialize(deserializer); + obj.proof = serde::Deserializable::deserialize(deserializer); + obj.public_inputs = serde::Deserializable::deserialize(deserializer); + obj.key_hash = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxFuncCall::BigIntSub &lhs, - const BlackBoxFuncCall::BigIntSub &rhs) { - if (!(lhs.lhs == rhs.lhs)) { - return false; - } - if (!(lhs.rhs == rhs.rhs)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxFuncCall::BigIntAdd &lhs, const BlackBoxFuncCall::BigIntAdd &rhs) { + if (!(lhs.lhs == rhs.lhs)) { return false; } + if (!(lhs.rhs == rhs.rhs)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } -inline std::vector -BlackBoxFuncCall::BigIntSub::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxFuncCall::BigIntAdd::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxFuncCall::BigIntSub -BlackBoxFuncCall::BigIntSub::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxFuncCall::BigIntAdd BlackBoxFuncCall::BigIntAdd::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxFuncCall::BigIntSub &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.lhs, serializer); - serde::Serializable::serialize(obj.rhs, serializer); - serde::Serializable::serialize(obj.output, serializer); +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::BigIntAdd &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.lhs, serializer); + serde::Serializable::serialize(obj.rhs, serializer); + serde::Serializable::serialize(obj.output, serializer); } template <> template -Program::BlackBoxFuncCall::BigIntSub -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxFuncCall::BigIntSub obj; - obj.lhs = serde::Deserializable::deserialize(deserializer); - obj.rhs = serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxFuncCall::BigIntAdd serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::BigIntAdd obj; + obj.lhs = serde::Deserializable::deserialize(deserializer); + obj.rhs = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxFuncCall::BigIntMul &lhs, - const BlackBoxFuncCall::BigIntMul &rhs) { - if (!(lhs.lhs == rhs.lhs)) { - return false; - } - if (!(lhs.rhs == rhs.rhs)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxFuncCall::BigIntSub &lhs, const BlackBoxFuncCall::BigIntSub &rhs) { + if (!(lhs.lhs == rhs.lhs)) { return false; } + if (!(lhs.rhs == rhs.rhs)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } -inline std::vector -BlackBoxFuncCall::BigIntMul::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxFuncCall::BigIntSub::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxFuncCall::BigIntMul -BlackBoxFuncCall::BigIntMul::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxFuncCall::BigIntSub BlackBoxFuncCall::BigIntSub::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxFuncCall::BigIntMul &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.lhs, serializer); - serde::Serializable::serialize(obj.rhs, serializer); - serde::Serializable::serialize(obj.output, serializer); +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::BigIntSub &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.lhs, serializer); + serde::Serializable::serialize(obj.rhs, serializer); + serde::Serializable::serialize(obj.output, serializer); } template <> template -Program::BlackBoxFuncCall::BigIntMul -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxFuncCall::BigIntMul obj; - obj.lhs = serde::Deserializable::deserialize(deserializer); - obj.rhs = serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxFuncCall::BigIntSub serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::BigIntSub obj; + obj.lhs = serde::Deserializable::deserialize(deserializer); + obj.rhs = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxFuncCall::BigIntDiv &lhs, - const BlackBoxFuncCall::BigIntDiv &rhs) { - if (!(lhs.lhs == rhs.lhs)) { - return false; - } - if (!(lhs.rhs == rhs.rhs)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxFuncCall::BigIntMul &lhs, const BlackBoxFuncCall::BigIntMul &rhs) { + if (!(lhs.lhs == rhs.lhs)) { return false; } + if (!(lhs.rhs == rhs.rhs)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } -inline std::vector -BlackBoxFuncCall::BigIntDiv::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxFuncCall::BigIntMul::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxFuncCall::BigIntDiv -BlackBoxFuncCall::BigIntDiv::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxFuncCall::BigIntMul BlackBoxFuncCall::BigIntMul::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxFuncCall::BigIntDiv &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.lhs, serializer); - serde::Serializable::serialize(obj.rhs, serializer); - serde::Serializable::serialize(obj.output, serializer); +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::BigIntMul &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.lhs, serializer); + serde::Serializable::serialize(obj.rhs, serializer); + serde::Serializable::serialize(obj.output, serializer); } template <> template -Program::BlackBoxFuncCall::BigIntDiv -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxFuncCall::BigIntDiv obj; - obj.lhs = serde::Deserializable::deserialize(deserializer); - obj.rhs = serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxFuncCall::BigIntMul serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::BigIntMul obj; + obj.lhs = serde::Deserializable::deserialize(deserializer); + obj.rhs = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxFuncCall::BigIntFromLeBytes &lhs, - const BlackBoxFuncCall::BigIntFromLeBytes &rhs) { - if (!(lhs.inputs == rhs.inputs)) { - return false; - } - if (!(lhs.modulus == rhs.modulus)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxFuncCall::BigIntDiv &lhs, const BlackBoxFuncCall::BigIntDiv &rhs) { + if (!(lhs.lhs == rhs.lhs)) { return false; } + if (!(lhs.rhs == rhs.rhs)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } -inline std::vector -BlackBoxFuncCall::BigIntFromLeBytes::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize( - *this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxFuncCall::BigIntDiv::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxFuncCall::BigIntFromLeBytes -BlackBoxFuncCall::BigIntFromLeBytes::bincodeDeserialize( - std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxFuncCall::BigIntDiv BlackBoxFuncCall::BigIntDiv::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable:: - serialize(const Program::BlackBoxFuncCall::BigIntFromLeBytes &obj, - Serializer &serializer) { - serde::Serializable::serialize(obj.inputs, serializer); - serde::Serializable::serialize(obj.modulus, - serializer); - serde::Serializable::serialize(obj.output, serializer); +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::BigIntDiv &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.lhs, serializer); + serde::Serializable::serialize(obj.rhs, serializer); + serde::Serializable::serialize(obj.output, serializer); } template <> template -Program::BlackBoxFuncCall::BigIntFromLeBytes -serde::Deserializable:: - deserialize(Deserializer &deserializer) { - Program::BlackBoxFuncCall::BigIntFromLeBytes obj; - obj.inputs = - serde::Deserializable::deserialize(deserializer); - obj.modulus = - serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxFuncCall::BigIntDiv serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::BigIntDiv obj; + obj.lhs = serde::Deserializable::deserialize(deserializer); + obj.rhs = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxFuncCall::BigIntToLeBytes &lhs, - const BlackBoxFuncCall::BigIntToLeBytes &rhs) { - if (!(lhs.input == rhs.input)) { - return false; - } - if (!(lhs.outputs == rhs.outputs)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxFuncCall::BigIntFromLeBytes &lhs, const BlackBoxFuncCall::BigIntFromLeBytes &rhs) { + if (!(lhs.inputs == rhs.inputs)) { return false; } + if (!(lhs.modulus == rhs.modulus)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } -inline std::vector -BlackBoxFuncCall::BigIntToLeBytes::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxFuncCall::BigIntFromLeBytes::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxFuncCall::BigIntToLeBytes -BlackBoxFuncCall::BigIntToLeBytes::bincodeDeserialize( - std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxFuncCall::BigIntFromLeBytes BlackBoxFuncCall::BigIntFromLeBytes::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxFuncCall::BigIntToLeBytes &obj, - Serializer &serializer) { - serde::Serializable::serialize(obj.input, serializer); - serde::Serializable::serialize(obj.outputs, - serializer); +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::BigIntFromLeBytes &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.inputs, serializer); + serde::Serializable::serialize(obj.modulus, serializer); + serde::Serializable::serialize(obj.output, serializer); } template <> template -Program::BlackBoxFuncCall::BigIntToLeBytes -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxFuncCall::BigIntToLeBytes obj; - obj.input = - serde::Deserializable::deserialize(deserializer); - obj.outputs = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxFuncCall::BigIntFromLeBytes serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::BigIntFromLeBytes obj; + obj.inputs = serde::Deserializable::deserialize(deserializer); + obj.modulus = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxFuncCall::Poseidon2Permutation &lhs, - const BlackBoxFuncCall::Poseidon2Permutation &rhs) { - if (!(lhs.inputs == rhs.inputs)) { - return false; - } - if (!(lhs.outputs == rhs.outputs)) { - return false; - } - if (!(lhs.len == rhs.len)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxFuncCall::BigIntToLeBytes &lhs, const BlackBoxFuncCall::BigIntToLeBytes &rhs) { + if (!(lhs.input == rhs.input)) { return false; } + if (!(lhs.outputs == rhs.outputs)) { return false; } + return true; + } -inline std::vector -BlackBoxFuncCall::Poseidon2Permutation::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize( - *this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxFuncCall::BigIntToLeBytes::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxFuncCall::Poseidon2Permutation -BlackBoxFuncCall::Poseidon2Permutation::bincodeDeserialize( - std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable< - BlackBoxFuncCall::Poseidon2Permutation>::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxFuncCall::BigIntToLeBytes BlackBoxFuncCall::BigIntToLeBytes::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable:: - serialize(const Program::BlackBoxFuncCall::Poseidon2Permutation &obj, - Serializer &serializer) { - serde::Serializable::serialize(obj.inputs, serializer); - serde::Serializable::serialize(obj.outputs, - serializer); - serde::Serializable::serialize(obj.len, serializer); +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::BigIntToLeBytes &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.input, serializer); + serde::Serializable::serialize(obj.outputs, serializer); } template <> template -Program::BlackBoxFuncCall::Poseidon2Permutation -serde::Deserializable:: - deserialize(Deserializer &deserializer) { - Program::BlackBoxFuncCall::Poseidon2Permutation obj; - obj.inputs = - serde::Deserializable::deserialize(deserializer); - obj.outputs = - serde::Deserializable::deserialize(deserializer); - obj.len = serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxFuncCall::BigIntToLeBytes serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::BigIntToLeBytes obj; + obj.input = serde::Deserializable::deserialize(deserializer); + obj.outputs = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxFuncCall::Sha256Compression &lhs, - const BlackBoxFuncCall::Sha256Compression &rhs) { - if (!(lhs.inputs == rhs.inputs)) { - return false; - } - if (!(lhs.hash_values == rhs.hash_values)) { - return false; - } - if (!(lhs.outputs == rhs.outputs)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxFuncCall::Poseidon2Permutation &lhs, const BlackBoxFuncCall::Poseidon2Permutation &rhs) { + if (!(lhs.inputs == rhs.inputs)) { return false; } + if (!(lhs.outputs == rhs.outputs)) { return false; } + if (!(lhs.len == rhs.len)) { return false; } + return true; + } -inline std::vector -BlackBoxFuncCall::Sha256Compression::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize( - *this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxFuncCall::Poseidon2Permutation::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxFuncCall::Sha256Compression -BlackBoxFuncCall::Sha256Compression::bincodeDeserialize( - std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxFuncCall::Poseidon2Permutation BlackBoxFuncCall::Poseidon2Permutation::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable:: - serialize(const Program::BlackBoxFuncCall::Sha256Compression &obj, - Serializer &serializer) { - serde::Serializable::serialize(obj.inputs, serializer); - serde::Serializable::serialize(obj.hash_values, - serializer); - serde::Serializable::serialize(obj.outputs, - serializer); +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::Poseidon2Permutation &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.inputs, serializer); + serde::Serializable::serialize(obj.outputs, serializer); + serde::Serializable::serialize(obj.len, serializer); } template <> template -Program::BlackBoxFuncCall::Sha256Compression -serde::Deserializable:: - deserialize(Deserializer &deserializer) { - Program::BlackBoxFuncCall::Sha256Compression obj; - obj.inputs = - serde::Deserializable::deserialize(deserializer); - obj.hash_values = - serde::Deserializable::deserialize( - deserializer); - obj.outputs = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxFuncCall::Poseidon2Permutation serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::Poseidon2Permutation obj; + obj.inputs = serde::Deserializable::deserialize(deserializer); + obj.outputs = serde::Deserializable::deserialize(deserializer); + obj.len = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxOp &lhs, const BlackBoxOp &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxFuncCall::Sha256Compression &lhs, const BlackBoxFuncCall::Sha256Compression &rhs) { + if (!(lhs.inputs == rhs.inputs)) { return false; } + if (!(lhs.hash_values == rhs.hash_values)) { return false; } + if (!(lhs.outputs == rhs.outputs)) { return false; } + return true; + } -inline std::vector BlackBoxOp::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxFuncCall::Sha256Compression::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxOp BlackBoxOp::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxFuncCall::Sha256Compression BlackBoxFuncCall::Sha256Compression::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxOp &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.value, serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::Sha256Compression &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.inputs, serializer); + serde::Serializable::serialize(obj.hash_values, serializer); + serde::Serializable::serialize(obj.outputs, serializer); } template <> template -Program::BlackBoxOp serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::BlackBoxOp obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::BlackBoxFuncCall::Sha256Compression serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::Sha256Compression obj; + obj.inputs = serde::Deserializable::deserialize(deserializer); + obj.hash_values = serde::Deserializable::deserialize(deserializer); + obj.outputs = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxOp::AES128Encrypt &lhs, - const BlackBoxOp::AES128Encrypt &rhs) { - if (!(lhs.inputs == rhs.inputs)) { - return false; - } - if (!(lhs.iv == rhs.iv)) { - return false; - } - if (!(lhs.key == rhs.key)) { - return false; - } - if (!(lhs.outputs == rhs.outputs)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxOp &lhs, const BlackBoxOp &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector -BlackBoxOp::AES128Encrypt::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxOp::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxOp::AES128Encrypt -BlackBoxOp::AES128Encrypt::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxOp BlackBoxOp::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxOp::AES128Encrypt &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.inputs, serializer); - serde::Serializable::serialize(obj.iv, serializer); - serde::Serializable::serialize(obj.key, serializer); - serde::Serializable::serialize(obj.outputs, - serializer); +void serde::Serializable::serialize(const Program::BlackBoxOp &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.value, serializer); + serializer.decrease_container_depth(); } template <> template -Program::BlackBoxOp::AES128Encrypt -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxOp::AES128Encrypt obj; - obj.inputs = - serde::Deserializable::deserialize(deserializer); - obj.iv = serde::Deserializable::deserialize(deserializer); - obj.key = serde::Deserializable::deserialize(deserializer); - obj.outputs = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxOp serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::BlackBoxOp obj; + obj.value = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const BlackBoxOp::Sha256 &lhs, - const BlackBoxOp::Sha256 &rhs) { - if (!(lhs.message == rhs.message)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxOp::AES128Encrypt &lhs, const BlackBoxOp::AES128Encrypt &rhs) { + if (!(lhs.inputs == rhs.inputs)) { return false; } + if (!(lhs.iv == rhs.iv)) { return false; } + if (!(lhs.key == rhs.key)) { return false; } + if (!(lhs.outputs == rhs.outputs)) { return false; } + return true; + } -inline std::vector BlackBoxOp::Sha256::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxOp::AES128Encrypt::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxOp::Sha256 -BlackBoxOp::Sha256::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxOp::AES128Encrypt BlackBoxOp::AES128Encrypt::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxOp::Sha256 &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.message, - serializer); - serde::Serializable::serialize(obj.output, serializer); +void serde::Serializable::serialize(const Program::BlackBoxOp::AES128Encrypt &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.inputs, serializer); + serde::Serializable::serialize(obj.iv, serializer); + serde::Serializable::serialize(obj.key, serializer); + serde::Serializable::serialize(obj.outputs, serializer); } template <> template -Program::BlackBoxOp::Sha256 -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxOp::Sha256 obj; - obj.message = - serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxOp::AES128Encrypt serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxOp::AES128Encrypt obj; + obj.inputs = serde::Deserializable::deserialize(deserializer); + obj.iv = serde::Deserializable::deserialize(deserializer); + obj.key = serde::Deserializable::deserialize(deserializer); + obj.outputs = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxOp::Blake2s &lhs, - const BlackBoxOp::Blake2s &rhs) { - if (!(lhs.message == rhs.message)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxOp::Blake2s &lhs, const BlackBoxOp::Blake2s &rhs) { + if (!(lhs.message == rhs.message)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } -inline std::vector BlackBoxOp::Blake2s::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxOp::Blake2s::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxOp::Blake2s -BlackBoxOp::Blake2s::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxOp::Blake2s BlackBoxOp::Blake2s::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxOp::Blake2s &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.message, - serializer); - serde::Serializable::serialize(obj.output, serializer); +void serde::Serializable::serialize(const Program::BlackBoxOp::Blake2s &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.message, serializer); + serde::Serializable::serialize(obj.output, serializer); } template <> template -Program::BlackBoxOp::Blake2s -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxOp::Blake2s obj; - obj.message = - serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxOp::Blake2s serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxOp::Blake2s obj; + obj.message = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxOp::Blake3 &lhs, - const BlackBoxOp::Blake3 &rhs) { - if (!(lhs.message == rhs.message)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxOp::Blake3 &lhs, const BlackBoxOp::Blake3 &rhs) { + if (!(lhs.message == rhs.message)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } -inline std::vector BlackBoxOp::Blake3::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxOp::Blake3::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxOp::Blake3 -BlackBoxOp::Blake3::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxOp::Blake3 BlackBoxOp::Blake3::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxOp::Blake3 &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.message, - serializer); - serde::Serializable::serialize(obj.output, serializer); +void serde::Serializable::serialize(const Program::BlackBoxOp::Blake3 &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.message, serializer); + serde::Serializable::serialize(obj.output, serializer); } template <> template -Program::BlackBoxOp::Blake3 -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxOp::Blake3 obj; - obj.message = - serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxOp::Blake3 serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxOp::Blake3 obj; + obj.message = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxOp::Keccak256 &lhs, - const BlackBoxOp::Keccak256 &rhs) { - if (!(lhs.message == rhs.message)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxOp::Keccak256 &lhs, const BlackBoxOp::Keccak256 &rhs) { + if (!(lhs.message == rhs.message)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } -inline std::vector BlackBoxOp::Keccak256::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxOp::Keccak256::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxOp::Keccak256 -BlackBoxOp::Keccak256::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxOp::Keccak256 BlackBoxOp::Keccak256::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxOp::Keccak256 &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.message, - serializer); - serde::Serializable::serialize(obj.output, serializer); +void serde::Serializable::serialize(const Program::BlackBoxOp::Keccak256 &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.message, serializer); + serde::Serializable::serialize(obj.output, serializer); } template <> template -Program::BlackBoxOp::Keccak256 -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxOp::Keccak256 obj; - obj.message = - serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxOp::Keccak256 serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxOp::Keccak256 obj; + obj.message = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxOp::Keccakf1600 &lhs, - const BlackBoxOp::Keccakf1600 &rhs) { - if (!(lhs.message == rhs.message)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxOp::Keccakf1600 &lhs, const BlackBoxOp::Keccakf1600 &rhs) { + if (!(lhs.message == rhs.message)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } -inline std::vector BlackBoxOp::Keccakf1600::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxOp::Keccakf1600::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxOp::Keccakf1600 -BlackBoxOp::Keccakf1600::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxOp::Keccakf1600 BlackBoxOp::Keccakf1600::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxOp::Keccakf1600 &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.message, - serializer); - serde::Serializable::serialize(obj.output, serializer); +void serde::Serializable::serialize(const Program::BlackBoxOp::Keccakf1600 &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.message, serializer); + serde::Serializable::serialize(obj.output, serializer); } template <> template -Program::BlackBoxOp::Keccakf1600 -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxOp::Keccakf1600 obj; - obj.message = - serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxOp::Keccakf1600 serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxOp::Keccakf1600 obj; + obj.message = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxOp::EcdsaSecp256k1 &lhs, - const BlackBoxOp::EcdsaSecp256k1 &rhs) { - if (!(lhs.hashed_msg == rhs.hashed_msg)) { - return false; - } - if (!(lhs.public_key_x == rhs.public_key_x)) { - return false; - } - if (!(lhs.public_key_y == rhs.public_key_y)) { - return false; - } - if (!(lhs.signature == rhs.signature)) { - return false; - } - if (!(lhs.result == rhs.result)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxOp::EcdsaSecp256k1 &lhs, const BlackBoxOp::EcdsaSecp256k1 &rhs) { + if (!(lhs.hashed_msg == rhs.hashed_msg)) { return false; } + if (!(lhs.public_key_x == rhs.public_key_x)) { return false; } + if (!(lhs.public_key_y == rhs.public_key_y)) { return false; } + if (!(lhs.signature == rhs.signature)) { return false; } + if (!(lhs.result == rhs.result)) { return false; } + return true; + } -inline std::vector -BlackBoxOp::EcdsaSecp256k1::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxOp::EcdsaSecp256k1::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxOp::EcdsaSecp256k1 -BlackBoxOp::EcdsaSecp256k1::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxOp::EcdsaSecp256k1 BlackBoxOp::EcdsaSecp256k1::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxOp::EcdsaSecp256k1 &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.hashed_msg, - serializer); - serde::Serializable::serialize(obj.public_key_x, - serializer); - serde::Serializable::serialize(obj.public_key_y, - serializer); - serde::Serializable::serialize(obj.signature, - serializer); - serde::Serializable::serialize(obj.result, serializer); +void serde::Serializable::serialize(const Program::BlackBoxOp::EcdsaSecp256k1 &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.hashed_msg, serializer); + serde::Serializable::serialize(obj.public_key_x, serializer); + serde::Serializable::serialize(obj.public_key_y, serializer); + serde::Serializable::serialize(obj.signature, serializer); + serde::Serializable::serialize(obj.result, serializer); } template <> template -Program::BlackBoxOp::EcdsaSecp256k1 -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxOp::EcdsaSecp256k1 obj; - obj.hashed_msg = serde::Deserializable::deserialize( - deserializer); - obj.public_key_x = - serde::Deserializable::deserialize( - deserializer); - obj.public_key_y = - serde::Deserializable::deserialize( - deserializer); - obj.signature = - serde::Deserializable::deserialize(deserializer); - obj.result = - serde::Deserializable::deserialize(deserializer); - return obj; -} - -namespace Program { - -inline bool operator==(const BlackBoxOp::EcdsaSecp256r1 &lhs, - const BlackBoxOp::EcdsaSecp256r1 &rhs) { - if (!(lhs.hashed_msg == rhs.hashed_msg)) { - return false; - } - if (!(lhs.public_key_x == rhs.public_key_x)) { - return false; - } - if (!(lhs.public_key_y == rhs.public_key_y)) { - return false; - } - if (!(lhs.signature == rhs.signature)) { - return false; - } - if (!(lhs.result == rhs.result)) { - return false; - } - return true; -} - -inline std::vector -BlackBoxOp::EcdsaSecp256r1::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} - -inline BlackBoxOp::EcdsaSecp256r1 -BlackBoxOp::EcdsaSecp256r1::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; +Program::BlackBoxOp::EcdsaSecp256k1 serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxOp::EcdsaSecp256k1 obj; + obj.hashed_msg = serde::Deserializable::deserialize(deserializer); + obj.public_key_x = serde::Deserializable::deserialize(deserializer); + obj.public_key_y = serde::Deserializable::deserialize(deserializer); + obj.signature = serde::Deserializable::deserialize(deserializer); + obj.result = serde::Deserializable::deserialize(deserializer); + return obj; } +namespace Program { + + inline bool operator==(const BlackBoxOp::EcdsaSecp256r1 &lhs, const BlackBoxOp::EcdsaSecp256r1 &rhs) { + if (!(lhs.hashed_msg == rhs.hashed_msg)) { return false; } + if (!(lhs.public_key_x == rhs.public_key_x)) { return false; } + if (!(lhs.public_key_y == rhs.public_key_y)) { return false; } + if (!(lhs.signature == rhs.signature)) { return false; } + if (!(lhs.result == rhs.result)) { return false; } + return true; + } + + inline std::vector BlackBoxOp::EcdsaSecp256r1::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BlackBoxOp::EcdsaSecp256r1 BlackBoxOp::EcdsaSecp256r1::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + } // end of namespace Program template <> -template -void serde::Serializable::serialize( - const Program::BlackBoxOp::EcdsaSecp256r1 &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.hashed_msg, - serializer); - serde::Serializable::serialize(obj.public_key_x, - serializer); - serde::Serializable::serialize(obj.public_key_y, - serializer); - serde::Serializable::serialize(obj.signature, - serializer); - serde::Serializable::serialize(obj.result, serializer); -} - +template +void serde::Serializable::serialize(const Program::BlackBoxOp::EcdsaSecp256r1 &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.hashed_msg, serializer); + serde::Serializable::serialize(obj.public_key_x, serializer); + serde::Serializable::serialize(obj.public_key_y, serializer); + serde::Serializable::serialize(obj.signature, serializer); + serde::Serializable::serialize(obj.result, serializer); +} + template <> template -Program::BlackBoxOp::EcdsaSecp256r1 -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxOp::EcdsaSecp256r1 obj; - obj.hashed_msg = serde::Deserializable::deserialize( - deserializer); - obj.public_key_x = - serde::Deserializable::deserialize( - deserializer); - obj.public_key_y = - serde::Deserializable::deserialize( - deserializer); - obj.signature = - serde::Deserializable::deserialize(deserializer); - obj.result = - serde::Deserializable::deserialize(deserializer); - return obj; -} - -namespace Program { - -inline bool operator==(const BlackBoxOp::SchnorrVerify &lhs, - const BlackBoxOp::SchnorrVerify &rhs) { - if (!(lhs.public_key_x == rhs.public_key_x)) { - return false; - } - if (!(lhs.public_key_y == rhs.public_key_y)) { - return false; - } - if (!(lhs.message == rhs.message)) { - return false; - } - if (!(lhs.signature == rhs.signature)) { - return false; - } - if (!(lhs.result == rhs.result)) { - return false; - } - return true; -} - -inline std::vector -BlackBoxOp::SchnorrVerify::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); +Program::BlackBoxOp::EcdsaSecp256r1 serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxOp::EcdsaSecp256r1 obj; + obj.hashed_msg = serde::Deserializable::deserialize(deserializer); + obj.public_key_x = serde::Deserializable::deserialize(deserializer); + obj.public_key_y = serde::Deserializable::deserialize(deserializer); + obj.signature = serde::Deserializable::deserialize(deserializer); + obj.result = serde::Deserializable::deserialize(deserializer); + return obj; } -inline BlackBoxOp::SchnorrVerify -BlackBoxOp::SchnorrVerify::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} +namespace Program { + + inline bool operator==(const BlackBoxOp::SchnorrVerify &lhs, const BlackBoxOp::SchnorrVerify &rhs) { + if (!(lhs.public_key_x == rhs.public_key_x)) { return false; } + if (!(lhs.public_key_y == rhs.public_key_y)) { return false; } + if (!(lhs.message == rhs.message)) { return false; } + if (!(lhs.signature == rhs.signature)) { return false; } + if (!(lhs.result == rhs.result)) { return false; } + return true; + } + + inline std::vector BlackBoxOp::SchnorrVerify::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BlackBoxOp::SchnorrVerify BlackBoxOp::SchnorrVerify::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxOp::SchnorrVerify &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.public_key_x, - serializer); - serde::Serializable::serialize(obj.public_key_y, - serializer); - serde::Serializable::serialize(obj.message, - serializer); - serde::Serializable::serialize(obj.signature, - serializer); - serde::Serializable::serialize(obj.result, serializer); +void serde::Serializable::serialize(const Program::BlackBoxOp::SchnorrVerify &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.public_key_x, serializer); + serde::Serializable::serialize(obj.public_key_y, serializer); + serde::Serializable::serialize(obj.message, serializer); + serde::Serializable::serialize(obj.signature, serializer); + serde::Serializable::serialize(obj.result, serializer); } template <> template -Program::BlackBoxOp::SchnorrVerify -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxOp::SchnorrVerify obj; - obj.public_key_x = - serde::Deserializable::deserialize( - deserializer); - obj.public_key_y = - serde::Deserializable::deserialize( - deserializer); - obj.message = - serde::Deserializable::deserialize(deserializer); - obj.signature = - serde::Deserializable::deserialize(deserializer); - obj.result = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxOp::SchnorrVerify serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxOp::SchnorrVerify obj; + obj.public_key_x = serde::Deserializable::deserialize(deserializer); + obj.public_key_y = serde::Deserializable::deserialize(deserializer); + obj.message = serde::Deserializable::deserialize(deserializer); + obj.signature = serde::Deserializable::deserialize(deserializer); + obj.result = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxOp::PedersenCommitment &lhs, - const BlackBoxOp::PedersenCommitment &rhs) { - if (!(lhs.inputs == rhs.inputs)) { - return false; - } - if (!(lhs.domain_separator == rhs.domain_separator)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxOp::PedersenCommitment &lhs, const BlackBoxOp::PedersenCommitment &rhs) { + if (!(lhs.inputs == rhs.inputs)) { return false; } + if (!(lhs.domain_separator == rhs.domain_separator)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } -inline std::vector -BlackBoxOp::PedersenCommitment::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxOp::PedersenCommitment::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxOp::PedersenCommitment -BlackBoxOp::PedersenCommitment::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxOp::PedersenCommitment BlackBoxOp::PedersenCommitment::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxOp::PedersenCommitment &obj, - Serializer &serializer) { - serde::Serializable::serialize(obj.inputs, serializer); - serde::Serializable::serialize( - obj.domain_separator, serializer); - serde::Serializable::serialize(obj.output, serializer); +void serde::Serializable::serialize(const Program::BlackBoxOp::PedersenCommitment &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.inputs, serializer); + serde::Serializable::serialize(obj.domain_separator, serializer); + serde::Serializable::serialize(obj.output, serializer); } template <> template -Program::BlackBoxOp::PedersenCommitment -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxOp::PedersenCommitment obj; - obj.inputs = - serde::Deserializable::deserialize(deserializer); - obj.domain_separator = - serde::Deserializable::deserialize( - deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxOp::PedersenCommitment serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxOp::PedersenCommitment obj; + obj.inputs = serde::Deserializable::deserialize(deserializer); + obj.domain_separator = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxOp::PedersenHash &lhs, - const BlackBoxOp::PedersenHash &rhs) { - if (!(lhs.inputs == rhs.inputs)) { - return false; - } - if (!(lhs.domain_separator == rhs.domain_separator)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxOp::PedersenHash &lhs, const BlackBoxOp::PedersenHash &rhs) { + if (!(lhs.inputs == rhs.inputs)) { return false; } + if (!(lhs.domain_separator == rhs.domain_separator)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } -inline std::vector BlackBoxOp::PedersenHash::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxOp::PedersenHash::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxOp::PedersenHash -BlackBoxOp::PedersenHash::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxOp::PedersenHash BlackBoxOp::PedersenHash::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxOp::PedersenHash &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.inputs, serializer); - serde::Serializable::serialize( - obj.domain_separator, serializer); - serde::Serializable::serialize(obj.output, serializer); +void serde::Serializable::serialize(const Program::BlackBoxOp::PedersenHash &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.inputs, serializer); + serde::Serializable::serialize(obj.domain_separator, serializer); + serde::Serializable::serialize(obj.output, serializer); } template <> template -Program::BlackBoxOp::PedersenHash -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxOp::PedersenHash obj; - obj.inputs = - serde::Deserializable::deserialize(deserializer); - obj.domain_separator = - serde::Deserializable::deserialize( - deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxOp::PedersenHash serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxOp::PedersenHash obj; + obj.inputs = serde::Deserializable::deserialize(deserializer); + obj.domain_separator = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxOp::MultiScalarMul &lhs, - const BlackBoxOp::MultiScalarMul &rhs) { - if (!(lhs.points == rhs.points)) { - return false; - } - if (!(lhs.scalars == rhs.scalars)) { - return false; - } - if (!(lhs.outputs == rhs.outputs)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxOp::MultiScalarMul &lhs, const BlackBoxOp::MultiScalarMul &rhs) { + if (!(lhs.points == rhs.points)) { return false; } + if (!(lhs.scalars == rhs.scalars)) { return false; } + if (!(lhs.outputs == rhs.outputs)) { return false; } + return true; + } -inline std::vector -BlackBoxOp::MultiScalarMul::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxOp::MultiScalarMul::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxOp::MultiScalarMul -BlackBoxOp::MultiScalarMul::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxOp::MultiScalarMul BlackBoxOp::MultiScalarMul::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxOp::MultiScalarMul &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.points, serializer); - serde::Serializable::serialize(obj.scalars, - serializer); - serde::Serializable::serialize(obj.outputs, - serializer); +void serde::Serializable::serialize(const Program::BlackBoxOp::MultiScalarMul &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.points, serializer); + serde::Serializable::serialize(obj.scalars, serializer); + serde::Serializable::serialize(obj.outputs, serializer); } template <> template -Program::BlackBoxOp::MultiScalarMul -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxOp::MultiScalarMul obj; - obj.points = - serde::Deserializable::deserialize(deserializer); - obj.scalars = - serde::Deserializable::deserialize(deserializer); - obj.outputs = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxOp::MultiScalarMul serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxOp::MultiScalarMul obj; + obj.points = serde::Deserializable::deserialize(deserializer); + obj.scalars = serde::Deserializable::deserialize(deserializer); + obj.outputs = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxOp::EmbeddedCurveAdd &lhs, - const BlackBoxOp::EmbeddedCurveAdd &rhs) { - if (!(lhs.input1_x == rhs.input1_x)) { - return false; - } - if (!(lhs.input1_y == rhs.input1_y)) { - return false; - } - if (!(lhs.input2_x == rhs.input2_x)) { - return false; - } - if (!(lhs.input2_y == rhs.input2_y)) { - return false; - } - if (!(lhs.result == rhs.result)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxOp::EmbeddedCurveAdd &lhs, const BlackBoxOp::EmbeddedCurveAdd &rhs) { + if (!(lhs.input1_x == rhs.input1_x)) { return false; } + if (!(lhs.input1_y == rhs.input1_y)) { return false; } + if (!(lhs.input2_x == rhs.input2_x)) { return false; } + if (!(lhs.input2_y == rhs.input2_y)) { return false; } + if (!(lhs.result == rhs.result)) { return false; } + return true; + } -inline std::vector -BlackBoxOp::EmbeddedCurveAdd::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxOp::EmbeddedCurveAdd::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxOp::EmbeddedCurveAdd -BlackBoxOp::EmbeddedCurveAdd::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxOp::EmbeddedCurveAdd BlackBoxOp::EmbeddedCurveAdd::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxOp::EmbeddedCurveAdd &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.input1_x, - serializer); - serde::Serializable::serialize(obj.input1_y, - serializer); - serde::Serializable::serialize(obj.input2_x, - serializer); - serde::Serializable::serialize(obj.input2_y, - serializer); - serde::Serializable::serialize(obj.result, serializer); +void serde::Serializable::serialize(const Program::BlackBoxOp::EmbeddedCurveAdd &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.input1_x, serializer); + serde::Serializable::serialize(obj.input1_y, serializer); + serde::Serializable::serialize(obj.input2_x, serializer); + serde::Serializable::serialize(obj.input2_y, serializer); + serde::Serializable::serialize(obj.result, serializer); } template <> template -Program::BlackBoxOp::EmbeddedCurveAdd -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxOp::EmbeddedCurveAdd obj; - obj.input1_x = - serde::Deserializable::deserialize(deserializer); - obj.input1_y = - serde::Deserializable::deserialize(deserializer); - obj.input2_x = - serde::Deserializable::deserialize(deserializer); - obj.input2_y = - serde::Deserializable::deserialize(deserializer); - obj.result = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxOp::EmbeddedCurveAdd serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxOp::EmbeddedCurveAdd obj; + obj.input1_x = serde::Deserializable::deserialize(deserializer); + obj.input1_y = serde::Deserializable::deserialize(deserializer); + obj.input2_x = serde::Deserializable::deserialize(deserializer); + obj.input2_y = serde::Deserializable::deserialize(deserializer); + obj.result = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxOp::BigIntAdd &lhs, - const BlackBoxOp::BigIntAdd &rhs) { - if (!(lhs.lhs == rhs.lhs)) { - return false; - } - if (!(lhs.rhs == rhs.rhs)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxOp::BigIntAdd &lhs, const BlackBoxOp::BigIntAdd &rhs) { + if (!(lhs.lhs == rhs.lhs)) { return false; } + if (!(lhs.rhs == rhs.rhs)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } -inline std::vector BlackBoxOp::BigIntAdd::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxOp::BigIntAdd::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxOp::BigIntAdd -BlackBoxOp::BigIntAdd::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxOp::BigIntAdd BlackBoxOp::BigIntAdd::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxOp::BigIntAdd &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.lhs, serializer); - serde::Serializable::serialize(obj.rhs, serializer); - serde::Serializable::serialize(obj.output, serializer); +void serde::Serializable::serialize(const Program::BlackBoxOp::BigIntAdd &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.lhs, serializer); + serde::Serializable::serialize(obj.rhs, serializer); + serde::Serializable::serialize(obj.output, serializer); } template <> template -Program::BlackBoxOp::BigIntAdd -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxOp::BigIntAdd obj; - obj.lhs = serde::Deserializable::deserialize(deserializer); - obj.rhs = serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxOp::BigIntAdd serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxOp::BigIntAdd obj; + obj.lhs = serde::Deserializable::deserialize(deserializer); + obj.rhs = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxOp::BigIntSub &lhs, - const BlackBoxOp::BigIntSub &rhs) { - if (!(lhs.lhs == rhs.lhs)) { - return false; - } - if (!(lhs.rhs == rhs.rhs)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxOp::BigIntSub &lhs, const BlackBoxOp::BigIntSub &rhs) { + if (!(lhs.lhs == rhs.lhs)) { return false; } + if (!(lhs.rhs == rhs.rhs)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } -inline std::vector BlackBoxOp::BigIntSub::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxOp::BigIntSub::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxOp::BigIntSub -BlackBoxOp::BigIntSub::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxOp::BigIntSub BlackBoxOp::BigIntSub::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxOp::BigIntSub &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.lhs, serializer); - serde::Serializable::serialize(obj.rhs, serializer); - serde::Serializable::serialize(obj.output, serializer); +void serde::Serializable::serialize(const Program::BlackBoxOp::BigIntSub &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.lhs, serializer); + serde::Serializable::serialize(obj.rhs, serializer); + serde::Serializable::serialize(obj.output, serializer); } template <> template -Program::BlackBoxOp::BigIntSub -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxOp::BigIntSub obj; - obj.lhs = serde::Deserializable::deserialize(deserializer); - obj.rhs = serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxOp::BigIntSub serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxOp::BigIntSub obj; + obj.lhs = serde::Deserializable::deserialize(deserializer); + obj.rhs = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxOp::BigIntMul &lhs, - const BlackBoxOp::BigIntMul &rhs) { - if (!(lhs.lhs == rhs.lhs)) { - return false; - } - if (!(lhs.rhs == rhs.rhs)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxOp::BigIntMul &lhs, const BlackBoxOp::BigIntMul &rhs) { + if (!(lhs.lhs == rhs.lhs)) { return false; } + if (!(lhs.rhs == rhs.rhs)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } -inline std::vector BlackBoxOp::BigIntMul::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxOp::BigIntMul::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxOp::BigIntMul -BlackBoxOp::BigIntMul::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxOp::BigIntMul BlackBoxOp::BigIntMul::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxOp::BigIntMul &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.lhs, serializer); - serde::Serializable::serialize(obj.rhs, serializer); - serde::Serializable::serialize(obj.output, serializer); +void serde::Serializable::serialize(const Program::BlackBoxOp::BigIntMul &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.lhs, serializer); + serde::Serializable::serialize(obj.rhs, serializer); + serde::Serializable::serialize(obj.output, serializer); } template <> template -Program::BlackBoxOp::BigIntMul -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxOp::BigIntMul obj; - obj.lhs = serde::Deserializable::deserialize(deserializer); - obj.rhs = serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxOp::BigIntMul serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxOp::BigIntMul obj; + obj.lhs = serde::Deserializable::deserialize(deserializer); + obj.rhs = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxOp::BigIntDiv &lhs, - const BlackBoxOp::BigIntDiv &rhs) { - if (!(lhs.lhs == rhs.lhs)) { - return false; - } - if (!(lhs.rhs == rhs.rhs)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxOp::BigIntDiv &lhs, const BlackBoxOp::BigIntDiv &rhs) { + if (!(lhs.lhs == rhs.lhs)) { return false; } + if (!(lhs.rhs == rhs.rhs)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } -inline std::vector BlackBoxOp::BigIntDiv::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxOp::BigIntDiv::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxOp::BigIntDiv -BlackBoxOp::BigIntDiv::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxOp::BigIntDiv BlackBoxOp::BigIntDiv::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxOp::BigIntDiv &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.lhs, serializer); - serde::Serializable::serialize(obj.rhs, serializer); - serde::Serializable::serialize(obj.output, serializer); +void serde::Serializable::serialize(const Program::BlackBoxOp::BigIntDiv &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.lhs, serializer); + serde::Serializable::serialize(obj.rhs, serializer); + serde::Serializable::serialize(obj.output, serializer); } template <> template -Program::BlackBoxOp::BigIntDiv -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxOp::BigIntDiv obj; - obj.lhs = serde::Deserializable::deserialize(deserializer); - obj.rhs = serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxOp::BigIntDiv serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxOp::BigIntDiv obj; + obj.lhs = serde::Deserializable::deserialize(deserializer); + obj.rhs = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxOp::BigIntFromLeBytes &lhs, - const BlackBoxOp::BigIntFromLeBytes &rhs) { - if (!(lhs.inputs == rhs.inputs)) { - return false; - } - if (!(lhs.modulus == rhs.modulus)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxOp::BigIntFromLeBytes &lhs, const BlackBoxOp::BigIntFromLeBytes &rhs) { + if (!(lhs.inputs == rhs.inputs)) { return false; } + if (!(lhs.modulus == rhs.modulus)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } -inline std::vector -BlackBoxOp::BigIntFromLeBytes::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxOp::BigIntFromLeBytes::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxOp::BigIntFromLeBytes -BlackBoxOp::BigIntFromLeBytes::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxOp::BigIntFromLeBytes BlackBoxOp::BigIntFromLeBytes::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxOp::BigIntFromLeBytes &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.inputs, serializer); - serde::Serializable::serialize(obj.modulus, - serializer); - serde::Serializable::serialize(obj.output, serializer); +void serde::Serializable::serialize(const Program::BlackBoxOp::BigIntFromLeBytes &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.inputs, serializer); + serde::Serializable::serialize(obj.modulus, serializer); + serde::Serializable::serialize(obj.output, serializer); } template <> template -Program::BlackBoxOp::BigIntFromLeBytes -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxOp::BigIntFromLeBytes obj; - obj.inputs = - serde::Deserializable::deserialize(deserializer); - obj.modulus = - serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxOp::BigIntFromLeBytes serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxOp::BigIntFromLeBytes obj; + obj.inputs = serde::Deserializable::deserialize(deserializer); + obj.modulus = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxOp::BigIntToLeBytes &lhs, - const BlackBoxOp::BigIntToLeBytes &rhs) { - if (!(lhs.input == rhs.input)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxOp::BigIntToLeBytes &lhs, const BlackBoxOp::BigIntToLeBytes &rhs) { + if (!(lhs.input == rhs.input)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } -inline std::vector -BlackBoxOp::BigIntToLeBytes::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxOp::BigIntToLeBytes::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxOp::BigIntToLeBytes -BlackBoxOp::BigIntToLeBytes::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxOp::BigIntToLeBytes BlackBoxOp::BigIntToLeBytes::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxOp::BigIntToLeBytes &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.input, serializer); - serde::Serializable::serialize(obj.output, serializer); +void serde::Serializable::serialize(const Program::BlackBoxOp::BigIntToLeBytes &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.input, serializer); + serde::Serializable::serialize(obj.output, serializer); } template <> template -Program::BlackBoxOp::BigIntToLeBytes -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxOp::BigIntToLeBytes obj; - obj.input = - serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxOp::BigIntToLeBytes serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxOp::BigIntToLeBytes obj; + obj.input = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxOp::Poseidon2Permutation &lhs, - const BlackBoxOp::Poseidon2Permutation &rhs) { - if (!(lhs.message == rhs.message)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - if (!(lhs.len == rhs.len)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxOp::Poseidon2Permutation &lhs, const BlackBoxOp::Poseidon2Permutation &rhs) { + if (!(lhs.message == rhs.message)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + if (!(lhs.len == rhs.len)) { return false; } + return true; + } -inline std::vector -BlackBoxOp::Poseidon2Permutation::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxOp::Poseidon2Permutation::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxOp::Poseidon2Permutation -BlackBoxOp::Poseidon2Permutation::bincodeDeserialize( - std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxOp::Poseidon2Permutation BlackBoxOp::Poseidon2Permutation::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxOp::Poseidon2Permutation &obj, - Serializer &serializer) { - serde::Serializable::serialize(obj.message, - serializer); - serde::Serializable::serialize(obj.output, serializer); - serde::Serializable::serialize(obj.len, serializer); +void serde::Serializable::serialize(const Program::BlackBoxOp::Poseidon2Permutation &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.message, serializer); + serde::Serializable::serialize(obj.output, serializer); + serde::Serializable::serialize(obj.len, serializer); } template <> template -Program::BlackBoxOp::Poseidon2Permutation -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxOp::Poseidon2Permutation obj; - obj.message = - serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - obj.len = serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxOp::Poseidon2Permutation serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxOp::Poseidon2Permutation obj; + obj.message = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + obj.len = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxOp::Sha256Compression &lhs, - const BlackBoxOp::Sha256Compression &rhs) { - if (!(lhs.input == rhs.input)) { - return false; - } - if (!(lhs.hash_values == rhs.hash_values)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxOp::Sha256Compression &lhs, const BlackBoxOp::Sha256Compression &rhs) { + if (!(lhs.input == rhs.input)) { return false; } + if (!(lhs.hash_values == rhs.hash_values)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } -inline std::vector -BlackBoxOp::Sha256Compression::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxOp::Sha256Compression::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxOp::Sha256Compression -BlackBoxOp::Sha256Compression::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxOp::Sha256Compression BlackBoxOp::Sha256Compression::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxOp::Sha256Compression &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.input, serializer); - serde::Serializable::serialize(obj.hash_values, - serializer); - serde::Serializable::serialize(obj.output, serializer); +void serde::Serializable::serialize(const Program::BlackBoxOp::Sha256Compression &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.input, serializer); + serde::Serializable::serialize(obj.hash_values, serializer); + serde::Serializable::serialize(obj.output, serializer); } template <> template -Program::BlackBoxOp::Sha256Compression -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxOp::Sha256Compression obj; - obj.input = - serde::Deserializable::deserialize(deserializer); - obj.hash_values = - serde::Deserializable::deserialize( - deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxOp::Sha256Compression serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxOp::Sha256Compression obj; + obj.input = serde::Deserializable::deserialize(deserializer); + obj.hash_values = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlockId &lhs, const BlockId &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const BlockId &lhs, const BlockId &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector BlockId::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlockId::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlockId BlockId::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlockId BlockId::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlockId &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.value, serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::BlockId &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.value, serializer); + serializer.decrease_container_depth(); } template <> template -Program::BlockId serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::BlockId obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::BlockId serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::BlockId obj; + obj.value = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const BlockType &lhs, const BlockType &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const BlockType &lhs, const BlockType &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector BlockType::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlockType::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlockType BlockType::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlockType BlockType::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlockType &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.value, serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::BlockType &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.value, serializer); + serializer.decrease_container_depth(); } template <> template -Program::BlockType serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::BlockType obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::BlockType serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::BlockType obj; + obj.value = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const BlockType::Memory &lhs, - const BlockType::Memory &rhs) { - return true; -} + inline bool operator==(const BlockType::Memory &lhs, const BlockType::Memory &rhs) { + return true; + } -inline std::vector BlockType::Memory::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlockType::Memory::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlockType::Memory -BlockType::Memory::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlockType::Memory BlockType::Memory::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlockType::Memory &obj, Serializer &serializer) {} +void serde::Serializable::serialize(const Program::BlockType::Memory &obj, Serializer &serializer) { +} template <> template -Program::BlockType::Memory -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlockType::Memory obj; - return obj; +Program::BlockType::Memory serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlockType::Memory obj; + return obj; } namespace Program { -inline bool operator==(const BlockType::CallData &lhs, - const BlockType::CallData &rhs) { - return true; -} + inline bool operator==(const BlockType::CallData &lhs, const BlockType::CallData &rhs) { + return true; + } -inline std::vector BlockType::CallData::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlockType::CallData::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlockType::CallData -BlockType::CallData::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlockType::CallData BlockType::CallData::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlockType::CallData &obj, Serializer &serializer) {} +void serde::Serializable::serialize(const Program::BlockType::CallData &obj, Serializer &serializer) { +} template <> template -Program::BlockType::CallData -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlockType::CallData obj; - return obj; +Program::BlockType::CallData serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlockType::CallData obj; + return obj; } namespace Program { -inline bool operator==(const BlockType::ReturnData &lhs, - const BlockType::ReturnData &rhs) { - return true; -} + inline bool operator==(const BlockType::ReturnData &lhs, const BlockType::ReturnData &rhs) { + return true; + } -inline std::vector BlockType::ReturnData::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlockType::ReturnData::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlockType::ReturnData -BlockType::ReturnData::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlockType::ReturnData BlockType::ReturnData::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlockType::ReturnData &obj, Serializer &serializer) {} +void serde::Serializable::serialize(const Program::BlockType::ReturnData &obj, Serializer &serializer) { +} template <> template -Program::BlockType::ReturnData -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlockType::ReturnData obj; - return obj; +Program::BlockType::ReturnData serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlockType::ReturnData obj; + return obj; } namespace Program { -inline bool operator==(const BrilligBytecode &lhs, const BrilligBytecode &rhs) { - if (!(lhs.bytecode == rhs.bytecode)) { - return false; - } - return true; -} + inline bool operator==(const BrilligBytecode &lhs, const BrilligBytecode &rhs) { + if (!(lhs.bytecode == rhs.bytecode)) { return false; } + return true; + } -inline std::vector BrilligBytecode::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BrilligBytecode::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BrilligBytecode -BrilligBytecode::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BrilligBytecode BrilligBytecode::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BrilligBytecode &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.bytecode, - serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::BrilligBytecode &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.bytecode, serializer); + serializer.decrease_container_depth(); } template <> template -Program::BrilligBytecode -serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::BrilligBytecode obj; - obj.bytecode = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::BrilligBytecode serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::BrilligBytecode obj; + obj.bytecode = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const BrilligInputs &lhs, const BrilligInputs &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const BrilligInputs &lhs, const BrilligInputs &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector BrilligInputs::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BrilligInputs::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BrilligInputs -BrilligInputs::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BrilligInputs BrilligInputs::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BrilligInputs &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.value, serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::BrilligInputs &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.value, serializer); + serializer.decrease_container_depth(); } template <> template -Program::BrilligInputs -serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::BrilligInputs obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::BrilligInputs serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::BrilligInputs obj; + obj.value = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const BrilligInputs::Single &lhs, - const BrilligInputs::Single &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const BrilligInputs::Single &lhs, const BrilligInputs::Single &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector BrilligInputs::Single::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BrilligInputs::Single::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BrilligInputs::Single -BrilligInputs::Single::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BrilligInputs::Single BrilligInputs::Single::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BrilligInputs::Single &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.value, serializer); +void serde::Serializable::serialize(const Program::BrilligInputs::Single &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.value, serializer); } template <> template -Program::BrilligInputs::Single -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligInputs::Single obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BrilligInputs::Single serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligInputs::Single obj; + obj.value = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BrilligInputs::Array &lhs, - const BrilligInputs::Array &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const BrilligInputs::Array &lhs, const BrilligInputs::Array &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector BrilligInputs::Array::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BrilligInputs::Array::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BrilligInputs::Array -BrilligInputs::Array::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BrilligInputs::Array BrilligInputs::Array::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BrilligInputs::Array &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.value, serializer); +void serde::Serializable::serialize(const Program::BrilligInputs::Array &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.value, serializer); } template <> template -Program::BrilligInputs::Array -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligInputs::Array obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BrilligInputs::Array serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligInputs::Array obj; + obj.value = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BrilligInputs::MemoryArray &lhs, - const BrilligInputs::MemoryArray &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const BrilligInputs::MemoryArray &lhs, const BrilligInputs::MemoryArray &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector -BrilligInputs::MemoryArray::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BrilligInputs::MemoryArray::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BrilligInputs::MemoryArray -BrilligInputs::MemoryArray::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BrilligInputs::MemoryArray BrilligInputs::MemoryArray::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BrilligInputs::MemoryArray &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.value, serializer); +void serde::Serializable::serialize(const Program::BrilligInputs::MemoryArray &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.value, serializer); } template <> template -Program::BrilligInputs::MemoryArray -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligInputs::MemoryArray obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BrilligInputs::MemoryArray serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligInputs::MemoryArray obj; + obj.value = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BrilligOpcode &lhs, const BrilligOpcode &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const BrilligOpcode &lhs, const BrilligOpcode &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector BrilligOpcode::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BrilligOpcode::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BrilligOpcode -BrilligOpcode::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BrilligOpcode BrilligOpcode::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BrilligOpcode &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.value, serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::BrilligOpcode &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.value, serializer); + serializer.decrease_container_depth(); } template <> template -Program::BrilligOpcode -serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::BrilligOpcode obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::BrilligOpcode serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::BrilligOpcode obj; + obj.value = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const BrilligOpcode::BinaryFieldOp &lhs, - const BrilligOpcode::BinaryFieldOp &rhs) { - if (!(lhs.destination == rhs.destination)) { - return false; - } - if (!(lhs.op == rhs.op)) { - return false; - } - if (!(lhs.lhs == rhs.lhs)) { - return false; - } - if (!(lhs.rhs == rhs.rhs)) { - return false; - } - return true; -} + inline bool operator==(const BrilligOpcode::BinaryFieldOp &lhs, const BrilligOpcode::BinaryFieldOp &rhs) { + if (!(lhs.destination == rhs.destination)) { return false; } + if (!(lhs.op == rhs.op)) { return false; } + if (!(lhs.lhs == rhs.lhs)) { return false; } + if (!(lhs.rhs == rhs.rhs)) { return false; } + return true; + } -inline std::vector -BrilligOpcode::BinaryFieldOp::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); -} + inline std::vector BrilligOpcode::BinaryFieldOp::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BrilligOpcode::BinaryFieldOp -BrilligOpcode::BinaryFieldOp::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BrilligOpcode::BinaryFieldOp BrilligOpcode::BinaryFieldOp::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BrilligOpcode::BinaryFieldOp &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.destination, - serializer); - serde::Serializable::serialize(obj.op, serializer); - serde::Serializable::serialize(obj.lhs, serializer); - serde::Serializable::serialize(obj.rhs, serializer); +void serde::Serializable::serialize(const Program::BrilligOpcode::BinaryFieldOp &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.destination, serializer); + serde::Serializable::serialize(obj.op, serializer); + serde::Serializable::serialize(obj.lhs, serializer); + serde::Serializable::serialize(obj.rhs, serializer); } template <> template -Program::BrilligOpcode::BinaryFieldOp -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOpcode::BinaryFieldOp obj; - obj.destination = - serde::Deserializable::deserialize( - deserializer); - obj.op = serde::Deserializable::deserialize(deserializer); - obj.lhs = serde::Deserializable::deserialize(deserializer); - obj.rhs = serde::Deserializable::deserialize(deserializer); - return obj; +Program::BrilligOpcode::BinaryFieldOp serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOpcode::BinaryFieldOp obj; + obj.destination = serde::Deserializable::deserialize(deserializer); + obj.op = serde::Deserializable::deserialize(deserializer); + obj.lhs = serde::Deserializable::deserialize(deserializer); + obj.rhs = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BrilligOpcode::BinaryIntOp &lhs, - const BrilligOpcode::BinaryIntOp &rhs) { - if (!(lhs.destination == rhs.destination)) { - return false; - } - if (!(lhs.op == rhs.op)) { - return false; - } - if (!(lhs.bit_size == rhs.bit_size)) { - return false; - } - if (!(lhs.lhs == rhs.lhs)) { - return false; - } - if (!(lhs.rhs == rhs.rhs)) { - return false; - } - return true; -} + inline bool operator==(const BrilligOpcode::BinaryIntOp &lhs, const BrilligOpcode::BinaryIntOp &rhs) { + if (!(lhs.destination == rhs.destination)) { return false; } + if (!(lhs.op == rhs.op)) { return false; } + if (!(lhs.bit_size == rhs.bit_size)) { return false; } + if (!(lhs.lhs == rhs.lhs)) { return false; } + if (!(lhs.rhs == rhs.rhs)) { return false; } + return true; + } -inline std::vector -BrilligOpcode::BinaryIntOp::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BrilligOpcode::BinaryIntOp::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BrilligOpcode::BinaryIntOp -BrilligOpcode::BinaryIntOp::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BrilligOpcode::BinaryIntOp BrilligOpcode::BinaryIntOp::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BrilligOpcode::BinaryIntOp &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.destination, - serializer); - serde::Serializable::serialize(obj.op, serializer); - serde::Serializable::serialize(obj.bit_size, - serializer); - serde::Serializable::serialize(obj.lhs, serializer); - serde::Serializable::serialize(obj.rhs, serializer); +void serde::Serializable::serialize(const Program::BrilligOpcode::BinaryIntOp &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.destination, serializer); + serde::Serializable::serialize(obj.op, serializer); + serde::Serializable::serialize(obj.bit_size, serializer); + serde::Serializable::serialize(obj.lhs, serializer); + serde::Serializable::serialize(obj.rhs, serializer); } template <> template -Program::BrilligOpcode::BinaryIntOp -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOpcode::BinaryIntOp obj; - obj.destination = - serde::Deserializable::deserialize( - deserializer); - obj.op = serde::Deserializable::deserialize(deserializer); - obj.bit_size = - serde::Deserializable::deserialize(deserializer); - obj.lhs = serde::Deserializable::deserialize(deserializer); - obj.rhs = serde::Deserializable::deserialize(deserializer); - return obj; +Program::BrilligOpcode::BinaryIntOp serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOpcode::BinaryIntOp obj; + obj.destination = serde::Deserializable::deserialize(deserializer); + obj.op = serde::Deserializable::deserialize(deserializer); + obj.bit_size = serde::Deserializable::deserialize(deserializer); + obj.lhs = serde::Deserializable::deserialize(deserializer); + obj.rhs = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BrilligOpcode::Cast &lhs, - const BrilligOpcode::Cast &rhs) { - if (!(lhs.destination == rhs.destination)) { - return false; - } - if (!(lhs.source == rhs.source)) { - return false; - } - if (!(lhs.bit_size == rhs.bit_size)) { - return false; - } - return true; -} + inline bool operator==(const BrilligOpcode::Cast &lhs, const BrilligOpcode::Cast &rhs) { + if (!(lhs.destination == rhs.destination)) { return false; } + if (!(lhs.source == rhs.source)) { return false; } + if (!(lhs.bit_size == rhs.bit_size)) { return false; } + return true; + } -inline std::vector BrilligOpcode::Cast::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BrilligOpcode::Cast::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BrilligOpcode::Cast -BrilligOpcode::Cast::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BrilligOpcode::Cast BrilligOpcode::Cast::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BrilligOpcode::Cast &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.destination, - serializer); - serde::Serializable::serialize(obj.source, serializer); - serde::Serializable::serialize(obj.bit_size, - serializer); +void serde::Serializable::serialize(const Program::BrilligOpcode::Cast &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.destination, serializer); + serde::Serializable::serialize(obj.source, serializer); + serde::Serializable::serialize(obj.bit_size, serializer); } template <> template -Program::BrilligOpcode::Cast -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOpcode::Cast obj; - obj.destination = - serde::Deserializable::deserialize( - deserializer); - obj.source = - serde::Deserializable::deserialize(deserializer); - obj.bit_size = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BrilligOpcode::Cast serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOpcode::Cast obj; + obj.destination = serde::Deserializable::deserialize(deserializer); + obj.source = serde::Deserializable::deserialize(deserializer); + obj.bit_size = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BrilligOpcode::JumpIfNot &lhs, - const BrilligOpcode::JumpIfNot &rhs) { - if (!(lhs.condition == rhs.condition)) { - return false; - } - if (!(lhs.location == rhs.location)) { - return false; - } - return true; -} + inline bool operator==(const BrilligOpcode::JumpIfNot &lhs, const BrilligOpcode::JumpIfNot &rhs) { + if (!(lhs.condition == rhs.condition)) { return false; } + if (!(lhs.location == rhs.location)) { return false; } + return true; + } -inline std::vector BrilligOpcode::JumpIfNot::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BrilligOpcode::JumpIfNot::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BrilligOpcode::JumpIfNot -BrilligOpcode::JumpIfNot::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BrilligOpcode::JumpIfNot BrilligOpcode::JumpIfNot::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BrilligOpcode::JumpIfNot &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.condition, - serializer); - serde::Serializable::serialize(obj.location, - serializer); +void serde::Serializable::serialize(const Program::BrilligOpcode::JumpIfNot &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.condition, serializer); + serde::Serializable::serialize(obj.location, serializer); } template <> template -Program::BrilligOpcode::JumpIfNot -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOpcode::JumpIfNot obj; - obj.condition = - serde::Deserializable::deserialize(deserializer); - obj.location = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BrilligOpcode::JumpIfNot serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOpcode::JumpIfNot obj; + obj.condition = serde::Deserializable::deserialize(deserializer); + obj.location = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BrilligOpcode::JumpIf &lhs, - const BrilligOpcode::JumpIf &rhs) { - if (!(lhs.condition == rhs.condition)) { - return false; - } - if (!(lhs.location == rhs.location)) { - return false; - } - return true; -} + inline bool operator==(const BrilligOpcode::JumpIf &lhs, const BrilligOpcode::JumpIf &rhs) { + if (!(lhs.condition == rhs.condition)) { return false; } + if (!(lhs.location == rhs.location)) { return false; } + return true; + } -inline std::vector BrilligOpcode::JumpIf::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BrilligOpcode::JumpIf::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BrilligOpcode::JumpIf -BrilligOpcode::JumpIf::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BrilligOpcode::JumpIf BrilligOpcode::JumpIf::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BrilligOpcode::JumpIf &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.condition, - serializer); - serde::Serializable::serialize(obj.location, - serializer); +void serde::Serializable::serialize(const Program::BrilligOpcode::JumpIf &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.condition, serializer); + serde::Serializable::serialize(obj.location, serializer); } template <> template -Program::BrilligOpcode::JumpIf -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOpcode::JumpIf obj; - obj.condition = - serde::Deserializable::deserialize(deserializer); - obj.location = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BrilligOpcode::JumpIf serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOpcode::JumpIf obj; + obj.condition = serde::Deserializable::deserialize(deserializer); + obj.location = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BrilligOpcode::Jump &lhs, - const BrilligOpcode::Jump &rhs) { - if (!(lhs.location == rhs.location)) { - return false; - } - return true; -} + inline bool operator==(const BrilligOpcode::Jump &lhs, const BrilligOpcode::Jump &rhs) { + if (!(lhs.location == rhs.location)) { return false; } + return true; + } -inline std::vector BrilligOpcode::Jump::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BrilligOpcode::Jump::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BrilligOpcode::Jump -BrilligOpcode::Jump::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BrilligOpcode::Jump BrilligOpcode::Jump::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BrilligOpcode::Jump &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.location, - serializer); +void serde::Serializable::serialize(const Program::BrilligOpcode::Jump &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.location, serializer); } template <> template -Program::BrilligOpcode::Jump -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOpcode::Jump obj; - obj.location = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BrilligOpcode::Jump serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOpcode::Jump obj; + obj.location = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BrilligOpcode::CalldataCopy &lhs, - const BrilligOpcode::CalldataCopy &rhs) { - if (!(lhs.destination_address == rhs.destination_address)) { - return false; - } - if (!(lhs.size == rhs.size)) { - return false; - } - if (!(lhs.offset == rhs.offset)) { - return false; - } - return true; -} + inline bool operator==(const BrilligOpcode::CalldataCopy &lhs, const BrilligOpcode::CalldataCopy &rhs) { + if (!(lhs.destination_address == rhs.destination_address)) { return false; } + if (!(lhs.size == rhs.size)) { return false; } + if (!(lhs.offset == rhs.offset)) { return false; } + return true; + } -inline std::vector -BrilligOpcode::CalldataCopy::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); -} + inline std::vector BrilligOpcode::CalldataCopy::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BrilligOpcode::CalldataCopy -BrilligOpcode::CalldataCopy::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BrilligOpcode::CalldataCopy BrilligOpcode::CalldataCopy::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BrilligOpcode::CalldataCopy &obj, Serializer &serializer) { - serde::Serializable::serialize( - obj.destination_address, serializer); - serde::Serializable::serialize(obj.size, serializer); - serde::Serializable::serialize(obj.offset, serializer); +void serde::Serializable::serialize(const Program::BrilligOpcode::CalldataCopy &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.destination_address, serializer); + serde::Serializable::serialize(obj.size, serializer); + serde::Serializable::serialize(obj.offset, serializer); } template <> template -Program::BrilligOpcode::CalldataCopy -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOpcode::CalldataCopy obj; - obj.destination_address = - serde::Deserializable::deserialize( - deserializer); - obj.size = - serde::Deserializable::deserialize(deserializer); - obj.offset = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BrilligOpcode::CalldataCopy serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOpcode::CalldataCopy obj; + obj.destination_address = serde::Deserializable::deserialize(deserializer); + obj.size = serde::Deserializable::deserialize(deserializer); + obj.offset = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BrilligOpcode::Call &lhs, - const BrilligOpcode::Call &rhs) { - if (!(lhs.location == rhs.location)) { - return false; - } - return true; -} + inline bool operator==(const BrilligOpcode::Call &lhs, const BrilligOpcode::Call &rhs) { + if (!(lhs.location == rhs.location)) { return false; } + return true; + } -inline std::vector BrilligOpcode::Call::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BrilligOpcode::Call::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BrilligOpcode::Call -BrilligOpcode::Call::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BrilligOpcode::Call BrilligOpcode::Call::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BrilligOpcode::Call &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.location, - serializer); +void serde::Serializable::serialize(const Program::BrilligOpcode::Call &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.location, serializer); } template <> template -Program::BrilligOpcode::Call -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOpcode::Call obj; - obj.location = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BrilligOpcode::Call serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOpcode::Call obj; + obj.location = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BrilligOpcode::Const &lhs, - const BrilligOpcode::Const &rhs) { - if (!(lhs.destination == rhs.destination)) { - return false; - } - if (!(lhs.bit_size == rhs.bit_size)) { - return false; - } - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const BrilligOpcode::Const &lhs, const BrilligOpcode::Const &rhs) { + if (!(lhs.destination == rhs.destination)) { return false; } + if (!(lhs.bit_size == rhs.bit_size)) { return false; } + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector BrilligOpcode::Const::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BrilligOpcode::Const::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BrilligOpcode::Const -BrilligOpcode::Const::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BrilligOpcode::Const BrilligOpcode::Const::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BrilligOpcode::Const &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.destination, - serializer); - serde::Serializable::serialize(obj.bit_size, - serializer); - serde::Serializable::serialize(obj.value, serializer); +void serde::Serializable::serialize(const Program::BrilligOpcode::Const &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.destination, serializer); + serde::Serializable::serialize(obj.bit_size, serializer); + serde::Serializable::serialize(obj.value, serializer); } template <> template -Program::BrilligOpcode::Const -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOpcode::Const obj; - obj.destination = - serde::Deserializable::deserialize( - deserializer); - obj.bit_size = - serde::Deserializable::deserialize(deserializer); - obj.value = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BrilligOpcode::Const serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOpcode::Const obj; + obj.destination = serde::Deserializable::deserialize(deserializer); + obj.bit_size = serde::Deserializable::deserialize(deserializer); + obj.value = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BrilligOpcode::Return &lhs, - const BrilligOpcode::Return &rhs) { - return true; -} + inline bool operator==(const BrilligOpcode::Return &lhs, const BrilligOpcode::Return &rhs) { + return true; + } -inline std::vector BrilligOpcode::Return::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BrilligOpcode::Return::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BrilligOpcode::Return -BrilligOpcode::Return::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BrilligOpcode::Return BrilligOpcode::Return::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BrilligOpcode::Return &obj, Serializer &serializer) {} +void serde::Serializable::serialize(const Program::BrilligOpcode::Return &obj, Serializer &serializer) { +} template <> template -Program::BrilligOpcode::Return -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOpcode::Return obj; - return obj; +Program::BrilligOpcode::Return serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOpcode::Return obj; + return obj; } namespace Program { -inline bool operator==(const BrilligOpcode::ForeignCall &lhs, - const BrilligOpcode::ForeignCall &rhs) { - if (!(lhs.function == rhs.function)) { - return false; - } - if (!(lhs.destinations == rhs.destinations)) { - return false; - } - if (!(lhs.destination_value_types == rhs.destination_value_types)) { - return false; - } - if (!(lhs.inputs == rhs.inputs)) { - return false; - } - if (!(lhs.input_value_types == rhs.input_value_types)) { - return false; - } - return true; -} + inline bool operator==(const BrilligOpcode::ForeignCall &lhs, const BrilligOpcode::ForeignCall &rhs) { + if (!(lhs.function == rhs.function)) { return false; } + if (!(lhs.destinations == rhs.destinations)) { return false; } + if (!(lhs.destination_value_types == rhs.destination_value_types)) { return false; } + if (!(lhs.inputs == rhs.inputs)) { return false; } + if (!(lhs.input_value_types == rhs.input_value_types)) { return false; } + return true; + } -inline std::vector -BrilligOpcode::ForeignCall::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BrilligOpcode::ForeignCall::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BrilligOpcode::ForeignCall -BrilligOpcode::ForeignCall::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BrilligOpcode::ForeignCall BrilligOpcode::ForeignCall::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BrilligOpcode::ForeignCall &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.function, - serializer); - serde::Serializable::serialize(obj.destinations, - serializer); - serde::Serializable::serialize( - obj.destination_value_types, serializer); - serde::Serializable::serialize(obj.inputs, serializer); - serde::Serializable::serialize( - obj.input_value_types, serializer); +void serde::Serializable::serialize(const Program::BrilligOpcode::ForeignCall &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.function, serializer); + serde::Serializable::serialize(obj.destinations, serializer); + serde::Serializable::serialize(obj.destination_value_types, serializer); + serde::Serializable::serialize(obj.inputs, serializer); + serde::Serializable::serialize(obj.input_value_types, serializer); } template <> template -Program::BrilligOpcode::ForeignCall -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOpcode::ForeignCall obj; - obj.function = - serde::Deserializable::deserialize(deserializer); - obj.destinations = - serde::Deserializable::deserialize( - deserializer); - obj.destination_value_types = - serde::Deserializable::deserialize( - deserializer); - obj.inputs = - serde::Deserializable::deserialize(deserializer); - obj.input_value_types = - serde::Deserializable::deserialize( - deserializer); - return obj; +Program::BrilligOpcode::ForeignCall serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOpcode::ForeignCall obj; + obj.function = serde::Deserializable::deserialize(deserializer); + obj.destinations = serde::Deserializable::deserialize(deserializer); + obj.destination_value_types = serde::Deserializable::deserialize(deserializer); + obj.inputs = serde::Deserializable::deserialize(deserializer); + obj.input_value_types = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BrilligOpcode::Mov &lhs, - const BrilligOpcode::Mov &rhs) { - if (!(lhs.destination == rhs.destination)) { - return false; - } - if (!(lhs.source == rhs.source)) { - return false; - } - return true; -} + inline bool operator==(const BrilligOpcode::Mov &lhs, const BrilligOpcode::Mov &rhs) { + if (!(lhs.destination == rhs.destination)) { return false; } + if (!(lhs.source == rhs.source)) { return false; } + return true; + } -inline std::vector BrilligOpcode::Mov::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BrilligOpcode::Mov::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BrilligOpcode::Mov -BrilligOpcode::Mov::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BrilligOpcode::Mov BrilligOpcode::Mov::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BrilligOpcode::Mov &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.destination, - serializer); - serde::Serializable::serialize(obj.source, serializer); +void serde::Serializable::serialize(const Program::BrilligOpcode::Mov &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.destination, serializer); + serde::Serializable::serialize(obj.source, serializer); } template <> template -Program::BrilligOpcode::Mov -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOpcode::Mov obj; - obj.destination = - serde::Deserializable::deserialize( - deserializer); - obj.source = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BrilligOpcode::Mov serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOpcode::Mov obj; + obj.destination = serde::Deserializable::deserialize(deserializer); + obj.source = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BrilligOpcode::ConditionalMov &lhs, - const BrilligOpcode::ConditionalMov &rhs) { - if (!(lhs.destination == rhs.destination)) { - return false; - } - if (!(lhs.source_a == rhs.source_a)) { - return false; - } - if (!(lhs.source_b == rhs.source_b)) { - return false; - } - if (!(lhs.condition == rhs.condition)) { - return false; - } - return true; -} + inline bool operator==(const BrilligOpcode::ConditionalMov &lhs, const BrilligOpcode::ConditionalMov &rhs) { + if (!(lhs.destination == rhs.destination)) { return false; } + if (!(lhs.source_a == rhs.source_a)) { return false; } + if (!(lhs.source_b == rhs.source_b)) { return false; } + if (!(lhs.condition == rhs.condition)) { return false; } + return true; + } -inline std::vector -BrilligOpcode::ConditionalMov::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); -} + inline std::vector BrilligOpcode::ConditionalMov::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BrilligOpcode::ConditionalMov -BrilligOpcode::ConditionalMov::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BrilligOpcode::ConditionalMov BrilligOpcode::ConditionalMov::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BrilligOpcode::ConditionalMov &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.destination, - serializer); - serde::Serializable::serialize(obj.source_a, - serializer); - serde::Serializable::serialize(obj.source_b, - serializer); - serde::Serializable::serialize(obj.condition, - serializer); +void serde::Serializable::serialize(const Program::BrilligOpcode::ConditionalMov &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.destination, serializer); + serde::Serializable::serialize(obj.source_a, serializer); + serde::Serializable::serialize(obj.source_b, serializer); + serde::Serializable::serialize(obj.condition, serializer); } template <> template -Program::BrilligOpcode::ConditionalMov -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOpcode::ConditionalMov obj; - obj.destination = - serde::Deserializable::deserialize( - deserializer); - obj.source_a = - serde::Deserializable::deserialize(deserializer); - obj.source_b = - serde::Deserializable::deserialize(deserializer); - obj.condition = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BrilligOpcode::ConditionalMov serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOpcode::ConditionalMov obj; + obj.destination = serde::Deserializable::deserialize(deserializer); + obj.source_a = serde::Deserializable::deserialize(deserializer); + obj.source_b = serde::Deserializable::deserialize(deserializer); + obj.condition = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BrilligOpcode::Load &lhs, - const BrilligOpcode::Load &rhs) { - if (!(lhs.destination == rhs.destination)) { - return false; - } - if (!(lhs.source_pointer == rhs.source_pointer)) { - return false; - } - return true; -} + inline bool operator==(const BrilligOpcode::Load &lhs, const BrilligOpcode::Load &rhs) { + if (!(lhs.destination == rhs.destination)) { return false; } + if (!(lhs.source_pointer == rhs.source_pointer)) { return false; } + return true; + } -inline std::vector BrilligOpcode::Load::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BrilligOpcode::Load::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BrilligOpcode::Load -BrilligOpcode::Load::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BrilligOpcode::Load BrilligOpcode::Load::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BrilligOpcode::Load &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.destination, - serializer); - serde::Serializable::serialize( - obj.source_pointer, serializer); +void serde::Serializable::serialize(const Program::BrilligOpcode::Load &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.destination, serializer); + serde::Serializable::serialize(obj.source_pointer, serializer); } template <> template -Program::BrilligOpcode::Load -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOpcode::Load obj; - obj.destination = - serde::Deserializable::deserialize( - deserializer); - obj.source_pointer = - serde::Deserializable::deserialize( - deserializer); - return obj; +Program::BrilligOpcode::Load serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOpcode::Load obj; + obj.destination = serde::Deserializable::deserialize(deserializer); + obj.source_pointer = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BrilligOpcode::Store &lhs, - const BrilligOpcode::Store &rhs) { - if (!(lhs.destination_pointer == rhs.destination_pointer)) { - return false; - } - if (!(lhs.source == rhs.source)) { - return false; - } - return true; -} + inline bool operator==(const BrilligOpcode::Store &lhs, const BrilligOpcode::Store &rhs) { + if (!(lhs.destination_pointer == rhs.destination_pointer)) { return false; } + if (!(lhs.source == rhs.source)) { return false; } + return true; + } -inline std::vector BrilligOpcode::Store::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BrilligOpcode::Store::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BrilligOpcode::Store -BrilligOpcode::Store::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BrilligOpcode::Store BrilligOpcode::Store::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BrilligOpcode::Store &obj, Serializer &serializer) { - serde::Serializable::serialize( - obj.destination_pointer, serializer); - serde::Serializable::serialize(obj.source, serializer); +void serde::Serializable::serialize(const Program::BrilligOpcode::Store &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.destination_pointer, serializer); + serde::Serializable::serialize(obj.source, serializer); } template <> template -Program::BrilligOpcode::Store -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOpcode::Store obj; - obj.destination_pointer = - serde::Deserializable::deserialize( - deserializer); - obj.source = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BrilligOpcode::Store serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOpcode::Store obj; + obj.destination_pointer = serde::Deserializable::deserialize(deserializer); + obj.source = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BrilligOpcode::BlackBox &lhs, - const BrilligOpcode::BlackBox &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const BrilligOpcode::BlackBox &lhs, const BrilligOpcode::BlackBox &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector BrilligOpcode::BlackBox::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BrilligOpcode::BlackBox::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BrilligOpcode::BlackBox -BrilligOpcode::BlackBox::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BrilligOpcode::BlackBox BrilligOpcode::BlackBox::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BrilligOpcode::BlackBox &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.value, serializer); +void serde::Serializable::serialize(const Program::BrilligOpcode::BlackBox &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.value, serializer); } template <> template -Program::BrilligOpcode::BlackBox -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOpcode::BlackBox obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BrilligOpcode::BlackBox serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOpcode::BlackBox obj; + obj.value = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BrilligOpcode::Trap &lhs, - const BrilligOpcode::Trap &rhs) { - if (!(lhs.revert_data == rhs.revert_data)) { - return false; - } - return true; -} + inline bool operator==(const BrilligOpcode::Trap &lhs, const BrilligOpcode::Trap &rhs) { + if (!(lhs.revert_data == rhs.revert_data)) { return false; } + return true; + } -inline std::vector BrilligOpcode::Trap::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BrilligOpcode::Trap::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BrilligOpcode::Trap -BrilligOpcode::Trap::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BrilligOpcode::Trap BrilligOpcode::Trap::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BrilligOpcode::Trap &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.revert_data, - serializer); +void serde::Serializable::serialize(const Program::BrilligOpcode::Trap &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.revert_data, serializer); } template <> template -Program::BrilligOpcode::Trap -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOpcode::Trap obj; - obj.revert_data = - serde::Deserializable::deserialize( - deserializer); - return obj; +Program::BrilligOpcode::Trap serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOpcode::Trap obj; + obj.revert_data = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BrilligOpcode::Stop &lhs, - const BrilligOpcode::Stop &rhs) { - if (!(lhs.return_data_offset == rhs.return_data_offset)) { - return false; - } - if (!(lhs.return_data_size == rhs.return_data_size)) { - return false; - } - return true; -} + inline bool operator==(const BrilligOpcode::Stop &lhs, const BrilligOpcode::Stop &rhs) { + if (!(lhs.return_data_offset == rhs.return_data_offset)) { return false; } + if (!(lhs.return_data_size == rhs.return_data_size)) { return false; } + return true; + } -inline std::vector BrilligOpcode::Stop::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BrilligOpcode::Stop::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BrilligOpcode::Stop -BrilligOpcode::Stop::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BrilligOpcode::Stop BrilligOpcode::Stop::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BrilligOpcode::Stop &obj, Serializer &serializer) { - serde::Serializable::serialize( - obj.return_data_offset, serializer); - serde::Serializable::serialize( - obj.return_data_size, serializer); +void serde::Serializable::serialize(const Program::BrilligOpcode::Stop &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.return_data_offset, serializer); + serde::Serializable::serialize(obj.return_data_size, serializer); } template <> template -Program::BrilligOpcode::Stop -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOpcode::Stop obj; - obj.return_data_offset = - serde::Deserializable::deserialize( - deserializer); - obj.return_data_size = - serde::Deserializable::deserialize( - deserializer); - return obj; +Program::BrilligOpcode::Stop serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOpcode::Stop obj; + obj.return_data_offset = serde::Deserializable::deserialize(deserializer); + obj.return_data_size = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BrilligOutputs &lhs, const BrilligOutputs &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const BrilligOutputs &lhs, const BrilligOutputs &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector BrilligOutputs::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BrilligOutputs::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BrilligOutputs -BrilligOutputs::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BrilligOutputs BrilligOutputs::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BrilligOutputs &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.value, serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::BrilligOutputs &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.value, serializer); + serializer.decrease_container_depth(); } template <> template -Program::BrilligOutputs -serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::BrilligOutputs obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::BrilligOutputs serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::BrilligOutputs obj; + obj.value = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const BrilligOutputs::Simple &lhs, - const BrilligOutputs::Simple &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const BrilligOutputs::Simple &lhs, const BrilligOutputs::Simple &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector BrilligOutputs::Simple::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BrilligOutputs::Simple::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BrilligOutputs::Simple -BrilligOutputs::Simple::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BrilligOutputs::Simple BrilligOutputs::Simple::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BrilligOutputs::Simple &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.value, serializer); +void serde::Serializable::serialize(const Program::BrilligOutputs::Simple &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.value, serializer); } template <> template -Program::BrilligOutputs::Simple -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOutputs::Simple obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BrilligOutputs::Simple serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOutputs::Simple obj; + obj.value = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BrilligOutputs::Array &lhs, - const BrilligOutputs::Array &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const BrilligOutputs::Array &lhs, const BrilligOutputs::Array &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector BrilligOutputs::Array::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BrilligOutputs::Array::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BrilligOutputs::Array -BrilligOutputs::Array::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BrilligOutputs::Array BrilligOutputs::Array::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BrilligOutputs::Array &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.value, serializer); +void serde::Serializable::serialize(const Program::BrilligOutputs::Array &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.value, serializer); } template <> template -Program::BrilligOutputs::Array -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOutputs::Array obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BrilligOutputs::Array serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOutputs::Array obj; + obj.value = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const Circuit &lhs, const Circuit &rhs) { - if (!(lhs.current_witness_index == rhs.current_witness_index)) { - return false; - } - if (!(lhs.opcodes == rhs.opcodes)) { - return false; - } - if (!(lhs.expression_width == rhs.expression_width)) { - return false; - } - if (!(lhs.private_parameters == rhs.private_parameters)) { - return false; - } - if (!(lhs.public_parameters == rhs.public_parameters)) { - return false; - } - if (!(lhs.return_values == rhs.return_values)) { - return false; - } - if (!(lhs.assert_messages == rhs.assert_messages)) { - return false; - } - if (!(lhs.recursive == rhs.recursive)) { - return false; - } - return true; -} + inline bool operator==(const Circuit &lhs, const Circuit &rhs) { + if (!(lhs.current_witness_index == rhs.current_witness_index)) { return false; } + if (!(lhs.opcodes == rhs.opcodes)) { return false; } + if (!(lhs.expression_width == rhs.expression_width)) { return false; } + if (!(lhs.private_parameters == rhs.private_parameters)) { return false; } + if (!(lhs.public_parameters == rhs.public_parameters)) { return false; } + if (!(lhs.return_values == rhs.return_values)) { return false; } + if (!(lhs.assert_messages == rhs.assert_messages)) { return false; } + if (!(lhs.recursive == rhs.recursive)) { return false; } + return true; + } -inline std::vector Circuit::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector Circuit::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline Circuit Circuit::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline Circuit Circuit::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::Circuit &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize( - obj.current_witness_index, serializer); - serde::Serializable::serialize(obj.opcodes, - serializer); - serde::Serializable::serialize( - obj.expression_width, serializer); - serde::Serializable::serialize( - obj.private_parameters, serializer); - serde::Serializable::serialize( - obj.public_parameters, serializer); - serde::Serializable::serialize(obj.return_values, - serializer); - serde::Serializable::serialize( - obj.assert_messages, serializer); - serde::Serializable::serialize(obj.recursive, - serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::Circuit &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.current_witness_index, serializer); + serde::Serializable::serialize(obj.opcodes, serializer); + serde::Serializable::serialize(obj.expression_width, serializer); + serde::Serializable::serialize(obj.private_parameters, serializer); + serde::Serializable::serialize(obj.public_parameters, serializer); + serde::Serializable::serialize(obj.return_values, serializer); + serde::Serializable::serialize(obj.assert_messages, serializer); + serde::Serializable::serialize(obj.recursive, serializer); + serializer.decrease_container_depth(); } template <> template -Program::Circuit serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::Circuit obj; - obj.current_witness_index = - serde::Deserializable::deserialize( - deserializer); - obj.opcodes = - serde::Deserializable::deserialize(deserializer); - obj.expression_width = - serde::Deserializable::deserialize( - deserializer); - obj.private_parameters = - serde::Deserializable::deserialize( - deserializer); - obj.public_parameters = - serde::Deserializable::deserialize( - deserializer); - obj.return_values = - serde::Deserializable::deserialize( - deserializer); - obj.assert_messages = - serde::Deserializable::deserialize( - deserializer); - obj.recursive = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::Circuit serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::Circuit obj; + obj.current_witness_index = serde::Deserializable::deserialize(deserializer); + obj.opcodes = serde::Deserializable::deserialize(deserializer); + obj.expression_width = serde::Deserializable::deserialize(deserializer); + obj.private_parameters = serde::Deserializable::deserialize(deserializer); + obj.public_parameters = serde::Deserializable::deserialize(deserializer); + obj.return_values = serde::Deserializable::deserialize(deserializer); + obj.assert_messages = serde::Deserializable::deserialize(deserializer); + obj.recursive = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const Directive &lhs, const Directive &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const Directive &lhs, const Directive &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector Directive::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector Directive::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline Directive Directive::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline Directive Directive::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::Directive &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.value, serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::Directive &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.value, serializer); + serializer.decrease_container_depth(); } template <> template -Program::Directive serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::Directive obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::Directive serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::Directive obj; + obj.value = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const Directive::ToLeRadix &lhs, - const Directive::ToLeRadix &rhs) { - if (!(lhs.a == rhs.a)) { - return false; - } - if (!(lhs.b == rhs.b)) { - return false; - } - if (!(lhs.radix == rhs.radix)) { - return false; - } - return true; -} + inline bool operator==(const Directive::ToLeRadix &lhs, const Directive::ToLeRadix &rhs) { + if (!(lhs.a == rhs.a)) { return false; } + if (!(lhs.b == rhs.b)) { return false; } + if (!(lhs.radix == rhs.radix)) { return false; } + return true; + } -inline std::vector Directive::ToLeRadix::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector Directive::ToLeRadix::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline Directive::ToLeRadix -Directive::ToLeRadix::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline Directive::ToLeRadix Directive::ToLeRadix::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::Directive::ToLeRadix &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.a, serializer); - serde::Serializable::serialize(obj.b, serializer); - serde::Serializable::serialize(obj.radix, serializer); +void serde::Serializable::serialize(const Program::Directive::ToLeRadix &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.a, serializer); + serde::Serializable::serialize(obj.b, serializer); + serde::Serializable::serialize(obj.radix, serializer); } template <> template -Program::Directive::ToLeRadix -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::Directive::ToLeRadix obj; - obj.a = serde::Deserializable::deserialize(deserializer); - obj.b = serde::Deserializable::deserialize(deserializer); - obj.radix = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::Directive::ToLeRadix serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::Directive::ToLeRadix obj; + obj.a = serde::Deserializable::deserialize(deserializer); + obj.b = serde::Deserializable::deserialize(deserializer); + obj.radix = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const Expression &lhs, const Expression &rhs) { - if (!(lhs.mul_terms == rhs.mul_terms)) { - return false; - } - if (!(lhs.linear_combinations == rhs.linear_combinations)) { - return false; - } - if (!(lhs.q_c == rhs.q_c)) { - return false; - } - return true; -} + inline bool operator==(const Expression &lhs, const Expression &rhs) { + if (!(lhs.mul_terms == rhs.mul_terms)) { return false; } + if (!(lhs.linear_combinations == rhs.linear_combinations)) { return false; } + if (!(lhs.q_c == rhs.q_c)) { return false; } + return true; + } -inline std::vector Expression::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector Expression::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline Expression Expression::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline Expression Expression::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::Expression &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.mul_terms, - serializer); - serde::Serializable::serialize( - obj.linear_combinations, serializer); - serde::Serializable::serialize(obj.q_c, serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::Expression &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.mul_terms, serializer); + serde::Serializable::serialize(obj.linear_combinations, serializer); + serde::Serializable::serialize(obj.q_c, serializer); + serializer.decrease_container_depth(); } template <> template -Program::Expression serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::Expression obj; - obj.mul_terms = - serde::Deserializable::deserialize(deserializer); - obj.linear_combinations = - serde::Deserializable::deserialize( - deserializer); - obj.q_c = serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::Expression serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::Expression obj; + obj.mul_terms = serde::Deserializable::deserialize(deserializer); + obj.linear_combinations = serde::Deserializable::deserialize(deserializer); + obj.q_c = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const ExpressionOrMemory &lhs, - const ExpressionOrMemory &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const ExpressionOrMemory &lhs, const ExpressionOrMemory &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector ExpressionOrMemory::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector ExpressionOrMemory::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline ExpressionOrMemory -ExpressionOrMemory::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline ExpressionOrMemory ExpressionOrMemory::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::ExpressionOrMemory &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.value, serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::ExpressionOrMemory &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.value, serializer); + serializer.decrease_container_depth(); } template <> template -Program::ExpressionOrMemory -serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::ExpressionOrMemory obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::ExpressionOrMemory serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::ExpressionOrMemory obj; + obj.value = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const ExpressionOrMemory::Expression &lhs, - const ExpressionOrMemory::Expression &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const ExpressionOrMemory::Expression &lhs, const ExpressionOrMemory::Expression &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector -ExpressionOrMemory::Expression::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); -} + inline std::vector ExpressionOrMemory::Expression::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline ExpressionOrMemory::Expression -ExpressionOrMemory::Expression::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline ExpressionOrMemory::Expression ExpressionOrMemory::Expression::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::ExpressionOrMemory::Expression &obj, - Serializer &serializer) { - serde::Serializable::serialize(obj.value, serializer); +void serde::Serializable::serialize(const Program::ExpressionOrMemory::Expression &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.value, serializer); } template <> template -Program::ExpressionOrMemory::Expression -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::ExpressionOrMemory::Expression obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::ExpressionOrMemory::Expression serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::ExpressionOrMemory::Expression obj; + obj.value = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const ExpressionOrMemory::Memory &lhs, - const ExpressionOrMemory::Memory &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const ExpressionOrMemory::Memory &lhs, const ExpressionOrMemory::Memory &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector -ExpressionOrMemory::Memory::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector ExpressionOrMemory::Memory::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline ExpressionOrMemory::Memory -ExpressionOrMemory::Memory::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline ExpressionOrMemory::Memory ExpressionOrMemory::Memory::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::ExpressionOrMemory::Memory &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.value, serializer); +void serde::Serializable::serialize(const Program::ExpressionOrMemory::Memory &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.value, serializer); } template <> template -Program::ExpressionOrMemory::Memory -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::ExpressionOrMemory::Memory obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::ExpressionOrMemory::Memory serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::ExpressionOrMemory::Memory obj; + obj.value = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const ExpressionWidth &lhs, const ExpressionWidth &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const ExpressionWidth &lhs, const ExpressionWidth &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector ExpressionWidth::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector ExpressionWidth::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline ExpressionWidth -ExpressionWidth::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline ExpressionWidth ExpressionWidth::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::ExpressionWidth &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.value, serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::ExpressionWidth &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.value, serializer); + serializer.decrease_container_depth(); } template <> template -Program::ExpressionWidth -serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::ExpressionWidth obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::ExpressionWidth serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::ExpressionWidth obj; + obj.value = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const ExpressionWidth::Unbounded &lhs, - const ExpressionWidth::Unbounded &rhs) { - return true; -} + inline bool operator==(const ExpressionWidth::Unbounded &lhs, const ExpressionWidth::Unbounded &rhs) { + return true; + } -inline std::vector -ExpressionWidth::Unbounded::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector ExpressionWidth::Unbounded::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline ExpressionWidth::Unbounded -ExpressionWidth::Unbounded::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline ExpressionWidth::Unbounded ExpressionWidth::Unbounded::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::ExpressionWidth::Unbounded &obj, Serializer &serializer) {} +void serde::Serializable::serialize(const Program::ExpressionWidth::Unbounded &obj, Serializer &serializer) { +} template <> template -Program::ExpressionWidth::Unbounded -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::ExpressionWidth::Unbounded obj; - return obj; +Program::ExpressionWidth::Unbounded serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::ExpressionWidth::Unbounded obj; + return obj; } namespace Program { -inline bool operator==(const ExpressionWidth::Bounded &lhs, - const ExpressionWidth::Bounded &rhs) { - if (!(lhs.width == rhs.width)) { - return false; - } - return true; -} + inline bool operator==(const ExpressionWidth::Bounded &lhs, const ExpressionWidth::Bounded &rhs) { + if (!(lhs.width == rhs.width)) { return false; } + return true; + } -inline std::vector ExpressionWidth::Bounded::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector ExpressionWidth::Bounded::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline ExpressionWidth::Bounded -ExpressionWidth::Bounded::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline ExpressionWidth::Bounded ExpressionWidth::Bounded::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::ExpressionWidth::Bounded &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.width, serializer); +void serde::Serializable::serialize(const Program::ExpressionWidth::Bounded &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.width, serializer); } template <> template -Program::ExpressionWidth::Bounded -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::ExpressionWidth::Bounded obj; - obj.width = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::ExpressionWidth::Bounded serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::ExpressionWidth::Bounded obj; + obj.width = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const FunctionInput &lhs, const FunctionInput &rhs) { - if (!(lhs.witness == rhs.witness)) { - return false; - } - if (!(lhs.num_bits == rhs.num_bits)) { - return false; - } - return true; -} + inline bool operator==(const FunctionInput &lhs, const FunctionInput &rhs) { + if (!(lhs.witness == rhs.witness)) { return false; } + if (!(lhs.num_bits == rhs.num_bits)) { return false; } + return true; + } -inline std::vector FunctionInput::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector FunctionInput::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline FunctionInput -FunctionInput::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline FunctionInput FunctionInput::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::FunctionInput &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.witness, - serializer); - serde::Serializable::serialize(obj.num_bits, - serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::FunctionInput &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.witness, serializer); + serde::Serializable::serialize(obj.num_bits, serializer); + serializer.decrease_container_depth(); } template <> template -Program::FunctionInput -serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::FunctionInput obj; - obj.witness = - serde::Deserializable::deserialize(deserializer); - obj.num_bits = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::FunctionInput serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::FunctionInput obj; + obj.witness = serde::Deserializable::deserialize(deserializer); + obj.num_bits = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const HeapArray &lhs, const HeapArray &rhs) { - if (!(lhs.pointer == rhs.pointer)) { - return false; - } - if (!(lhs.size == rhs.size)) { - return false; - } - return true; -} + inline bool operator==(const HeapArray &lhs, const HeapArray &rhs) { + if (!(lhs.pointer == rhs.pointer)) { return false; } + if (!(lhs.size == rhs.size)) { return false; } + return true; + } -inline std::vector HeapArray::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector HeapArray::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline HeapArray HeapArray::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline HeapArray HeapArray::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::HeapArray &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.pointer, - serializer); - serde::Serializable::serialize(obj.size, serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::HeapArray &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.pointer, serializer); + serde::Serializable::serialize(obj.size, serializer); + serializer.decrease_container_depth(); } template <> template -Program::HeapArray serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::HeapArray obj; - obj.pointer = - serde::Deserializable::deserialize(deserializer); - obj.size = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::HeapArray serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::HeapArray obj; + obj.pointer = serde::Deserializable::deserialize(deserializer); + obj.size = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const HeapValueType &lhs, const HeapValueType &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const HeapValueType &lhs, const HeapValueType &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector HeapValueType::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector HeapValueType::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline HeapValueType -HeapValueType::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline HeapValueType HeapValueType::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::HeapValueType &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.value, serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::HeapValueType &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.value, serializer); + serializer.decrease_container_depth(); } template <> template -Program::HeapValueType -serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::HeapValueType obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::HeapValueType serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::HeapValueType obj; + obj.value = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const HeapValueType::Simple &lhs, - const HeapValueType::Simple &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const HeapValueType::Simple &lhs, const HeapValueType::Simple &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector HeapValueType::Simple::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector HeapValueType::Simple::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline HeapValueType::Simple -HeapValueType::Simple::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline HeapValueType::Simple HeapValueType::Simple::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::HeapValueType::Simple &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.value, serializer); +void serde::Serializable::serialize(const Program::HeapValueType::Simple &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.value, serializer); } template <> template -Program::HeapValueType::Simple -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::HeapValueType::Simple obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::HeapValueType::Simple serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::HeapValueType::Simple obj; + obj.value = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const HeapValueType::Array &lhs, - const HeapValueType::Array &rhs) { - if (!(lhs.value_types == rhs.value_types)) { - return false; - } - if (!(lhs.size == rhs.size)) { - return false; - } - return true; -} + inline bool operator==(const HeapValueType::Array &lhs, const HeapValueType::Array &rhs) { + if (!(lhs.value_types == rhs.value_types)) { return false; } + if (!(lhs.size == rhs.size)) { return false; } + return true; + } -inline std::vector HeapValueType::Array::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector HeapValueType::Array::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline HeapValueType::Array -HeapValueType::Array::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline HeapValueType::Array HeapValueType::Array::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::HeapValueType::Array &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.value_types, - serializer); - serde::Serializable::serialize(obj.size, serializer); +void serde::Serializable::serialize(const Program::HeapValueType::Array &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.value_types, serializer); + serde::Serializable::serialize(obj.size, serializer); } template <> template -Program::HeapValueType::Array -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::HeapValueType::Array obj; - obj.value_types = - serde::Deserializable::deserialize( - deserializer); - obj.size = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::HeapValueType::Array serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::HeapValueType::Array obj; + obj.value_types = serde::Deserializable::deserialize(deserializer); + obj.size = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const HeapValueType::Vector &lhs, - const HeapValueType::Vector &rhs) { - if (!(lhs.value_types == rhs.value_types)) { - return false; - } - return true; -} + inline bool operator==(const HeapValueType::Vector &lhs, const HeapValueType::Vector &rhs) { + if (!(lhs.value_types == rhs.value_types)) { return false; } + return true; + } -inline std::vector HeapValueType::Vector::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector HeapValueType::Vector::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline HeapValueType::Vector -HeapValueType::Vector::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline HeapValueType::Vector HeapValueType::Vector::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::HeapValueType::Vector &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.value_types, - serializer); +void serde::Serializable::serialize(const Program::HeapValueType::Vector &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.value_types, serializer); } template <> template -Program::HeapValueType::Vector -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::HeapValueType::Vector obj; - obj.value_types = - serde::Deserializable::deserialize( - deserializer); - return obj; +Program::HeapValueType::Vector serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::HeapValueType::Vector obj; + obj.value_types = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const HeapVector &lhs, const HeapVector &rhs) { - if (!(lhs.pointer == rhs.pointer)) { - return false; - } - if (!(lhs.size == rhs.size)) { - return false; - } - return true; -} + inline bool operator==(const HeapVector &lhs, const HeapVector &rhs) { + if (!(lhs.pointer == rhs.pointer)) { return false; } + if (!(lhs.size == rhs.size)) { return false; } + return true; + } -inline std::vector HeapVector::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector HeapVector::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline HeapVector HeapVector::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline HeapVector HeapVector::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::HeapVector &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.pointer, - serializer); - serde::Serializable::serialize(obj.size, serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::HeapVector &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.pointer, serializer); + serde::Serializable::serialize(obj.size, serializer); + serializer.decrease_container_depth(); } template <> template -Program::HeapVector serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::HeapVector obj; - obj.pointer = - serde::Deserializable::deserialize(deserializer); - obj.size = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::HeapVector serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::HeapVector obj; + obj.pointer = serde::Deserializable::deserialize(deserializer); + obj.size = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const MemOp &lhs, const MemOp &rhs) { - if (!(lhs.operation == rhs.operation)) { - return false; - } - if (!(lhs.index == rhs.index)) { - return false; - } - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const MemOp &lhs, const MemOp &rhs) { + if (!(lhs.operation == rhs.operation)) { return false; } + if (!(lhs.index == rhs.index)) { return false; } + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector MemOp::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector MemOp::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline MemOp MemOp::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline MemOp MemOp::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize(const Program::MemOp &obj, - Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.operation, - serializer); - serde::Serializable::serialize(obj.index, serializer); - serde::Serializable::serialize(obj.value, serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::MemOp &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.operation, serializer); + serde::Serializable::serialize(obj.index, serializer); + serde::Serializable::serialize(obj.value, serializer); + serializer.decrease_container_depth(); } template <> template -Program::MemOp -serde::Deserializable::deserialize(Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::MemOp obj; - obj.operation = - serde::Deserializable::deserialize(deserializer); - obj.index = - serde::Deserializable::deserialize(deserializer); - obj.value = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::MemOp serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::MemOp obj; + obj.operation = serde::Deserializable::deserialize(deserializer); + obj.index = serde::Deserializable::deserialize(deserializer); + obj.value = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const MemoryAddress &lhs, const MemoryAddress &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const MemoryAddress &lhs, const MemoryAddress &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector MemoryAddress::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector MemoryAddress::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline MemoryAddress -MemoryAddress::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline MemoryAddress MemoryAddress::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::MemoryAddress &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.value, serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::MemoryAddress &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.value, serializer); + serializer.decrease_container_depth(); } template <> template -Program::MemoryAddress -serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::MemoryAddress obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::MemoryAddress serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::MemoryAddress obj; + obj.value = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const Opcode &lhs, const Opcode &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const Opcode &lhs, const Opcode &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector Opcode::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector Opcode::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline Opcode Opcode::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline Opcode Opcode::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize(const Program::Opcode &obj, - Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.value, serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::Opcode &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.value, serializer); + serializer.decrease_container_depth(); } template <> template -Program::Opcode serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::Opcode obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::Opcode serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::Opcode obj; + obj.value = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const Opcode::AssertZero &lhs, - const Opcode::AssertZero &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const Opcode::AssertZero &lhs, const Opcode::AssertZero &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector Opcode::AssertZero::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector Opcode::AssertZero::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline Opcode::AssertZero -Opcode::AssertZero::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline Opcode::AssertZero Opcode::AssertZero::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::Opcode::AssertZero &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.value, serializer); +void serde::Serializable::serialize(const Program::Opcode::AssertZero &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.value, serializer); } template <> template -Program::Opcode::AssertZero -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::Opcode::AssertZero obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::Opcode::AssertZero serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::Opcode::AssertZero obj; + obj.value = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const Opcode::BlackBoxFuncCall &lhs, - const Opcode::BlackBoxFuncCall &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const Opcode::BlackBoxFuncCall &lhs, const Opcode::BlackBoxFuncCall &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector Opcode::BlackBoxFuncCall::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector Opcode::BlackBoxFuncCall::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline Opcode::BlackBoxFuncCall -Opcode::BlackBoxFuncCall::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline Opcode::BlackBoxFuncCall Opcode::BlackBoxFuncCall::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::Opcode::BlackBoxFuncCall &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.value, serializer); +void serde::Serializable::serialize(const Program::Opcode::BlackBoxFuncCall &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.value, serializer); } template <> template -Program::Opcode::BlackBoxFuncCall -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::Opcode::BlackBoxFuncCall obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::Opcode::BlackBoxFuncCall serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::Opcode::BlackBoxFuncCall obj; + obj.value = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const Opcode::Directive &lhs, - const Opcode::Directive &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const Opcode::Directive &lhs, const Opcode::Directive &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector Opcode::Directive::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector Opcode::Directive::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline Opcode::Directive -Opcode::Directive::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline Opcode::Directive Opcode::Directive::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::Opcode::Directive &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.value, serializer); +void serde::Serializable::serialize(const Program::Opcode::Directive &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.value, serializer); } template <> template -Program::Opcode::Directive -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::Opcode::Directive obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::Opcode::Directive serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::Opcode::Directive obj; + obj.value = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const Opcode::MemoryOp &lhs, - const Opcode::MemoryOp &rhs) { - if (!(lhs.block_id == rhs.block_id)) { - return false; - } - if (!(lhs.op == rhs.op)) { - return false; - } - if (!(lhs.predicate == rhs.predicate)) { - return false; - } - return true; -} + inline bool operator==(const Opcode::MemoryOp &lhs, const Opcode::MemoryOp &rhs) { + if (!(lhs.block_id == rhs.block_id)) { return false; } + if (!(lhs.op == rhs.op)) { return false; } + if (!(lhs.predicate == rhs.predicate)) { return false; } + return true; + } -inline std::vector Opcode::MemoryOp::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector Opcode::MemoryOp::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline Opcode::MemoryOp -Opcode::MemoryOp::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline Opcode::MemoryOp Opcode::MemoryOp::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::Opcode::MemoryOp &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.block_id, - serializer); - serde::Serializable::serialize(obj.op, serializer); - serde::Serializable::serialize(obj.predicate, - serializer); +void serde::Serializable::serialize(const Program::Opcode::MemoryOp &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.block_id, serializer); + serde::Serializable::serialize(obj.op, serializer); + serde::Serializable::serialize(obj.predicate, serializer); } template <> template -Program::Opcode::MemoryOp -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::Opcode::MemoryOp obj; - obj.block_id = - serde::Deserializable::deserialize(deserializer); - obj.op = serde::Deserializable::deserialize(deserializer); - obj.predicate = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::Opcode::MemoryOp serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::Opcode::MemoryOp obj; + obj.block_id = serde::Deserializable::deserialize(deserializer); + obj.op = serde::Deserializable::deserialize(deserializer); + obj.predicate = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const Opcode::MemoryInit &lhs, - const Opcode::MemoryInit &rhs) { - if (!(lhs.block_id == rhs.block_id)) { - return false; - } - if (!(lhs.init == rhs.init)) { - return false; - } - if (!(lhs.block_type == rhs.block_type)) { - return false; - } - return true; -} + inline bool operator==(const Opcode::MemoryInit &lhs, const Opcode::MemoryInit &rhs) { + if (!(lhs.block_id == rhs.block_id)) { return false; } + if (!(lhs.init == rhs.init)) { return false; } + if (!(lhs.block_type == rhs.block_type)) { return false; } + return true; + } -inline std::vector Opcode::MemoryInit::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector Opcode::MemoryInit::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline Opcode::MemoryInit -Opcode::MemoryInit::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline Opcode::MemoryInit Opcode::MemoryInit::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::Opcode::MemoryInit &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.block_id, - serializer); - serde::Serializable::serialize(obj.init, serializer); - serde::Serializable::serialize(obj.block_type, - serializer); +void serde::Serializable::serialize(const Program::Opcode::MemoryInit &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.block_id, serializer); + serde::Serializable::serialize(obj.init, serializer); + serde::Serializable::serialize(obj.block_type, serializer); } template <> template -Program::Opcode::MemoryInit -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::Opcode::MemoryInit obj; - obj.block_id = - serde::Deserializable::deserialize(deserializer); - obj.init = - serde::Deserializable::deserialize(deserializer); - obj.block_type = serde::Deserializable::deserialize( - deserializer); - return obj; +Program::Opcode::MemoryInit serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::Opcode::MemoryInit obj; + obj.block_id = serde::Deserializable::deserialize(deserializer); + obj.init = serde::Deserializable::deserialize(deserializer); + obj.block_type = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const Opcode::BrilligCall &lhs, - const Opcode::BrilligCall &rhs) { - if (!(lhs.id == rhs.id)) { - return false; - } - if (!(lhs.inputs == rhs.inputs)) { - return false; - } - if (!(lhs.outputs == rhs.outputs)) { - return false; - } - if (!(lhs.predicate == rhs.predicate)) { - return false; - } - return true; -} + inline bool operator==(const Opcode::BrilligCall &lhs, const Opcode::BrilligCall &rhs) { + if (!(lhs.id == rhs.id)) { return false; } + if (!(lhs.inputs == rhs.inputs)) { return false; } + if (!(lhs.outputs == rhs.outputs)) { return false; } + if (!(lhs.predicate == rhs.predicate)) { return false; } + return true; + } -inline std::vector Opcode::BrilligCall::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector Opcode::BrilligCall::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline Opcode::BrilligCall -Opcode::BrilligCall::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline Opcode::BrilligCall Opcode::BrilligCall::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::Opcode::BrilligCall &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.id, serializer); - serde::Serializable::serialize(obj.inputs, serializer); - serde::Serializable::serialize(obj.outputs, - serializer); - serde::Serializable::serialize(obj.predicate, - serializer); +void serde::Serializable::serialize(const Program::Opcode::BrilligCall &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.id, serializer); + serde::Serializable::serialize(obj.inputs, serializer); + serde::Serializable::serialize(obj.outputs, serializer); + serde::Serializable::serialize(obj.predicate, serializer); } template <> template -Program::Opcode::BrilligCall -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::Opcode::BrilligCall obj; - obj.id = serde::Deserializable::deserialize(deserializer); - obj.inputs = - serde::Deserializable::deserialize(deserializer); - obj.outputs = - serde::Deserializable::deserialize(deserializer); - obj.predicate = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::Opcode::BrilligCall serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::Opcode::BrilligCall obj; + obj.id = serde::Deserializable::deserialize(deserializer); + obj.inputs = serde::Deserializable::deserialize(deserializer); + obj.outputs = serde::Deserializable::deserialize(deserializer); + obj.predicate = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const Opcode::Call &lhs, const Opcode::Call &rhs) { - if (!(lhs.id == rhs.id)) { - return false; - } - if (!(lhs.inputs == rhs.inputs)) { - return false; - } - if (!(lhs.outputs == rhs.outputs)) { - return false; - } - if (!(lhs.predicate == rhs.predicate)) { - return false; - } - return true; -} + inline bool operator==(const Opcode::Call &lhs, const Opcode::Call &rhs) { + if (!(lhs.id == rhs.id)) { return false; } + if (!(lhs.inputs == rhs.inputs)) { return false; } + if (!(lhs.outputs == rhs.outputs)) { return false; } + if (!(lhs.predicate == rhs.predicate)) { return false; } + return true; + } -inline std::vector Opcode::Call::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector Opcode::Call::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline Opcode::Call -Opcode::Call::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline Opcode::Call Opcode::Call::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::Opcode::Call &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.id, serializer); - serde::Serializable::serialize(obj.inputs, serializer); - serde::Serializable::serialize(obj.outputs, - serializer); - serde::Serializable::serialize(obj.predicate, - serializer); +void serde::Serializable::serialize(const Program::Opcode::Call &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.id, serializer); + serde::Serializable::serialize(obj.inputs, serializer); + serde::Serializable::serialize(obj.outputs, serializer); + serde::Serializable::serialize(obj.predicate, serializer); } template <> template -Program::Opcode::Call serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::Opcode::Call obj; - obj.id = serde::Deserializable::deserialize(deserializer); - obj.inputs = - serde::Deserializable::deserialize(deserializer); - obj.outputs = - serde::Deserializable::deserialize(deserializer); - obj.predicate = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::Opcode::Call serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::Opcode::Call obj; + obj.id = serde::Deserializable::deserialize(deserializer); + obj.inputs = serde::Deserializable::deserialize(deserializer); + obj.outputs = serde::Deserializable::deserialize(deserializer); + obj.predicate = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const OpcodeLocation &lhs, const OpcodeLocation &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const OpcodeLocation &lhs, const OpcodeLocation &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector OpcodeLocation::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector OpcodeLocation::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline OpcodeLocation -OpcodeLocation::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline OpcodeLocation OpcodeLocation::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::OpcodeLocation &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.value, serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::OpcodeLocation &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.value, serializer); + serializer.decrease_container_depth(); } template <> template -Program::OpcodeLocation -serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::OpcodeLocation obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::OpcodeLocation serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::OpcodeLocation obj; + obj.value = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const OpcodeLocation::Acir &lhs, - const OpcodeLocation::Acir &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const OpcodeLocation::Acir &lhs, const OpcodeLocation::Acir &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector OpcodeLocation::Acir::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector OpcodeLocation::Acir::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline OpcodeLocation::Acir -OpcodeLocation::Acir::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline OpcodeLocation::Acir OpcodeLocation::Acir::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::OpcodeLocation::Acir &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.value, serializer); +void serde::Serializable::serialize(const Program::OpcodeLocation::Acir &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.value, serializer); } template <> template -Program::OpcodeLocation::Acir -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::OpcodeLocation::Acir obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::OpcodeLocation::Acir serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::OpcodeLocation::Acir obj; + obj.value = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const OpcodeLocation::Brillig &lhs, - const OpcodeLocation::Brillig &rhs) { - if (!(lhs.acir_index == rhs.acir_index)) { - return false; - } - if (!(lhs.brillig_index == rhs.brillig_index)) { - return false; - } - return true; -} + inline bool operator==(const OpcodeLocation::Brillig &lhs, const OpcodeLocation::Brillig &rhs) { + if (!(lhs.acir_index == rhs.acir_index)) { return false; } + if (!(lhs.brillig_index == rhs.brillig_index)) { return false; } + return true; + } -inline std::vector OpcodeLocation::Brillig::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector OpcodeLocation::Brillig::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline OpcodeLocation::Brillig -OpcodeLocation::Brillig::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline OpcodeLocation::Brillig OpcodeLocation::Brillig::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::OpcodeLocation::Brillig &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.acir_index, - serializer); - serde::Serializable::serialize(obj.brillig_index, - serializer); +void serde::Serializable::serialize(const Program::OpcodeLocation::Brillig &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.acir_index, serializer); + serde::Serializable::serialize(obj.brillig_index, serializer); } template <> template -Program::OpcodeLocation::Brillig -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::OpcodeLocation::Brillig obj; - obj.acir_index = serde::Deserializable::deserialize( - deserializer); - obj.brillig_index = - serde::Deserializable::deserialize( - deserializer); - return obj; +Program::OpcodeLocation::Brillig serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::OpcodeLocation::Brillig obj; + obj.acir_index = serde::Deserializable::deserialize(deserializer); + obj.brillig_index = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const Program &lhs, const Program &rhs) { - if (!(lhs.functions == rhs.functions)) { - return false; - } - if (!(lhs.unconstrained_functions == rhs.unconstrained_functions)) { - return false; - } - return true; -} + inline bool operator==(const Program &lhs, const Program &rhs) { + if (!(lhs.functions == rhs.functions)) { return false; } + if (!(lhs.unconstrained_functions == rhs.unconstrained_functions)) { return false; } + return true; + } -inline std::vector Program::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector Program::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline Program Program::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline Program Program::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::Program &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.functions, - serializer); - serde::Serializable::serialize( - obj.unconstrained_functions, serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::Program &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.functions, serializer); + serde::Serializable::serialize(obj.unconstrained_functions, serializer); + serializer.decrease_container_depth(); } template <> template -Program::Program serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::Program obj; - obj.functions = - serde::Deserializable::deserialize(deserializer); - obj.unconstrained_functions = - serde::Deserializable::deserialize( - deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::Program serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::Program obj; + obj.functions = serde::Deserializable::deserialize(deserializer); + obj.unconstrained_functions = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const PublicInputs &lhs, const PublicInputs &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const PublicInputs &lhs, const PublicInputs &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector PublicInputs::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector PublicInputs::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline PublicInputs -PublicInputs::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline PublicInputs PublicInputs::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::PublicInputs &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.value, serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::PublicInputs &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.value, serializer); + serializer.decrease_container_depth(); } template <> template -Program::PublicInputs serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::PublicInputs obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::PublicInputs serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::PublicInputs obj; + obj.value = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const ValueOrArray &lhs, const ValueOrArray &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const ValueOrArray &lhs, const ValueOrArray &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector ValueOrArray::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector ValueOrArray::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline ValueOrArray -ValueOrArray::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline ValueOrArray ValueOrArray::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::ValueOrArray &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.value, serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::ValueOrArray &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.value, serializer); + serializer.decrease_container_depth(); } template <> template -Program::ValueOrArray serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::ValueOrArray obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::ValueOrArray serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::ValueOrArray obj; + obj.value = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const ValueOrArray::MemoryAddress &lhs, - const ValueOrArray::MemoryAddress &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const ValueOrArray::MemoryAddress &lhs, const ValueOrArray::MemoryAddress &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector -ValueOrArray::MemoryAddress::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); -} + inline std::vector ValueOrArray::MemoryAddress::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline ValueOrArray::MemoryAddress -ValueOrArray::MemoryAddress::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline ValueOrArray::MemoryAddress ValueOrArray::MemoryAddress::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::ValueOrArray::MemoryAddress &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.value, serializer); +void serde::Serializable::serialize(const Program::ValueOrArray::MemoryAddress &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.value, serializer); } template <> template -Program::ValueOrArray::MemoryAddress -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::ValueOrArray::MemoryAddress obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::ValueOrArray::MemoryAddress serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::ValueOrArray::MemoryAddress obj; + obj.value = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const ValueOrArray::HeapArray &lhs, - const ValueOrArray::HeapArray &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const ValueOrArray::HeapArray &lhs, const ValueOrArray::HeapArray &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector ValueOrArray::HeapArray::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector ValueOrArray::HeapArray::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline ValueOrArray::HeapArray -ValueOrArray::HeapArray::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline ValueOrArray::HeapArray ValueOrArray::HeapArray::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::ValueOrArray::HeapArray &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.value, serializer); +void serde::Serializable::serialize(const Program::ValueOrArray::HeapArray &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.value, serializer); } template <> template -Program::ValueOrArray::HeapArray -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::ValueOrArray::HeapArray obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::ValueOrArray::HeapArray serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::ValueOrArray::HeapArray obj; + obj.value = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const ValueOrArray::HeapVector &lhs, - const ValueOrArray::HeapVector &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const ValueOrArray::HeapVector &lhs, const ValueOrArray::HeapVector &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector ValueOrArray::HeapVector::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector ValueOrArray::HeapVector::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline ValueOrArray::HeapVector -ValueOrArray::HeapVector::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline ValueOrArray::HeapVector ValueOrArray::HeapVector::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::ValueOrArray::HeapVector &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.value, serializer); +void serde::Serializable::serialize(const Program::ValueOrArray::HeapVector &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.value, serializer); } template <> template -Program::ValueOrArray::HeapVector -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::ValueOrArray::HeapVector obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::ValueOrArray::HeapVector serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::ValueOrArray::HeapVector obj; + obj.value = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const Witness &lhs, const Witness &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const Witness &lhs, const Witness &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector Witness::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector Witness::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline Witness Witness::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline Witness Witness::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::Witness &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.value, serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::Witness &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.value, serializer); + serializer.decrease_container_depth(); } template <> template -Program::Witness serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::Witness obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::Witness serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::Witness obj; + obj.value = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } From 5a07595c5cc7dc393b85ae4bab1786cc5ba6ce0c Mon Sep 17 00:00:00 2001 From: guipublic Date: Wed, 8 May 2024 16:14:42 +0000 Subject: [PATCH 48/98] fix merge issue --- noir/noir-repo/acvm-repo/brillig_vm/src/black_box.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/noir/noir-repo/acvm-repo/brillig_vm/src/black_box.rs b/noir/noir-repo/acvm-repo/brillig_vm/src/black_box.rs index 2b35aad7979..bbc7c84bc62 100644 --- a/noir/noir-repo/acvm-repo/brillig_vm/src/black_box.rs +++ b/noir/noir-repo/acvm-repo/brillig_vm/src/black_box.rs @@ -3,7 +3,7 @@ use acir::{BlackBoxFunc, FieldElement}; use acvm_blackbox_solver::BigIntSolver; use acvm_blackbox_solver::{ aes128_encrypt, blake2s, blake3, ecdsa_secp256k1_verify, ecdsa_secp256r1_verify, keccak256, - keccakf1600, sha256compression, BlackBoxFunctionSolver, BlackBoxResolutionError, + keccakf1600, sha256_compression, BlackBoxFunctionSolver, BlackBoxResolutionError, }; use crate::memory::MemoryValue; From bd695ced297bae54901282fa4fd4fa9f22b46ec1 Mon Sep 17 00:00:00 2001 From: guipublic Date: Wed, 8 May 2024 16:29:51 +0000 Subject: [PATCH 49/98] fix merge issue --- .../dsl/acir_format/acir_format.test.cpp | 140 ++++++++++-------- 1 file changed, 80 insertions(+), 60 deletions(-) diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.test.cpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.test.cpp index 5ce94acb28d..cfef0f97cf4 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.test.cpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.test.cpp @@ -414,69 +414,89 @@ TEST_F(AcirFormatTests, TestVarKeccak) .q_c = fr::neg_one() * fr(4), }; - AcirFormat constraint_system - { - .varnum = 36, .recursive = false, .public_inputs = {}, .logic_constraints = {}, - .range_constraints = { range_a, range_b, range_c, range_d }, .aes128_constraints = {}, .sha256_compression = {}, - .schnorr_constraints = {}, .ecdsa_k1_constraints = {}, .ecdsa_r1_constraints = {}, .blake2s_constraints = {}, - .blake3_constraints = {}, .keccak_constraints = { keccak }, .keccak_permutations = {}, - .pedersen_constraints = {}, .pedersen_hash_constraints = {}, .poseidon2_constraints = {}, - .multi_scalar_mul_constraints = {}, .ec_add_constraints = {}, .recursion_constraints = {}, - .bigint_from_le_bytes_constraints = {}, .bigint_to_le_bytes_constraints = {}, .bigint_operations = {}, - .poly_triple_constraints = { dummy }, .quad_constraints = {}, - - WitnessVector witness{ 4, 2, 6, 2 }; - - auto composer = Composer(); - auto prover = composer.create_ultra_with_keccak_prover(builder); - auto proof = prover.construct_proof(); - auto verifier = composer.create_ultra_with_keccak_verifier(builder); - EXPECT_EQ(verifier.verify_proof(proof), true); - } + AcirFormat constraint_system{ + .varnum = 36, + .recursive = false, + .public_inputs = {}, + .logic_constraints = {}, + .range_constraints = { range_a, range_b, range_c, range_d }, + .aes128_constraints = {}, + .sha256_compression = {}, + .schnorr_constraints = {}, + .ecdsa_k1_constraints = {}, + .ecdsa_r1_constraints = {}, + .blake2s_constraints = {}, + .blake3_constraints = {}, + .keccak_constraints = { keccak }, + .keccak_permutations = {}, + .pedersen_constraints = {}, + .pedersen_hash_constraints = {}, + .poseidon2_constraints = {}, + .multi_scalar_mul_constraints = {}, + .ec_add_constraints = {}, + .recursion_constraints = {}, + .bigint_from_le_bytes_constraints = {}, + .bigint_to_le_bytes_constraints = {}, + .bigint_operations = {}, + .poly_triple_constraints = { dummy }, + .quad_constraints = {}, + }; + + WitnessVector witness{ 4, 2, 6, 2 }; + auto builder = create_circuit(constraint_system, /*size_hint*/ 0, witness); + + auto composer = Composer(); + auto prover = composer.create_ultra_with_keccak_prover(builder); + auto proof = prover.construct_proof(); + auto verifier = composer.create_ultra_with_keccak_verifier(builder); + EXPECT_EQ(verifier.verify_proof(proof), true); +} - TEST_F(AcirFormatTests, TestKeccakPermutation) - { - Keccakf1600 keccak_permutation{ +TEST_F(AcirFormatTests, TestKeccakPermutation) +{ + Keccakf1600 + keccak_permutation{ .state = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25 }, .result = { 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50 }, }; - AcirFormat constraint_system{ .varnum = 51, - .recursive = false, - .public_inputs = {}, - .logic_constraints = {}, - .range_constraints = {}, - .aes128_constraints = {}, - .sha256_compression = {}, - .schnorr_constraints = {}, - .ecdsa_k1_constraints = {}, - .ecdsa_r1_constraints = {}, - .blake2s_constraints = {}, - .blake3_constraints = {}, - .keccak_constraints = {}, - .keccak_permutations = { keccak_permutation }, - .pedersen_constraints = {}, - .pedersen_hash_constraints = {}, - .poseidon2_constraints = {}, - .multi_scalar_mul_constraints = {}, - .ec_add_constraints = {}, - .recursion_constraints = {}, - .bigint_from_le_bytes_constraints = {}, - .bigint_to_le_bytes_constraints = {}, - .bigint_operations = {}, - .poly_triple_constraints = {}, - .quad_constraints = {}, - .block_constraints = {} }; - - WitnessVector witness{ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, - 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, - 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50 }; - - auto builder = create_circuit(constraint_system, /*size_hint=*/0, witness); - auto prover = composer.create_ultra_with_keccak_prover(builder); - auto proof = prover.construct_proof(); - auto verifier = composer.create_ultra_with_keccak_verifier(builder); - - EXPECT_EQ(verifier.verify_proof(proof), true); - } + AcirFormat constraint_system{ .varnum = 51, + .recursive = false, + .public_inputs = {}, + .logic_constraints = {}, + .range_constraints = {}, + .aes128_constraints = {}, + .sha256_compression = {}, + .schnorr_constraints = {}, + .ecdsa_k1_constraints = {}, + .ecdsa_r1_constraints = {}, + .blake2s_constraints = {}, + .blake3_constraints = {}, + .keccak_constraints = {}, + .keccak_permutations = { keccak_permutation }, + .pedersen_constraints = {}, + .pedersen_hash_constraints = {}, + .poseidon2_constraints = {}, + .multi_scalar_mul_constraints = {}, + .ec_add_constraints = {}, + .recursion_constraints = {}, + .bigint_from_le_bytes_constraints = {}, + .bigint_to_le_bytes_constraints = {}, + .bigint_operations = {}, + .poly_triple_constraints = {}, + .quad_constraints = {}, + .block_constraints = {} }; + + WitnessVector witness{ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, + 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, + 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50 }; + + auto builder = create_circuit(constraint_system, /*size_hint=*/0, witness); + auto composer = Composer(); + auto prover = composer.create_ultra_with_keccak_prover(builder); + auto proof = prover.construct_proof(); + auto verifier = composer.create_ultra_with_keccak_verifier(builder); + + EXPECT_EQ(verifier.verify_proof(proof), true); +} From dcb91b56749a2bdee548c58bf736a823bdd3f0c7 Mon Sep 17 00:00:00 2001 From: guipublic Date: Wed, 8 May 2024 16:58:17 +0000 Subject: [PATCH 50/98] fix merge issues --- .../barretenberg/dsl/acir_format/acir_format.test.cpp | 9 +++++++++ .../dsl/acir_format/ecdsa_secp256k1.test.cpp | 5 +++++ 2 files changed, 14 insertions(+) diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.test.cpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.test.cpp index cfef0f97cf4..841c3089c1a 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.test.cpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.test.cpp @@ -152,8 +152,10 @@ TEST_F(AcirFormatTests, TestLogicGateFromNoirCircuit) .logic_constraints = { logic_constraint }, .range_constraints = { range_a, range_b }, .aes128_constraints = {}, + .sha256_compression = {}, .schnorr_constraints = {}, .ecdsa_k1_constraints = {}, + .ecdsa_r1_constraints = {}, .blake2s_constraints = {}, .blake3_constraints = {}, .keccak_constraints = {}, @@ -223,8 +225,11 @@ TEST_F(AcirFormatTests, TestSchnorrVerifyPass) .ecdsa_k1_constraints = {}, .ecdsa_r1_constraints = {}, .blake2s_constraints = {}, + .blake3_constraints = {}, + .keccak_constraints = {}, .keccak_permutations = {}, .pedersen_constraints = {}, + .pedersen_hash_constraints = {}, .poseidon2_constraints = {}, .multi_scalar_mul_constraints = {}, .ec_add_constraints = {}, @@ -322,8 +327,11 @@ TEST_F(AcirFormatTests, TestSchnorrVerifySmallRange) .pedersen_hash_constraints = {}, .poseidon2_constraints = {}, .multi_scalar_mul_constraints = {}, + .ec_add_constraints = {}, + .recursion_constraints = {}, .bigint_from_le_bytes_constraints = {}, .bigint_to_le_bytes_constraints = {}, + .bigint_operations = {}, .poly_triple_constraints = { poly_triple{ .a = schnorr_constraint.result, .b = schnorr_constraint.result, @@ -440,6 +448,7 @@ TEST_F(AcirFormatTests, TestVarKeccak) .bigint_operations = {}, .poly_triple_constraints = { dummy }, .quad_constraints = {}, + .block_constraints = {}, }; WitnessVector witness{ 4, 2, 6, 2 }; diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/ecdsa_secp256k1.test.cpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/ecdsa_secp256k1.test.cpp index 1db1f7feed3..bae750833f1 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/ecdsa_secp256k1.test.cpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/ecdsa_secp256k1.test.cpp @@ -144,8 +144,10 @@ TEST_F(ECDSASecp256k1, TestECDSACompilesForVerifier) .logic_constraints = {}, .range_constraints = {}, .aes128_constraints = {}, + .sha256_compression = {}, .schnorr_constraints = {}, .ecdsa_k1_constraints = { ecdsa_k1_constraint }, + .ecdsa_r1_constraints = {}, .blake2s_constraints = {}, .blake3_constraints = {}, .keccak_constraints = {}, @@ -191,8 +193,11 @@ TEST_F(ECDSASecp256k1, TestECDSAConstraintFail) .ecdsa_k1_constraints = { ecdsa_k1_constraint }, .ecdsa_r1_constraints = {}, .blake2s_constraints = {}, + .blake3_constraints = {}, + .keccak_constraints = {}, .keccak_permutations = {}, .pedersen_constraints = {}, + .pedersen_hash_constraints = {}, .poseidon2_constraints = {}, .multi_scalar_mul_constraints = {}, .ec_add_constraints = {}, From 36981cc8fd6c8aa2e44e4ace9fe243ebff3d601e Mon Sep 17 00:00:00 2001 From: TomAFrench Date: Fri, 10 May 2024 14:37:10 +0000 Subject: [PATCH 51/98] chore: fm --- .../noir-contracts/contracts/ecdsa_account_contract/src/main.nr | 2 -- 1 file changed, 2 deletions(-) diff --git a/noir-projects/noir-contracts/contracts/ecdsa_account_contract/src/main.nr b/noir-projects/noir-contracts/contracts/ecdsa_account_contract/src/main.nr index 8bbe98ae0a6..8539feab11e 100644 --- a/noir-projects/noir-contracts/contracts/ecdsa_account_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/ecdsa_account_contract/src/main.nr @@ -89,5 +89,3 @@ contract EcdsaAccount { } } - - \ No newline at end of file From fa8b34e60cd71c10e9b478ec131a3f8cf4c6ad6d Mon Sep 17 00:00:00 2001 From: David Banks <47112877+dbanks12@users.noreply.github.com> Date: Tue, 14 May 2024 10:06:52 -0400 Subject: [PATCH 52/98] chore(avm-simulator): sha256 -> sha256compression (#6067) Please read [contributing guidelines](CONTRIBUTING.md) and remove this line. --------- Co-authored-by: Tom French <15848336+TomAFrench@users.noreply.github.com> Co-authored-by: guipublic <47281315+guipublic@users.noreply.github.com> From e3be58c185de00a171b2154c3e4c2a79f800667e Mon Sep 17 00:00:00 2001 From: TomAFrench Date: Fri, 17 May 2024 14:25:48 +0000 Subject: [PATCH 53/98] chore: remove file imports with portals --- .../noir-protocol-circuits-types/package.json | 2 +- yarn-project/package.json | 2 +- yarn-project/yarn.lock | 11 +++++------ 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/yarn-project/noir-protocol-circuits-types/package.json b/yarn-project/noir-protocol-circuits-types/package.json index 1565d182094..1b308f425b7 100644 --- a/yarn-project/noir-protocol-circuits-types/package.json +++ b/yarn-project/noir-protocol-circuits-types/package.json @@ -52,7 +52,7 @@ "@aztec/types": "workspace:^", "@noir-lang/acvm_js": "portal:../../noir/packages/acvm_js", "@noir-lang/noir_codegen": "portal:../../noir/packages/noir_codegen", - "@noir-lang/noir_js": "file:../../noir/packages/noir_js", + "@noir-lang/noir_js": "portal:../../noir/packages/noir_js", "@noir-lang/noirc_abi": "portal:../../noir/packages/noirc_abi", "@noir-lang/types": "portal:../../noir/packages/types", "change-case": "^5.4.4", diff --git a/yarn-project/package.json b/yarn-project/package.json index fa08f05b063..5482ebe6030 100644 --- a/yarn-project/package.json +++ b/yarn-project/package.json @@ -73,7 +73,7 @@ "@noir-lang/types": "portal:../noir/packages/types", "@noir-lang/noirc_abi": "portal:../noir/packages/noirc_abi", "@noir-lang/noir_codegen": "portal:../noir/packages/noir_codegen", - "@noir-lang/noir_js": "file:../noir/packages/noir_js", + "@noir-lang/noir_js": "portal:../noir/packages/noir_js", "jest-runner@^29.7.0": "patch:jest-runner@npm%3A29.7.0#./.yarn/patches/jest-runner-npm-29.7.0-3bc9f82b58.patch" } } diff --git a/yarn-project/yarn.lock b/yarn-project/yarn.lock index f8cd6fc6dc7..a76a85ed3f3 100644 --- a/yarn-project/yarn.lock +++ b/yarn-project/yarn.lock @@ -612,7 +612,7 @@ __metadata: "@jest/globals": ^29.5.0 "@noir-lang/acvm_js": "portal:../../noir/packages/acvm_js" "@noir-lang/noir_codegen": "portal:../../noir/packages/noir_codegen" - "@noir-lang/noir_js": "file:../../noir/packages/noir_js" + "@noir-lang/noir_js": "portal:../../noir/packages/noir_js" "@noir-lang/noirc_abi": "portal:../../noir/packages/noirc_abi" "@noir-lang/types": "portal:../../noir/packages/types" "@types/jest": ^29.5.0 @@ -2881,16 +2881,15 @@ __metadata: languageName: node linkType: soft -"@noir-lang/noir_js@file:../noir/packages/noir_js::locator=%40aztec%2Faztec3-packages%40workspace%3A.": - version: 0.29.0 - resolution: "@noir-lang/noir_js@file:../noir/packages/noir_js#../noir/packages/noir_js::hash=edd4c2&locator=%40aztec%2Faztec3-packages%40workspace%3A." +"@noir-lang/noir_js@portal:../noir/packages/noir_js::locator=%40aztec%2Faztec3-packages%40workspace%3A.": + version: 0.0.0-use.local + resolution: "@noir-lang/noir_js@portal:../noir/packages/noir_js::locator=%40aztec%2Faztec3-packages%40workspace%3A." dependencies: "@noir-lang/acvm_js": 0.45.0 "@noir-lang/noirc_abi": 0.29.0 "@noir-lang/types": 0.29.0 - checksum: 33ebaa2b3cabd8fc71c6d07ecd014fde7be0036aed5b56d37ad08241ce41848c2330bafda50eb0c270a57dbc2a795edf88d1d8a129b89a409d4d49a1b835d577 languageName: node - linkType: hard + linkType: soft "@noir-lang/noirc_abi@portal:../noir/packages/noirc_abi::locator=%40aztec%2Faztec3-packages%40workspace%3A.": version: 0.0.0-use.local From e82a19a539360444c9799afd5caf45c54ab28b8a Mon Sep 17 00:00:00 2001 From: guipublic Date: Tue, 21 May 2024 12:30:57 +0000 Subject: [PATCH 54/98] use no_predicate attribute for sha256 --- noir/noir-repo/noir_stdlib/src/hash.nr | 1 + 1 file changed, 1 insertion(+) diff --git a/noir/noir-repo/noir_stdlib/src/hash.nr b/noir/noir-repo/noir_stdlib/src/hash.nr index 5860cb1e24f..12ed35d22d1 100644 --- a/noir/noir-repo/noir_stdlib/src/hash.nr +++ b/noir/noir-repo/noir_stdlib/src/hash.nr @@ -6,6 +6,7 @@ use crate::default::Default; use crate::uint128::U128; use crate::sha256::{digest, sha256_var}; +#[no_predicates] // docs:start:sha256 pub fn sha256(input: [u8; N]) -> [u8; 32] // docs:end:sha256 From b2f23323a4ae464a575897969dfb6e452af416be Mon Sep 17 00:00:00 2001 From: TomAFrench Date: Tue, 21 May 2024 13:30:25 +0000 Subject: [PATCH 55/98] chore: remove references to `sha256_constraint` --- .../barretenberg/dsl/acir_format/ec_operations.test.cpp | 1 - .../dsl/acir_format/honk_recursion_constraint.test.cpp | 2 -- .../barretenberg/dsl/acir_format/sha256_constraint.hpp | 9 --------- 3 files changed, 12 deletions(-) diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/ec_operations.test.cpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/ec_operations.test.cpp index 9dbc66db482..ed8727ce3f4 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/ec_operations.test.cpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/ec_operations.test.cpp @@ -146,7 +146,6 @@ TEST_F(EcOperations, TestECMultiScalarMul) .logic_constraints = {}, .range_constraints = {}, .aes128_constraints = {}, - .sha256_constraints = {}, .sha256_compression = {}, .schnorr_constraints = {}, .ecdsa_k1_constraints = {}, diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/honk_recursion_constraint.test.cpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/honk_recursion_constraint.test.cpp index 7ac1fc58eb0..c7a12918d58 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/honk_recursion_constraint.test.cpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/honk_recursion_constraint.test.cpp @@ -86,7 +86,6 @@ class AcirHonkRecursionConstraint : public ::testing::Test { .logic_constraints = { logic_constraint }, .range_constraints = { range_a, range_b }, .aes128_constraints = {}, - .sha256_constraints = {}, .sha256_compression = {}, .schnorr_constraints = {}, .ecdsa_k1_constraints = {}, @@ -227,7 +226,6 @@ class AcirHonkRecursionConstraint : public ::testing::Test { .logic_constraints = {}, .range_constraints = {}, .aes128_constraints = {}, - .sha256_constraints = {}, .sha256_compression = {}, .schnorr_constraints = {}, .ecdsa_k1_constraints = {}, diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/sha256_constraint.hpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/sha256_constraint.hpp index ccbc00e83d4..a25dc4024c9 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/sha256_constraint.hpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/sha256_constraint.hpp @@ -15,15 +15,6 @@ struct Sha256Input { MSGPACK_FIELDS(witness, num_bits); }; -struct Sha256Constraint { - std::vector inputs; - std::array result; - - friend bool operator==(Sha256Constraint const& lhs, Sha256Constraint const& rhs) = default; - // for serialization, update with any new fields - MSGPACK_FIELDS(inputs, result); -}; - struct Sha256Compression { std::array inputs; std::array hash_values; From 6944c292e92b9f15beeefa5c56870dbb18c6c081 Mon Sep 17 00:00:00 2001 From: TomAFrench Date: Wed, 22 May 2024 00:50:03 +0000 Subject: [PATCH 56/98] chore: fix CI issue --- .../simulator/src/avm/serialization/bytecode_serialization.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/yarn-project/simulator/src/avm/serialization/bytecode_serialization.ts b/yarn-project/simulator/src/avm/serialization/bytecode_serialization.ts index 8e7b5dd06fb..79e69f68738 100644 --- a/yarn-project/simulator/src/avm/serialization/bytecode_serialization.ts +++ b/yarn-project/simulator/src/avm/serialization/bytecode_serialization.ts @@ -1,5 +1,4 @@ import { DAGasLeft, L2GasLeft } from '../opcodes/context_getters.js'; -import { ToRadixLE } from '../opcodes/conversion.js'; import { Keccak, Pedersen, Poseidon2, Sha256Compression } from '../opcodes/hashing.js'; import type { Instruction } from '../opcodes/index.js'; import { From d04944df1474e9f4a44c44a20c8ba0d14c0411c1 Mon Sep 17 00:00:00 2001 From: TomAFrench Date: Wed, 22 May 2024 11:21:13 +0000 Subject: [PATCH 57/98] chore: ignore slow debugger test --- noir/noir-repo/tooling/debugger/ignored-tests.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/noir/noir-repo/tooling/debugger/ignored-tests.txt b/noir/noir-repo/tooling/debugger/ignored-tests.txt index cda26169421..8b1e25350aa 100644 --- a/noir/noir-repo/tooling/debugger/ignored-tests.txt +++ b/noir/noir-repo/tooling/debugger/ignored-tests.txt @@ -25,3 +25,4 @@ fold_fibonacci fold_complex_outputs slice_init_with_complex_type hashmap +brillig_cow_regression From e5955a61aecc1020e9715fc0fcda11a388d08679 Mon Sep 17 00:00:00 2001 From: guipublic Date: Mon, 3 Jun 2024 14:13:45 +0000 Subject: [PATCH 58/98] fix merge issue --- avm-transpiler/src/transpile.rs | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/avm-transpiler/src/transpile.rs b/avm-transpiler/src/transpile.rs index 5f45d7ad197..468e7548dec 100644 --- a/avm-transpiler/src/transpile.rs +++ b/avm-transpiler/src/transpile.rs @@ -743,11 +743,7 @@ fn generate_mov_instruction(indirect: Option, source: u32, dest: u32) -> Avm /// (array goes in -> field element comes out) fn handle_black_box_function(avm_instrs: &mut Vec, operation: &BlackBoxOp) { match operation { - BlackBoxOp::Sha256Compression { - input, - hash_values, - output, - } => { + BlackBoxOp::Sha256Compression { input, hash_values, output } => { let inputs_offset = input.pointer.0; let inputs_size_offset = input.size.0; let state_offset = hash_values.pointer.0; @@ -760,9 +756,11 @@ fn handle_black_box_function(avm_instrs: &mut Vec, operation: &B ZEROTH_OPERAND_INDIRECT | FIRST_OPERAND_INDIRECT | THIRD_OPERAND_INDIRECT, ), operands: vec![ - AvmOperand::U32 { value: dest_offset as u32 }, - AvmOperand::U32 { value: message_offset as u32 }, - AvmOperand::U32 { value: message_size_offset as u32 }, + AvmOperand::U32 { value: output_offset as u32 }, + AvmOperand::U32 { value: state_offset as u32 }, + AvmOperand::U32 { value: state_size_offset as u32 }, + AvmOperand::U32 { value: inputs_offset as u32 }, + AvmOperand::U32 { value: inputs_size_offset as u32 }, ], ..Default::default() }); From 9765b6d3473531297ee3aacd4d05344b1bc9759d Mon Sep 17 00:00:00 2001 From: guipublic Date: Mon, 3 Jun 2024 14:31:07 +0000 Subject: [PATCH 59/98] revert yarn.lock --- yarn-project/yarn.lock | 14502 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 14502 insertions(+) create mode 100644 yarn-project/yarn.lock diff --git a/yarn-project/yarn.lock b/yarn-project/yarn.lock new file mode 100644 index 00000000000..2974bb2c8db --- /dev/null +++ b/yarn-project/yarn.lock @@ -0,0 +1,14502 @@ +# This file is generated by running "yarn install" inside your project. +# Manual changes might be lost - proceed with caution! + +__metadata: + version: 6 + cacheKey: 8 + +"@adraffy/ens-normalize@npm:1.10.0": + version: 1.10.0 + resolution: "@adraffy/ens-normalize@npm:1.10.0" + checksum: af0540f963a2632da2bbc37e36ea6593dcfc607b937857133791781e246d47f870d5e3d21fa70d5cfe94e772c284588c81ea3f5b7f4ea8fbb824369444e4dbcb + languageName: node + linkType: hard + +"@ampproject/remapping@npm:^2.2.0": + version: 2.3.0 + resolution: "@ampproject/remapping@npm:2.3.0" + dependencies: + "@jridgewell/gen-mapping": ^0.3.5 + "@jridgewell/trace-mapping": ^0.3.24 + checksum: d3ad7b89d973df059c4e8e6d7c972cbeb1bb2f18f002a3bd04ae0707da214cb06cc06929b65aa2313b9347463df2914772298bae8b1d7973f246bb3f2ab3e8f0 + languageName: node + linkType: hard + +"@aztec/accounts@workspace:^, @aztec/accounts@workspace:accounts": + version: 0.0.0-use.local + resolution: "@aztec/accounts@workspace:accounts" + dependencies: + "@aztec/aztec.js": "workspace:^" + "@aztec/circuit-types": "workspace:^" + "@aztec/circuits.js": "workspace:^" + "@aztec/entrypoints": "workspace:^" + "@aztec/ethereum": "workspace:^" + "@aztec/foundation": "workspace:^" + "@aztec/types": "workspace:^" + "@jest/globals": ^29.5.0 + "@types/jest": ^29.5.0 + "@types/node": ^18.7.23 + jest: ^29.5.0 + jest-mock-extended: ^3.0.3 + ts-loader: ^9.4.4 + ts-node: ^10.9.1 + tslib: ^2.4.0 + typescript: ^5.0.4 + languageName: unknown + linkType: soft + +"@aztec/archiver@workspace:^, @aztec/archiver@workspace:archiver": + version: 0.0.0-use.local + resolution: "@aztec/archiver@workspace:archiver" + dependencies: + "@aztec/circuit-types": "workspace:^" + "@aztec/circuits.js": "workspace:^" + "@aztec/ethereum": "workspace:^" + "@aztec/foundation": "workspace:^" + "@aztec/kv-store": "workspace:^" + "@aztec/l1-artifacts": "workspace:^" + "@aztec/protocol-contracts": "workspace:^" + "@aztec/types": "workspace:^" + "@jest/globals": ^29.5.0 + "@types/debug": ^4.1.7 + "@types/jest": ^29.5.0 + "@types/lodash.groupby": ^4.6.9 + "@types/lodash.omit": ^4.5.7 + "@types/node": ^18.15.11 + "@types/ws": ^8.5.4 + concurrently: ^8.0.1 + debug: ^4.3.4 + jest: ^29.5.0 + jest-mock-extended: ^3.0.4 + lodash.groupby: ^4.6.0 + lodash.omit: ^4.5.0 + ts-node: ^10.9.1 + tsc-watch: ^6.0.0 + tslib: ^2.5.0 + typescript: ^5.0.4 + viem: ^2.7.15 + ws: ^8.13.0 + languageName: unknown + linkType: soft + +"@aztec/aztec-faucet@workspace:aztec-faucet": + version: 0.0.0-use.local + resolution: "@aztec/aztec-faucet@workspace:aztec-faucet" + dependencies: + "@aztec/ethereum": "workspace:^" + "@aztec/foundation": "workspace:^" + "@jest/globals": ^29.5.0 + "@types/jest": ^29.5.0 + "@types/node": ^18.7.23 + jest: ^29.5.0 + koa: ^2.14.2 + koa-cors: ^0.0.16 + koa-router: ^12.0.0 + ts-node: ^10.9.1 + typescript: ^5.0.4 + viem: ^2.7.15 + bin: + aztec-faucet: ./dest/bin/index.js + languageName: unknown + linkType: soft + +"@aztec/aztec-node@workspace:^, @aztec/aztec-node@workspace:aztec-node": + version: 0.0.0-use.local + resolution: "@aztec/aztec-node@workspace:aztec-node" + dependencies: + "@aztec/archiver": "workspace:^" + "@aztec/bb-prover": "workspace:^" + "@aztec/circuit-types": "workspace:^" + "@aztec/circuits.js": "workspace:^" + "@aztec/ethereum": "workspace:^" + "@aztec/foundation": "workspace:^" + "@aztec/kv-store": "workspace:^" + "@aztec/l1-artifacts": "workspace:^" + "@aztec/merkle-tree": "workspace:^" + "@aztec/p2p": "workspace:^" + "@aztec/prover-client": "workspace:^" + "@aztec/sequencer-client": "workspace:^" + "@aztec/simulator": "workspace:^" + "@aztec/types": "workspace:^" + "@aztec/world-state": "workspace:^" + "@jest/globals": ^29.5.0 + "@types/jest": ^29.5.0 + "@types/node": ^18.7.23 + jest: ^29.5.0 + koa: ^2.14.2 + koa-router: ^12.0.0 + ts-node: ^10.9.1 + tslib: ^2.4.0 + typescript: ^5.0.4 + bin: + aztec-node: ./dest/bin/index.js + languageName: unknown + linkType: soft + +"@aztec/aztec.js@workspace:^, @aztec/aztec.js@workspace:aztec.js": + version: 0.0.0-use.local + resolution: "@aztec/aztec.js@workspace:aztec.js" + dependencies: + "@aztec/circuit-types": "workspace:^" + "@aztec/circuits.js": "workspace:^" + "@aztec/ethereum": "workspace:^" + "@aztec/foundation": "workspace:^" + "@aztec/protocol-contracts": "workspace:^" + "@aztec/types": "workspace:^" + "@jest/globals": ^29.5.0 + "@types/jest": ^29.5.0 + "@types/node": ^18.7.23 + buffer: ^6.0.3 + crypto-browserify: ^3.12.0 + jest: ^29.5.0 + jest-mock-extended: ^3.0.3 + process: ^0.11.10 + resolve-typescript-plugin: ^2.0.1 + stream-browserify: ^3.0.0 + ts-loader: ^9.4.4 + ts-node: ^10.9.1 + tslib: ^2.4.0 + tty-browserify: ^0.0.1 + typescript: ^5.0.4 + util: ^0.12.5 + webpack: ^5.88.2 + webpack-cli: ^5.1.4 + languageName: unknown + linkType: soft + +"@aztec/aztec3-packages@workspace:.": + version: 0.0.0-use.local + resolution: "@aztec/aztec3-packages@workspace:." + dependencies: + "@monorepo-utils/workspaces-to-typescript-project-references": ^2.9.0 + "@swc/core": ^1.4.11 + "@swc/jest": ^0.2.36 + "@trivago/prettier-plugin-sort-imports": ^4.1.1 + eslint: ^8.21.0 + eslint-import-resolver-typescript: ^3.5.5 + eslint-plugin-import: ^2.27.5 + madge: ^6.1.0 + prettier: ^2.8.8 + typedoc: ^0.24.8 + typescript: ^5.0.4 + languageName: unknown + linkType: soft + +"@aztec/aztec@workspace:aztec": + version: 0.0.0-use.local + resolution: "@aztec/aztec@workspace:aztec" + dependencies: + "@aztec/accounts": "workspace:^" + "@aztec/archiver": "workspace:^" + "@aztec/aztec-node": "workspace:^" + "@aztec/aztec.js": "workspace:^" + "@aztec/bb-prover": "workspace:^" + "@aztec/builder": "workspace:^" + "@aztec/circuit-types": "workspace:^" + "@aztec/circuits.js": "workspace:^" + "@aztec/entrypoints": "workspace:^" + "@aztec/ethereum": "workspace:^" + "@aztec/foundation": "workspace:^" + "@aztec/kv-store": "workspace:^" + "@aztec/l1-artifacts": "workspace:^" + "@aztec/noir-contracts.js": "workspace:^" + "@aztec/p2p": "workspace:^" + "@aztec/p2p-bootstrap": "workspace:^" + "@aztec/protocol-contracts": "workspace:^" + "@aztec/prover-client": "workspace:^" + "@aztec/pxe": "workspace:^" + "@jest/globals": ^29.5.0 + "@types/jest": ^29.5.0 + "@types/koa": ^2.13.6 + abitype: ^0.8.11 + commander: ^11.1.0 + jest: ^29.5.0 + koa: ^2.14.2 + koa-router: ^12.0.0 + ts-node: ^10.9.1 + typescript: ^5.0.4 + viem: ^2.7.15 + winston: ^3.10.0 + winston-daily-rotate-file: ^4.7.1 + bin: + aztec: ./dest/bin/index.js + languageName: unknown + linkType: soft + +"@aztec/bb-prover@workspace:^, @aztec/bb-prover@workspace:bb-prover": + version: 0.0.0-use.local + resolution: "@aztec/bb-prover@workspace:bb-prover" + dependencies: + "@aztec/circuit-types": "workspace:^" + "@aztec/circuits.js": "workspace:^" + "@aztec/foundation": "workspace:^" + "@aztec/noir-protocol-circuits-types": "workspace:^" + "@aztec/simulator": "workspace:^" + "@jest/globals": ^29.5.0 + "@noir-lang/noirc_abi": "portal:../../noir/packages/noirc_abi" + "@noir-lang/types": "portal:../../noir/packages/types" + "@types/jest": ^29.5.0 + "@types/memdown": ^3.0.0 + "@types/node": ^18.7.23 + "@types/source-map-support": ^0.5.10 + commander: ^9.0.0 + jest: ^29.5.0 + jest-mock-extended: ^3.0.3 + source-map-support: ^0.5.21 + ts-node: ^10.9.1 + tslib: ^2.4.0 + typescript: ^5.0.4 + bin: + bb-cli: ./dest/bb/index.js + languageName: unknown + linkType: soft + +"@aztec/bb.js@portal:../barretenberg/ts::locator=%40aztec%2Faztec3-packages%40workspace%3A.": + version: 0.0.0-use.local + resolution: "@aztec/bb.js@portal:../barretenberg/ts::locator=%40aztec%2Faztec3-packages%40workspace%3A." + dependencies: + comlink: ^4.4.1 + commander: ^10.0.1 + debug: ^4.3.4 + tslib: ^2.4.0 + bin: + bb.js: ./dest/node/main.js + languageName: node + linkType: soft + +"@aztec/builder@workspace:^, @aztec/builder@workspace:builder": + version: 0.0.0-use.local + resolution: "@aztec/builder@workspace:builder" + dependencies: + "@aztec/circuits.js": "workspace:^" + "@aztec/foundation": "workspace:^" + "@aztec/types": "workspace:^" + "@iarna/toml": ^2.2.5 + "@jest/globals": ^29.5.0 + "@types/fs-extra": ^11.0.1 + "@types/jest": ^29.5.0 + "@types/lodash.camelcase": ^4.3.7 + "@types/lodash.capitalize": ^4.2.7 + "@types/node": ^18.7.23 + "@types/pako": ^2.0.0 + "@types/semver": ^7.5.4 + base64-js: ^1.5.1 + commander: ^9.0.0 + fs-extra: ^11.1.1 + jest: ^29.5.0 + lodash.camelcase: ^4.3.0 + lodash.capitalize: ^4.2.1 + memfs: ^4.6.0 + pako: ^2.1.0 + semver: ^7.5.4 + ts-node: ^10.9.1 + tslib: ^2.4.0 + typescript: ^5.0.4 + unzipit: ^1.4.3 + bin: + aztec-builder: dest/cli.js + languageName: unknown + linkType: soft + +"@aztec/circuit-types@workspace:^, @aztec/circuit-types@workspace:circuit-types": + version: 0.0.0-use.local + resolution: "@aztec/circuit-types@workspace:circuit-types" + dependencies: + "@aztec/circuits.js": "workspace:^" + "@aztec/ethereum": "workspace:^" + "@aztec/foundation": "workspace:^" + "@aztec/types": "workspace:^" + "@jest/globals": ^29.5.0 + "@types/jest": ^29.5.0 + "@types/lodash.clonedeep": ^4.5.7 + "@types/lodash.isequal": ^4.5.6 + "@types/lodash.times": ^4.3.7 + "@types/node": ^18.7.23 + browserify-cipher: ^1.0.1 + jest: ^29.5.0 + jest-mock-extended: ^3.0.3 + lodash.clonedeep: ^4.5.0 + lodash.isequal: ^4.5.0 + lodash.times: ^4.3.2 + ts-node: ^10.9.1 + tslib: ^2.5.0 + typescript: ^5.0.4 + languageName: unknown + linkType: soft + +"@aztec/circuits.js@workspace:^, @aztec/circuits.js@workspace:circuits.js": + version: 0.0.0-use.local + resolution: "@aztec/circuits.js@workspace:circuits.js" + dependencies: + "@aztec/bb.js": "portal:../../barretenberg/ts" + "@aztec/foundation": "workspace:^" + "@aztec/types": "workspace:^" + "@jest/globals": ^29.5.0 + "@types/jest": ^29.5.0 + "@types/lodash.chunk": ^4.2.7 + "@types/node": ^18.7.23 + eslint: ^8.35.0 + jest: ^29.5.0 + lodash.chunk: ^4.2.0 + prettier: ^2.8.4 + ts-node: ^10.9.1 + tslib: ^2.4.0 + typescript: ^5.0.4 + languageName: unknown + linkType: soft + +"@aztec/cli@workspace:cli": + version: 0.0.0-use.local + resolution: "@aztec/cli@workspace:cli" + dependencies: + "@aztec/accounts": "workspace:^" + "@aztec/aztec.js": "workspace:^" + "@aztec/bb-prover": "workspace:^" + "@aztec/circuit-types": "workspace:^" + "@aztec/circuits.js": "workspace:^" + "@aztec/ethereum": "workspace:^" + "@aztec/foundation": "workspace:^" + "@aztec/l1-artifacts": "workspace:^" + "@aztec/noir-contracts.js": "workspace:^" + "@aztec/protocol-contracts": "workspace:^" + "@aztec/simulator": "workspace:^" + "@aztec/types": "workspace:^" + "@iarna/toml": ^2.2.5 + "@jest/globals": ^29.5.0 + "@libp2p/peer-id-factory": ^3.0.4 + "@types/jest": ^29.5.0 + "@types/lodash.startcase": ^4.4.7 + "@types/node": ^18.7.23 + "@types/semver": ^7.5.2 + "@types/source-map-support": ^0.5.10 + commander: ^9.0.0 + jest: ^29.5.0 + jest-mock-extended: ^3.0.5 + jszip: ^3.10.1 + lodash.startcase: ^4.4.0 + node-fetch: ^3.3.2 + semver: ^7.5.4 + solc: ^0.8.26 + source-map-support: ^0.5.21 + ts-jest: ^29.1.0 + ts-node: ^10.9.1 + tslib: ^2.4.0 + typescript: ^5.0.4 + viem: ^2.7.15 + bin: + aztec-cli: ./dest/bin/index.js + languageName: unknown + linkType: soft + +"@aztec/docs@workspace:docs": + version: 0.0.0-use.local + resolution: "@aztec/docs@workspace:docs" + dependencies: + vite: ^4.2.3 + languageName: unknown + linkType: soft + +"@aztec/end-to-end@workspace:end-to-end": + version: 0.0.0-use.local + resolution: "@aztec/end-to-end@workspace:end-to-end" + dependencies: + "@aztec/accounts": "workspace:^" + "@aztec/archiver": "workspace:^" + "@aztec/aztec-node": "workspace:^" + "@aztec/aztec.js": "workspace:^" + "@aztec/bb-prover": "workspace:^" + "@aztec/circuit-types": "workspace:^" + "@aztec/circuits.js": "workspace:^" + "@aztec/entrypoints": "workspace:^" + "@aztec/ethereum": "workspace:^" + "@aztec/foundation": "workspace:^" + "@aztec/kv-store": "workspace:^" + "@aztec/l1-artifacts": "workspace:^" + "@aztec/merkle-tree": "workspace:^" + "@aztec/noir-contracts.js": "workspace:^" + "@aztec/p2p": "workspace:^" + "@aztec/protocol-contracts": "workspace:^" + "@aztec/prover-client": "workspace:^" + "@aztec/pxe": "workspace:^" + "@aztec/sequencer-client": "workspace:^" + "@aztec/simulator": "workspace:^" + "@aztec/types": "workspace:^" + "@aztec/world-state": "workspace:^" + "@jest/globals": ^29.5.0 + "@noble/curves": ^1.0.0 + "@swc/core": ^1.4.11 + "@swc/jest": ^0.2.36 + "@types/fs-extra": ^11.0.2 + "@types/jest": ^29.5.0 + "@types/koa": ^2.13.9 + "@types/koa-static": ^4.0.2 + "@types/levelup": ^5.1.2 + "@types/lodash.chunk": ^4.2.9 + "@types/lodash.every": ^4.6.7 + "@types/memdown": ^3.0.3 + "@types/node": ^18.7.23 + "@viem/anvil": ^0.0.9 + buffer: ^6.0.3 + concurrently: ^7.6.0 + crypto-browserify: ^3.12.0 + fs-extra: ^11.2.0 + get-port: ^7.1.0 + glob: ^10.3.10 + jest: ^29.5.0 + jest-extended: ^4.0.2 + jest-mock-extended: ^3.0.5 + koa: ^2.14.2 + koa-static: ^5.0.0 + levelup: ^5.1.1 + lodash.chunk: ^4.2.0 + lodash.compact: ^3.0.1 + lodash.every: ^4.6.0 + memdown: ^6.1.1 + process: ^0.11.10 + puppeteer: ^22.2 + resolve-typescript-plugin: ^2.0.1 + solc: ^0.8.25 + stream-browserify: ^3.0.0 + string-argv: ^0.3.2 + ts-loader: ^9.4.4 + ts-node: ^10.9.1 + tslib: ^2.4.0 + tty-browserify: ^0.0.1 + typescript: ^5.0.4 + util: ^0.12.5 + viem: ^2.7.15 + webpack: ^5.88.2 + webpack-cli: ^5.1.4 + winston: ^3.10.0 + languageName: unknown + linkType: soft + +"@aztec/entrypoints@workspace:^, @aztec/entrypoints@workspace:entrypoints": + version: 0.0.0-use.local + resolution: "@aztec/entrypoints@workspace:entrypoints" + dependencies: + "@aztec/aztec.js": "workspace:^" + "@aztec/circuit-types": "workspace:^" + "@aztec/circuits.js": "workspace:^" + "@aztec/foundation": "workspace:^" + "@aztec/protocol-contracts": "workspace:^" + "@jest/globals": ^29.5.0 + "@types/jest": ^29.5.0 + jest: ^29.5.0 + ts-node: ^10.9.1 + tslib: ^2.4.0 + typescript: ^5.0.4 + languageName: unknown + linkType: soft + +"@aztec/ethereum@workspace:^, @aztec/ethereum@workspace:ethereum": + version: 0.0.0-use.local + resolution: "@aztec/ethereum@workspace:ethereum" + dependencies: + "@aztec/foundation": "workspace:^" + "@jest/globals": ^29.5.0 + "@types/jest": ^29.5.0 + "@types/node": ^18.14.6 + dotenv: ^16.0.3 + jest: ^29.5.0 + ts-node: ^10.9.1 + tslib: ^2.4.0 + typescript: ^5.0.4 + viem: ^2.7.15 + languageName: unknown + linkType: soft + +"@aztec/foundation@workspace:^, @aztec/foundation@workspace:foundation": + version: 0.0.0-use.local + resolution: "@aztec/foundation@workspace:foundation" + dependencies: + "@aztec/bb.js": "portal:../../barretenberg/ts" + "@jest/globals": ^29.5.0 + "@koa/cors": ^5.0.0 + "@noble/curves": ^1.2.0 + "@types/bn.js": ^5.1.3 + "@types/debug": ^4.1.7 + "@types/detect-node": ^2.0.0 + "@types/elliptic": ^6.4.16 + "@types/jest": ^29.5.0 + "@types/koa": ^2.13.5 + "@types/koa-bodyparser": ^4.3.10 + "@types/koa-compress": ^4.0.3 + "@types/koa-cors": ^0.0.2 + "@types/koa-router": ^7.4.4 + "@types/koa__cors": ^4.0.0 + "@types/leveldown": ^4.0.3 + "@types/levelup": ^5.1.2 + "@types/lodash.chunk": ^4.2.9 + "@types/lodash.clonedeepwith": ^4.5.7 + "@types/memdown": ^3.0.1 + "@types/node": ^18.7.23 + "@types/pako": ^2.0.0 + "@types/supertest": ^2.0.12 + "@typescript-eslint/eslint-plugin": ^6.2.1 + "@typescript-eslint/parser": ^6.2.1 + bn.js: ^5.2.1 + comlink: ^4.4.1 + debug: ^4.3.4 + detect-node: ^2.1.0 + elliptic: ^6.5.4 + eslint: ^8.21.0 + eslint-config-prettier: ^8.5.0 + eslint-plugin-jsdoc: ^40.1.0 + eslint-plugin-no-only-tests: ^3.1.0 + eslint-plugin-tsdoc: ^0.2.17 + hash.js: ^1.1.7 + jest: ^29.5.0 + koa: ^2.14.2 + koa-bodyparser: ^4.4.0 + koa-compress: ^5.1.0 + koa-router: ^12.0.0 + leveldown: ^6.1.1 + levelup: ^5.1.1 + lodash.chunk: ^4.2.0 + lodash.clonedeepwith: ^4.5.0 + memdown: ^6.1.1 + pako: ^2.1.0 + prettier: ^2.7.1 + sha3: ^2.1.4 + supertest: ^6.3.3 + ts-node: ^10.9.1 + typescript: ^5.0.4 + zod: ^3.22.4 + languageName: unknown + linkType: soft + +"@aztec/key-store@workspace:^, @aztec/key-store@workspace:key-store": + version: 0.0.0-use.local + resolution: "@aztec/key-store@workspace:key-store" + dependencies: + "@aztec/circuit-types": "workspace:^" + "@aztec/circuits.js": "workspace:^" + "@aztec/foundation": "workspace:^" + "@aztec/kv-store": "workspace:^" + "@jest/globals": ^29.5.0 + "@types/jest": ^29.5.0 + "@types/node": ^18.7.23 + jest: ^29.5.0 + ts-node: ^10.9.1 + tslib: ^2.4.0 + typescript: ^5.0.4 + languageName: unknown + linkType: soft + +"@aztec/kv-store@workspace:^, @aztec/kv-store@workspace:kv-store": + version: 0.0.0-use.local + resolution: "@aztec/kv-store@workspace:kv-store" + dependencies: + "@aztec/foundation": "workspace:^" + "@jest/globals": ^29.5.0 + "@types/jest": ^29.5.0 + "@types/node": ^18.7.23 + jest: ^29.5.0 + jest-mock-extended: ^3.0.3 + lmdb: ^3.0.6 + ts-node: ^10.9.1 + typescript: ^5.0.4 + languageName: unknown + linkType: soft + +"@aztec/l1-artifacts@workspace:^, @aztec/l1-artifacts@workspace:l1-artifacts": + version: 0.0.0-use.local + resolution: "@aztec/l1-artifacts@workspace:l1-artifacts" + dependencies: + "@types/node": ^18.7.23 + ts-node: ^10.9.1 + tslib: ^2.4.0 + typescript: ^5.0.4 + languageName: unknown + linkType: soft + +"@aztec/merkle-tree@workspace:^, @aztec/merkle-tree@workspace:merkle-tree": + version: 0.0.0-use.local + resolution: "@aztec/merkle-tree@workspace:merkle-tree" + dependencies: + "@aztec/circuit-types": "workspace:^" + "@aztec/circuits.js": "workspace:^" + "@aztec/foundation": "workspace:^" + "@aztec/kv-store": "workspace:^" + "@aztec/types": "workspace:^" + "@jest/globals": ^29.5.0 + "@types/jest": ^29.5.0 + "@types/node": ^18.15.3 + "@types/sha256": ^0.2.0 + jest: ^29.5.0 + sha256: ^0.2.0 + ts-node: ^10.9.1 + tslib: ^2.4.0 + typescript: ^5.0.4 + languageName: unknown + linkType: soft + +"@aztec/noir-contracts.js@workspace:^, @aztec/noir-contracts.js@workspace:noir-contracts.js": + version: 0.0.0-use.local + resolution: "@aztec/noir-contracts.js@workspace:noir-contracts.js" + dependencies: + "@aztec/aztec.js": "workspace:^" + "@aztec/builder": "workspace:^" + "@jest/globals": ^29.5.0 + "@types/jest": ^29.5.0 + jest: ^29.5.0 + ts-node: ^10.9.1 + tslib: ^2.4.0 + typescript: ^5.0.4 + languageName: unknown + linkType: soft + +"@aztec/noir-protocol-circuits-types@workspace:^, @aztec/noir-protocol-circuits-types@workspace:noir-protocol-circuits-types": + version: 0.0.0-use.local + resolution: "@aztec/noir-protocol-circuits-types@workspace:noir-protocol-circuits-types" + dependencies: + "@aztec/builder": "workspace:^" + "@aztec/circuit-types": "workspace:^" + "@aztec/circuits.js": "workspace:^" + "@aztec/foundation": "workspace:^" + "@aztec/kv-store": "workspace:^" + "@aztec/merkle-tree": "workspace:^" + "@aztec/types": "workspace:^" + "@jest/globals": ^29.5.0 + "@noir-lang/acvm_js": "portal:../../noir/packages/acvm_js" + "@noir-lang/noir_codegen": "portal:../../noir/packages/noir_codegen" + "@noir-lang/noir_js": "file:../../noir/packages/noir_js" + "@noir-lang/noirc_abi": "portal:../../noir/packages/noirc_abi" + "@noir-lang/types": "portal:../../noir/packages/types" + "@types/jest": ^29.5.0 + "@types/node": ^18.7.23 + change-case: ^5.4.4 + jest: ^29.5.0 + levelup: ^5.1.1 + memdown: ^6.1.1 + ts-node: ^10.9.1 + tslib: ^2.4.0 + typescript: ^5.0.4 + languageName: unknown + linkType: soft + +"@aztec/p2p-bootstrap@workspace:^, @aztec/p2p-bootstrap@workspace:p2p-bootstrap": + version: 0.0.0-use.local + resolution: "@aztec/p2p-bootstrap@workspace:p2p-bootstrap" + dependencies: + "@aztec/foundation": "workspace:^" + "@aztec/p2p": "workspace:^" + "@jest/globals": ^29.5.0 + "@types/jest": ^29.5.0 + "@types/koa": ^2.15.0 + "@types/koa-router": ^7.4.8 + "@types/node": ^18.14.6 + dotenv: ^16.0.3 + jest: ^29.5.0 + koa: ^2.15.3 + koa-router: ^12.0.1 + ts-node: ^10.9.1 + tslib: ^2.4.0 + typescript: ^5.0.4 + languageName: unknown + linkType: soft + +"@aztec/p2p@workspace:^, @aztec/p2p@workspace:p2p": + version: 0.0.0-use.local + resolution: "@aztec/p2p@workspace:p2p" + dependencies: + "@aztec/circuit-types": "workspace:^" + "@aztec/circuits.js": "workspace:^" + "@aztec/foundation": "workspace:^" + "@aztec/kv-store": "workspace:^" + "@chainsafe/discv5": 9.0.0 + "@chainsafe/enr": 3.0.0 + "@chainsafe/libp2p-gossipsub": 13.0.0 + "@chainsafe/libp2p-noise": ^15.0.0 + "@chainsafe/libp2p-yamux": ^6.0.2 + "@jest/globals": ^29.5.0 + "@libp2p/bootstrap": 10.0.0 + "@libp2p/crypto": 4.0.3 + "@libp2p/identify": 1.0.18 + "@libp2p/interface": 1.3.1 + "@libp2p/kad-dht": 10.0.4 + "@libp2p/mplex": 10.0.16 + "@libp2p/peer-id": 4.0.7 + "@libp2p/peer-id-factory": 4.1.1 + "@libp2p/peer-store": 10.0.16 + "@libp2p/tcp": 9.0.24 + "@multiformats/multiaddr": 12.1.14 + "@types/jest": ^29.5.0 + "@types/node": ^18.14.6 + interface-datastore: ^8.2.11 + interface-store: ^5.1.8 + it-drain: ^3.0.5 + it-length: ^3.0.6 + it-pipe: ^3.0.1 + jest: ^29.5.0 + jest-mock-extended: ^3.0.4 + libp2p: 1.5.0 + semver: ^7.6.0 + sha3: ^2.1.4 + ts-node: ^10.9.1 + tslib: ^2.4.0 + typescript: ^5.0.4 + uint8arrays: ^5.0.3 + languageName: unknown + linkType: soft + +"@aztec/protocol-contracts@workspace:^, @aztec/protocol-contracts@workspace:protocol-contracts": + version: 0.0.0-use.local + resolution: "@aztec/protocol-contracts@workspace:protocol-contracts" + dependencies: + "@aztec/circuits.js": "workspace:^" + "@aztec/foundation": "workspace:^" + "@aztec/types": "workspace:^" + "@jest/globals": ^29.5.0 + "@types/jest": ^29.5.0 + "@types/lodash.omit": ^4.5.9 + "@types/node": ^18.7.23 + jest: ^29.5.0 + jest-mock-extended: ^3.0.3 + lodash.omit: ^4.5.0 + ts-loader: ^9.4.4 + ts-node: ^10.9.1 + tslib: ^2.4.0 + typescript: ^5.0.4 + languageName: unknown + linkType: soft + +"@aztec/prover-client@workspace:^, @aztec/prover-client@workspace:prover-client": + version: 0.0.0-use.local + resolution: "@aztec/prover-client@workspace:prover-client" + dependencies: + "@aztec/bb-prover": "workspace:^" + "@aztec/circuit-types": "workspace:^" + "@aztec/circuits.js": "workspace:^" + "@aztec/foundation": "workspace:^" + "@aztec/kv-store": "workspace:^" + "@aztec/noir-protocol-circuits-types": "workspace:^" + "@aztec/simulator": "workspace:^" + "@aztec/world-state": "workspace:^" + "@jest/globals": ^29.5.0 + "@noir-lang/types": "portal:../../noir/packages/types" + "@types/jest": ^29.5.0 + "@types/memdown": ^3.0.0 + "@types/node": ^18.7.23 + "@types/source-map-support": ^0.5.10 + commander: ^9.0.0 + jest: ^29.5.0 + jest-mock-extended: ^3.0.3 + lodash.chunk: ^4.2.0 + source-map-support: ^0.5.21 + ts-node: ^10.9.1 + tslib: ^2.4.0 + typescript: ^5.0.4 + languageName: unknown + linkType: soft + +"@aztec/pxe@workspace:^, @aztec/pxe@workspace:pxe": + version: 0.0.0-use.local + resolution: "@aztec/pxe@workspace:pxe" + dependencies: + "@aztec/bb-prover": "workspace:^" + "@aztec/bb.js": "portal:../../barretenberg/ts" + "@aztec/builder": "workspace:^" + "@aztec/circuit-types": "workspace:^" + "@aztec/circuits.js": "workspace:^" + "@aztec/ethereum": "workspace:^" + "@aztec/foundation": "workspace:^" + "@aztec/key-store": "workspace:^" + "@aztec/kv-store": "workspace:^" + "@aztec/noir-contracts.js": "workspace:^" + "@aztec/noir-protocol-circuits-types": "workspace:^" + "@aztec/protocol-contracts": "workspace:^" + "@aztec/simulator": "workspace:^" + "@aztec/types": "workspace:^" + "@jest/globals": ^29.5.0 + "@noir-lang/noirc_abi": "portal:../../noir/packages/noirc_abi" + "@types/jest": ^29.5.0 + "@types/lodash.omit": ^4.5.7 + "@types/node": ^18.7.23 + jest: ^29.5.0 + jest-mock-extended: ^3.0.3 + koa: ^2.14.2 + koa-router: ^12.0.0 + lodash.omit: ^4.5.0 + sha3: ^2.1.4 + ts-node: ^10.9.1 + tslib: ^2.4.0 + typescript: ^5.0.4 + viem: ^2.7.15 + bin: + pxe: ./dest/bin/index.js + languageName: unknown + linkType: soft + +"@aztec/scripts@workspace:scripts": + version: 0.0.0-use.local + resolution: "@aztec/scripts@workspace:scripts" + dependencies: + "@aztec/circuit-types": "workspace:^" + "@aztec/foundation": "workspace:^" + "@jest/globals": ^29.5.0 + "@types/jest": ^29.5.0 + "@types/lodash.pick": ^4.4.7 + "@types/node": ^18.14.6 + fs-extra: ^11.1.1 + jest: ^29.5.0 + lodash.pick: ^4.4.0 + ts-node: ^10.9.1 + tslib: ^2.4.0 + typescript: ^5.0.4 + bin: + bench-aggregate: ./dest/bin/bench-aggregate.js + bench-comment: ./dest/bin/bench-comment.js + bench-markdown: ./dest/bin/bench-markdown.js + docs-preview-comment: ./dest/bin/docs-preview.js + languageName: unknown + linkType: soft + +"@aztec/sequencer-client@workspace:^, @aztec/sequencer-client@workspace:sequencer-client": + version: 0.0.0-use.local + resolution: "@aztec/sequencer-client@workspace:sequencer-client" + dependencies: + "@aztec/circuit-types": "workspace:^" + "@aztec/circuits.js": "workspace:^" + "@aztec/ethereum": "workspace:^" + "@aztec/foundation": "workspace:^" + "@aztec/kv-store": "workspace:^" + "@aztec/l1-artifacts": "workspace:^" + "@aztec/merkle-tree": "workspace:^" + "@aztec/noir-contracts.js": "workspace:^" + "@aztec/noir-protocol-circuits-types": "workspace:^" + "@aztec/p2p": "workspace:^" + "@aztec/protocol-contracts": "workspace:^" + "@aztec/simulator": "workspace:^" + "@aztec/types": "workspace:^" + "@aztec/world-state": "workspace:^" + "@jest/globals": ^29.5.0 + "@noir-lang/acvm_js": "portal:../../noir/packages/acvm_js" + "@noir-lang/types": "portal:../../noir/packages/types" + "@types/jest": ^29.5.0 + "@types/levelup": ^5.1.2 + "@types/lodash.chunk": ^4.2.7 + "@types/lodash.pick": ^4.4.7 + "@types/memdown": ^3.0.0 + "@types/node": ^18.7.23 + concurrently: ^7.6.0 + eslint: ^8.37.0 + jest: ^29.5.0 + jest-mock-extended: ^3.0.3 + levelup: ^5.1.1 + lodash.chunk: ^4.2.0 + lodash.pick: ^4.4.0 + memdown: ^6.1.1 + prettier: ^2.8.7 + ts-node: ^10.9.1 + tslib: ^2.4.0 + typescript: ^5.0.4 + viem: ^2.7.15 + languageName: unknown + linkType: soft + +"@aztec/simulator@workspace:^, @aztec/simulator@workspace:simulator": + version: 0.0.0-use.local + resolution: "@aztec/simulator@workspace:simulator" + dependencies: + "@aztec/circuit-types": "workspace:^" + "@aztec/circuits.js": "workspace:^" + "@aztec/foundation": "workspace:^" + "@aztec/kv-store": "workspace:^" + "@aztec/merkle-tree": "workspace:^" + "@aztec/noir-contracts.js": "workspace:^" + "@aztec/noir-protocol-circuits-types": "workspace:^" + "@aztec/protocol-contracts": "workspace:^" + "@aztec/types": "workspace:^" + "@aztec/world-state": "workspace:^" + "@jest/globals": ^29.5.0 + "@noir-lang/acvm_js": "portal:../../noir/packages/acvm_js" + "@noir-lang/types": "portal:../../noir/packages/types" + "@types/jest": ^29.5.0 + "@types/levelup": ^5.1.3 + "@types/lodash.merge": ^4.6.9 + "@types/memdown": ^3.0.2 + "@types/node": ^18.7.23 + jest: ^29.5.0 + jest-mock-extended: ^3.0.4 + levelup: ^5.1.1 + lodash.merge: ^4.6.2 + memdown: ^6.1.1 + ts-node: ^10.9.1 + tslib: ^2.4.0 + typescript: ^5.0.4 + viem: ^2.7.15 + languageName: unknown + linkType: soft + +"@aztec/types@workspace:^, @aztec/types@workspace:types": + version: 0.0.0-use.local + resolution: "@aztec/types@workspace:types" + dependencies: + "@aztec/ethereum": "workspace:^" + "@aztec/foundation": "workspace:^" + "@jest/globals": ^29.5.0 + "@types/debug": ^4.1.7 + "@types/detect-node": ^2.0.0 + "@types/jest": ^29.5.0 + "@types/supertest": ^2.0.12 + "@typescript-eslint/eslint-plugin": ^6.2.1 + "@typescript-eslint/parser": ^6.2.1 + comlink: ^4.4.1 + eslint: ^8.21.0 + eslint-config-prettier: ^8.5.0 + eslint-plugin-jsdoc: ^40.1.0 + eslint-plugin-no-only-tests: ^3.1.0 + eslint-plugin-tsdoc: ^0.2.17 + jest: ^29.5.0 + prettier: ^2.7.1 + supertest: ^6.3.3 + ts-node: ^10.9.1 + typescript: ^5.0.4 + languageName: unknown + linkType: soft + +"@aztec/world-state@workspace:^, @aztec/world-state@workspace:world-state": + version: 0.0.0-use.local + resolution: "@aztec/world-state@workspace:world-state" + dependencies: + "@aztec/circuit-types": "workspace:^" + "@aztec/circuits.js": "workspace:^" + "@aztec/foundation": "workspace:^" + "@aztec/kv-store": "workspace:^" + "@aztec/merkle-tree": "workspace:^" + "@aztec/types": "workspace:^" + "@jest/globals": ^29.5.0 + "@types/jest": ^29.5.0 + "@types/levelup": ^5.1.2 + "@types/memdown": ^3.0.0 + "@types/node": ^18.7.23 + jest: ^29.5.0 + jest-mock-extended: ^3.0.5 + memdown: ^6.1.1 + ts-node: ^10.9.1 + tslib: ^2.4.0 + typescript: ^5.0.4 + languageName: unknown + linkType: soft + +"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.22.13, @babel/code-frame@npm:^7.23.5, @babel/code-frame@npm:^7.24.2": + version: 7.24.2 + resolution: "@babel/code-frame@npm:7.24.2" + dependencies: + "@babel/highlight": ^7.24.2 + picocolors: ^1.0.0 + checksum: 70e867340cfe09ca5488b2f36372c45cabf43c79a5b6426e6df5ef0611ff5dfa75a57dda841895693de6008f32c21a7c97027a8c7bcabd63a7d17416cbead6f8 + languageName: node + linkType: hard + +"@babel/compat-data@npm:^7.23.5": + version: 7.24.4 + resolution: "@babel/compat-data@npm:7.24.4" + checksum: 52ce371658dc7796c9447c9cb3b9c0659370d141b76997f21c5e0028cca4d026ca546b84bc8d157ce7ca30bd353d89f9238504eb8b7aefa9b1f178b4c100c2d4 + languageName: node + linkType: hard + +"@babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.23.9": + version: 7.24.5 + resolution: "@babel/core@npm:7.24.5" + dependencies: + "@ampproject/remapping": ^2.2.0 + "@babel/code-frame": ^7.24.2 + "@babel/generator": ^7.24.5 + "@babel/helper-compilation-targets": ^7.23.6 + "@babel/helper-module-transforms": ^7.24.5 + "@babel/helpers": ^7.24.5 + "@babel/parser": ^7.24.5 + "@babel/template": ^7.24.0 + "@babel/traverse": ^7.24.5 + "@babel/types": ^7.24.5 + convert-source-map: ^2.0.0 + debug: ^4.1.0 + gensync: ^1.0.0-beta.2 + json5: ^2.2.3 + semver: ^6.3.1 + checksum: f4f0eafde12b145f2cb9cc893085e5f1436e1ef265bb3b7d8aa6282515c9b4e740bbd5e2cbc32114adb9afed2dd62c2336758b9fabb7e46e8ba542f76d4f3f80 + languageName: node + linkType: hard + +"@babel/generator@npm:7.17.7": + version: 7.17.7 + resolution: "@babel/generator@npm:7.17.7" + dependencies: + "@babel/types": ^7.17.0 + jsesc: ^2.5.1 + source-map: ^0.5.0 + checksum: e7344b9b4559115f2754ecc2ae9508412ea6a8f617544cd3d3f17cabc727bd30630765f96c8a4ebc8901ded1492a3a6c23d695a4f1e8f3042f860b30c891985c + languageName: node + linkType: hard + +"@babel/generator@npm:^7.23.0, @babel/generator@npm:^7.24.5, @babel/generator@npm:^7.7.2": + version: 7.24.5 + resolution: "@babel/generator@npm:7.24.5" + dependencies: + "@babel/types": ^7.24.5 + "@jridgewell/gen-mapping": ^0.3.5 + "@jridgewell/trace-mapping": ^0.3.25 + jsesc: ^2.5.1 + checksum: a08c0ab900b36e1a17863e18e3216153322ea993246fd7a358ba38a31cfb15bab2af1dc178b2adafe4cb8a9f3ab0e0ceafd3fe6e8ca870dffb435b53b2b2a803 + languageName: node + linkType: hard + +"@babel/helper-compilation-targets@npm:^7.23.6": + version: 7.23.6 + resolution: "@babel/helper-compilation-targets@npm:7.23.6" + dependencies: + "@babel/compat-data": ^7.23.5 + "@babel/helper-validator-option": ^7.23.5 + browserslist: ^4.22.2 + lru-cache: ^5.1.1 + semver: ^6.3.1 + checksum: c630b98d4527ac8fe2c58d9a06e785dfb2b73ec71b7c4f2ddf90f814b5f75b547f3c015f110a010fd31f76e3864daaf09f3adcd2f6acdbfb18a8de3a48717590 + languageName: node + linkType: hard + +"@babel/helper-environment-visitor@npm:^7.22.20": + version: 7.22.20 + resolution: "@babel/helper-environment-visitor@npm:7.22.20" + checksum: d80ee98ff66f41e233f36ca1921774c37e88a803b2f7dca3db7c057a5fea0473804db9fb6729e5dbfd07f4bed722d60f7852035c2c739382e84c335661590b69 + languageName: node + linkType: hard + +"@babel/helper-function-name@npm:^7.23.0": + version: 7.23.0 + resolution: "@babel/helper-function-name@npm:7.23.0" + dependencies: + "@babel/template": ^7.22.15 + "@babel/types": ^7.23.0 + checksum: e44542257b2d4634a1f979244eb2a4ad8e6d75eb6761b4cfceb56b562f7db150d134bc538c8e6adca3783e3bc31be949071527aa8e3aab7867d1ad2d84a26e10 + languageName: node + linkType: hard + +"@babel/helper-hoist-variables@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-hoist-variables@npm:7.22.5" + dependencies: + "@babel/types": ^7.22.5 + checksum: 394ca191b4ac908a76e7c50ab52102669efe3a1c277033e49467913c7ed6f7c64d7eacbeabf3bed39ea1f41731e22993f763b1edce0f74ff8563fd1f380d92cc + languageName: node + linkType: hard + +"@babel/helper-module-imports@npm:^7.24.3": + version: 7.24.3 + resolution: "@babel/helper-module-imports@npm:7.24.3" + dependencies: + "@babel/types": ^7.24.0 + checksum: c23492189ba97a1ec7d37012336a5661174e8b88194836b6bbf90d13c3b72c1db4626263c654454986f924c6da8be7ba7f9447876d709cd00bd6ffde6ec00796 + languageName: node + linkType: hard + +"@babel/helper-module-transforms@npm:^7.24.5": + version: 7.24.5 + resolution: "@babel/helper-module-transforms@npm:7.24.5" + dependencies: + "@babel/helper-environment-visitor": ^7.22.20 + "@babel/helper-module-imports": ^7.24.3 + "@babel/helper-simple-access": ^7.24.5 + "@babel/helper-split-export-declaration": ^7.24.5 + "@babel/helper-validator-identifier": ^7.24.5 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 208c2e3877536c367ae3f39345bb5c5954ad481fdb2204d4d1906063e53ae564e5b7b846951b1aa96ee716ec24ec3b6db01b41d128884c27315b415f62db9fd2 + languageName: node + linkType: hard + +"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.24.0, @babel/helper-plugin-utils@npm:^7.8.0": + version: 7.24.5 + resolution: "@babel/helper-plugin-utils@npm:7.24.5" + checksum: fa1450c92541b32fe18a6ae85e5c989296a284838fa0a282a2138732cae6f173f36d39dc724890c1740ae72d6d6fbca0b009916b168d4bc874bacc7e5c2fdce0 + languageName: node + linkType: hard + +"@babel/helper-simple-access@npm:^7.24.5": + version: 7.24.5 + resolution: "@babel/helper-simple-access@npm:7.24.5" + dependencies: + "@babel/types": ^7.24.5 + checksum: 5616044603c98434342f09b056c869394acdeba7cd9ec29e6a9abb0dae1922f779d364aaba74dc2ae4facf85945c6156295adbe0511a8aaecaa8a1559d14757a + languageName: node + linkType: hard + +"@babel/helper-split-export-declaration@npm:^7.22.6, @babel/helper-split-export-declaration@npm:^7.24.5": + version: 7.24.5 + resolution: "@babel/helper-split-export-declaration@npm:7.24.5" + dependencies: + "@babel/types": ^7.24.5 + checksum: f23ab6942568084a57789462ce55dc9631aef1d2142ffa2ee28fc411ab55ed3ca65adf109e48655aa349bf8df7ca6dd81fd91c8c229fee1dc77e283189dc83c2 + languageName: node + linkType: hard + +"@babel/helper-string-parser@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/helper-string-parser@npm:7.24.1" + checksum: 8404e865b06013979a12406aab4c0e8d2e377199deec09dfe9f57b833b0c9ce7b6e8c1c553f2da8d0bcd240c5005bd7a269f4fef0d628aeb7d5fe035c436fb67 + languageName: node + linkType: hard + +"@babel/helper-validator-identifier@npm:^7.16.7, @babel/helper-validator-identifier@npm:^7.24.5": + version: 7.24.5 + resolution: "@babel/helper-validator-identifier@npm:7.24.5" + checksum: 75d6f9f475c08f3be87bae4953e9b8d8c72983e16ed2860870b328d048cb20dccb4fcbf85eacbdd817ea1efbb38552a6db9046e2e37bfe13bdec44ac8939024c + languageName: node + linkType: hard + +"@babel/helper-validator-option@npm:^7.23.5": + version: 7.23.5 + resolution: "@babel/helper-validator-option@npm:7.23.5" + checksum: 537cde2330a8aede223552510e8a13e9c1c8798afee3757995a7d4acae564124fe2bf7e7c3d90d62d3657434a74340a274b3b3b1c6f17e9a2be1f48af29cb09e + languageName: node + linkType: hard + +"@babel/helpers@npm:^7.24.5": + version: 7.24.5 + resolution: "@babel/helpers@npm:7.24.5" + dependencies: + "@babel/template": ^7.24.0 + "@babel/traverse": ^7.24.5 + "@babel/types": ^7.24.5 + checksum: 941937456ca50ef44dbc5cdcb9a74c6ce18ce38971663acd80b622e7ecf1cc4fa034597de3ccccc37939d324139f159709f493fd8e7c385adbc162cb0888cfee + languageName: node + linkType: hard + +"@babel/highlight@npm:^7.24.2": + version: 7.24.5 + resolution: "@babel/highlight@npm:7.24.5" + dependencies: + "@babel/helper-validator-identifier": ^7.24.5 + chalk: ^2.4.2 + js-tokens: ^4.0.0 + picocolors: ^1.0.0 + checksum: eece0e63e9210e902f1ee88f15cabfa31d2693bd2e56806eb849478b859d274c24477081c649cee6a241c4aed7da6f3e05c7afa5c3cd70094006ed095292b0d0 + languageName: node + linkType: hard + +"@babel/parser@npm:^7.0.0, @babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.5, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.21.4, @babel/parser@npm:^7.23.0, @babel/parser@npm:^7.23.9, @babel/parser@npm:^7.24.0, @babel/parser@npm:^7.24.5": + version: 7.24.5 + resolution: "@babel/parser@npm:7.24.5" + bin: + parser: ./bin/babel-parser.js + checksum: a251ea41bf8b5f61048beb320d43017aff68af5a3506bd2ef392180f5fa32c1061513171d582bb3d46ea48e3659dece8b3ba52511a2566066e58abee300ce2a0 + languageName: node + linkType: hard + +"@babel/plugin-syntax-async-generators@npm:^7.8.4": + version: 7.8.4 + resolution: "@babel/plugin-syntax-async-generators@npm:7.8.4" + dependencies: + "@babel/helper-plugin-utils": ^7.8.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 7ed1c1d9b9e5b64ef028ea5e755c0be2d4e5e4e3d6cf7df757b9a8c4cfa4193d268176d0f1f7fbecdda6fe722885c7fda681f480f3741d8a2d26854736f05367 + languageName: node + linkType: hard + +"@babel/plugin-syntax-bigint@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-bigint@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": ^7.8.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 3a10849d83e47aec50f367a9e56a6b22d662ddce643334b087f9828f4c3dd73bdc5909aaeabe123fed78515767f9ca43498a0e621c438d1cd2802d7fae3c9648 + languageName: node + linkType: hard + +"@babel/plugin-syntax-class-properties@npm:^7.8.3": + version: 7.12.13 + resolution: "@babel/plugin-syntax-class-properties@npm:7.12.13" + dependencies: + "@babel/helper-plugin-utils": ^7.12.13 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 24f34b196d6342f28d4bad303612d7ff566ab0a013ce89e775d98d6f832969462e7235f3e7eaf17678a533d4be0ba45d3ae34ab4e5a9dcbda5d98d49e5efa2fc + languageName: node + linkType: hard + +"@babel/plugin-syntax-import-meta@npm:^7.8.3": + version: 7.10.4 + resolution: "@babel/plugin-syntax-import-meta@npm:7.10.4" + dependencies: + "@babel/helper-plugin-utils": ^7.10.4 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 166ac1125d10b9c0c430e4156249a13858c0366d38844883d75d27389621ebe651115cb2ceb6dc011534d5055719fa1727b59f39e1ab3ca97820eef3dcab5b9b + languageName: node + linkType: hard + +"@babel/plugin-syntax-json-strings@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-json-strings@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": ^7.8.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: bf5aea1f3188c9a507e16efe030efb996853ca3cadd6512c51db7233cc58f3ac89ff8c6bdfb01d30843b161cfe7d321e1bf28da82f7ab8d7e6bc5464666f354a + languageName: node + linkType: hard + +"@babel/plugin-syntax-jsx@npm:^7.7.2": + version: 7.24.1 + resolution: "@babel/plugin-syntax-jsx@npm:7.24.1" + dependencies: + "@babel/helper-plugin-utils": ^7.24.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 712f7e7918cb679f106769f57cfab0bc99b311032665c428b98f4c3e2e6d567601d45386a4f246df6a80d741e1f94192b3f008800d66c4f1daae3ad825c243f0 + languageName: node + linkType: hard + +"@babel/plugin-syntax-logical-assignment-operators@npm:^7.8.3": + version: 7.10.4 + resolution: "@babel/plugin-syntax-logical-assignment-operators@npm:7.10.4" + dependencies: + "@babel/helper-plugin-utils": ^7.10.4 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: aff33577037e34e515911255cdbb1fd39efee33658aa00b8a5fd3a4b903585112d037cce1cc9e4632f0487dc554486106b79ccd5ea63a2e00df4363f6d4ff886 + languageName: node + linkType: hard + +"@babel/plugin-syntax-nullish-coalescing-operator@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-nullish-coalescing-operator@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": ^7.8.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 87aca4918916020d1fedba54c0e232de408df2644a425d153be368313fdde40d96088feed6c4e5ab72aac89be5d07fef2ddf329a15109c5eb65df006bf2580d1 + languageName: node + linkType: hard + +"@babel/plugin-syntax-numeric-separator@npm:^7.8.3": + version: 7.10.4 + resolution: "@babel/plugin-syntax-numeric-separator@npm:7.10.4" + dependencies: + "@babel/helper-plugin-utils": ^7.10.4 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 01ec5547bd0497f76cc903ff4d6b02abc8c05f301c88d2622b6d834e33a5651aa7c7a3d80d8d57656a4588f7276eba357f6b7e006482f5b564b7a6488de493a1 + languageName: node + linkType: hard + +"@babel/plugin-syntax-object-rest-spread@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-object-rest-spread@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": ^7.8.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: fddcf581a57f77e80eb6b981b10658421bc321ba5f0a5b754118c6a92a5448f12a0c336f77b8abf734841e102e5126d69110a306eadb03ca3e1547cab31f5cbf + languageName: node + linkType: hard + +"@babel/plugin-syntax-optional-catch-binding@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-optional-catch-binding@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": ^7.8.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 910d90e72bc90ea1ce698e89c1027fed8845212d5ab588e35ef91f13b93143845f94e2539d831dc8d8ededc14ec02f04f7bd6a8179edd43a326c784e7ed7f0b9 + languageName: node + linkType: hard + +"@babel/plugin-syntax-optional-chaining@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-optional-chaining@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": ^7.8.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: eef94d53a1453361553c1f98b68d17782861a04a392840341bc91780838dd4e695209c783631cf0de14c635758beafb6a3a65399846ffa4386bff90639347f30 + languageName: node + linkType: hard + +"@babel/plugin-syntax-top-level-await@npm:^7.8.3": + version: 7.14.5 + resolution: "@babel/plugin-syntax-top-level-await@npm:7.14.5" + dependencies: + "@babel/helper-plugin-utils": ^7.14.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: bbd1a56b095be7820029b209677b194db9b1d26691fe999856462e66b25b281f031f3dfd91b1619e9dcf95bebe336211833b854d0fb8780d618e35667c2d0d7e + languageName: node + linkType: hard + +"@babel/plugin-syntax-typescript@npm:^7.7.2": + version: 7.24.1 + resolution: "@babel/plugin-syntax-typescript@npm:7.24.1" + dependencies: + "@babel/helper-plugin-utils": ^7.24.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: bf4bd70788d5456b5f75572e47a2e31435c7c4e43609bd4dffd2cc0c7a6cf90aabcf6cd389e351854de9a64412a07d30effef5373251fe8f6a4c9db0c0163bda + languageName: node + linkType: hard + +"@babel/runtime@npm:^7.21.0": + version: 7.24.5 + resolution: "@babel/runtime@npm:7.24.5" + dependencies: + regenerator-runtime: ^0.14.0 + checksum: 755383192f3ac32ba4c62bd4f1ae92aed5b82d2c6665f39eb28fa94546777cf5c63493ea92dd03f1c2e621b17e860f190c056684b7f234270fdc91e29beda063 + languageName: node + linkType: hard + +"@babel/template@npm:^7.22.15, @babel/template@npm:^7.24.0, @babel/template@npm:^7.3.3": + version: 7.24.0 + resolution: "@babel/template@npm:7.24.0" + dependencies: + "@babel/code-frame": ^7.23.5 + "@babel/parser": ^7.24.0 + "@babel/types": ^7.24.0 + checksum: f257b003c071a0cecdbfceca74185f18fe62c055469ab5c1d481aab12abeebed328e67e0a19fd978a2a8de97b28953fa4bc3da6d038a7345fdf37923b9fcdec8 + languageName: node + linkType: hard + +"@babel/traverse@npm:7.23.2": + version: 7.23.2 + resolution: "@babel/traverse@npm:7.23.2" + dependencies: + "@babel/code-frame": ^7.22.13 + "@babel/generator": ^7.23.0 + "@babel/helper-environment-visitor": ^7.22.20 + "@babel/helper-function-name": ^7.23.0 + "@babel/helper-hoist-variables": ^7.22.5 + "@babel/helper-split-export-declaration": ^7.22.6 + "@babel/parser": ^7.23.0 + "@babel/types": ^7.23.0 + debug: ^4.1.0 + globals: ^11.1.0 + checksum: 26a1eea0dde41ab99dde8b9773a013a0dc50324e5110a049f5d634e721ff08afffd54940b3974a20308d7952085ac769689369e9127dea655f868c0f6e1ab35d + languageName: node + linkType: hard + +"@babel/traverse@npm:^7.24.5": + version: 7.24.5 + resolution: "@babel/traverse@npm:7.24.5" + dependencies: + "@babel/code-frame": ^7.24.2 + "@babel/generator": ^7.24.5 + "@babel/helper-environment-visitor": ^7.22.20 + "@babel/helper-function-name": ^7.23.0 + "@babel/helper-hoist-variables": ^7.22.5 + "@babel/helper-split-export-declaration": ^7.24.5 + "@babel/parser": ^7.24.5 + "@babel/types": ^7.24.5 + debug: ^4.3.1 + globals: ^11.1.0 + checksum: a313fbf4a06946cc4b74b06e9846d7393a9ca1e8b6df6da60c669cff0a9426d6198c21a478041c60807b62b48f980473d4afbd3768764b0d9741ac80f5dfa04f + languageName: node + linkType: hard + +"@babel/types@npm:7.17.0": + version: 7.17.0 + resolution: "@babel/types@npm:7.17.0" + dependencies: + "@babel/helper-validator-identifier": ^7.16.7 + to-fast-properties: ^2.0.0 + checksum: 12e5a287986fe557188e87b2c5202223f1dc83d9239a196ab936fdb9f8c1eb0be717ff19f934b5fad4e29a75586d5798f74bed209bccea1c20376b9952056f0e + languageName: node + linkType: hard + +"@babel/types@npm:^7.0.0, @babel/types@npm:^7.17.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.22.5, @babel/types@npm:^7.23.0, @babel/types@npm:^7.24.0, @babel/types@npm:^7.24.5, @babel/types@npm:^7.3.3, @babel/types@npm:^7.8.3": + version: 7.24.5 + resolution: "@babel/types@npm:7.24.5" + dependencies: + "@babel/helper-string-parser": ^7.24.1 + "@babel/helper-validator-identifier": ^7.24.5 + to-fast-properties: ^2.0.0 + checksum: 8eeeacd996593b176e649ee49d8dc3f26f9bb6aa1e3b592030e61a0e58ea010fb018dccc51e5314c8139409ea6cbab02e29b33e674e1f6962d8e24c52da6375b + languageName: node + linkType: hard + +"@bcoe/v8-coverage@npm:^0.2.3": + version: 0.2.3 + resolution: "@bcoe/v8-coverage@npm:0.2.3" + checksum: 850f9305536d0f2bd13e9e0881cb5f02e4f93fad1189f7b2d4bebf694e3206924eadee1068130d43c11b750efcc9405f88a8e42ef098b6d75239c0f047de1a27 + languageName: node + linkType: hard + +"@chainsafe/as-chacha20poly1305@npm:^0.1.0": + version: 0.1.0 + resolution: "@chainsafe/as-chacha20poly1305@npm:0.1.0" + checksum: 2bf38f0595bb379489388174e2049e57ae1512815a80fddfe5b9055865739a970651847892233e53cde6a3e34554ede97d1abd8a0f02b4a0005a1a6cf0146a6c + languageName: node + linkType: hard + +"@chainsafe/as-sha256@npm:^0.4.1": + version: 0.4.2 + resolution: "@chainsafe/as-sha256@npm:0.4.2" + checksum: 91c32f4aa783859dcaef69390ec2a63632e8b0b1b10c9daaa36f71f600cf81748f25376815fb810cfe333290b5aed73b0ab30ef7b6f018e5d3a6d158a6d24457 + languageName: node + linkType: hard + +"@chainsafe/discv5@npm:9.0.0": + version: 9.0.0 + resolution: "@chainsafe/discv5@npm:9.0.0" + dependencies: + "@chainsafe/enr": ^3.0.0 + "@libp2p/crypto": ^4.0.1 + "@libp2p/interface": ^1.1.1 + "@multiformats/multiaddr": ^12.1.10 + bcrypto: ^5.4.0 + bigint-buffer: ^1.1.5 + debug: ^4.3.1 + lru-cache: ^10.1.0 + rlp: ^2.2.6 + strict-event-emitter-types: ^2.0.0 + checksum: 3c5a953231c8f62a45447186cded1177485e2461b026be8ce3bafad2901def422f1cccd530c427395dbf31a39df3817bdb9d1a3efbfa3a211d785a6011bc6585 + languageName: node + linkType: hard + +"@chainsafe/enr@npm:3.0.0, @chainsafe/enr@npm:^3.0.0": + version: 3.0.0 + resolution: "@chainsafe/enr@npm:3.0.0" + dependencies: + "@libp2p/crypto": ^4.0.1 + "@libp2p/interface": ^1.1.1 + "@libp2p/peer-id": ^4.0.4 + "@multiformats/multiaddr": ^12.1.10 + bigint-buffer: ^1.1.5 + ethereum-cryptography: ^2.1.3 + rlp: ^2.2.6 + uint8-varint: ^2.0.2 + uint8arrays: ^5.0.1 + checksum: 247a4c3f21c64c6872654576e933f9e76ae6bfdd078ef1264e2b1d364d7bc31b7c11214d77fcb2d774da2fb7b6b2425487ccb1eee02ff8ad03bc5d30c298c20f + languageName: node + linkType: hard + +"@chainsafe/is-ip@npm:^2.0.1, @chainsafe/is-ip@npm:^2.0.2": + version: 2.0.2 + resolution: "@chainsafe/is-ip@npm:2.0.2" + checksum: 2600350ba1c8fbad5d1ebee71317beeb29fbaebf43780d89e30f8c6c2d27b95ebdab0284dfbab7336b5eb6d8ffcc7081e3e4c5b221889dc366463f83bbe38adb + languageName: node + linkType: hard + +"@chainsafe/libp2p-gossipsub@npm:13.0.0": + version: 13.0.0 + resolution: "@chainsafe/libp2p-gossipsub@npm:13.0.0" + dependencies: + "@libp2p/crypto": ^4.0.1 + "@libp2p/interface": ^1.1.2 + "@libp2p/interface-internal": ^1.0.7 + "@libp2p/peer-id": ^4.0.5 + "@libp2p/pubsub": ^9.0.8 + "@multiformats/multiaddr": ^12.1.14 + denque: ^2.1.0 + it-length-prefixed: ^9.0.4 + it-pipe: ^3.0.1 + it-pushable: ^3.2.3 + multiformats: ^13.0.1 + protons-runtime: 5.4.0 + uint8arraylist: ^2.4.8 + uint8arrays: ^5.0.1 + checksum: 2e47e429645e69738dd50fe1b2c25f22de1f28f331a141b9305680998ced503369e41dcd1de6dc1cdc127d3bb85cb130f6bda307f58fc1bf98290f8f4675991b + languageName: node + linkType: hard + +"@chainsafe/libp2p-noise@npm:^15.0.0": + version: 15.0.0 + resolution: "@chainsafe/libp2p-noise@npm:15.0.0" + dependencies: + "@chainsafe/as-chacha20poly1305": ^0.1.0 + "@chainsafe/as-sha256": ^0.4.1 + "@libp2p/crypto": ^4.0.0 + "@libp2p/interface": ^1.0.0 + "@libp2p/peer-id": ^4.0.0 + "@noble/ciphers": ^0.4.0 + "@noble/curves": ^1.1.0 + "@noble/hashes": ^1.3.1 + it-length-prefixed: ^9.0.1 + it-length-prefixed-stream: ^1.0.0 + it-pair: ^2.0.6 + it-pipe: ^3.0.1 + it-stream-types: ^2.0.1 + protons-runtime: ^5.0.0 + uint8arraylist: ^2.4.3 + uint8arrays: ^5.0.0 + wherearewe: ^2.0.1 + checksum: 25ebb33b40f016d4b2006d61998392a0c59f26b6c165b26541c8f226130988ec642986166597baef9bf1dcb0c3bb264a7a0ea6f868a1d9d53b110a2df2729c5f + languageName: node + linkType: hard + +"@chainsafe/libp2p-yamux@npm:^6.0.2": + version: 6.0.2 + resolution: "@chainsafe/libp2p-yamux@npm:6.0.2" + dependencies: + "@libp2p/interface": ^1.1.3 + "@libp2p/utils": ^5.2.5 + get-iterator: ^2.0.1 + it-foreach: ^2.0.6 + it-pipe: ^3.0.1 + it-pushable: ^3.2.3 + uint8arraylist: ^2.4.8 + checksum: bcbfa0a2f63fd16853a699ba6ec20835f2ee015d104559c16ea71d0cd93baa39a02bf558d877e764a9ecd7eb080f09a689e93b7afacf97af5f58fde887a1b92b + languageName: node + linkType: hard + +"@chainsafe/netmask@npm:^2.0.0": + version: 2.0.0 + resolution: "@chainsafe/netmask@npm:2.0.0" + dependencies: + "@chainsafe/is-ip": ^2.0.1 + checksum: 90d27154c11ff878130150766ebfc490c829cd5249a61f7018fa4cefe3a18d92394285bb435c38bd0dbe45261006a82572e95ac201e9b28157de80127a6a3d06 + languageName: node + linkType: hard + +"@colors/colors@npm:1.6.0, @colors/colors@npm:^1.6.0": + version: 1.6.0 + resolution: "@colors/colors@npm:1.6.0" + checksum: aa209963e0c3218e80a4a20553ba8c0fbb6fa13140540b4e5f97923790be06801fc90172c1114fc8b7e888b3d012b67298cde6b9e81521361becfaee400c662f + languageName: node + linkType: hard + +"@cspotcode/source-map-support@npm:^0.8.0": + version: 0.8.1 + resolution: "@cspotcode/source-map-support@npm:0.8.1" + dependencies: + "@jridgewell/trace-mapping": 0.3.9 + checksum: 5718f267085ed8edb3e7ef210137241775e607ee18b77d95aa5bd7514f47f5019aa2d82d96b3bf342ef7aa890a346fa1044532ff7cc3009e7d24fce3ce6200fa + languageName: node + linkType: hard + +"@dabh/diagnostics@npm:^2.0.2": + version: 2.0.3 + resolution: "@dabh/diagnostics@npm:2.0.3" + dependencies: + colorspace: 1.1.x + enabled: 2.0.x + kuler: ^2.0.0 + checksum: 4879600c55c8315a0fb85fbb19057bad1adc08f0a080a8cb4e2b63f723c379bfc4283b68123a2b078d367b327dd8df12fcb27464efe791addc0a48b9df6d79a1 + languageName: node + linkType: hard + +"@dependents/detective-less@npm:^3.0.1": + version: 3.0.2 + resolution: "@dependents/detective-less@npm:3.0.2" + dependencies: + gonzales-pe: ^4.3.0 + node-source-walk: ^5.0.1 + checksum: 2c263ab64fcd1f76117bc35f2b29a150c64bd2b105c96a909a63ce2f2baf07efd93d9ae80e612161d003fb71fbe46598292375f5cc3f447a1b83cfb545dc8f8f + languageName: node + linkType: hard + +"@discoveryjs/json-ext@npm:^0.5.0": + version: 0.5.7 + resolution: "@discoveryjs/json-ext@npm:0.5.7" + checksum: 2176d301cc258ea5c2324402997cf8134ebb212469c0d397591636cea8d3c02f2b3cf9fd58dcb748c7a0dade77ebdc1b10284fa63e608c033a1db52fddc69918 + languageName: node + linkType: hard + +"@es-joy/jsdoccomment@npm:~0.37.0": + version: 0.37.1 + resolution: "@es-joy/jsdoccomment@npm:0.37.1" + dependencies: + comment-parser: 1.3.1 + esquery: ^1.5.0 + jsdoc-type-pratt-parser: ~4.0.0 + checksum: 28dc5b305660a0d24ef765e92bd0d7b45cb8aac8f722bc059dd96b571c1718bbaff3d5e4d27e447a0963997a1c0eb884bdb56fa49c5634b8785c8f256f7fa72d + languageName: node + linkType: hard + +"@esbuild/android-arm64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/android-arm64@npm:0.18.20" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/android-arm@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/android-arm@npm:0.18.20" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + +"@esbuild/android-x64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/android-x64@npm:0.18.20" + conditions: os=android & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/darwin-arm64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/darwin-arm64@npm:0.18.20" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/darwin-x64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/darwin-x64@npm:0.18.20" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/freebsd-arm64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/freebsd-arm64@npm:0.18.20" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/freebsd-x64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/freebsd-x64@npm:0.18.20" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/linux-arm64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/linux-arm64@npm:0.18.20" + conditions: os=linux & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/linux-arm@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/linux-arm@npm:0.18.20" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@esbuild/linux-ia32@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/linux-ia32@npm:0.18.20" + conditions: os=linux & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/linux-loong64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/linux-loong64@npm:0.18.20" + conditions: os=linux & cpu=loong64 + languageName: node + linkType: hard + +"@esbuild/linux-mips64el@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/linux-mips64el@npm:0.18.20" + conditions: os=linux & cpu=mips64el + languageName: node + linkType: hard + +"@esbuild/linux-ppc64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/linux-ppc64@npm:0.18.20" + conditions: os=linux & cpu=ppc64 + languageName: node + linkType: hard + +"@esbuild/linux-riscv64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/linux-riscv64@npm:0.18.20" + conditions: os=linux & cpu=riscv64 + languageName: node + linkType: hard + +"@esbuild/linux-s390x@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/linux-s390x@npm:0.18.20" + conditions: os=linux & cpu=s390x + languageName: node + linkType: hard + +"@esbuild/linux-x64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/linux-x64@npm:0.18.20" + conditions: os=linux & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/netbsd-x64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/netbsd-x64@npm:0.18.20" + conditions: os=netbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/openbsd-x64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/openbsd-x64@npm:0.18.20" + conditions: os=openbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/sunos-x64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/sunos-x64@npm:0.18.20" + conditions: os=sunos & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/win32-arm64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/win32-arm64@npm:0.18.20" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/win32-ia32@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/win32-ia32@npm:0.18.20" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/win32-x64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/win32-x64@npm:0.18.20" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@eslint-community/eslint-utils@npm:^4.2.0, @eslint-community/eslint-utils@npm:^4.4.0": + version: 4.4.0 + resolution: "@eslint-community/eslint-utils@npm:4.4.0" + dependencies: + eslint-visitor-keys: ^3.3.0 + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + checksum: cdfe3ae42b4f572cbfb46d20edafe6f36fc5fb52bf2d90875c58aefe226892b9677fef60820e2832caf864a326fe4fc225714c46e8389ccca04d5f9288aabd22 + languageName: node + linkType: hard + +"@eslint-community/regexpp@npm:^4.5.1, @eslint-community/regexpp@npm:^4.6.1": + version: 4.10.0 + resolution: "@eslint-community/regexpp@npm:4.10.0" + checksum: 2a6e345429ea8382aaaf3a61f865cae16ed44d31ca917910033c02dc00d505d939f10b81e079fa14d43b51499c640138e153b7e40743c4c094d9df97d4e56f7b + languageName: node + linkType: hard + +"@eslint/eslintrc@npm:^2.1.4": + version: 2.1.4 + resolution: "@eslint/eslintrc@npm:2.1.4" + dependencies: + ajv: ^6.12.4 + debug: ^4.3.2 + espree: ^9.6.0 + globals: ^13.19.0 + ignore: ^5.2.0 + import-fresh: ^3.2.1 + js-yaml: ^4.1.0 + minimatch: ^3.1.2 + strip-json-comments: ^3.1.1 + checksum: 10957c7592b20ca0089262d8c2a8accbad14b4f6507e35416c32ee6b4dbf9cad67dfb77096bbd405405e9ada2b107f3797fe94362e1c55e0b09d6e90dd149127 + languageName: node + linkType: hard + +"@eslint/js@npm:8.57.0": + version: 8.57.0 + resolution: "@eslint/js@npm:8.57.0" + checksum: 315dc65b0e9893e2bff139bddace7ea601ad77ed47b4550e73da8c9c2d2766c7a575c3cddf17ef85b8fd6a36ff34f91729d0dcca56e73ca887c10df91a41b0bb + languageName: node + linkType: hard + +"@humanwhocodes/config-array@npm:^0.11.14": + version: 0.11.14 + resolution: "@humanwhocodes/config-array@npm:0.11.14" + dependencies: + "@humanwhocodes/object-schema": ^2.0.2 + debug: ^4.3.1 + minimatch: ^3.0.5 + checksum: 861ccce9eaea5de19546653bccf75bf09fe878bc39c3aab00aeee2d2a0e654516adad38dd1098aab5e3af0145bbcbf3f309bdf4d964f8dab9dcd5834ae4c02f2 + languageName: node + linkType: hard + +"@humanwhocodes/module-importer@npm:^1.0.1": + version: 1.0.1 + resolution: "@humanwhocodes/module-importer@npm:1.0.1" + checksum: 0fd22007db8034a2cdf2c764b140d37d9020bbfce8a49d3ec5c05290e77d4b0263b1b972b752df8c89e5eaa94073408f2b7d977aed131faf6cf396ebb5d7fb61 + languageName: node + linkType: hard + +"@humanwhocodes/object-schema@npm:^2.0.2": + version: 2.0.3 + resolution: "@humanwhocodes/object-schema@npm:2.0.3" + checksum: d3b78f6c5831888c6ecc899df0d03bcc25d46f3ad26a11d7ea52944dc36a35ef543fad965322174238d677a43d5c694434f6607532cff7077062513ad7022631 + languageName: node + linkType: hard + +"@iarna/toml@npm:^2.2.5": + version: 2.2.5 + resolution: "@iarna/toml@npm:2.2.5" + checksum: b63b2b2c4fd67969a6291543ada0303d45593801ee744b60f5390f183c03d9192bc67a217abb24be945158f1935f02840d9ffff40c0142aa171b5d3b6b6a3ea5 + languageName: node + linkType: hard + +"@isaacs/cliui@npm:^8.0.2": + version: 8.0.2 + resolution: "@isaacs/cliui@npm:8.0.2" + dependencies: + string-width: ^5.1.2 + string-width-cjs: "npm:string-width@^4.2.0" + strip-ansi: ^7.0.1 + strip-ansi-cjs: "npm:strip-ansi@^6.0.1" + wrap-ansi: ^8.1.0 + wrap-ansi-cjs: "npm:wrap-ansi@^7.0.0" + checksum: 4a473b9b32a7d4d3cfb7a614226e555091ff0c5a29a1734c28c72a182c2f6699b26fc6b5c2131dfd841e86b185aea714c72201d7c98c2fba5f17709333a67aeb + languageName: node + linkType: hard + +"@istanbuljs/load-nyc-config@npm:^1.0.0": + version: 1.1.0 + resolution: "@istanbuljs/load-nyc-config@npm:1.1.0" + dependencies: + camelcase: ^5.3.1 + find-up: ^4.1.0 + get-package-type: ^0.1.0 + js-yaml: ^3.13.1 + resolve-from: ^5.0.0 + checksum: d578da5e2e804d5c93228450a1380e1a3c691de4953acc162f387b717258512a3e07b83510a936d9fab03eac90817473917e24f5d16297af3867f59328d58568 + languageName: node + linkType: hard + +"@istanbuljs/schema@npm:^0.1.2, @istanbuljs/schema@npm:^0.1.3": + version: 0.1.3 + resolution: "@istanbuljs/schema@npm:0.1.3" + checksum: 5282759d961d61350f33d9118d16bcaed914ebf8061a52f4fa474b2cb08720c9c81d165e13b82f2e5a8a212cc5af482f0c6fc1ac27b9e067e5394c9a6ed186c9 + languageName: node + linkType: hard + +"@jest/console@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/console@npm:29.7.0" + dependencies: + "@jest/types": ^29.6.3 + "@types/node": "*" + chalk: ^4.0.0 + jest-message-util: ^29.7.0 + jest-util: ^29.7.0 + slash: ^3.0.0 + checksum: 0e3624e32c5a8e7361e889db70b170876401b7d70f509a2538c31d5cd50deb0c1ae4b92dc63fe18a0902e0a48c590c21d53787a0df41a52b34fa7cab96c384d6 + languageName: node + linkType: hard + +"@jest/core@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/core@npm:29.7.0" + dependencies: + "@jest/console": ^29.7.0 + "@jest/reporters": ^29.7.0 + "@jest/test-result": ^29.7.0 + "@jest/transform": ^29.7.0 + "@jest/types": ^29.6.3 + "@types/node": "*" + ansi-escapes: ^4.2.1 + chalk: ^4.0.0 + ci-info: ^3.2.0 + exit: ^0.1.2 + graceful-fs: ^4.2.9 + jest-changed-files: ^29.7.0 + jest-config: ^29.7.0 + jest-haste-map: ^29.7.0 + jest-message-util: ^29.7.0 + jest-regex-util: ^29.6.3 + jest-resolve: ^29.7.0 + jest-resolve-dependencies: ^29.7.0 + jest-runner: ^29.7.0 + jest-runtime: ^29.7.0 + jest-snapshot: ^29.7.0 + jest-util: ^29.7.0 + jest-validate: ^29.7.0 + jest-watcher: ^29.7.0 + micromatch: ^4.0.4 + pretty-format: ^29.7.0 + slash: ^3.0.0 + strip-ansi: ^6.0.0 + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + checksum: af759c9781cfc914553320446ce4e47775ae42779e73621c438feb1e4231a5d4862f84b1d8565926f2d1aab29b3ec3dcfdc84db28608bdf5f29867124ebcfc0d + languageName: node + linkType: hard + +"@jest/create-cache-key-function@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/create-cache-key-function@npm:29.7.0" + dependencies: + "@jest/types": ^29.6.3 + checksum: 681bc761fa1d6fa3dd77578d444f97f28296ea80755e90e46d1c8fa68661b9e67f54dd38b988742db636d26cf160450dc6011892cec98b3a7ceb58cad8ff3aae + languageName: node + linkType: hard + +"@jest/environment@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/environment@npm:29.7.0" + dependencies: + "@jest/fake-timers": ^29.7.0 + "@jest/types": ^29.6.3 + "@types/node": "*" + jest-mock: ^29.7.0 + checksum: 6fb398143b2543d4b9b8d1c6dbce83fa5247f84f550330604be744e24c2bd2178bb893657d62d1b97cf2f24baf85c450223f8237cccb71192c36a38ea2272934 + languageName: node + linkType: hard + +"@jest/expect-utils@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/expect-utils@npm:29.7.0" + dependencies: + jest-get-type: ^29.6.3 + checksum: 75eb177f3d00b6331bcaa057e07c0ccb0733a1d0a1943e1d8db346779039cb7f103789f16e502f888a3096fb58c2300c38d1f3748b36a7fa762eb6f6d1b160ed + languageName: node + linkType: hard + +"@jest/expect@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/expect@npm:29.7.0" + dependencies: + expect: ^29.7.0 + jest-snapshot: ^29.7.0 + checksum: a01cb85fd9401bab3370618f4b9013b90c93536562222d920e702a0b575d239d74cecfe98010aaec7ad464f67cf534a353d92d181646a4b792acaa7e912ae55e + languageName: node + linkType: hard + +"@jest/fake-timers@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/fake-timers@npm:29.7.0" + dependencies: + "@jest/types": ^29.6.3 + "@sinonjs/fake-timers": ^10.0.2 + "@types/node": "*" + jest-message-util: ^29.7.0 + jest-mock: ^29.7.0 + jest-util: ^29.7.0 + checksum: caf2bbd11f71c9241b458d1b5a66cbe95debc5a15d96442444b5d5c7ba774f523c76627c6931cca5e10e76f0d08761f6f1f01a608898f4751a0eee54fc3d8d00 + languageName: node + linkType: hard + +"@jest/globals@npm:^29.5.0, @jest/globals@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/globals@npm:29.7.0" + dependencies: + "@jest/environment": ^29.7.0 + "@jest/expect": ^29.7.0 + "@jest/types": ^29.6.3 + jest-mock: ^29.7.0 + checksum: 97dbb9459135693ad3a422e65ca1c250f03d82b2a77f6207e7fa0edd2c9d2015fbe4346f3dc9ebff1678b9d8da74754d4d440b7837497f8927059c0642a22123 + languageName: node + linkType: hard + +"@jest/reporters@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/reporters@npm:29.7.0" + dependencies: + "@bcoe/v8-coverage": ^0.2.3 + "@jest/console": ^29.7.0 + "@jest/test-result": ^29.7.0 + "@jest/transform": ^29.7.0 + "@jest/types": ^29.6.3 + "@jridgewell/trace-mapping": ^0.3.18 + "@types/node": "*" + chalk: ^4.0.0 + collect-v8-coverage: ^1.0.0 + exit: ^0.1.2 + glob: ^7.1.3 + graceful-fs: ^4.2.9 + istanbul-lib-coverage: ^3.0.0 + istanbul-lib-instrument: ^6.0.0 + istanbul-lib-report: ^3.0.0 + istanbul-lib-source-maps: ^4.0.0 + istanbul-reports: ^3.1.3 + jest-message-util: ^29.7.0 + jest-util: ^29.7.0 + jest-worker: ^29.7.0 + slash: ^3.0.0 + string-length: ^4.0.1 + strip-ansi: ^6.0.0 + v8-to-istanbul: ^9.0.1 + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + checksum: 7eadabd62cc344f629024b8a268ecc8367dba756152b761bdcb7b7e570a3864fc51b2a9810cd310d85e0a0173ef002ba4528d5ea0329fbf66ee2a3ada9c40455 + languageName: node + linkType: hard + +"@jest/schemas@npm:^29.6.3": + version: 29.6.3 + resolution: "@jest/schemas@npm:29.6.3" + dependencies: + "@sinclair/typebox": ^0.27.8 + checksum: 910040425f0fc93cd13e68c750b7885590b8839066dfa0cd78e7def07bbb708ad869381f725945d66f2284de5663bbecf63e8fdd856e2ae6e261ba30b1687e93 + languageName: node + linkType: hard + +"@jest/source-map@npm:^29.6.3": + version: 29.6.3 + resolution: "@jest/source-map@npm:29.6.3" + dependencies: + "@jridgewell/trace-mapping": ^0.3.18 + callsites: ^3.0.0 + graceful-fs: ^4.2.9 + checksum: bcc5a8697d471396c0003b0bfa09722c3cd879ad697eb9c431e6164e2ea7008238a01a07193dfe3cbb48b1d258eb7251f6efcea36f64e1ebc464ea3c03ae2deb + languageName: node + linkType: hard + +"@jest/test-result@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/test-result@npm:29.7.0" + dependencies: + "@jest/console": ^29.7.0 + "@jest/types": ^29.6.3 + "@types/istanbul-lib-coverage": ^2.0.0 + collect-v8-coverage: ^1.0.0 + checksum: 67b6317d526e335212e5da0e768e3b8ab8a53df110361b80761353ad23b6aea4432b7c5665bdeb87658ea373b90fb1afe02ed3611ef6c858c7fba377505057fa + languageName: node + linkType: hard + +"@jest/test-sequencer@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/test-sequencer@npm:29.7.0" + dependencies: + "@jest/test-result": ^29.7.0 + graceful-fs: ^4.2.9 + jest-haste-map: ^29.7.0 + slash: ^3.0.0 + checksum: 73f43599017946be85c0b6357993b038f875b796e2f0950487a82f4ebcb115fa12131932dd9904026b4ad8be131fe6e28bd8d0aa93b1563705185f9804bff8bd + languageName: node + linkType: hard + +"@jest/transform@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/transform@npm:29.7.0" + dependencies: + "@babel/core": ^7.11.6 + "@jest/types": ^29.6.3 + "@jridgewell/trace-mapping": ^0.3.18 + babel-plugin-istanbul: ^6.1.1 + chalk: ^4.0.0 + convert-source-map: ^2.0.0 + fast-json-stable-stringify: ^2.1.0 + graceful-fs: ^4.2.9 + jest-haste-map: ^29.7.0 + jest-regex-util: ^29.6.3 + jest-util: ^29.7.0 + micromatch: ^4.0.4 + pirates: ^4.0.4 + slash: ^3.0.0 + write-file-atomic: ^4.0.2 + checksum: 0f8ac9f413903b3cb6d240102db848f2a354f63971ab885833799a9964999dd51c388162106a807f810071f864302cdd8e3f0c241c29ce02d85a36f18f3f40ab + languageName: node + linkType: hard + +"@jest/types@npm:^29.6.3": + version: 29.6.3 + resolution: "@jest/types@npm:29.6.3" + dependencies: + "@jest/schemas": ^29.6.3 + "@types/istanbul-lib-coverage": ^2.0.0 + "@types/istanbul-reports": ^3.0.0 + "@types/node": "*" + "@types/yargs": ^17.0.8 + chalk: ^4.0.0 + checksum: a0bcf15dbb0eca6bdd8ce61a3fb055349d40268622a7670a3b2eb3c3dbafe9eb26af59938366d520b86907b9505b0f9b29b85cec11579a9e580694b87cd90fcc + languageName: node + linkType: hard + +"@jridgewell/gen-mapping@npm:^0.3.5": + version: 0.3.5 + resolution: "@jridgewell/gen-mapping@npm:0.3.5" + dependencies: + "@jridgewell/set-array": ^1.2.1 + "@jridgewell/sourcemap-codec": ^1.4.10 + "@jridgewell/trace-mapping": ^0.3.24 + checksum: ff7a1764ebd76a5e129c8890aa3e2f46045109dabde62b0b6c6a250152227647178ff2069ea234753a690d8f3c4ac8b5e7b267bbee272bffb7f3b0a370ab6e52 + languageName: node + linkType: hard + +"@jridgewell/resolve-uri@npm:^3.0.3, @jridgewell/resolve-uri@npm:^3.1.0": + version: 3.1.2 + resolution: "@jridgewell/resolve-uri@npm:3.1.2" + checksum: 83b85f72c59d1c080b4cbec0fef84528963a1b5db34e4370fa4bd1e3ff64a0d80e0cee7369d11d73c704e0286fb2865b530acac7a871088fbe92b5edf1000870 + languageName: node + linkType: hard + +"@jridgewell/set-array@npm:^1.2.1": + version: 1.2.1 + resolution: "@jridgewell/set-array@npm:1.2.1" + checksum: 832e513a85a588f8ed4f27d1279420d8547743cc37fcad5a5a76fc74bb895b013dfe614d0eed9cb860048e6546b798f8f2652020b4b2ba0561b05caa8c654b10 + languageName: node + linkType: hard + +"@jridgewell/source-map@npm:^0.3.3": + version: 0.3.6 + resolution: "@jridgewell/source-map@npm:0.3.6" + dependencies: + "@jridgewell/gen-mapping": ^0.3.5 + "@jridgewell/trace-mapping": ^0.3.25 + checksum: c9dc7d899397df95e3c9ec287b93c0b56f8e4453cd20743e2b9c8e779b1949bc3cccf6c01bb302779e46560eb45f62ea38d19fedd25370d814734268450a9f30 + languageName: node + linkType: hard + +"@jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.14": + version: 1.4.15 + resolution: "@jridgewell/sourcemap-codec@npm:1.4.15" + checksum: b881c7e503db3fc7f3c1f35a1dd2655a188cc51a3612d76efc8a6eb74728bef5606e6758ee77423e564092b4a518aba569bbb21c9bac5ab7a35b0c6ae7e344c8 + languageName: node + linkType: hard + +"@jridgewell/trace-mapping@npm:0.3.9": + version: 0.3.9 + resolution: "@jridgewell/trace-mapping@npm:0.3.9" + dependencies: + "@jridgewell/resolve-uri": ^3.0.3 + "@jridgewell/sourcemap-codec": ^1.4.10 + checksum: d89597752fd88d3f3480845691a05a44bd21faac18e2185b6f436c3b0fd0c5a859fbbd9aaa92050c4052caf325ad3e10e2e1d1b64327517471b7d51babc0ddef + languageName: node + linkType: hard + +"@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.18, @jridgewell/trace-mapping@npm:^0.3.20, @jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.25": + version: 0.3.25 + resolution: "@jridgewell/trace-mapping@npm:0.3.25" + dependencies: + "@jridgewell/resolve-uri": ^3.1.0 + "@jridgewell/sourcemap-codec": ^1.4.14 + checksum: 9d3c40d225e139987b50c48988f8717a54a8c994d8a948ee42e1412e08988761d0754d7d10b803061cc3aebf35f92a5dbbab493bd0e1a9ef9e89a2130e83ba34 + languageName: node + linkType: hard + +"@jsonjoy.com/base64@npm:^1.1.1": + version: 1.1.2 + resolution: "@jsonjoy.com/base64@npm:1.1.2" + peerDependencies: + tslib: 2 + checksum: 00dbf9cbc6ecb3af0e58288a305cc4ee3dfca9efa24443d98061756e8f6de4d6d2d3764bdfde07f2b03e6ce56db27c8a59b490bd134bf3d8122b4c6b394c7010 + languageName: node + linkType: hard + +"@jsonjoy.com/json-pack@npm:^1.0.3": + version: 1.0.4 + resolution: "@jsonjoy.com/json-pack@npm:1.0.4" + dependencies: + "@jsonjoy.com/base64": ^1.1.1 + "@jsonjoy.com/util": ^1.1.2 + hyperdyperid: ^1.2.0 + thingies: ^1.20.0 + peerDependencies: + tslib: 2 + checksum: 21e5166d5b5f4856791c2c7019dfba0e8313d2501937543691cdffd5fbe1f9680548a456d2c8aa78929aa69b2ac4c787ca8dbc7cf8e4926330decedcd0d9b8ea + languageName: node + linkType: hard + +"@jsonjoy.com/util@npm:^1.1.2": + version: 1.1.3 + resolution: "@jsonjoy.com/util@npm:1.1.3" + peerDependencies: + tslib: 2 + checksum: 144df56aafcae8984d43ebf0f2a11cecb69052286c83522758823710fbf2caabbe93946bdf5c343d3b50073bb0a1c332fea0e797eb8b4df35db480a75b0946ac + languageName: node + linkType: hard + +"@koa/cors@npm:^5.0.0": + version: 5.0.0 + resolution: "@koa/cors@npm:5.0.0" + dependencies: + vary: ^1.1.2 + checksum: 050701fb57dede2fefe0217459782bab7c9488fd07ff1f87fff680005cab43e03b7509e6015ea68082aadb1b31fe3eea7858ebdc93a2cf6f26d36d071190d50c + languageName: node + linkType: hard + +"@leichtgewicht/ip-codec@npm:^2.0.1": + version: 2.0.5 + resolution: "@leichtgewicht/ip-codec@npm:2.0.5" + checksum: 4fcd025d0a923cb6b87b631a83436a693b255779c583158bbeacde6b4dd75b94cc1eba1c9c188de5fc36c218d160524ea08bfe4ef03a056b00ff14126d66f881 + languageName: node + linkType: hard + +"@libp2p/bootstrap@npm:10.0.0": + version: 10.0.0 + resolution: "@libp2p/bootstrap@npm:10.0.0" + dependencies: + "@libp2p/interface": ^1.0.0 + "@libp2p/peer-id": ^4.0.0 + "@multiformats/mafmt": ^12.1.6 + "@multiformats/multiaddr": ^12.1.10 + checksum: e387a40b57acb2b8531db1ef93388786dcb0e2f151a4d14440974c569ebc1ebda317c098f5b5058b84a8bf55bc84794d302fa77dc2adfa53bcc0d3dd761901a2 + languageName: node + linkType: hard + +"@libp2p/crypto@npm:4.0.3": + version: 4.0.3 + resolution: "@libp2p/crypto@npm:4.0.3" + dependencies: + "@libp2p/interface": ^1.1.4 + "@noble/curves": ^1.3.0 + "@noble/hashes": ^1.3.3 + asn1js: ^3.0.5 + multiformats: ^13.1.0 + protons-runtime: ^5.4.0 + uint8arraylist: ^2.4.8 + uint8arrays: ^5.0.2 + checksum: 5b73a5018a549e5271e2d559074b74789dc7d4e1e52eb6cbc698a4514b8f4ad0b8c45e894b03a3e05f7f1c0f7a6d77004a2d6b17f39c6023c8fdf3899a3e1ca8 + languageName: node + linkType: hard + +"@libp2p/crypto@npm:^2.0.3, @libp2p/crypto@npm:^2.0.8": + version: 2.0.8 + resolution: "@libp2p/crypto@npm:2.0.8" + dependencies: + "@libp2p/interface": ^0.1.6 + "@noble/curves": ^1.1.0 + "@noble/hashes": ^1.3.1 + multiformats: ^12.0.1 + node-forge: ^1.1.0 + protons-runtime: ^5.0.0 + uint8arraylist: ^2.4.3 + uint8arrays: ^4.0.6 + checksum: 4047dc54e33670c7aa4717b9f5e7980717e00ef6a2cefaae336cdcd88f9ca38d7f29a1c642d8cbc7cd85bd2957eb79b869791b4f48fb2e91652b2d87224a136d + languageName: node + linkType: hard + +"@libp2p/crypto@npm:^4.0.0, @libp2p/crypto@npm:^4.0.1, @libp2p/crypto@npm:^4.1.1": + version: 4.1.1 + resolution: "@libp2p/crypto@npm:4.1.1" + dependencies: + "@libp2p/interface": ^1.3.1 + "@noble/curves": ^1.4.0 + "@noble/hashes": ^1.4.0 + asn1js: ^3.0.5 + multiformats: ^13.1.0 + protons-runtime: ^5.4.0 + uint8arraylist: ^2.4.8 + uint8arrays: ^5.0.3 + checksum: cae1a122c7baa476e2ea7e7acee594255433408acfeeb152497dbb4329eaef0f6ef8a40d043744263f78c6608ce2972e539b56dbf95799f930d93f13ebe95611 + languageName: node + linkType: hard + +"@libp2p/identify@npm:1.0.18": + version: 1.0.18 + resolution: "@libp2p/identify@npm:1.0.18" + dependencies: + "@libp2p/interface": ^1.2.0 + "@libp2p/interface-internal": ^1.1.0 + "@libp2p/peer-id": ^4.0.10 + "@libp2p/peer-record": ^7.0.13 + "@multiformats/multiaddr": ^12.2.1 + "@multiformats/multiaddr-matcher": ^1.2.0 + it-protobuf-stream: ^1.1.2 + protons-runtime: ^5.4.0 + uint8arraylist: ^2.4.8 + uint8arrays: ^5.0.3 + wherearewe: ^2.0.1 + checksum: 6b4d93bf6444ac6b5540f1c96c12357d522658b44c26d6174b41196fd1621fb3e89d84d9e422d063ff67384fef691e24fd3dad369901657646e898e546e4a9f9 + languageName: node + linkType: hard + +"@libp2p/interface-internal@npm:^0.1.4": + version: 0.1.12 + resolution: "@libp2p/interface-internal@npm:0.1.12" + dependencies: + "@libp2p/interface": ^0.1.6 + "@libp2p/peer-collections": ^4.0.8 + "@multiformats/multiaddr": ^12.1.5 + uint8arraylist: ^2.4.3 + checksum: 3ffa5843fd7fd046f5ab4cb70a96da6c392ba2f24f832a3b99a0b20653fa6478c924caacd8c1a6aa4de2cb2a39669778ed804bfcb5c0c232a775cc1e29f3dd17 + languageName: node + linkType: hard + +"@libp2p/interface-internal@npm:^1.0.7, @libp2p/interface-internal@npm:^1.1.0, @libp2p/interface-internal@npm:^1.2.0": + version: 1.2.0 + resolution: "@libp2p/interface-internal@npm:1.2.0" + dependencies: + "@libp2p/interface": ^1.3.1 + "@libp2p/peer-collections": ^5.2.0 + "@multiformats/multiaddr": ^12.2.1 + uint8arraylist: ^2.4.8 + checksum: 530403cd4d4f8e3b4f23c043906de1d5a412b7e01ffd63e392b1c36d4e838eb6fdb7fb7f6fcc8ef913a382fa43c2256b1bba1daa74d6d64c84b8f633f7c835ce + languageName: node + linkType: hard + +"@libp2p/interface@npm:1.3.1, @libp2p/interface@npm:^1.0.0, @libp2p/interface@npm:^1.1.1, @libp2p/interface@npm:^1.1.2, @libp2p/interface@npm:^1.1.3, @libp2p/interface@npm:^1.1.4, @libp2p/interface@npm:^1.2.0, @libp2p/interface@npm:^1.3.0, @libp2p/interface@npm:^1.3.1": + version: 1.3.1 + resolution: "@libp2p/interface@npm:1.3.1" + dependencies: + "@multiformats/multiaddr": ^12.2.1 + it-pushable: ^3.2.3 + it-stream-types: ^2.0.1 + multiformats: ^13.1.0 + progress-events: ^1.0.0 + uint8arraylist: ^2.4.8 + checksum: c7f66fad32edc05ab66508f549f6f720f0d8c63d2f882cdf0ba53476ac79bcf8cb1c37d5a0932ba3a7533cd259e55b485daef0a75a992db0ef27bb6f0b2fa7e7 + languageName: node + linkType: hard + +"@libp2p/interface@npm:^0.1.2, @libp2p/interface@npm:^0.1.6": + version: 0.1.6 + resolution: "@libp2p/interface@npm:0.1.6" + dependencies: + "@multiformats/multiaddr": ^12.1.5 + abortable-iterator: ^5.0.1 + it-pushable: ^3.2.0 + it-stream-types: ^2.0.1 + multiformats: ^12.0.1 + p-defer: ^4.0.0 + race-signal: ^1.0.0 + uint8arraylist: ^2.4.3 + checksum: dbf0c4544bbb2a299d54615e8ef553324657e7cb06a2fdc3f1a99d785276c69882841b0e9cf73b934923318d04fe6c6f7ef59194d438a126d0d8d3a4b05cc22b + languageName: node + linkType: hard + +"@libp2p/kad-dht@npm:10.0.4": + version: 10.0.4 + resolution: "@libp2p/kad-dht@npm:10.0.4" + dependencies: + "@libp2p/crypto": ^2.0.3 + "@libp2p/interface": ^0.1.2 + "@libp2p/interface-internal": ^0.1.4 + "@libp2p/logger": ^3.0.2 + "@libp2p/peer-collections": ^4.0.3 + "@libp2p/peer-id": ^3.0.2 + "@multiformats/multiaddr": ^12.1.5 + "@types/sinon": ^10.0.15 + abortable-iterator: ^5.0.1 + any-signal: ^4.1.1 + datastore-core: ^9.0.1 + events: ^3.3.0 + hashlru: ^2.3.0 + interface-datastore: ^8.2.0 + it-all: ^3.0.2 + it-drain: ^3.0.2 + it-first: ^3.0.1 + it-length: ^3.0.1 + it-length-prefixed: ^9.0.1 + it-map: ^3.0.3 + it-merge: ^3.0.0 + it-parallel: ^3.0.0 + it-pipe: ^3.0.1 + it-stream-types: ^2.0.1 + it-take: ^3.0.1 + multiformats: ^12.0.1 + p-defer: ^4.0.0 + p-event: ^6.0.0 + p-queue: ^7.3.4 + private-ip: ^3.0.0 + progress-events: ^1.0.0 + protons-runtime: ^5.0.0 + uint8-varint: ^2.0.0 + uint8arraylist: ^2.4.3 + uint8arrays: ^4.0.6 + checksum: 8fbc6b2e12eeb98825b7dfa9e09a1c26f22a679167bde6305e8c524ee5514f509639db70915c432e1749272348f3eb8bb37ea7978a1a6f4133053e6b37ae3e3f + languageName: node + linkType: hard + +"@libp2p/logger@npm:^3.0.2": + version: 3.1.0 + resolution: "@libp2p/logger@npm:3.1.0" + dependencies: + "@libp2p/interface": ^0.1.6 + "@multiformats/multiaddr": ^12.1.5 + debug: ^4.3.4 + interface-datastore: ^8.2.0 + multiformats: ^12.0.1 + checksum: ff80803afe40a1078dbaf3119fd312bce283660e6e3d0705c91395c5e1f09520217ef29d8426880db23837bcfa444579cae6b4fc6e9ae4c869ecf4e5b9a0a59c + languageName: node + linkType: hard + +"@libp2p/logger@npm:^4.0.12, @libp2p/logger@npm:^4.0.6": + version: 4.0.12 + resolution: "@libp2p/logger@npm:4.0.12" + dependencies: + "@libp2p/interface": ^1.3.1 + "@multiformats/multiaddr": ^12.2.1 + debug: ^4.3.4 + interface-datastore: ^8.2.11 + multiformats: ^13.1.0 + checksum: 4348cfecd5bc93a68706c66c7958d2600280598d76539f10eb5aa404a550127560106f776be9c721e571d18d8eef3e31cf6ae6f48b2ace9546bc70f5f2e3963a + languageName: node + linkType: hard + +"@libp2p/mplex@npm:10.0.16": + version: 10.0.16 + resolution: "@libp2p/mplex@npm:10.0.16" + dependencies: + "@libp2p/interface": ^1.1.4 + "@libp2p/utils": ^5.2.6 + it-pipe: ^3.0.1 + it-pushable: ^3.2.3 + it-stream-types: ^2.0.1 + uint8-varint: ^2.0.4 + uint8arraylist: ^2.4.8 + uint8arrays: ^5.0.2 + checksum: a73d7c66fd35b749cdf9d9d93d8b62efeb4a97849c68207ec24de54224b12f641cf15eab937caed6bbc934bfb1d5ac14d9f88342611089674f16362d259bc7e7 + languageName: node + linkType: hard + +"@libp2p/multistream-select@npm:^5.1.9": + version: 5.1.9 + resolution: "@libp2p/multistream-select@npm:5.1.9" + dependencies: + "@libp2p/interface": ^1.3.1 + it-length-prefixed: ^9.0.4 + it-length-prefixed-stream: ^1.1.6 + it-stream-types: ^2.0.1 + p-defer: ^4.0.1 + race-signal: ^1.0.2 + uint8-varint: ^2.0.4 + uint8arraylist: ^2.4.8 + uint8arrays: ^5.0.3 + checksum: c5be0a0d3ca4a80e28af82ffc84af262be8a5cf1655bc2b77c1d17f745a19bd45dc84b7603592c0b5de0631ef3cd753e928e248c9398bb793c8e937cbf4e3cd8 + languageName: node + linkType: hard + +"@libp2p/peer-collections@npm:^4.0.3, @libp2p/peer-collections@npm:^4.0.8": + version: 4.0.11 + resolution: "@libp2p/peer-collections@npm:4.0.11" + dependencies: + "@libp2p/interface": ^0.1.6 + "@libp2p/peer-id": ^3.0.6 + checksum: b15651d905007f51cb9867f08aa3af21b8a36fef67a2f3a6309483df13d99d7611e6a9aed7dbaf1cf2adbe4ccbca0d366be92dc4e66afc705bbd9ffe43dc8b80 + languageName: node + linkType: hard + +"@libp2p/peer-collections@npm:^5.1.11, @libp2p/peer-collections@npm:^5.2.0": + version: 5.2.0 + resolution: "@libp2p/peer-collections@npm:5.2.0" + dependencies: + "@libp2p/interface": ^1.3.1 + "@libp2p/peer-id": ^4.1.1 + "@libp2p/utils": ^5.4.0 + checksum: 592a327daef801dd1899ba345f284c8ce11b320fe025e897e8e4fac49db7cc162a0e283212344e4a4363f24c9df2666f73f392f43b9b494ba2614bcd3a84f077 + languageName: node + linkType: hard + +"@libp2p/peer-id-factory@npm:4.1.1, @libp2p/peer-id-factory@npm:^4.1.1": + version: 4.1.1 + resolution: "@libp2p/peer-id-factory@npm:4.1.1" + dependencies: + "@libp2p/crypto": ^4.1.1 + "@libp2p/interface": ^1.3.1 + "@libp2p/peer-id": ^4.1.1 + protons-runtime: ^5.4.0 + uint8arraylist: ^2.4.8 + uint8arrays: ^5.0.3 + checksum: 3bce0166c7ceab6cdb4de851e2b4783176b417000744e911a2586bbe6de3207bb355a4a0524eb7bdd2718bdef1a4292006f3cdb5de32be28d6672d977ac681fa + languageName: node + linkType: hard + +"@libp2p/peer-id-factory@npm:^3.0.4": + version: 3.0.11 + resolution: "@libp2p/peer-id-factory@npm:3.0.11" + dependencies: + "@libp2p/crypto": ^2.0.8 + "@libp2p/interface": ^0.1.6 + "@libp2p/peer-id": ^3.0.6 + multiformats: ^12.0.1 + protons-runtime: ^5.0.0 + uint8arraylist: ^2.4.3 + uint8arrays: ^4.0.6 + checksum: bdcee4fef7f8aace6a8316e523e8c82753986a42c58b51f59d04534a1095c9c1eec8193e859614aa2589a7f5e43e64e529bb0b475e7bad7150b2034b2ebc0aa2 + languageName: node + linkType: hard + +"@libp2p/peer-id@npm:4.0.7": + version: 4.0.7 + resolution: "@libp2p/peer-id@npm:4.0.7" + dependencies: + "@libp2p/interface": ^1.1.4 + multiformats: ^13.1.0 + uint8arrays: ^5.0.2 + checksum: d044b77bf99a3aacc31d12cad21ca767f351a69a82835ed95dd20e5b6b5872e1acdd67da4d156f5b42a0ea75adbc11b151e82199172846004e8b3f9dc85e3e54 + languageName: node + linkType: hard + +"@libp2p/peer-id@npm:^3.0.2, @libp2p/peer-id@npm:^3.0.6": + version: 3.0.6 + resolution: "@libp2p/peer-id@npm:3.0.6" + dependencies: + "@libp2p/interface": ^0.1.6 + multiformats: ^12.0.1 + uint8arrays: ^4.0.6 + checksum: d573948b9b9fc64d80a2175ff27c9878d15a43aec5c71d9486c9b6d5e4a0510c9d935c71e35420cd09d55f32c3a87307112627becc5d9f709b4b19a7100f7d30 + languageName: node + linkType: hard + +"@libp2p/peer-id@npm:^4.0.0, @libp2p/peer-id@npm:^4.0.10, @libp2p/peer-id@npm:^4.0.4, @libp2p/peer-id@npm:^4.0.5, @libp2p/peer-id@npm:^4.1.0, @libp2p/peer-id@npm:^4.1.1": + version: 4.1.1 + resolution: "@libp2p/peer-id@npm:4.1.1" + dependencies: + "@libp2p/interface": ^1.3.1 + multiformats: ^13.1.0 + uint8arrays: ^5.0.3 + checksum: a994577b56fd24d206428858d8665f7fb14fa9e1ba6b904e9b7caf6b2a9c4481da980e08d4bf16cb6bdf1a51adb45a77427d056bb60fb36594468bce094544ac + languageName: node + linkType: hard + +"@libp2p/peer-record@npm:^7.0.13, @libp2p/peer-record@npm:^7.0.15, @libp2p/peer-record@npm:^7.0.16": + version: 7.0.16 + resolution: "@libp2p/peer-record@npm:7.0.16" + dependencies: + "@libp2p/crypto": ^4.1.1 + "@libp2p/interface": ^1.3.1 + "@libp2p/peer-id": ^4.1.1 + "@libp2p/utils": ^5.4.0 + "@multiformats/multiaddr": ^12.2.1 + protons-runtime: ^5.4.0 + uint8-varint: ^2.0.4 + uint8arraylist: ^2.4.8 + uint8arrays: ^5.0.3 + checksum: f1c04605a3fe49d32945f6ef8cc41fa9ed1aaed72725def86ca73d152ef8ab0f7318b786e899cdf059fbb99e83158fc5e281e313bf1efb167b39bc2be8751dac + languageName: node + linkType: hard + +"@libp2p/peer-store@npm:10.0.16": + version: 10.0.16 + resolution: "@libp2p/peer-store@npm:10.0.16" + dependencies: + "@libp2p/interface": ^1.3.0 + "@libp2p/peer-collections": ^5.1.11 + "@libp2p/peer-id": ^4.1.0 + "@libp2p/peer-record": ^7.0.15 + "@multiformats/multiaddr": ^12.2.1 + interface-datastore: ^8.2.11 + it-all: ^3.0.4 + mortice: ^3.0.4 + multiformats: ^13.1.0 + protons-runtime: ^5.4.0 + uint8arraylist: ^2.4.8 + uint8arrays: ^5.0.3 + checksum: ee9c9f0d4e8eebda339de038df73012ca5a635a4be7e48ca55817f96d6bedaf856f96469e79bba02ab55ef4073824c5efd09d0289f088d2e06d183be1c2c0b24 + languageName: node + linkType: hard + +"@libp2p/peer-store@npm:^10.0.17": + version: 10.0.17 + resolution: "@libp2p/peer-store@npm:10.0.17" + dependencies: + "@libp2p/interface": ^1.3.1 + "@libp2p/peer-collections": ^5.2.0 + "@libp2p/peer-id": ^4.1.1 + "@libp2p/peer-record": ^7.0.16 + "@multiformats/multiaddr": ^12.2.1 + interface-datastore: ^8.2.11 + it-all: ^3.0.4 + mortice: ^3.0.4 + multiformats: ^13.1.0 + protons-runtime: ^5.4.0 + uint8arraylist: ^2.4.8 + uint8arrays: ^5.0.3 + checksum: fe7bc9a6bf76b8dbfb60530f02a598f922dbdd281c0f628529e914aefea89fdfc64ea7e1301f54856e675647c2238338dfea42c19c49402548785bf0e6898cf8 + languageName: node + linkType: hard + +"@libp2p/pubsub@npm:^9.0.8": + version: 9.0.17 + resolution: "@libp2p/pubsub@npm:9.0.17" + dependencies: + "@libp2p/crypto": ^4.1.1 + "@libp2p/interface": ^1.3.1 + "@libp2p/interface-internal": ^1.2.0 + "@libp2p/peer-collections": ^5.2.0 + "@libp2p/peer-id": ^4.1.1 + "@libp2p/utils": ^5.4.0 + it-length-prefixed: ^9.0.4 + it-pipe: ^3.0.1 + it-pushable: ^3.2.3 + multiformats: ^13.1.0 + p-queue: ^8.0.1 + uint8arraylist: ^2.4.8 + uint8arrays: ^5.0.3 + checksum: 3875a8ab886ff2028a70f7ff1b44949195bb05a4fbe72d3f93129743da0fb73168e1b11a456de10c9ff7b10bdfa9d56eee4b09a0091b4e31bb0172af9b85c480 + languageName: node + linkType: hard + +"@libp2p/tcp@npm:9.0.24": + version: 9.0.24 + resolution: "@libp2p/tcp@npm:9.0.24" + dependencies: + "@libp2p/interface": ^1.3.1 + "@libp2p/utils": ^5.4.0 + "@multiformats/mafmt": ^12.1.6 + "@multiformats/multiaddr": ^12.2.1 + "@types/sinon": ^17.0.3 + stream-to-it: ^1.0.0 + checksum: a0d8ffa567d28e8d0e25e87930eb4697c93ad0e5bd790db6ed8c23b5d2b295fcfdccf476474cd9c26f5e04520c2e54562586e0debef7e42654a57545e3113e7c + languageName: node + linkType: hard + +"@libp2p/utils@npm:^5.2.5, @libp2p/utils@npm:^5.2.6, @libp2p/utils@npm:^5.4.0": + version: 5.4.0 + resolution: "@libp2p/utils@npm:5.4.0" + dependencies: + "@chainsafe/is-ip": ^2.0.2 + "@libp2p/crypto": ^4.1.1 + "@libp2p/interface": ^1.3.1 + "@libp2p/logger": ^4.0.12 + "@multiformats/multiaddr": ^12.2.1 + "@multiformats/multiaddr-matcher": ^1.2.0 + "@sindresorhus/fnv1a": ^3.1.0 + "@types/murmurhash3js-revisited": ^3.0.3 + delay: ^6.0.0 + get-iterator: ^2.0.1 + is-loopback-addr: ^2.0.2 + it-pushable: ^3.2.3 + it-stream-types: ^2.0.1 + murmurhash3js-revisited: ^3.0.0 + netmask: ^2.0.2 + p-defer: ^4.0.1 + race-event: ^1.2.0 + race-signal: ^1.0.2 + uint8arraylist: ^2.4.8 + uint8arrays: ^5.0.3 + checksum: 8c651c4835430d4572134248ac539fdd519c3e649db56777139457f6e6bad304a29850366374c182139b786268dcd34e5a1ee53e8a080294b3c15af3bb4c662e + languageName: node + linkType: hard + +"@lmdb/lmdb-darwin-arm64@npm:3.0.8": + version: 3.0.8 + resolution: "@lmdb/lmdb-darwin-arm64@npm:3.0.8" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@lmdb/lmdb-darwin-x64@npm:3.0.8": + version: 3.0.8 + resolution: "@lmdb/lmdb-darwin-x64@npm:3.0.8" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@lmdb/lmdb-linux-arm64@npm:3.0.8": + version: 3.0.8 + resolution: "@lmdb/lmdb-linux-arm64@npm:3.0.8" + conditions: os=linux & cpu=arm64 + languageName: node + linkType: hard + +"@lmdb/lmdb-linux-arm@npm:3.0.8": + version: 3.0.8 + resolution: "@lmdb/lmdb-linux-arm@npm:3.0.8" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@lmdb/lmdb-linux-x64@npm:3.0.8": + version: 3.0.8 + resolution: "@lmdb/lmdb-linux-x64@npm:3.0.8" + conditions: os=linux & cpu=x64 + languageName: node + linkType: hard + +"@lmdb/lmdb-win32-x64@npm:3.0.8": + version: 3.0.8 + resolution: "@lmdb/lmdb-win32-x64@npm:3.0.8" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@microsoft/tsdoc-config@npm:0.16.2": + version: 0.16.2 + resolution: "@microsoft/tsdoc-config@npm:0.16.2" + dependencies: + "@microsoft/tsdoc": 0.14.2 + ajv: ~6.12.6 + jju: ~1.4.0 + resolve: ~1.19.0 + checksum: 12b0d703154076bcaac75ca42e804e4fc292672396441e54346d7eadd0d6b57f90980eda2b1bab89b224af86da34a2389f9054002e282011e795ca5919a4386f + languageName: node + linkType: hard + +"@microsoft/tsdoc@npm:0.14.2": + version: 0.14.2 + resolution: "@microsoft/tsdoc@npm:0.14.2" + checksum: b167c89e916ba73ee20b9c9d5dba6aa3a0de25ed3d50050e8a344dca7cd43cb2e1059bd515c820369b6e708901dd3fda476a42bc643ca74a35671ce77f724a3a + languageName: node + linkType: hard + +"@monorepo-utils/package-utils@npm:^2.10.4": + version: 2.10.4 + resolution: "@monorepo-utils/package-utils@npm:2.10.4" + dependencies: + globby: ^11.0.1 + load-json-file: ^6.2.0 + upath: ^2.0.1 + yaml: ^2.1.3 + checksum: aa55887ff790693e2db7158aa28fbf178c7041607e65f857f516306e6ff6a77d596151ee6d61519fce8369db8cffffd07ee6fb66b99f12619f3845985dc7543f + languageName: node + linkType: hard + +"@monorepo-utils/workspaces-to-typescript-project-references@npm:^2.9.0": + version: 2.10.4 + resolution: "@monorepo-utils/workspaces-to-typescript-project-references@npm:2.10.4" + dependencies: + "@monorepo-utils/package-utils": ^2.10.4 + comment-json: ^3.0.3 + meow: ^7.1.1 + semver-match: 0.1.1 + upath: ^2.0.1 + bin: + workspaces-to-typescript-project-references: bin/cmd.js + checksum: 34d539247bdcaff9f0182ec8654a5f63d81bd8b06e0947fb6ab3f8c72127684e45906510576fa1a15dd31d8b7d7ad99f29918e5a4ff9b21a74f45227f8b6ccef + languageName: node + linkType: hard + +"@msgpackr-extract/msgpackr-extract-darwin-arm64@npm:3.0.2": + version: 3.0.2 + resolution: "@msgpackr-extract/msgpackr-extract-darwin-arm64@npm:3.0.2" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@msgpackr-extract/msgpackr-extract-darwin-x64@npm:3.0.2": + version: 3.0.2 + resolution: "@msgpackr-extract/msgpackr-extract-darwin-x64@npm:3.0.2" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@msgpackr-extract/msgpackr-extract-linux-arm64@npm:3.0.2": + version: 3.0.2 + resolution: "@msgpackr-extract/msgpackr-extract-linux-arm64@npm:3.0.2" + conditions: os=linux & cpu=arm64 + languageName: node + linkType: hard + +"@msgpackr-extract/msgpackr-extract-linux-arm@npm:3.0.2": + version: 3.0.2 + resolution: "@msgpackr-extract/msgpackr-extract-linux-arm@npm:3.0.2" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@msgpackr-extract/msgpackr-extract-linux-x64@npm:3.0.2": + version: 3.0.2 + resolution: "@msgpackr-extract/msgpackr-extract-linux-x64@npm:3.0.2" + conditions: os=linux & cpu=x64 + languageName: node + linkType: hard + +"@msgpackr-extract/msgpackr-extract-win32-x64@npm:3.0.2": + version: 3.0.2 + resolution: "@msgpackr-extract/msgpackr-extract-win32-x64@npm:3.0.2" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@multiformats/dns@npm:^1.0.3, @multiformats/dns@npm:^1.0.5": + version: 1.0.6 + resolution: "@multiformats/dns@npm:1.0.6" + dependencies: + "@types/dns-packet": ^5.6.5 + buffer: ^6.0.3 + dns-packet: ^5.6.1 + hashlru: ^2.3.0 + p-queue: ^8.0.1 + progress-events: ^1.0.0 + uint8arrays: ^5.0.2 + checksum: bcd4b7a6260a0e7a1d3f149142e06b66318cc2f141ccc454772dcaf288f898dc652f8bb249e3d717e01292583c3ebab2a0a644bc5d91dfcc17b18eff5c93c53a + languageName: node + linkType: hard + +"@multiformats/mafmt@npm:^12.1.6": + version: 12.1.6 + resolution: "@multiformats/mafmt@npm:12.1.6" + dependencies: + "@multiformats/multiaddr": ^12.0.0 + checksum: eb0f98c7cac72a509013b4e214fc2bc94e8c0bee22740e0420a3a74deb535fb1b83990c8cd5d652e3b80c693687408a77e7a2c14800bd7f7ddb271639245e5b4 + languageName: node + linkType: hard + +"@multiformats/multiaddr-matcher@npm:^1.2.0": + version: 1.2.1 + resolution: "@multiformats/multiaddr-matcher@npm:1.2.1" + dependencies: + "@chainsafe/is-ip": ^2.0.1 + "@multiformats/multiaddr": ^12.0.0 + multiformats: ^13.0.0 + checksum: 7420f3b722eacded222dcad7c89d4e768e01eb1c90eba09b969122bc950d6e507e73e942c4216edabc12f2b6636b9595565d3a8ca6713b71ddc7f569df3bbf61 + languageName: node + linkType: hard + +"@multiformats/multiaddr@npm:12.1.14": + version: 12.1.14 + resolution: "@multiformats/multiaddr@npm:12.1.14" + dependencies: + "@chainsafe/is-ip": ^2.0.1 + "@chainsafe/netmask": ^2.0.0 + "@libp2p/interface": ^1.0.0 + dns-over-http-resolver: ^3.0.2 + multiformats: ^13.0.0 + uint8-varint: ^2.0.1 + uint8arrays: ^5.0.0 + checksum: 6c48bb1c467b36c030b2c746574b81f7e3a8fba46987471b5f6714dac1ceea120759383be37c1cacc8d1fbb9c8666eb28ad0041c5737eaf457bd8d58f0d520fa + languageName: node + linkType: hard + +"@multiformats/multiaddr@npm:^12.0.0, @multiformats/multiaddr@npm:^12.1.10, @multiformats/multiaddr@npm:^12.1.14, @multiformats/multiaddr@npm:^12.1.5, @multiformats/multiaddr@npm:^12.2.1": + version: 12.2.1 + resolution: "@multiformats/multiaddr@npm:12.2.1" + dependencies: + "@chainsafe/is-ip": ^2.0.1 + "@chainsafe/netmask": ^2.0.0 + "@libp2p/interface": ^1.0.0 + "@multiformats/dns": ^1.0.3 + multiformats: ^13.0.0 + uint8-varint: ^2.0.1 + uint8arrays: ^5.0.0 + checksum: 8d0e1e50c80f4baeb088001a37864987e1a0447783a3411c6f7bd678bd3818d1183563a36076a98f3ebbb8d3c81d4203a609dac510a2370c77e450430b44e5ec + languageName: node + linkType: hard + +"@noble/ciphers@npm:^0.4.0": + version: 0.4.1 + resolution: "@noble/ciphers@npm:0.4.1" + checksum: 8301334d6281c1cd6200716be6d01e30b8fd07b6ff7a537587187a649e625a347f24d52eba4812fc3535a077cd53e33a7abb77aeee19ff6662b7f048148f9e21 + languageName: node + linkType: hard + +"@noble/curves@npm:1.2.0, @noble/curves@npm:~1.2.0": + version: 1.2.0 + resolution: "@noble/curves@npm:1.2.0" + dependencies: + "@noble/hashes": 1.3.2 + checksum: bb798d7a66d8e43789e93bc3c2ddff91a1e19fdb79a99b86cd98f1e5eff0ee2024a2672902c2576ef3577b6f282f3b5c778bebd55761ddbb30e36bf275e83dd0 + languageName: node + linkType: hard + +"@noble/curves@npm:1.3.0, @noble/curves@npm:~1.3.0": + version: 1.3.0 + resolution: "@noble/curves@npm:1.3.0" + dependencies: + "@noble/hashes": 1.3.3 + checksum: b65342ee66c4a440eee2978524412eabba9a9efdd16d6370e15218c6a7d80bddf35e66bb57ed52c0dfd32cb9a717b439ab3a72db618f1a0066dfebe3fd12a421 + languageName: node + linkType: hard + +"@noble/curves@npm:^1.0.0, @noble/curves@npm:^1.1.0, @noble/curves@npm:^1.2.0, @noble/curves@npm:^1.3.0, @noble/curves@npm:^1.4.0": + version: 1.4.0 + resolution: "@noble/curves@npm:1.4.0" + dependencies: + "@noble/hashes": 1.4.0 + checksum: 0014ff561d16e98da4a57e2310a4015e4bdab3b1e1eafcd18d3f9b955c29c3501452ca5d702fddf8ca92d570bbeadfbe53fe16ebbd81a319c414f739154bb26b + languageName: node + linkType: hard + +"@noble/hashes@npm:1.3.2": + version: 1.3.2 + resolution: "@noble/hashes@npm:1.3.2" + checksum: fe23536b436539d13f90e4b9be843cc63b1b17666a07634a2b1259dded6f490be3d050249e6af98076ea8f2ea0d56f578773c2197f2aa0eeaa5fba5bc18ba474 + languageName: node + linkType: hard + +"@noble/hashes@npm:1.3.3, @noble/hashes@npm:~1.3.0, @noble/hashes@npm:~1.3.2": + version: 1.3.3 + resolution: "@noble/hashes@npm:1.3.3" + checksum: 8a6496d1c0c64797339bc694ad06cdfaa0f9e56cd0c3f68ae3666cfb153a791a55deb0af9c653c7ed2db64d537aa3e3054629740d2f2338bb1dcb7ab60cd205b + languageName: node + linkType: hard + +"@noble/hashes@npm:1.4.0, @noble/hashes@npm:^1.3.1, @noble/hashes@npm:^1.3.3, @noble/hashes@npm:^1.4.0": + version: 1.4.0 + resolution: "@noble/hashes@npm:1.4.0" + checksum: 8ba816ae26c90764b8c42493eea383716396096c5f7ba6bea559993194f49d80a73c081f315f4c367e51bd2d5891700bcdfa816b421d24ab45b41cb03e4f3342 + languageName: node + linkType: hard + +"@nodelib/fs.scandir@npm:2.1.5": + version: 2.1.5 + resolution: "@nodelib/fs.scandir@npm:2.1.5" + dependencies: + "@nodelib/fs.stat": 2.0.5 + run-parallel: ^1.1.9 + checksum: a970d595bd23c66c880e0ef1817791432dbb7acbb8d44b7e7d0e7a22f4521260d4a83f7f9fd61d44fda4610105577f8f58a60718105fb38352baed612fd79e59 + languageName: node + linkType: hard + +"@nodelib/fs.stat@npm:2.0.5, @nodelib/fs.stat@npm:^2.0.2": + version: 2.0.5 + resolution: "@nodelib/fs.stat@npm:2.0.5" + checksum: 012480b5ca9d97bff9261571dbbec7bbc6033f69cc92908bc1ecfad0792361a5a1994bc48674b9ef76419d056a03efadfce5a6cf6dbc0a36559571a7a483f6f0 + languageName: node + linkType: hard + +"@nodelib/fs.walk@npm:^1.2.3, @nodelib/fs.walk@npm:^1.2.8": + version: 1.2.8 + resolution: "@nodelib/fs.walk@npm:1.2.8" + dependencies: + "@nodelib/fs.scandir": 2.1.5 + fastq: ^1.6.0 + checksum: 190c643f156d8f8f277bf2a6078af1ffde1fd43f498f187c2db24d35b4b4b5785c02c7dc52e356497b9a1b65b13edc996de08de0b961c32844364da02986dc53 + languageName: node + linkType: hard + +"@noir-lang/acvm_js@portal:../noir/packages/acvm_js::locator=%40aztec%2Faztec3-packages%40workspace%3A.": + version: 0.0.0-use.local + resolution: "@noir-lang/acvm_js@portal:../noir/packages/acvm_js::locator=%40aztec%2Faztec3-packages%40workspace%3A." + languageName: node + linkType: soft + +"@noir-lang/noir_codegen@portal:../noir/packages/noir_codegen::locator=%40aztec%2Faztec3-packages%40workspace%3A.": + version: 0.0.0-use.local + resolution: "@noir-lang/noir_codegen@portal:../noir/packages/noir_codegen::locator=%40aztec%2Faztec3-packages%40workspace%3A." + dependencies: + "@noir-lang/types": 0.30.0 + glob: ^10.3.10 + ts-command-line-args: ^2.5.1 + bin: + noir-codegen: lib/main.js + languageName: node + linkType: soft + +"@noir-lang/noir_js@file:../noir/packages/noir_js::locator=%40aztec%2Faztec3-packages%40workspace%3A.": + version: 0.30.0 + resolution: "@noir-lang/noir_js@file:../noir/packages/noir_js#../noir/packages/noir_js::hash=50aa1b&locator=%40aztec%2Faztec3-packages%40workspace%3A." + dependencies: + "@noir-lang/acvm_js": 0.46.0 + "@noir-lang/noirc_abi": 0.30.0 + "@noir-lang/types": 0.30.0 + checksum: fc5f0f3d0aeb38275053ba98306866b9c532989b8e2abc751d9b5113b9c6914f159c186bfcee6173a89511385baeb952c88e55b8bfa9f9b8979643e927db25f6 + languageName: node + linkType: hard + +"@noir-lang/noirc_abi@portal:../noir/packages/noirc_abi::locator=%40aztec%2Faztec3-packages%40workspace%3A.": + version: 0.0.0-use.local + resolution: "@noir-lang/noirc_abi@portal:../noir/packages/noirc_abi::locator=%40aztec%2Faztec3-packages%40workspace%3A." + dependencies: + "@noir-lang/types": 0.30.0 + languageName: node + linkType: soft + +"@noir-lang/types@portal:../noir/packages/types::locator=%40aztec%2Faztec3-packages%40workspace%3A.": + version: 0.0.0-use.local + resolution: "@noir-lang/types@portal:../noir/packages/types::locator=%40aztec%2Faztec3-packages%40workspace%3A." + languageName: node + linkType: soft + +"@npmcli/agent@npm:^2.0.0": + version: 2.2.2 + resolution: "@npmcli/agent@npm:2.2.2" + dependencies: + agent-base: ^7.1.0 + http-proxy-agent: ^7.0.0 + https-proxy-agent: ^7.0.1 + lru-cache: ^10.0.1 + socks-proxy-agent: ^8.0.3 + checksum: 67de7b88cc627a79743c88bab35e023e23daf13831a8aa4e15f998b92f5507b644d8ffc3788afc8e64423c612e0785a6a92b74782ce368f49a6746084b50d874 + languageName: node + linkType: hard + +"@npmcli/fs@npm:^3.1.0": + version: 3.1.1 + resolution: "@npmcli/fs@npm:3.1.1" + dependencies: + semver: ^7.3.5 + checksum: d960cab4b93adcb31ce223bfb75c5714edbd55747342efb67dcc2f25e023d930a7af6ece3e75f2f459b6f38fc14d031c766f116cd124fdc937fd33112579e820 + languageName: node + linkType: hard + +"@pkgjs/parseargs@npm:^0.11.0": + version: 0.11.0 + resolution: "@pkgjs/parseargs@npm:0.11.0" + checksum: 6ad6a00fc4f2f2cfc6bff76fb1d88b8ee20bc0601e18ebb01b6d4be583733a860239a521a7fbca73b612e66705078809483549d2b18f370eb346c5155c8e4a0f + languageName: node + linkType: hard + +"@puppeteer/browsers@npm:2.2.3": + version: 2.2.3 + resolution: "@puppeteer/browsers@npm:2.2.3" + dependencies: + debug: 4.3.4 + extract-zip: 2.0.1 + progress: 2.0.3 + proxy-agent: 6.4.0 + semver: 7.6.0 + tar-fs: 3.0.5 + unbzip2-stream: 1.4.3 + yargs: 17.7.2 + bin: + browsers: lib/cjs/main-cli.js + checksum: 44d496e2c4d717e472b40473fd916b1aa3b1a6024b9e4f571ca1521172ae38d090b5f331ccc6694593f41eb0b667865d72e4c9bc29d6a705a369ade53dacbd5c + languageName: node + linkType: hard + +"@scure/base@npm:~1.1.0, @scure/base@npm:~1.1.2, @scure/base@npm:~1.1.4": + version: 1.1.6 + resolution: "@scure/base@npm:1.1.6" + checksum: d6deaae91deba99e87939af9e55d80edba302674983f32bba57f942e22b1726a83c62dc50d8f4370a5d5d35a212dda167fb169f4b0d0c297488d8604608fc3d3 + languageName: node + linkType: hard + +"@scure/bip32@npm:1.3.2": + version: 1.3.2 + resolution: "@scure/bip32@npm:1.3.2" + dependencies: + "@noble/curves": ~1.2.0 + "@noble/hashes": ~1.3.2 + "@scure/base": ~1.1.2 + checksum: c5ae84fae43490853693b481531132b89e056d45c945fc8b92b9d032577f753dfd79c5a7bbcbf0a7f035951006ff0311b6cf7a389e26c9ec6335e42b20c53157 + languageName: node + linkType: hard + +"@scure/bip32@npm:1.3.3": + version: 1.3.3 + resolution: "@scure/bip32@npm:1.3.3" + dependencies: + "@noble/curves": ~1.3.0 + "@noble/hashes": ~1.3.2 + "@scure/base": ~1.1.4 + checksum: f939ca733972622fcc1e61d4fdf170a0ad294b24ddb7ed7cdd4c467e1ef283b970154cb101cf5f1a7b64cf5337e917ad31135911dfc36b1d76625320167df2fa + languageName: node + linkType: hard + +"@scure/bip39@npm:1.2.1": + version: 1.2.1 + resolution: "@scure/bip39@npm:1.2.1" + dependencies: + "@noble/hashes": ~1.3.0 + "@scure/base": ~1.1.0 + checksum: c5bd6f1328fdbeae2dcdd891825b1610225310e5e62a4942714db51066866e4f7bef242c7b06a1b9dcc8043a4a13412cf5c5df76d3b10aa9e36b82e9b6e3eeaa + languageName: node + linkType: hard + +"@scure/bip39@npm:1.2.2": + version: 1.2.2 + resolution: "@scure/bip39@npm:1.2.2" + dependencies: + "@noble/hashes": ~1.3.2 + "@scure/base": ~1.1.4 + checksum: cb99505e6d2deef8e55e81df8c563ce8dbfdf1595596dc912bceadcf366c91b05a98130e928ecb090df74efdb20150b64acc4be55bc42768cab4d39a2833d234 + languageName: node + linkType: hard + +"@sinclair/typebox@npm:^0.27.8": + version: 0.27.8 + resolution: "@sinclair/typebox@npm:0.27.8" + checksum: 00bd7362a3439021aa1ea51b0e0d0a0e8ca1351a3d54c606b115fdcc49b51b16db6e5f43b4fe7a28c38688523e22a94d49dd31168868b655f0d4d50f032d07a1 + languageName: node + linkType: hard + +"@sindresorhus/fnv1a@npm:^3.1.0": + version: 3.1.0 + resolution: "@sindresorhus/fnv1a@npm:3.1.0" + checksum: 9816f4382da21df562e9049bd40dca95bc952afbc5f2257750b1b537af0810850749ee113c8b97f0b4c49a2d82c225fc8e0e14fda191333de9e1f73730a428e3 + languageName: node + linkType: hard + +"@sinonjs/commons@npm:^3.0.0": + version: 3.0.1 + resolution: "@sinonjs/commons@npm:3.0.1" + dependencies: + type-detect: 4.0.8 + checksum: a7c3e7cc612352f4004873747d9d8b2d4d90b13a6d483f685598c945a70e734e255f1ca5dc49702515533c403b32725defff148177453b3f3915bcb60e9d4601 + languageName: node + linkType: hard + +"@sinonjs/fake-timers@npm:^10.0.2": + version: 10.3.0 + resolution: "@sinonjs/fake-timers@npm:10.3.0" + dependencies: + "@sinonjs/commons": ^3.0.0 + checksum: 614d30cb4d5201550c940945d44c9e0b6d64a888ff2cd5b357f95ad6721070d6b8839cd10e15b76bf5e14af0bcc1d8f9ec00d49a46318f1f669a4bec1d7f3148 + languageName: node + linkType: hard + +"@swc/core-darwin-arm64@npm:1.5.5": + version: 1.5.5 + resolution: "@swc/core-darwin-arm64@npm:1.5.5" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@swc/core-darwin-x64@npm:1.5.5": + version: 1.5.5 + resolution: "@swc/core-darwin-x64@npm:1.5.5" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@swc/core-linux-arm-gnueabihf@npm:1.5.5": + version: 1.5.5 + resolution: "@swc/core-linux-arm-gnueabihf@npm:1.5.5" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@swc/core-linux-arm64-gnu@npm:1.5.5": + version: 1.5.5 + resolution: "@swc/core-linux-arm64-gnu@npm:1.5.5" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"@swc/core-linux-arm64-musl@npm:1.5.5": + version: 1.5.5 + resolution: "@swc/core-linux-arm64-musl@npm:1.5.5" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"@swc/core-linux-x64-gnu@npm:1.5.5": + version: 1.5.5 + resolution: "@swc/core-linux-x64-gnu@npm:1.5.5" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"@swc/core-linux-x64-musl@npm:1.5.5": + version: 1.5.5 + resolution: "@swc/core-linux-x64-musl@npm:1.5.5" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"@swc/core-win32-arm64-msvc@npm:1.5.5": + version: 1.5.5 + resolution: "@swc/core-win32-arm64-msvc@npm:1.5.5" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@swc/core-win32-ia32-msvc@npm:1.5.5": + version: 1.5.5 + resolution: "@swc/core-win32-ia32-msvc@npm:1.5.5" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@swc/core-win32-x64-msvc@npm:1.5.5": + version: 1.5.5 + resolution: "@swc/core-win32-x64-msvc@npm:1.5.5" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@swc/core@npm:^1.4.11": + version: 1.5.5 + resolution: "@swc/core@npm:1.5.5" + dependencies: + "@swc/core-darwin-arm64": 1.5.5 + "@swc/core-darwin-x64": 1.5.5 + "@swc/core-linux-arm-gnueabihf": 1.5.5 + "@swc/core-linux-arm64-gnu": 1.5.5 + "@swc/core-linux-arm64-musl": 1.5.5 + "@swc/core-linux-x64-gnu": 1.5.5 + "@swc/core-linux-x64-musl": 1.5.5 + "@swc/core-win32-arm64-msvc": 1.5.5 + "@swc/core-win32-ia32-msvc": 1.5.5 + "@swc/core-win32-x64-msvc": 1.5.5 + "@swc/counter": ^0.1.2 + "@swc/types": ^0.1.5 + peerDependencies: + "@swc/helpers": ^0.5.0 + dependenciesMeta: + "@swc/core-darwin-arm64": + optional: true + "@swc/core-darwin-x64": + optional: true + "@swc/core-linux-arm-gnueabihf": + optional: true + "@swc/core-linux-arm64-gnu": + optional: true + "@swc/core-linux-arm64-musl": + optional: true + "@swc/core-linux-x64-gnu": + optional: true + "@swc/core-linux-x64-musl": + optional: true + "@swc/core-win32-arm64-msvc": + optional: true + "@swc/core-win32-ia32-msvc": + optional: true + "@swc/core-win32-x64-msvc": + optional: true + peerDependenciesMeta: + "@swc/helpers": + optional: true + checksum: 40d70f19aee70d0fa7940b213c0086159fcc2d2bbffa750ce1b7e02c7ce711424b3846eb9550a844cc5608377e4154bfe99978f40bbb9bc943268449bf385e2c + languageName: node + linkType: hard + +"@swc/counter@npm:^0.1.2, @swc/counter@npm:^0.1.3": + version: 0.1.3 + resolution: "@swc/counter@npm:0.1.3" + checksum: df8f9cfba9904d3d60f511664c70d23bb323b3a0803ec9890f60133954173047ba9bdeabce28cd70ba89ccd3fd6c71c7b0bd58be85f611e1ffbe5d5c18616598 + languageName: node + linkType: hard + +"@swc/jest@npm:^0.2.36": + version: 0.2.36 + resolution: "@swc/jest@npm:0.2.36" + dependencies: + "@jest/create-cache-key-function": ^29.7.0 + "@swc/counter": ^0.1.3 + jsonc-parser: ^3.2.0 + peerDependencies: + "@swc/core": "*" + checksum: 14f2e696ac093e23dae1e2e57d894bbcde4de6fe80341a26c8d0d8cbae5aae31832f8fa32dc698529f128d19a76aeedf2227f59480de6dab5eb3f30bfdf9b71a + languageName: node + linkType: hard + +"@swc/types@npm:^0.1.5": + version: 0.1.6 + resolution: "@swc/types@npm:0.1.6" + dependencies: + "@swc/counter": ^0.1.3 + checksum: fd579fbb9ab220b01b8eec03e32c37d355efbbce12e408e4c2743ca147760b749e068f5d3bec288b26bb10ecf2fe8d061c2554df0985d50d0e56962597262b34 + languageName: node + linkType: hard + +"@tootallnate/quickjs-emscripten@npm:^0.23.0": + version: 0.23.0 + resolution: "@tootallnate/quickjs-emscripten@npm:0.23.0" + checksum: c350a2947ffb80b22e14ff35099fd582d1340d65723384a0fd0515e905e2534459ad2f301a43279a37308a27c99273c932e64649abd57d0bb3ca8c557150eccc + languageName: node + linkType: hard + +"@trivago/prettier-plugin-sort-imports@npm:^4.1.1": + version: 4.3.0 + resolution: "@trivago/prettier-plugin-sort-imports@npm:4.3.0" + dependencies: + "@babel/generator": 7.17.7 + "@babel/parser": ^7.20.5 + "@babel/traverse": 7.23.2 + "@babel/types": 7.17.0 + javascript-natural-sort: 0.7.1 + lodash: ^4.17.21 + peerDependencies: + "@vue/compiler-sfc": 3.x + prettier: 2.x - 3.x + peerDependenciesMeta: + "@vue/compiler-sfc": + optional: true + checksum: 22bb311ca24f09eef25915a66727e7be113b703f196f6ea0589dc9730b11a6f1e5e4bcc468213101d138b570d310792c83abb8d9487c53f9e597942fea052b6e + languageName: node + linkType: hard + +"@tsconfig/node10@npm:^1.0.7": + version: 1.0.11 + resolution: "@tsconfig/node10@npm:1.0.11" + checksum: 51fe47d55fe1b80ec35e6e5ed30a13665fd3a531945350aa74a14a1e82875fb60b350c2f2a5e72a64831b1b6bc02acb6760c30b3738b54954ec2dea82db7a267 + languageName: node + linkType: hard + +"@tsconfig/node12@npm:^1.0.7": + version: 1.0.11 + resolution: "@tsconfig/node12@npm:1.0.11" + checksum: 5ce29a41b13e7897a58b8e2df11269c5395999e588b9a467386f99d1d26f6c77d1af2719e407621412520ea30517d718d5192a32403b8dfcc163bf33e40a338a + languageName: node + linkType: hard + +"@tsconfig/node14@npm:^1.0.0": + version: 1.0.3 + resolution: "@tsconfig/node14@npm:1.0.3" + checksum: 19275fe80c4c8d0ad0abed6a96dbf00642e88b220b090418609c4376e1cef81bf16237bf170ad1b341452feddb8115d8dd2e5acdfdea1b27422071163dc9ba9d + languageName: node + linkType: hard + +"@tsconfig/node16@npm:^1.0.2": + version: 1.0.4 + resolution: "@tsconfig/node16@npm:1.0.4" + checksum: 202319785901f942a6e1e476b872d421baec20cf09f4b266a1854060efbf78cde16a4d256e8bc949d31e6cd9a90f1e8ef8fb06af96a65e98338a2b6b0de0a0ff + languageName: node + linkType: hard + +"@types/abstract-leveldown@npm:*": + version: 7.2.5 + resolution: "@types/abstract-leveldown@npm:7.2.5" + checksum: 3a99b13c81a53a62b42bea9cff326880de3146b4eeff528b039be69a268515b3120a6c12142e96646fcb0a03c463f298998581e86d9ddb29fbea3612f40edb2b + languageName: node + linkType: hard + +"@types/accepts@npm:*": + version: 1.3.7 + resolution: "@types/accepts@npm:1.3.7" + dependencies: + "@types/node": "*" + checksum: 7678cf74976e16093aff6e6f9755826faf069ac1e30179276158ce46ea246348ff22ca6bdd46cef08428881337d9ceefbf00bab08a7731646eb9fc9449d6a1e7 + languageName: node + linkType: hard + +"@types/babel__core@npm:^7.1.14": + version: 7.20.5 + resolution: "@types/babel__core@npm:7.20.5" + dependencies: + "@babel/parser": ^7.20.7 + "@babel/types": ^7.20.7 + "@types/babel__generator": "*" + "@types/babel__template": "*" + "@types/babel__traverse": "*" + checksum: a3226f7930b635ee7a5e72c8d51a357e799d19cbf9d445710fa39ab13804f79ab1a54b72ea7d8e504659c7dfc50675db974b526142c754398d7413aa4bc30845 + languageName: node + linkType: hard + +"@types/babel__generator@npm:*": + version: 7.6.8 + resolution: "@types/babel__generator@npm:7.6.8" + dependencies: + "@babel/types": ^7.0.0 + checksum: 5b332ea336a2efffbdeedb92b6781949b73498606ddd4205462f7d96dafd45ff3618770b41de04c4881e333dd84388bfb8afbdf6f2764cbd98be550d85c6bb48 + languageName: node + linkType: hard + +"@types/babel__template@npm:*": + version: 7.4.4 + resolution: "@types/babel__template@npm:7.4.4" + dependencies: + "@babel/parser": ^7.1.0 + "@babel/types": ^7.0.0 + checksum: d7a02d2a9b67e822694d8e6a7ddb8f2b71a1d6962dfd266554d2513eefbb205b33ca71a0d163b1caea3981ccf849211f9964d8bd0727124d18ace45aa6c9ae29 + languageName: node + linkType: hard + +"@types/babel__traverse@npm:*, @types/babel__traverse@npm:^7.0.6": + version: 7.20.5 + resolution: "@types/babel__traverse@npm:7.20.5" + dependencies: + "@babel/types": ^7.20.7 + checksum: 608e0ab4fc31cd47011d98942e6241b34d461608c0c0e153377c5fd822c436c475f1ded76a56bfa76a1adf8d9266b727bbf9bfac90c4cb152c97f30dadc5b7e8 + languageName: node + linkType: hard + +"@types/bn.js@npm:*, @types/bn.js@npm:^5.1.3": + version: 5.1.5 + resolution: "@types/bn.js@npm:5.1.5" + dependencies: + "@types/node": "*" + checksum: c87b28c4af74545624f8a3dae5294b16aa190c222626e8d4b2e327b33b1a3f1eeb43e7a24d914a9774bca43d8cd6e1cb0325c1f4b3a244af6693a024e1d918e6 + languageName: node + linkType: hard + +"@types/body-parser@npm:*": + version: 1.19.5 + resolution: "@types/body-parser@npm:1.19.5" + dependencies: + "@types/connect": "*" + "@types/node": "*" + checksum: 1e251118c4b2f61029cc43b0dc028495f2d1957fe8ee49a707fb940f86a9bd2f9754230805598278fe99958b49e9b7e66eec8ef6a50ab5c1f6b93e1ba2aaba82 + languageName: node + linkType: hard + +"@types/connect@npm:*": + version: 3.4.38 + resolution: "@types/connect@npm:3.4.38" + dependencies: + "@types/node": "*" + checksum: 7eb1bc5342a9604facd57598a6c62621e244822442976c443efb84ff745246b10d06e8b309b6e80130026a396f19bf6793b7cecd7380169f369dac3bfc46fb99 + languageName: node + linkType: hard + +"@types/content-disposition@npm:*": + version: 0.5.8 + resolution: "@types/content-disposition@npm:0.5.8" + checksum: eeea868fb510ae7a32aa2d7de680fba79d59001f3e758a334621e10bc0a6496d3a42bb79243a5e53b9c63cb524522853ccc144fe1ab160c4247d37cdb81146c4 + languageName: node + linkType: hard + +"@types/cookiejar@npm:^2.1.5": + version: 2.1.5 + resolution: "@types/cookiejar@npm:2.1.5" + checksum: 04d5990e87b6387532d15a87d9ec9b2eb783039291193863751dcfd7fc723a3b3aa30ce4c06b03975cba58632e933772f1ff031af23eaa3ac7f94e71afa6e073 + languageName: node + linkType: hard + +"@types/cookies@npm:*": + version: 0.9.0 + resolution: "@types/cookies@npm:0.9.0" + dependencies: + "@types/connect": "*" + "@types/express": "*" + "@types/keygrip": "*" + "@types/node": "*" + checksum: ce59bfdf3a5d750400ac32aa93157ec7be997dc632660cf0bbfd76df23d71a70bb5f0820558cd26b9a5576f86b6664a2fd23ae211b51202a5b2f9a15995d7331 + languageName: node + linkType: hard + +"@types/debug@npm:^4.1.7": + version: 4.1.12 + resolution: "@types/debug@npm:4.1.12" + dependencies: + "@types/ms": "*" + checksum: 47876a852de8240bfdaf7481357af2b88cb660d30c72e73789abf00c499d6bc7cd5e52f41c915d1b9cd8ec9fef5b05688d7b7aef17f7f272c2d04679508d1053 + languageName: node + linkType: hard + +"@types/detect-node@npm:^2.0.0": + version: 2.0.2 + resolution: "@types/detect-node@npm:2.0.2" + checksum: 064af29e09c5e336174d69b7709510457b1c6704d195a0d1dde9d26091c6cc8aaed39f8e7d329eedbc765655296b5a46db12b50841265a721f5bd4d0b48cbe6f + languageName: node + linkType: hard + +"@types/dns-packet@npm:^5.6.5": + version: 5.6.5 + resolution: "@types/dns-packet@npm:5.6.5" + dependencies: + "@types/node": "*" + checksum: f7708c16ec367b14d75f3e662279911c17b5fdc2347389a21fc3c5d2b46400efd5446a3a45b6940a404e90d2e7b260d01041ca7764970d917241a5d4a5073936 + languageName: node + linkType: hard + +"@types/elliptic@npm:^6.4.16": + version: 6.4.18 + resolution: "@types/elliptic@npm:6.4.18" + dependencies: + "@types/bn.js": "*" + checksum: c27613c530fb95441e5e6b456c8c9bc26568ca14c546aae6d7c1d8d46869f79a2272feaef266ac00bdb68b2671e6351ed01b91b82266eac30ca9092720825d16 + languageName: node + linkType: hard + +"@types/eslint-scope@npm:^3.7.3": + version: 3.7.7 + resolution: "@types/eslint-scope@npm:3.7.7" + dependencies: + "@types/eslint": "*" + "@types/estree": "*" + checksum: e2889a124aaab0b89af1bab5959847c5bec09809209255de0e63b9f54c629a94781daa04adb66bffcdd742f5e25a17614fb933965093c0eea64aacda4309380e + languageName: node + linkType: hard + +"@types/eslint@npm:*": + version: 8.56.10 + resolution: "@types/eslint@npm:8.56.10" + dependencies: + "@types/estree": "*" + "@types/json-schema": "*" + checksum: fb7137dd263ce1130b42d14452bdd0266ef81f52cb55ba1a5e9750e65da1f0596dc598c88bffc7e415458b6cb611a876dcc132bcf40ea48701c6d05b40c57be5 + languageName: node + linkType: hard + +"@types/estree@npm:*, @types/estree@npm:^1.0.5": + version: 1.0.5 + resolution: "@types/estree@npm:1.0.5" + checksum: dd8b5bed28e6213b7acd0fb665a84e693554d850b0df423ac8076cc3ad5823a6bc26b0251d080bdc545af83179ede51dd3f6fa78cad2c46ed1f29624ddf3e41a + languageName: node + linkType: hard + +"@types/express-serve-static-core@npm:^4.17.33": + version: 4.19.0 + resolution: "@types/express-serve-static-core@npm:4.19.0" + dependencies: + "@types/node": "*" + "@types/qs": "*" + "@types/range-parser": "*" + "@types/send": "*" + checksum: 39c09fcb3f61de96ed56d97273874cafe50e6675ac254af4d77014e569e4fdc29d1d0d1dd12e11f008cb9a52785b07c2801c6ba91397965392b20c75ee01fb4e + languageName: node + linkType: hard + +"@types/express@npm:*": + version: 4.17.21 + resolution: "@types/express@npm:4.17.21" + dependencies: + "@types/body-parser": "*" + "@types/express-serve-static-core": ^4.17.33 + "@types/qs": "*" + "@types/serve-static": "*" + checksum: fb238298630370a7392c7abdc80f495ae6c716723e114705d7e3fb67e3850b3859bbfd29391463a3fb8c0b32051847935933d99e719c0478710f8098ee7091c5 + languageName: node + linkType: hard + +"@types/fs-extra@npm:^11.0.1, @types/fs-extra@npm:^11.0.2": + version: 11.0.4 + resolution: "@types/fs-extra@npm:11.0.4" + dependencies: + "@types/jsonfile": "*" + "@types/node": "*" + checksum: 242cb84157631f057f76495c8220707541882c00a00195b603d937fb55e471afecebcb089bab50233ed3a59c69fd68bf65c1f69dd7fafe2347e139cc15b9b0e5 + languageName: node + linkType: hard + +"@types/graceful-fs@npm:^4.1.3": + version: 4.1.9 + resolution: "@types/graceful-fs@npm:4.1.9" + dependencies: + "@types/node": "*" + checksum: 79d746a8f053954bba36bd3d94a90c78de995d126289d656fb3271dd9f1229d33f678da04d10bce6be440494a5a73438e2e363e92802d16b8315b051036c5256 + languageName: node + linkType: hard + +"@types/http-assert@npm:*": + version: 1.5.5 + resolution: "@types/http-assert@npm:1.5.5" + checksum: cd6bb7fd42cc6e2a702cb55370b8b25231954ad74c04bcd185b943a74ded3d4c28099c30f77b26951df2426441baff41718816c60b5af80efe2b8888d900bf93 + languageName: node + linkType: hard + +"@types/http-errors@npm:*": + version: 2.0.4 + resolution: "@types/http-errors@npm:2.0.4" + checksum: 1f3d7c3b32c7524811a45690881736b3ef741bf9849ae03d32ad1ab7062608454b150a4e7f1351f83d26a418b2d65af9bdc06198f1c079d75578282884c4e8e3 + languageName: node + linkType: hard + +"@types/istanbul-lib-coverage@npm:*, @types/istanbul-lib-coverage@npm:^2.0.0, @types/istanbul-lib-coverage@npm:^2.0.1": + version: 2.0.6 + resolution: "@types/istanbul-lib-coverage@npm:2.0.6" + checksum: 3feac423fd3e5449485afac999dcfcb3d44a37c830af898b689fadc65d26526460bedb889db278e0d4d815a670331796494d073a10ee6e3a6526301fe7415778 + languageName: node + linkType: hard + +"@types/istanbul-lib-report@npm:*": + version: 3.0.3 + resolution: "@types/istanbul-lib-report@npm:3.0.3" + dependencies: + "@types/istanbul-lib-coverage": "*" + checksum: b91e9b60f865ff08cb35667a427b70f6c2c63e88105eadd29a112582942af47ed99c60610180aa8dcc22382fa405033f141c119c69b95db78c4c709fbadfeeb4 + languageName: node + linkType: hard + +"@types/istanbul-reports@npm:^3.0.0": + version: 3.0.4 + resolution: "@types/istanbul-reports@npm:3.0.4" + dependencies: + "@types/istanbul-lib-report": "*" + checksum: 93eb18835770b3431f68ae9ac1ca91741ab85f7606f310a34b3586b5a34450ec038c3eed7ab19266635499594de52ff73723a54a72a75b9f7d6a956f01edee95 + languageName: node + linkType: hard + +"@types/jest@npm:^29.5.0": + version: 29.5.12 + resolution: "@types/jest@npm:29.5.12" + dependencies: + expect: ^29.0.0 + pretty-format: ^29.0.0 + checksum: 19b1efdeed9d9a60a81edc8226cdeae5af7479e493eaed273e01243891c9651f7b8b4c08fc633a7d0d1d379b091c4179bbaa0807af62542325fd72f2dd17ce1c + languageName: node + linkType: hard + +"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.12, @types/json-schema@npm:^7.0.8": + version: 7.0.15 + resolution: "@types/json-schema@npm:7.0.15" + checksum: 97ed0cb44d4070aecea772b7b2e2ed971e10c81ec87dd4ecc160322ffa55ff330dace1793489540e3e318d90942064bb697cc0f8989391797792d919737b3b98 + languageName: node + linkType: hard + +"@types/json5@npm:^0.0.29": + version: 0.0.29 + resolution: "@types/json5@npm:0.0.29" + checksum: e60b153664572116dfea673c5bda7778dbff150498f44f998e34b5886d8afc47f16799280e4b6e241c0472aef1bc36add771c569c68fc5125fc2ae519a3eb9ac + languageName: node + linkType: hard + +"@types/jsonfile@npm:*": + version: 6.1.4 + resolution: "@types/jsonfile@npm:6.1.4" + dependencies: + "@types/node": "*" + checksum: 309fda20eb5f1cf68f2df28931afdf189c5e7e6bec64ac783ce737bb98908d57f6f58757ad5da9be37b815645a6f914e2d4f3ac66c574b8fe1ba6616284d0e97 + languageName: node + linkType: hard + +"@types/keygrip@npm:*": + version: 1.0.6 + resolution: "@types/keygrip@npm:1.0.6" + checksum: d157f60bf920492347791d2b26d530d5069ce05796549fbacd4c24d66ffbebbcb0ab67b21e7a1b80a593b9fd4b67dc4843dec04c12bbc2e0fddfb8577a826c41 + languageName: node + linkType: hard + +"@types/koa-bodyparser@npm:^4.3.10": + version: 4.3.12 + resolution: "@types/koa-bodyparser@npm:4.3.12" + dependencies: + "@types/koa": "*" + checksum: 645cc253c6b9b2e98252b1cdc75a4812cd6d3c228e426f9893a755324b7a6936559ec659a0ff288cb2642340b3cc4e2110167f24b84efc8e3b89c04fe67ed883 + languageName: node + linkType: hard + +"@types/koa-compose@npm:*": + version: 3.2.8 + resolution: "@types/koa-compose@npm:3.2.8" + dependencies: + "@types/koa": "*" + checksum: 95c32bdee738ac7c10439bbf6342ca3b9f0aafd7e8118739eac7fb0fa703a23cfe4c88f63e13a69a16fbde702e0bcdc62b272aa734325fc8efa7e5625479752e + languageName: node + linkType: hard + +"@types/koa-compress@npm:^4.0.3": + version: 4.0.6 + resolution: "@types/koa-compress@npm:4.0.6" + dependencies: + "@types/koa": "*" + "@types/node": "*" + checksum: 0ec8ffac1bf3c7dc36a9ee4588f83ade0a485b615aff7e9e08082319b1b3f7e2f5954ed5ce4303a7f9ba1b4144081e0700cbf3165d1aef54e5e12130c810b2e4 + languageName: node + linkType: hard + +"@types/koa-cors@npm:^0.0.2": + version: 0.0.2 + resolution: "@types/koa-cors@npm:0.0.2" + dependencies: + "@types/koa": "*" + checksum: 7218bd8f4600fede227626e01fabe2022c691ee8721945792eb3dba3b348b10ddc438c3a679734de783172be512eb6b780d0600ed7052c3f881ed234a601656e + languageName: node + linkType: hard + +"@types/koa-router@npm:^7.4.4, @types/koa-router@npm:^7.4.8": + version: 7.4.8 + resolution: "@types/koa-router@npm:7.4.8" + dependencies: + "@types/koa": "*" + checksum: 30b9735748f25ac338ec4197430a10f1cf58eeea0445f0b64733ed95df82b9245a31c01bbfdd3c9b71e90aa7a1ccf9546f4dd91bac87f6186152e67146ad9b6c + languageName: node + linkType: hard + +"@types/koa-send@npm:*": + version: 4.1.6 + resolution: "@types/koa-send@npm:4.1.6" + dependencies: + "@types/koa": "*" + checksum: d46d207f1d826ccd74bf3a02180d0475be8456eb3a2244244d19cb3f1737251e163d73958fdcd12111e03c7c0545cc89e7888a6ef2ba370ebf2b2e804efaaaf1 + languageName: node + linkType: hard + +"@types/koa-static@npm:^4.0.2": + version: 4.0.4 + resolution: "@types/koa-static@npm:4.0.4" + dependencies: + "@types/koa": "*" + "@types/koa-send": "*" + checksum: 99087a9b6f4214679932008fbed2d4332fca06cd01f2d333439bd1cf0844c313584c8eb6b805360d1c3d6c6c8a475468a5f4f73ecad551c8cc369e290ad41331 + languageName: node + linkType: hard + +"@types/koa@npm:*, @types/koa@npm:^2.13.5, @types/koa@npm:^2.13.6, @types/koa@npm:^2.13.9, @types/koa@npm:^2.15.0": + version: 2.15.0 + resolution: "@types/koa@npm:2.15.0" + dependencies: + "@types/accepts": "*" + "@types/content-disposition": "*" + "@types/cookies": "*" + "@types/http-assert": "*" + "@types/http-errors": "*" + "@types/keygrip": "*" + "@types/koa-compose": "*" + "@types/node": "*" + checksum: f429b92f36f96c8f5ceb5333f982400d0db20e177b7d89a7a576ac6f63aff8c964f7ab313e2e281a07bbb93931c66327fb42614cd4984b2ef33dfe7cbd76d741 + languageName: node + linkType: hard + +"@types/koa__cors@npm:^4.0.0": + version: 4.0.3 + resolution: "@types/koa__cors@npm:4.0.3" + dependencies: + "@types/koa": "*" + checksum: ca7bfd1ffacf6c425393e2716a88d66dfe1b5e9a32cd92253cc846fa95bd7fd44c1dc848252f13b7febb5bccf23b8e88716b051cfa04d18fa31e0768432dccb7 + languageName: node + linkType: hard + +"@types/level-errors@npm:*": + version: 3.0.2 + resolution: "@types/level-errors@npm:3.0.2" + checksum: 3d9b801f6499f795b60ac723c1b3f93ca105f20ed26966eeb606c804b10c65984c3233fb99914644d75a3223f80f220eca74fda316640a85a5b3d7572cd86925 + languageName: node + linkType: hard + +"@types/leveldown@npm:^4.0.3": + version: 4.0.6 + resolution: "@types/leveldown@npm:4.0.6" + dependencies: + "@types/abstract-leveldown": "*" + "@types/node": "*" + checksum: 8b06cbc6858f3956fe8e10a8bb58edd75369587e72ce33ab7e35e21e1f1c8e89981a337c977ffd3a635d4441113e434362ba37e343d8a0ec69cd7c8988450977 + languageName: node + linkType: hard + +"@types/levelup@npm:^5.1.2, @types/levelup@npm:^5.1.3": + version: 5.1.5 + resolution: "@types/levelup@npm:5.1.5" + dependencies: + "@types/abstract-leveldown": "*" + "@types/level-errors": "*" + "@types/node": "*" + checksum: 844798bdc805e3c449e478e283eb1196892d3f4fb6b24158faa5f10b283fa785da736917de1ec030ce1b8be9a8c54881cee2354632cb540ef80a325a19d920d1 + languageName: node + linkType: hard + +"@types/lodash.camelcase@npm:^4.3.7": + version: 4.3.9 + resolution: "@types/lodash.camelcase@npm:4.3.9" + dependencies: + "@types/lodash": "*" + checksum: f54132d38ffa72b25bce2111e4d28f339599f6d4fcfc1248a89d1d96445512d7a431f0b0e74f6e6c8d6bc09fe53cf94d9426e188d8feacb3ffe04cd9c3a602e7 + languageName: node + linkType: hard + +"@types/lodash.capitalize@npm:^4.2.7": + version: 4.2.9 + resolution: "@types/lodash.capitalize@npm:4.2.9" + dependencies: + "@types/lodash": "*" + checksum: 54a9154b2084392986646335d5ed4902a89c24ce675cf8b8cfcd022f6a0eed71c30c2f8cc4b2682cfc5c55a5e1fdad2340609ba58db451dfdd41d82b14c88995 + languageName: node + linkType: hard + +"@types/lodash.chunk@npm:^4.2.7, @types/lodash.chunk@npm:^4.2.9": + version: 4.2.9 + resolution: "@types/lodash.chunk@npm:4.2.9" + dependencies: + "@types/lodash": "*" + checksum: ccffe7273a0941655d5b988baeffa8f7d4d19a8b43ed728ff4e616013506efe85914ba99d4ec299e0106506e1bca3923b065eabb0aa5f1e4b18f68e790ae6b88 + languageName: node + linkType: hard + +"@types/lodash.clonedeep@npm:^4.5.7": + version: 4.5.9 + resolution: "@types/lodash.clonedeep@npm:4.5.9" + dependencies: + "@types/lodash": "*" + checksum: ef85512b7dce7a4f981a818ae44d11982907e1f26b5b26bedf0957c35e8591eb8e1d24fa31ca851d4b40e0a1ee88563853d762412691fe5f357e8335cead2325 + languageName: node + linkType: hard + +"@types/lodash.clonedeepwith@npm:^4.5.7": + version: 4.5.9 + resolution: "@types/lodash.clonedeepwith@npm:4.5.9" + dependencies: + "@types/lodash": "*" + checksum: c690fb28126f7248894f08abe13d6c7684dd0a4e9ac545a419a8687438b50d2e6fe32b31176c65a394d3ade4fd16a145ecbf77e7521992414bf657b8b1d936c8 + languageName: node + linkType: hard + +"@types/lodash.every@npm:^4.6.7": + version: 4.6.9 + resolution: "@types/lodash.every@npm:4.6.9" + dependencies: + "@types/lodash": "*" + checksum: 9239e078c1aba47ead8d3232d46869a6b9e886387c92c8d9a0a1549b7f21864cfa8428b5725ebbfcd31e5c54761a6fa3d4bbe049a776fe3e973cb10d967fbd0c + languageName: node + linkType: hard + +"@types/lodash.groupby@npm:^4.6.9": + version: 4.6.9 + resolution: "@types/lodash.groupby@npm:4.6.9" + dependencies: + "@types/lodash": "*" + checksum: b8310a9f89badc42a504887ca0b9619c2a284b3fec8dc505cf72508eb6beba47b822df939c7d57c0f69bc685f51ff5a232e0480ecad6b18b7ab76fecc1d74691 + languageName: node + linkType: hard + +"@types/lodash.isequal@npm:^4.5.6": + version: 4.5.8 + resolution: "@types/lodash.isequal@npm:4.5.8" + dependencies: + "@types/lodash": "*" + checksum: f3180c2d2925514fff1908a1303c11468c9f39b47fd7b053416aad3f1447f8e4a9894dd0460187ac9ac19387e25aec8dd8214d13a50a0967e0dc9cca8e4c5353 + languageName: node + linkType: hard + +"@types/lodash.merge@npm:^4.6.9": + version: 4.6.9 + resolution: "@types/lodash.merge@npm:4.6.9" + dependencies: + "@types/lodash": "*" + checksum: d0dd6654547c9d8d905184d14aa5c2a37a1ed1c3204f5ab20b7d591a05f34859ef09d3b72c065e94ca1989abf9109eb8230f67c4d64a5768b1d65b9ed8baf8e7 + languageName: node + linkType: hard + +"@types/lodash.omit@npm:^4.5.7, @types/lodash.omit@npm:^4.5.9": + version: 4.5.9 + resolution: "@types/lodash.omit@npm:4.5.9" + dependencies: + "@types/lodash": "*" + checksum: 5be43f3598d6b1fa481fe7046e9e15e2225f547e0e309746c2b87f4e4fa8705e96c564e2762a9312e73e2a223d701ab893b122c506500de49a4b9fb40fb6d17c + languageName: node + linkType: hard + +"@types/lodash.pick@npm:^4.4.7": + version: 4.4.9 + resolution: "@types/lodash.pick@npm:4.4.9" + dependencies: + "@types/lodash": "*" + checksum: 007c298133b5bc2157f13d6641b139d2782b4af7b6a942cc4b1a427c6ebc6020e46b32ee2e782607389b0c63a5211d51152606424fdfe25f3eeac8afea0bdf02 + languageName: node + linkType: hard + +"@types/lodash.startcase@npm:^4.4.7": + version: 4.4.9 + resolution: "@types/lodash.startcase@npm:4.4.9" + dependencies: + "@types/lodash": "*" + checksum: 448203f0b6d31c1af9fe8292d5417af670bee560bb0af0cac3a6047b90c2d60ba03197367c2defae21e3982c665763197343863ce7d97131efa8e13e6431fe9f + languageName: node + linkType: hard + +"@types/lodash.times@npm:^4.3.7": + version: 4.3.9 + resolution: "@types/lodash.times@npm:4.3.9" + dependencies: + "@types/lodash": "*" + checksum: 452374b3db98bb805e77b3a53955aa76c1e78a7d48c400b08d48b6424ed9328ad826d98364b82506ea2756089320503d3a5797a1456bcdac11451763be536e62 + languageName: node + linkType: hard + +"@types/lodash@npm:*": + version: 4.17.1 + resolution: "@types/lodash@npm:4.17.1" + checksum: 01984d5b44c09ef45258f8ac6d0cf926900624064722d51a020ba179e5d4a293da0068fb278d87dc695586afe7ebd3362ec57f5c0e7c4f6c1fab9d04a80e77f5 + languageName: node + linkType: hard + +"@types/memdown@npm:^3.0.0, @types/memdown@npm:^3.0.1, @types/memdown@npm:^3.0.2, @types/memdown@npm:^3.0.3": + version: 3.0.5 + resolution: "@types/memdown@npm:3.0.5" + dependencies: + "@types/abstract-leveldown": "*" + checksum: a0c384858354da754933a83295642ac8710af08e1bf499ff3ae87d86ea34a0d9ebf2bdf75ec45d992cd152580c671c82ea4a0aea03f10eeb3aed33eceb21819e + languageName: node + linkType: hard + +"@types/methods@npm:^1.1.4": + version: 1.1.4 + resolution: "@types/methods@npm:1.1.4" + checksum: ad2a7178486f2fd167750f3eb920ab032a947ff2e26f55c86670a6038632d790b46f52e5b6ead5823f1e53fc68028f1e9ddd15cfead7903e04517c88debd72b1 + languageName: node + linkType: hard + +"@types/mime@npm:^1": + version: 1.3.5 + resolution: "@types/mime@npm:1.3.5" + checksum: e29a5f9c4776f5229d84e525b7cd7dd960b51c30a0fb9a028c0821790b82fca9f672dab56561e2acd9e8eed51d431bde52eafdfef30f643586c4162f1aecfc78 + languageName: node + linkType: hard + +"@types/minimist@npm:^1.2.0": + version: 1.2.5 + resolution: "@types/minimist@npm:1.2.5" + checksum: 477047b606005058ab0263c4f58097136268007f320003c348794f74adedc3166ffc47c80ec3e94687787f2ab7f4e72c468223946e79892cf0fd9e25e9970a90 + languageName: node + linkType: hard + +"@types/ms@npm:*": + version: 0.7.34 + resolution: "@types/ms@npm:0.7.34" + checksum: f38d36e7b6edecd9badc9cf50474159e9da5fa6965a75186cceaf883278611b9df6669dc3a3cc122b7938d317b68a9e3d573d316fcb35d1be47ec9e468c6bd8a + languageName: node + linkType: hard + +"@types/murmurhash3js-revisited@npm:^3.0.3": + version: 3.0.3 + resolution: "@types/murmurhash3js-revisited@npm:3.0.3" + checksum: 810d5402d6ce723e86e59babfea8e15127619f7b643b5f251697d50c7a8b5efc30a7af6f7f63b0bdfae062e1f3b3f9d4e951dc5c9557bafbe40325a3288bec98 + languageName: node + linkType: hard + +"@types/node@npm:*": + version: 20.12.11 + resolution: "@types/node@npm:20.12.11" + dependencies: + undici-types: ~5.26.4 + checksum: 0cc06bb69cd8150e96fcf65fa3d7f2eeebedf110a99e1834a7fa55bd6c04e7b6d73f74321a2acfc569ca300c0b88d8e1b702ce245b3802f6e5f6a8987fef451a + languageName: node + linkType: hard + +"@types/node@npm:^18.14.6, @types/node@npm:^18.15.11, @types/node@npm:^18.15.3, @types/node@npm:^18.7.23": + version: 18.19.33 + resolution: "@types/node@npm:18.19.33" + dependencies: + undici-types: ~5.26.4 + checksum: b6db87d095bc541d64a410fa323a35c22c6113220b71b608bbe810b2397932d0f0a51c3c0f3ef90c20d8180a1502d950a7c5314b907e182d9cc10b36efd2a44e + languageName: node + linkType: hard + +"@types/normalize-package-data@npm:^2.4.0": + version: 2.4.4 + resolution: "@types/normalize-package-data@npm:2.4.4" + checksum: 65dff72b543997b7be8b0265eca7ace0e34b75c3e5fee31de11179d08fa7124a7a5587265d53d0409532ecb7f7fba662c2012807963e1f9b059653ec2c83ee05 + languageName: node + linkType: hard + +"@types/pako@npm:^2.0.0": + version: 2.0.3 + resolution: "@types/pako@npm:2.0.3" + checksum: 0746dd5d29eccf5b2e6cceb3ccb093851219e78bd2e2e20d25757e247987139e061e5d4ba37cb5295493f06e3c683c74f8876011cd8a3f3748a09244fbc841d9 + languageName: node + linkType: hard + +"@types/qs@npm:*": + version: 6.9.15 + resolution: "@types/qs@npm:6.9.15" + checksum: 97d8208c2b82013b618e7a9fc14df6bd40a73e1385ac479b6896bafc7949a46201c15f42afd06e86a05e914f146f495f606b6fb65610cc60cf2e0ff743ec38a2 + languageName: node + linkType: hard + +"@types/range-parser@npm:*": + version: 1.2.7 + resolution: "@types/range-parser@npm:1.2.7" + checksum: 95640233b689dfbd85b8c6ee268812a732cf36d5affead89e806fe30da9a430767af8ef2cd661024fd97e19d61f3dec75af2df5e80ec3bea000019ab7028629a + languageName: node + linkType: hard + +"@types/semver@npm:^7.5.0, @types/semver@npm:^7.5.2, @types/semver@npm:^7.5.4": + version: 7.5.8 + resolution: "@types/semver@npm:7.5.8" + checksum: ea6f5276f5b84c55921785a3a27a3cd37afee0111dfe2bcb3e03c31819c197c782598f17f0b150a69d453c9584cd14c4c4d7b9a55d2c5e6cacd4d66fdb3b3663 + languageName: node + linkType: hard + +"@types/send@npm:*": + version: 0.17.4 + resolution: "@types/send@npm:0.17.4" + dependencies: + "@types/mime": ^1 + "@types/node": "*" + checksum: cf4db48251bbb03cd6452b4de6e8e09e2d75390a92fd798eca4a803df06444adc94ed050246c94c7ed46fb97be1f63607f0e1f13c3ce83d71788b3e08640e5e0 + languageName: node + linkType: hard + +"@types/serve-static@npm:*": + version: 1.15.7 + resolution: "@types/serve-static@npm:1.15.7" + dependencies: + "@types/http-errors": "*" + "@types/node": "*" + "@types/send": "*" + checksum: bbbf00dbd84719da2250a462270dc68964006e8d62f41fe3741abd94504ba3688f420a49afb2b7478921a1544d3793183ffa097c5724167da777f4e0c7f1a7d6 + languageName: node + linkType: hard + +"@types/sha256@npm:^0.2.0": + version: 0.2.2 + resolution: "@types/sha256@npm:0.2.2" + dependencies: + "@types/node": "*" + checksum: 7701b9dc105e7b877090c9bb9b02e10953831737b599bfc7658635ae35d2b21927f77028f8090d50ea0281058ee975f190d664e5351c5aaf5535a1c26ba01f1f + languageName: node + linkType: hard + +"@types/sinon@npm:^10.0.15": + version: 10.0.20 + resolution: "@types/sinon@npm:10.0.20" + dependencies: + "@types/sinonjs__fake-timers": "*" + checksum: 7322771345c202b90057f8112e0d34b7339e5ae1827fb1bfe385fc9e38ed6a2f18b4c66e88d27d98c775f7f74fb1167c0c14f61ca64155786534541e6c6eb05f + languageName: node + linkType: hard + +"@types/sinon@npm:^17.0.3": + version: 17.0.3 + resolution: "@types/sinon@npm:17.0.3" + dependencies: + "@types/sinonjs__fake-timers": "*" + checksum: c8e9956d9c90fe1ec1cc43085ae48897f93f9ea86e909ab47f255ea71f5229651faa070393950fb6923aef426c84e92b375503f9f8886ef44668b82a8ee49e9a + languageName: node + linkType: hard + +"@types/sinonjs__fake-timers@npm:*": + version: 8.1.5 + resolution: "@types/sinonjs__fake-timers@npm:8.1.5" + checksum: 7e3c08f6c13df44f3ea7d9a5155ddf77e3f7314c156fa1c5a829a4f3763bafe2f75b1283b887f06e6b4296996a2f299b70f64ff82625f9af5885436e2524d10c + languageName: node + linkType: hard + +"@types/source-map-support@npm:^0.5.10": + version: 0.5.10 + resolution: "@types/source-map-support@npm:0.5.10" + dependencies: + source-map: ^0.6.0 + checksum: ef287caea52a41b600a128d36cf961f048913e30fe143f7d882d19014635d0ca89e27013a48b0e6353ca277689d633c2ef65a25b2f8cd6d82916a2f908f18c38 + languageName: node + linkType: hard + +"@types/stack-utils@npm:^2.0.0": + version: 2.0.3 + resolution: "@types/stack-utils@npm:2.0.3" + checksum: 72576cc1522090fe497337c2b99d9838e320659ac57fa5560fcbdcbafcf5d0216c6b3a0a8a4ee4fdb3b1f5e3420aa4f6223ab57b82fef3578bec3206425c6cf5 + languageName: node + linkType: hard + +"@types/superagent@npm:*": + version: 8.1.7 + resolution: "@types/superagent@npm:8.1.7" + dependencies: + "@types/cookiejar": ^2.1.5 + "@types/methods": ^1.1.4 + "@types/node": "*" + checksum: 8f80c72bd1cc9a9295a2e1e8a7a8de9bef09348db63f33cc4f61e457917662064ab86ce013f28249c34d7239d9a4415c1a597dc70d4391b2ad83b338a63a3b73 + languageName: node + linkType: hard + +"@types/supertest@npm:^2.0.12": + version: 2.0.16 + resolution: "@types/supertest@npm:2.0.16" + dependencies: + "@types/superagent": "*" + checksum: 2fc998ea698e0467cdbe3bea0ebce2027ea3a45a13e51a6cecb0435f44b486faecf99c34d8702d2d7fe033e6e09fdd2b374af52ecc8d0c69a1deec66b8c0dd52 + languageName: node + linkType: hard + +"@types/triple-beam@npm:^1.3.2": + version: 1.3.5 + resolution: "@types/triple-beam@npm:1.3.5" + checksum: 519b6a1b30d4571965c9706ad5400a200b94e4050feca3e7856e3ea7ac00ec9903e32e9a10e2762d0f7e472d5d03e5f4b29c16c0bd8c1f77c8876c683b2231f1 + languageName: node + linkType: hard + +"@types/ws@npm:^8.5.4": + version: 8.5.10 + resolution: "@types/ws@npm:8.5.10" + dependencies: + "@types/node": "*" + checksum: 3ec416ea2be24042ebd677932a462cf16d2080393d8d7d0b1b3f5d6eaa4a7387aaf0eefb99193c0bfd29444857cf2e0c3ac89899e130550dc6c14ada8a46d25e + languageName: node + linkType: hard + +"@types/yargs-parser@npm:*": + version: 21.0.3 + resolution: "@types/yargs-parser@npm:21.0.3" + checksum: ef236c27f9432983e91432d974243e6c4cdae227cb673740320eff32d04d853eed59c92ca6f1142a335cfdc0e17cccafa62e95886a8154ca8891cc2dec4ee6fc + languageName: node + linkType: hard + +"@types/yargs@npm:^17.0.8": + version: 17.0.32 + resolution: "@types/yargs@npm:17.0.32" + dependencies: + "@types/yargs-parser": "*" + checksum: 4505bdebe8716ff383640c6e928f855b5d337cb3c68c81f7249fc6b983d0aa48de3eee26062b84f37e0d75a5797bc745e0c6e76f42f81771252a758c638f36ba + languageName: node + linkType: hard + +"@types/yauzl@npm:^2.9.1": + version: 2.10.3 + resolution: "@types/yauzl@npm:2.10.3" + dependencies: + "@types/node": "*" + checksum: 5ee966ea7bd6b2802f31ad4281c92c4c0b6dfa593c378a2582c58541fa113bec3d70eb0696b34ad95e8e6861a884cba6c3e351285816693ed176222f840a8c08 + languageName: node + linkType: hard + +"@typescript-eslint/eslint-plugin@npm:^6.2.1": + version: 6.21.0 + resolution: "@typescript-eslint/eslint-plugin@npm:6.21.0" + dependencies: + "@eslint-community/regexpp": ^4.5.1 + "@typescript-eslint/scope-manager": 6.21.0 + "@typescript-eslint/type-utils": 6.21.0 + "@typescript-eslint/utils": 6.21.0 + "@typescript-eslint/visitor-keys": 6.21.0 + debug: ^4.3.4 + graphemer: ^1.4.0 + ignore: ^5.2.4 + natural-compare: ^1.4.0 + semver: ^7.5.4 + ts-api-utils: ^1.0.1 + peerDependencies: + "@typescript-eslint/parser": ^6.0.0 || ^6.0.0-alpha + eslint: ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 5ef2c502255e643e98051e87eb682c2a257e87afd8ec3b9f6274277615e1c2caf3131b352244cfb1987b8b2c415645eeacb9113fa841fc4c9b2ac46e8aed6efd + languageName: node + linkType: hard + +"@typescript-eslint/parser@npm:^6.2.1": + version: 6.21.0 + resolution: "@typescript-eslint/parser@npm:6.21.0" + dependencies: + "@typescript-eslint/scope-manager": 6.21.0 + "@typescript-eslint/types": 6.21.0 + "@typescript-eslint/typescript-estree": 6.21.0 + "@typescript-eslint/visitor-keys": 6.21.0 + debug: ^4.3.4 + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 162fe3a867eeeffda7328bce32dae45b52283c68c8cb23258fb9f44971f761991af61f71b8c9fe1aa389e93dfe6386f8509c1273d870736c507d76dd40647b68 + languageName: node + linkType: hard + +"@typescript-eslint/scope-manager@npm:6.21.0": + version: 6.21.0 + resolution: "@typescript-eslint/scope-manager@npm:6.21.0" + dependencies: + "@typescript-eslint/types": 6.21.0 + "@typescript-eslint/visitor-keys": 6.21.0 + checksum: 71028b757da9694528c4c3294a96cc80bc7d396e383a405eab3bc224cda7341b88e0fc292120b35d3f31f47beac69f7083196c70616434072fbcd3d3e62d3376 + languageName: node + linkType: hard + +"@typescript-eslint/type-utils@npm:6.21.0": + version: 6.21.0 + resolution: "@typescript-eslint/type-utils@npm:6.21.0" + dependencies: + "@typescript-eslint/typescript-estree": 6.21.0 + "@typescript-eslint/utils": 6.21.0 + debug: ^4.3.4 + ts-api-utils: ^1.0.1 + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 77025473f4d80acf1fafcce99c5c283e557686a61861febeba9c9913331f8a41e930bf5cd8b7a54db502a57b6eb8ea6d155cbd4f41349ed00e3d7aeb1f477ddc + languageName: node + linkType: hard + +"@typescript-eslint/types@npm:4.33.0": + version: 4.33.0 + resolution: "@typescript-eslint/types@npm:4.33.0" + checksum: 3baae1ca35872421b4eb60f5d3f3f32dc1d513f2ae0a67dee28c7d159fd7a43ed0d11a8a5a0f0c2d38507ffa036fc7c511cb0f18a5e8ac524b3ebde77390ec53 + languageName: node + linkType: hard + +"@typescript-eslint/types@npm:5.62.0": + version: 5.62.0 + resolution: "@typescript-eslint/types@npm:5.62.0" + checksum: 48c87117383d1864766486f24de34086155532b070f6264e09d0e6139449270f8a9559cfef3c56d16e3bcfb52d83d42105d61b36743626399c7c2b5e0ac3b670 + languageName: node + linkType: hard + +"@typescript-eslint/types@npm:6.21.0": + version: 6.21.0 + resolution: "@typescript-eslint/types@npm:6.21.0" + checksum: 9501b47d7403417af95fc1fb72b2038c5ac46feac0e1598a46bcb43e56a606c387e9dcd8a2a0abe174c91b509f2d2a8078b093786219eb9a01ab2fbf9ee7b684 + languageName: node + linkType: hard + +"@typescript-eslint/typescript-estree@npm:6.21.0": + version: 6.21.0 + resolution: "@typescript-eslint/typescript-estree@npm:6.21.0" + dependencies: + "@typescript-eslint/types": 6.21.0 + "@typescript-eslint/visitor-keys": 6.21.0 + debug: ^4.3.4 + globby: ^11.1.0 + is-glob: ^4.0.3 + minimatch: 9.0.3 + semver: ^7.5.4 + ts-api-utils: ^1.0.1 + peerDependenciesMeta: + typescript: + optional: true + checksum: dec02dc107c4a541e14fb0c96148f3764b92117c3b635db3a577b5a56fc48df7a556fa853fb82b07c0663b4bf2c484c9f245c28ba3e17e5cb0918ea4cab2ea21 + languageName: node + linkType: hard + +"@typescript-eslint/typescript-estree@npm:^4.33.0": + version: 4.33.0 + resolution: "@typescript-eslint/typescript-estree@npm:4.33.0" + dependencies: + "@typescript-eslint/types": 4.33.0 + "@typescript-eslint/visitor-keys": 4.33.0 + debug: ^4.3.1 + globby: ^11.0.3 + is-glob: ^4.0.1 + semver: ^7.3.5 + tsutils: ^3.21.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 2566984390c76bd95f43240057215c068c69769e406e27aba41e9f21fd300074d6772e4983fa58fe61e80eb5550af1548d2e31e80550d92ba1d051bb00fe6f5c + languageName: node + linkType: hard + +"@typescript-eslint/typescript-estree@npm:^5.55.0": + version: 5.62.0 + resolution: "@typescript-eslint/typescript-estree@npm:5.62.0" + dependencies: + "@typescript-eslint/types": 5.62.0 + "@typescript-eslint/visitor-keys": 5.62.0 + debug: ^4.3.4 + globby: ^11.1.0 + is-glob: ^4.0.3 + semver: ^7.3.7 + tsutils: ^3.21.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 3624520abb5807ed8f57b1197e61c7b1ed770c56dfcaca66372d584ff50175225798bccb701f7ef129d62c5989070e1ee3a0aa2d84e56d9524dcf011a2bb1a52 + languageName: node + linkType: hard + +"@typescript-eslint/utils@npm:6.21.0": + version: 6.21.0 + resolution: "@typescript-eslint/utils@npm:6.21.0" + dependencies: + "@eslint-community/eslint-utils": ^4.4.0 + "@types/json-schema": ^7.0.12 + "@types/semver": ^7.5.0 + "@typescript-eslint/scope-manager": 6.21.0 + "@typescript-eslint/types": 6.21.0 + "@typescript-eslint/typescript-estree": 6.21.0 + semver: ^7.5.4 + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + checksum: b129b3a4aebec8468259f4589985cb59ea808afbfdb9c54f02fad11e17d185e2bf72bb332f7c36ec3c09b31f18fc41368678b076323e6e019d06f74ee93f7bf2 + languageName: node + linkType: hard + +"@typescript-eslint/visitor-keys@npm:4.33.0": + version: 4.33.0 + resolution: "@typescript-eslint/visitor-keys@npm:4.33.0" + dependencies: + "@typescript-eslint/types": 4.33.0 + eslint-visitor-keys: ^2.0.0 + checksum: 59953e474ad4610c1aa23b2b1a964445e2c6201521da6367752f37939d854352bbfced5c04ea539274065e012b1337ba3ffa49c2647a240a4e87155378ba9873 + languageName: node + linkType: hard + +"@typescript-eslint/visitor-keys@npm:5.62.0": + version: 5.62.0 + resolution: "@typescript-eslint/visitor-keys@npm:5.62.0" + dependencies: + "@typescript-eslint/types": 5.62.0 + eslint-visitor-keys: ^3.3.0 + checksum: 976b05d103fe8335bef5c93ad3f76d781e3ce50329c0243ee0f00c0fcfb186c81df50e64bfdd34970148113f8ade90887f53e3c4938183afba830b4ba8e30a35 + languageName: node + linkType: hard + +"@typescript-eslint/visitor-keys@npm:6.21.0": + version: 6.21.0 + resolution: "@typescript-eslint/visitor-keys@npm:6.21.0" + dependencies: + "@typescript-eslint/types": 6.21.0 + eslint-visitor-keys: ^3.4.1 + checksum: 67c7e6003d5af042d8703d11538fca9d76899f0119130b373402819ae43f0bc90d18656aa7add25a24427ccf1a0efd0804157ba83b0d4e145f06107d7d1b7433 + languageName: node + linkType: hard + +"@ungap/structured-clone@npm:^1.2.0": + version: 1.2.0 + resolution: "@ungap/structured-clone@npm:1.2.0" + checksum: 4f656b7b4672f2ce6e272f2427d8b0824ed11546a601d8d5412b9d7704e83db38a8d9f402ecdf2b9063fc164af842ad0ec4a55819f621ed7e7ea4d1efcc74524 + languageName: node + linkType: hard + +"@viem/anvil@npm:^0.0.9": + version: 0.0.9 + resolution: "@viem/anvil@npm:0.0.9" + dependencies: + execa: ^7.1.1 + get-port: ^6.1.2 + http-proxy: ^1.18.1 + ws: ^8.13.0 + checksum: 14c9f6593d860e889ade36daadd2e7d5e17d0bcb1254c18b85dbc81391488f570c2ef9b08a5736f2ca9666001fa1001fff84626817ab75cadbacff11c8628ebf + languageName: node + linkType: hard + +"@webassemblyjs/ast@npm:1.12.1, @webassemblyjs/ast@npm:^1.12.1": + version: 1.12.1 + resolution: "@webassemblyjs/ast@npm:1.12.1" + dependencies: + "@webassemblyjs/helper-numbers": 1.11.6 + "@webassemblyjs/helper-wasm-bytecode": 1.11.6 + checksum: 31bcc64147236bd7b1b6d29d1f419c1f5845c785e1e42dc9e3f8ca2e05a029e9393a271b84f3a5bff2a32d35f51ff59e2181a6e5f953fe88576acd6750506202 + languageName: node + linkType: hard + +"@webassemblyjs/floating-point-hex-parser@npm:1.11.6": + version: 1.11.6 + resolution: "@webassemblyjs/floating-point-hex-parser@npm:1.11.6" + checksum: 29b08758841fd8b299c7152eda36b9eb4921e9c584eb4594437b5cd90ed6b920523606eae7316175f89c20628da14326801090167cc7fbffc77af448ac84b7e2 + languageName: node + linkType: hard + +"@webassemblyjs/helper-api-error@npm:1.11.6": + version: 1.11.6 + resolution: "@webassemblyjs/helper-api-error@npm:1.11.6" + checksum: e8563df85161096343008f9161adb138a6e8f3c2cc338d6a36011aa55eabb32f2fd138ffe63bc278d009ada001cc41d263dadd1c0be01be6c2ed99076103689f + languageName: node + linkType: hard + +"@webassemblyjs/helper-buffer@npm:1.12.1": + version: 1.12.1 + resolution: "@webassemblyjs/helper-buffer@npm:1.12.1" + checksum: c3ffb723024130308db608e86e2bdccd4868bbb62dffb0a9a1530606496f79c87f8565bd8e02805ce64912b71f1a70ee5fb00307258b0c082c3abf961d097eca + languageName: node + linkType: hard + +"@webassemblyjs/helper-numbers@npm:1.11.6": + version: 1.11.6 + resolution: "@webassemblyjs/helper-numbers@npm:1.11.6" + dependencies: + "@webassemblyjs/floating-point-hex-parser": 1.11.6 + "@webassemblyjs/helper-api-error": 1.11.6 + "@xtuc/long": 4.2.2 + checksum: f4b562fa219f84368528339e0f8d273ad44e047a07641ffcaaec6f93e5b76fd86490a009aa91a294584e1436d74b0a01fa9fde45e333a4c657b58168b04da424 + languageName: node + linkType: hard + +"@webassemblyjs/helper-wasm-bytecode@npm:1.11.6": + version: 1.11.6 + resolution: "@webassemblyjs/helper-wasm-bytecode@npm:1.11.6" + checksum: 3535ef4f1fba38de3475e383b3980f4bbf3de72bbb631c2b6584c7df45be4eccd62c6ff48b5edd3f1bcff275cfd605a37679ec199fc91fd0a7705d7f1e3972dc + languageName: node + linkType: hard + +"@webassemblyjs/helper-wasm-section@npm:1.12.1": + version: 1.12.1 + resolution: "@webassemblyjs/helper-wasm-section@npm:1.12.1" + dependencies: + "@webassemblyjs/ast": 1.12.1 + "@webassemblyjs/helper-buffer": 1.12.1 + "@webassemblyjs/helper-wasm-bytecode": 1.11.6 + "@webassemblyjs/wasm-gen": 1.12.1 + checksum: c19810cdd2c90ff574139b6d8c0dda254d42d168a9e5b3d353d1bc085f1d7164ccd1b3c05592a45a939c47f7e403dc8d03572bb686642f06a3d02932f6f0bc8f + languageName: node + linkType: hard + +"@webassemblyjs/ieee754@npm:1.11.6": + version: 1.11.6 + resolution: "@webassemblyjs/ieee754@npm:1.11.6" + dependencies: + "@xtuc/ieee754": ^1.2.0 + checksum: 13574b8e41f6ca39b700e292d7edf102577db5650fe8add7066a320aa4b7a7c09a5056feccac7a74eb68c10dea9546d4461412af351f13f6b24b5f32379b49de + languageName: node + linkType: hard + +"@webassemblyjs/leb128@npm:1.11.6": + version: 1.11.6 + resolution: "@webassemblyjs/leb128@npm:1.11.6" + dependencies: + "@xtuc/long": 4.2.2 + checksum: 7ea942dc9777d4b18a5ebfa3a937b30ae9e1d2ce1fee637583ed7f376334dd1d4274f813d2e250056cca803e0952def4b954913f1a3c9068bcd4ab4ee5143bf0 + languageName: node + linkType: hard + +"@webassemblyjs/utf8@npm:1.11.6": + version: 1.11.6 + resolution: "@webassemblyjs/utf8@npm:1.11.6" + checksum: 807fe5b5ce10c390cfdd93e0fb92abda8aebabb5199980681e7c3743ee3306a75729bcd1e56a3903980e96c885ee53ef901fcbaac8efdfa480f9c0dae1d08713 + languageName: node + linkType: hard + +"@webassemblyjs/wasm-edit@npm:^1.12.1": + version: 1.12.1 + resolution: "@webassemblyjs/wasm-edit@npm:1.12.1" + dependencies: + "@webassemblyjs/ast": 1.12.1 + "@webassemblyjs/helper-buffer": 1.12.1 + "@webassemblyjs/helper-wasm-bytecode": 1.11.6 + "@webassemblyjs/helper-wasm-section": 1.12.1 + "@webassemblyjs/wasm-gen": 1.12.1 + "@webassemblyjs/wasm-opt": 1.12.1 + "@webassemblyjs/wasm-parser": 1.12.1 + "@webassemblyjs/wast-printer": 1.12.1 + checksum: ae23642303f030af888d30c4ef37b08dfec7eab6851a9575a616e65d1219f880d9223913a39056dd654e49049d76e97555b285d1f7e56935047abf578cce0692 + languageName: node + linkType: hard + +"@webassemblyjs/wasm-gen@npm:1.12.1": + version: 1.12.1 + resolution: "@webassemblyjs/wasm-gen@npm:1.12.1" + dependencies: + "@webassemblyjs/ast": 1.12.1 + "@webassemblyjs/helper-wasm-bytecode": 1.11.6 + "@webassemblyjs/ieee754": 1.11.6 + "@webassemblyjs/leb128": 1.11.6 + "@webassemblyjs/utf8": 1.11.6 + checksum: 5787626bb7f0b033044471ddd00ce0c9fe1ee4584e8b73e232051e3a4c99ba1a102700d75337151c8b6055bae77eefa4548960c610a5e4a504e356bd872138ff + languageName: node + linkType: hard + +"@webassemblyjs/wasm-opt@npm:1.12.1": + version: 1.12.1 + resolution: "@webassemblyjs/wasm-opt@npm:1.12.1" + dependencies: + "@webassemblyjs/ast": 1.12.1 + "@webassemblyjs/helper-buffer": 1.12.1 + "@webassemblyjs/wasm-gen": 1.12.1 + "@webassemblyjs/wasm-parser": 1.12.1 + checksum: 0e8fa8a0645304a1e18ff40d3db5a2e9233ebaa169b19fcc651d6fc9fe2cac0ce092ddee927318015ae735d9cd9c5d97c0cafb6a51dcd2932ac73587b62df991 + languageName: node + linkType: hard + +"@webassemblyjs/wasm-parser@npm:1.12.1, @webassemblyjs/wasm-parser@npm:^1.12.1": + version: 1.12.1 + resolution: "@webassemblyjs/wasm-parser@npm:1.12.1" + dependencies: + "@webassemblyjs/ast": 1.12.1 + "@webassemblyjs/helper-api-error": 1.11.6 + "@webassemblyjs/helper-wasm-bytecode": 1.11.6 + "@webassemblyjs/ieee754": 1.11.6 + "@webassemblyjs/leb128": 1.11.6 + "@webassemblyjs/utf8": 1.11.6 + checksum: 176015de3551ac068cd4505d837414f258d9ade7442bd71efb1232fa26c9f6d7d4e11a5c816caeed389943f409af7ebff6899289a992d7a70343cb47009d21a8 + languageName: node + linkType: hard + +"@webassemblyjs/wast-printer@npm:1.12.1": + version: 1.12.1 + resolution: "@webassemblyjs/wast-printer@npm:1.12.1" + dependencies: + "@webassemblyjs/ast": 1.12.1 + "@xtuc/long": 4.2.2 + checksum: 2974b5dda8d769145ba0efd886ea94a601e61fb37114c14f9a9a7606afc23456799af652ac3052f284909bd42edc3665a76bc9b50f95f0794c053a8a1757b713 + languageName: node + linkType: hard + +"@webpack-cli/configtest@npm:^2.1.1": + version: 2.1.1 + resolution: "@webpack-cli/configtest@npm:2.1.1" + peerDependencies: + webpack: 5.x.x + webpack-cli: 5.x.x + checksum: 9f9f9145c2d05471fc83d426db1df85cf49f329836b0c4b9f46b6948bed4b013464c00622b136d2a0a26993ce2306976682592245b08ee717500b1db45009a72 + languageName: node + linkType: hard + +"@webpack-cli/info@npm:^2.0.2": + version: 2.0.2 + resolution: "@webpack-cli/info@npm:2.0.2" + peerDependencies: + webpack: 5.x.x + webpack-cli: 5.x.x + checksum: 8f9a178afca5c82e113aed1efa552d64ee5ae4fdff63fe747c096a981ec74f18a5d07bd6e89bbe6715c3e57d96eea024a410e58977169489fe1df044c10dd94e + languageName: node + linkType: hard + +"@webpack-cli/serve@npm:^2.0.5": + version: 2.0.5 + resolution: "@webpack-cli/serve@npm:2.0.5" + peerDependencies: + webpack: 5.x.x + webpack-cli: 5.x.x + peerDependenciesMeta: + webpack-dev-server: + optional: true + checksum: 75f0e54681796d567a71ac3e2781d2901a8d8cf1cdfc82f261034dddac59a8343e8c3bc5e32b4bb9d6766759ba49fb29a5cd86ef1701d79c506fe886bb63ac75 + languageName: node + linkType: hard + +"@xtuc/ieee754@npm:^1.2.0": + version: 1.2.0 + resolution: "@xtuc/ieee754@npm:1.2.0" + checksum: ac56d4ca6e17790f1b1677f978c0c6808b1900a5b138885d3da21732f62e30e8f0d9120fcf8f6edfff5100ca902b46f8dd7c1e3f903728634523981e80e2885a + languageName: node + linkType: hard + +"@xtuc/long@npm:4.2.2": + version: 4.2.2 + resolution: "@xtuc/long@npm:4.2.2" + checksum: 8ed0d477ce3bc9c6fe2bf6a6a2cc316bb9c4127c5a7827bae947fa8ec34c7092395c5a283cc300c05b5fa01cbbfa1f938f410a7bf75db7c7846fea41949989ec + languageName: node + linkType: hard + +"abbrev@npm:^2.0.0": + version: 2.0.0 + resolution: "abbrev@npm:2.0.0" + checksum: 0e994ad2aa6575f94670d8a2149afe94465de9cedaaaac364e7fb43a40c3691c980ff74899f682f4ca58fa96b4cbd7421a015d3a6defe43a442117d7821a2f36 + languageName: node + linkType: hard + +"abitype@npm:1.0.0": + version: 1.0.0 + resolution: "abitype@npm:1.0.0" + peerDependencies: + typescript: ">=5.0.4" + zod: ^3 >=3.22.0 + peerDependenciesMeta: + typescript: + optional: true + zod: + optional: true + checksum: ea2c0548c3ba58c37a6de7483d63389074da498e63d803b742bbe94eb4eaa1f51a35d000c424058b2583aef56698cf07c696eb3bc4dd0303bc20c6f0826a241a + languageName: node + linkType: hard + +"abitype@npm:^0.8.11": + version: 0.8.11 + resolution: "abitype@npm:0.8.11" + peerDependencies: + typescript: ">=5.0.4" + zod: ^3 >=3.19.1 + peerDependenciesMeta: + zod: + optional: true + checksum: 94e6ad5d3d3851f68ea54d090312d35e38aa15d19b65d25f02d8c54400b184a87b121adb23e930f2e92d597e9290e8ca4f2ff70751e6dada4e8f1440948e0c44 + languageName: node + linkType: hard + +"abortable-iterator@npm:^5.0.1": + version: 5.0.1 + resolution: "abortable-iterator@npm:5.0.1" + dependencies: + get-iterator: ^2.0.0 + it-stream-types: ^2.0.1 + checksum: 9f50b2d2416d1c4312288d8a981f9cae8caeaaac6f4b0aa13be361c13f8e7e375b0ff2099d515ea46ade7cf2a91b9573f1f224434ff63966f76eb09be3202ed9 + languageName: node + linkType: hard + +"abstract-leveldown@npm:^7.2.0": + version: 7.2.0 + resolution: "abstract-leveldown@npm:7.2.0" + dependencies: + buffer: ^6.0.3 + catering: ^2.0.0 + is-buffer: ^2.0.5 + level-concat-iterator: ^3.0.0 + level-supports: ^2.0.1 + queue-microtask: ^1.2.3 + checksum: d558111f2d123da95ac80b8ba3b9b0a5bc8cd87296e64b05dca693f5f4839aa0e2fc97bad56a101766f499824e2962611750f8a76bbac4a5db35801968fbbe02 + languageName: node + linkType: hard + +"accepts@npm:^1.3.5": + version: 1.3.8 + resolution: "accepts@npm:1.3.8" + dependencies: + mime-types: ~2.1.34 + negotiator: 0.6.3 + checksum: 50c43d32e7b50285ebe84b613ee4a3aa426715a7d131b65b786e2ead0fd76b6b60091b9916d3478a75f11f162628a2139991b6c03ab3f1d9ab7c86075dc8eab4 + languageName: node + linkType: hard + +"acorn-import-assertions@npm:^1.9.0": + version: 1.9.0 + resolution: "acorn-import-assertions@npm:1.9.0" + peerDependencies: + acorn: ^8 + checksum: 944fb2659d0845c467066bdcda2e20c05abe3aaf11972116df457ce2627628a81764d800dd55031ba19de513ee0d43bb771bc679cc0eda66dc8b4fade143bc0c + languageName: node + linkType: hard + +"acorn-jsx@npm:^5.3.2": + version: 5.3.2 + resolution: "acorn-jsx@npm:5.3.2" + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + checksum: c3d3b2a89c9a056b205b69530a37b972b404ee46ec8e5b341666f9513d3163e2a4f214a71f4dfc7370f5a9c07472d2fd1c11c91c3f03d093e37637d95da98950 + languageName: node + linkType: hard + +"acorn-walk@npm:^8.1.1": + version: 8.3.2 + resolution: "acorn-walk@npm:8.3.2" + checksum: 3626b9d26a37b1b427796feaa5261faf712307a8920392c8dce9a5739fb31077667f4ad2ec71c7ac6aaf9f61f04a9d3d67ff56f459587206fc04aa31c27ef392 + languageName: node + linkType: hard + +"acorn@npm:^8.4.1, acorn@npm:^8.7.1, acorn@npm:^8.8.2, acorn@npm:^8.9.0": + version: 8.11.3 + resolution: "acorn@npm:8.11.3" + bin: + acorn: bin/acorn + checksum: 76d8e7d559512566b43ab4aadc374f11f563f0a9e21626dd59cb2888444e9445923ae9f3699972767f18af61df89cd89f5eaaf772d1327b055b45cb829b4a88c + languageName: node + linkType: hard + +"agent-base@npm:^7.0.2, agent-base@npm:^7.1.0, agent-base@npm:^7.1.1": + version: 7.1.1 + resolution: "agent-base@npm:7.1.1" + dependencies: + debug: ^4.3.4 + checksum: 51c158769c5c051482f9ca2e6e1ec085ac72b5a418a9b31b4e82fe6c0a6699adb94c1c42d246699a587b3335215037091c79e0de512c516f73b6ea844202f037 + languageName: node + linkType: hard + +"aggregate-error@npm:^3.0.0": + version: 3.1.0 + resolution: "aggregate-error@npm:3.1.0" + dependencies: + clean-stack: ^2.0.0 + indent-string: ^4.0.0 + checksum: 1101a33f21baa27a2fa8e04b698271e64616b886795fd43c31068c07533c7b3facfcaf4e9e0cab3624bd88f729a592f1c901a1a229c9e490eafce411a8644b79 + languageName: node + linkType: hard + +"ajv-keywords@npm:^3.5.2": + version: 3.5.2 + resolution: "ajv-keywords@npm:3.5.2" + peerDependencies: + ajv: ^6.9.1 + checksum: 7dc5e5931677a680589050f79dcbe1fefbb8fea38a955af03724229139175b433c63c68f7ae5f86cf8f65d55eb7c25f75a046723e2e58296707617ca690feae9 + languageName: node + linkType: hard + +"ajv@npm:^6.12.4, ajv@npm:^6.12.5, ajv@npm:~6.12.6": + version: 6.12.6 + resolution: "ajv@npm:6.12.6" + dependencies: + fast-deep-equal: ^3.1.1 + fast-json-stable-stringify: ^2.0.0 + json-schema-traverse: ^0.4.1 + uri-js: ^4.2.2 + checksum: 874972efe5c4202ab0a68379481fbd3d1b5d0a7bd6d3cc21d40d3536ebff3352a2a1fabb632d4fd2cc7fe4cbdcd5ed6782084c9bbf7f32a1536d18f9da5007d4 + languageName: node + linkType: hard + +"ansi-escapes@npm:^4.2.1": + version: 4.3.2 + resolution: "ansi-escapes@npm:4.3.2" + dependencies: + type-fest: ^0.21.3 + checksum: 93111c42189c0a6bed9cdb4d7f2829548e943827ee8479c74d6e0b22ee127b2a21d3f8b5ca57723b8ef78ce011fbfc2784350eb2bde3ccfccf2f575fa8489815 + languageName: node + linkType: hard + +"ansi-regex@npm:^5.0.1": + version: 5.0.1 + resolution: "ansi-regex@npm:5.0.1" + checksum: 2aa4bb54caf2d622f1afdad09441695af2a83aa3fe8b8afa581d205e57ed4261c183c4d3877cee25794443fde5876417d859c108078ab788d6af7e4fe52eb66b + languageName: node + linkType: hard + +"ansi-regex@npm:^6.0.1": + version: 6.0.1 + resolution: "ansi-regex@npm:6.0.1" + checksum: 1ff8b7667cded1de4fa2c9ae283e979fc87036864317da86a2e546725f96406746411d0d85e87a2d12fa5abd715d90006de7fa4fa0477c92321ad3b4c7d4e169 + languageName: node + linkType: hard + +"ansi-sequence-parser@npm:^1.1.0": + version: 1.1.1 + resolution: "ansi-sequence-parser@npm:1.1.1" + checksum: ead5b15c596e8e85ca02951a844366c6776769dcc9fd1bd3a0db11bb21364554822c6a439877fb599e7e1ffa0b5f039f1e5501423950457f3dcb2f480c30b188 + languageName: node + linkType: hard + +"ansi-styles@npm:^3.2.1": + version: 3.2.1 + resolution: "ansi-styles@npm:3.2.1" + dependencies: + color-convert: ^1.9.0 + checksum: d85ade01c10e5dd77b6c89f34ed7531da5830d2cb5882c645f330079975b716438cd7ebb81d0d6e6b4f9c577f19ae41ab55f07f19786b02f9dfd9e0377395665 + languageName: node + linkType: hard + +"ansi-styles@npm:^4.0.0, ansi-styles@npm:^4.1.0": + version: 4.3.0 + resolution: "ansi-styles@npm:4.3.0" + dependencies: + color-convert: ^2.0.1 + checksum: 513b44c3b2105dd14cc42a19271e80f386466c4be574bccf60b627432f9198571ebf4ab1e4c3ba17347658f4ee1711c163d574248c0c1cdc2d5917a0ad582ec4 + languageName: node + linkType: hard + +"ansi-styles@npm:^5.0.0": + version: 5.2.0 + resolution: "ansi-styles@npm:5.2.0" + checksum: d7f4e97ce0623aea6bc0d90dcd28881ee04cba06c570b97fd3391bd7a268eedfd9d5e2dd4fdcbdd82b8105df5faf6f24aaedc08eaf3da898e702db5948f63469 + languageName: node + linkType: hard + +"ansi-styles@npm:^6.1.0": + version: 6.2.1 + resolution: "ansi-styles@npm:6.2.1" + checksum: ef940f2f0ced1a6347398da88a91da7930c33ecac3c77b72c5905f8b8fe402c52e6fde304ff5347f616e27a742da3f1dc76de98f6866c69251ad0b07a66776d9 + languageName: node + linkType: hard + +"any-promise@npm:^1.1.0": + version: 1.3.0 + resolution: "any-promise@npm:1.3.0" + checksum: 0ee8a9bdbe882c90464d75d1f55cf027f5458650c4bd1f0467e65aec38ccccda07ca5844969ee77ed46d04e7dded3eaceb027e8d32f385688523fe305fa7e1de + languageName: node + linkType: hard + +"any-signal@npm:^4.1.1": + version: 4.1.1 + resolution: "any-signal@npm:4.1.1" + checksum: 93819ee19f86205f4e228f8a8d39a8082f5ca67a696ac469d66669ba0ba721fdc9e12a85d85a2e73d08d8739417ce6720faa08fc8f7eb5e6fda007da8a8c715c + languageName: node + linkType: hard + +"anymatch@npm:^3.0.3": + version: 3.1.3 + resolution: "anymatch@npm:3.1.3" + dependencies: + normalize-path: ^3.0.0 + picomatch: ^2.0.4 + checksum: 3e044fd6d1d26545f235a9fe4d7a534e2029d8e59fa7fd9f2a6eb21230f6b5380ea1eaf55136e60cbf8e613544b3b766e7a6fa2102e2a3a117505466e3025dc2 + languageName: node + linkType: hard + +"app-module-path@npm:^2.2.0": + version: 2.2.0 + resolution: "app-module-path@npm:2.2.0" + checksum: b52aa49cfa809efbad41b514222e8ef3f8ee9e147f5eccf79280b45eddcc61f7aeb302b0049474e3f42072dd53a28348c57dd96f36cd461d2e31cc8ab1ef56b5 + languageName: node + linkType: hard + +"arg@npm:^4.1.0": + version: 4.1.3 + resolution: "arg@npm:4.1.3" + checksum: 544af8dd3f60546d3e4aff084d451b96961d2267d668670199692f8d054f0415d86fc5497d0e641e91546f0aa920e7c29e5250e99fc89f5552a34b5d93b77f43 + languageName: node + linkType: hard + +"argparse@npm:^1.0.7": + version: 1.0.10 + resolution: "argparse@npm:1.0.10" + dependencies: + sprintf-js: ~1.0.2 + checksum: 7ca6e45583a28de7258e39e13d81e925cfa25d7d4aacbf806a382d3c02fcb13403a07fb8aeef949f10a7cfe4a62da0e2e807b348a5980554cc28ee573ef95945 + languageName: node + linkType: hard + +"argparse@npm:^2.0.1": + version: 2.0.1 + resolution: "argparse@npm:2.0.1" + checksum: 83644b56493e89a254bae05702abf3a1101b4fa4d0ca31df1c9985275a5a5bd47b3c27b7fa0b71098d41114d8ca000e6ed90cad764b306f8a503665e4d517ced + languageName: node + linkType: hard + +"array-back@npm:^3.0.1, array-back@npm:^3.1.0": + version: 3.1.0 + resolution: "array-back@npm:3.1.0" + checksum: 7205004fcd0f9edd926db921af901b083094608d5b265738d0290092f9822f73accb468e677db74c7c94ef432d39e5ed75a7b1786701e182efb25bbba9734209 + languageName: node + linkType: hard + +"array-back@npm:^4.0.1, array-back@npm:^4.0.2": + version: 4.0.2 + resolution: "array-back@npm:4.0.2" + checksum: f30603270771eeb54e5aad5f54604c62b3577a18b6db212a7272b2b6c32049121b49431f656654790ed1469411e45f387e7627c0de8fd0515995cc40df9b9294 + languageName: node + linkType: hard + +"array-buffer-byte-length@npm:^1.0.1": + version: 1.0.1 + resolution: "array-buffer-byte-length@npm:1.0.1" + dependencies: + call-bind: ^1.0.5 + is-array-buffer: ^3.0.4 + checksum: 53524e08f40867f6a9f35318fafe467c32e45e9c682ba67b11943e167344d2febc0f6977a17e699b05699e805c3e8f073d876f8bbf1b559ed494ad2cd0fae09e + languageName: node + linkType: hard + +"array-includes@npm:^3.1.7": + version: 3.1.8 + resolution: "array-includes@npm:3.1.8" + dependencies: + call-bind: ^1.0.7 + define-properties: ^1.2.1 + es-abstract: ^1.23.2 + es-object-atoms: ^1.0.0 + get-intrinsic: ^1.2.4 + is-string: ^1.0.7 + checksum: eb39ba5530f64e4d8acab39297c11c1c5be2a4ea188ab2b34aba5fb7224d918f77717a9d57a3e2900caaa8440e59431bdaf5c974d5212ef65d97f132e38e2d91 + languageName: node + linkType: hard + +"array-union@npm:^2.1.0": + version: 2.1.0 + resolution: "array-union@npm:2.1.0" + checksum: 5bee12395cba82da674931df6d0fea23c4aa4660cb3b338ced9f828782a65caa232573e6bf3968f23e0c5eb301764a382cef2f128b170a9dc59de0e36c39f98d + languageName: node + linkType: hard + +"array.prototype.findlastindex@npm:^1.2.3": + version: 1.2.5 + resolution: "array.prototype.findlastindex@npm:1.2.5" + dependencies: + call-bind: ^1.0.7 + define-properties: ^1.2.1 + es-abstract: ^1.23.2 + es-errors: ^1.3.0 + es-object-atoms: ^1.0.0 + es-shim-unscopables: ^1.0.2 + checksum: 2c81cff2a75deb95bf1ed89b6f5f2bfbfb882211e3b7cc59c3d6b87df774cd9d6b36949a8ae39ac476e092c1d4a4905f5ee11a86a456abb10f35f8211ae4e710 + languageName: node + linkType: hard + +"array.prototype.flat@npm:^1.3.2": + version: 1.3.2 + resolution: "array.prototype.flat@npm:1.3.2" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.2.0 + es-abstract: ^1.22.1 + es-shim-unscopables: ^1.0.0 + checksum: 5d6b4bf102065fb3f43764bfff6feb3295d372ce89591e6005df3d0ce388527a9f03c909af6f2a973969a4d178ab232ffc9236654149173e0e187ec3a1a6b87b + languageName: node + linkType: hard + +"array.prototype.flatmap@npm:^1.3.2": + version: 1.3.2 + resolution: "array.prototype.flatmap@npm:1.3.2" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.2.0 + es-abstract: ^1.22.1 + es-shim-unscopables: ^1.0.0 + checksum: ce09fe21dc0bcd4f30271f8144083aa8c13d4639074d6c8dc82054b847c7fc9a0c97f857491f4da19d4003e507172a78f4bcd12903098adac8b9cd374f734be3 + languageName: node + linkType: hard + +"arraybuffer.prototype.slice@npm:^1.0.3": + version: 1.0.3 + resolution: "arraybuffer.prototype.slice@npm:1.0.3" + dependencies: + array-buffer-byte-length: ^1.0.1 + call-bind: ^1.0.5 + define-properties: ^1.2.1 + es-abstract: ^1.22.3 + es-errors: ^1.2.1 + get-intrinsic: ^1.2.3 + is-array-buffer: ^3.0.4 + is-shared-array-buffer: ^1.0.2 + checksum: 352259cba534dcdd969c92ab002efd2ba5025b2e3b9bead3973150edbdf0696c629d7f4b3f061c5931511e8207bdc2306da614703c820b45dabce39e3daf7e3e + languageName: node + linkType: hard + +"arrify@npm:^1.0.1": + version: 1.0.1 + resolution: "arrify@npm:1.0.1" + checksum: 745075dd4a4624ff0225c331dacb99be501a515d39bcb7c84d24660314a6ec28e68131b137e6f7e16318170842ce97538cd298fc4cd6b2cc798e0b957f2747e7 + languageName: node + linkType: hard + +"asap@npm:^2.0.0": + version: 2.0.6 + resolution: "asap@npm:2.0.6" + checksum: b296c92c4b969e973260e47523207cd5769abd27c245a68c26dc7a0fe8053c55bb04360237cb51cab1df52be939da77150ace99ad331fb7fb13b3423ed73ff3d + languageName: node + linkType: hard + +"asn1.js@npm:^4.10.1": + version: 4.10.1 + resolution: "asn1.js@npm:4.10.1" + dependencies: + bn.js: ^4.0.0 + inherits: ^2.0.1 + minimalistic-assert: ^1.0.0 + checksum: 9289a1a55401238755e3142511d7b8f6fc32f08c86ff68bd7100da8b6c186179dd6b14234fba2f7f6099afcd6758a816708485efe44bc5b2a6ec87d9ceeddbb5 + languageName: node + linkType: hard + +"asn1js@npm:^3.0.5": + version: 3.0.5 + resolution: "asn1js@npm:3.0.5" + dependencies: + pvtsutils: ^1.3.2 + pvutils: ^1.1.3 + tslib: ^2.4.0 + checksum: 3b6af1bbadd5762ef8ead5daf2f6bda1bc9e23bc825c4dcc996aa1f9521ad7390a64028565d95d98090d69c8431f004c71cccb866004759169d7c203cf9075eb + languageName: node + linkType: hard + +"ast-module-types@npm:^2.7.1": + version: 2.7.1 + resolution: "ast-module-types@npm:2.7.1" + checksum: 6238647bcf34eeff2a1390cb60388da8a5064dd598acf48d68f8d972d9a332dc8d0382a5a7c511b16470e314b313bcbb95de4b0b669515393e043282c0489538 + languageName: node + linkType: hard + +"ast-module-types@npm:^3.0.0": + version: 3.0.0 + resolution: "ast-module-types@npm:3.0.0" + checksum: c6ef35d9b286f84c7942aeb0e2b50e389e0b6f44ee3b6d2c46aeed4852dbca0681dde8c3c0ec1d456dad5dbc84fced2e1c607b10b4b4c3b065b901b40f45bbe7 + languageName: node + linkType: hard + +"ast-module-types@npm:^4.0.0": + version: 4.0.0 + resolution: "ast-module-types@npm:4.0.0" + checksum: 12705ff906e57d1440a2ff82f30cf5b3c93e1734076ea5868936477d5812a6fc257eb1e44fb2b7f8c22f7483987251d72251d2a295542f64df8768434f3f06db + languageName: node + linkType: hard + +"ast-types@npm:^0.13.4": + version: 0.13.4 + resolution: "ast-types@npm:0.13.4" + dependencies: + tslib: ^2.0.1 + checksum: 5a51f7b70588ecced3601845a0e203279ca2f5fdc184416a0a1640c93ec0a267241d6090a328e78eebb8de81f8754754e0a4f1558ba2a3d638f8ccbd0b1f0eff + languageName: node + linkType: hard + +"async@npm:^3.2.3": + version: 3.2.5 + resolution: "async@npm:3.2.5" + checksum: 5ec77f1312301dee02d62140a6b1f7ee0edd2a0f983b6fd2b0849b969f245225b990b47b8243e7b9ad16451a53e7f68e753700385b706198ced888beedba3af4 + languageName: node + linkType: hard + +"asynckit@npm:^0.4.0": + version: 0.4.0 + resolution: "asynckit@npm:0.4.0" + checksum: 7b78c451df768adba04e2d02e63e2d0bf3b07adcd6e42b4cf665cb7ce899bedd344c69a1dcbce355b5f972d597b25aaa1c1742b52cffd9caccb22f348114f6be + languageName: node + linkType: hard + +"available-typed-arrays@npm:^1.0.7": + version: 1.0.7 + resolution: "available-typed-arrays@npm:1.0.7" + dependencies: + possible-typed-array-names: ^1.0.0 + checksum: 1aa3ffbfe6578276996de660848b6e95669d9a95ad149e3dd0c0cda77db6ee1dbd9d1dd723b65b6d277b882dd0c4b91a654ae9d3cf9e1254b7e93e4908d78fd3 + languageName: node + linkType: hard + +"b4a@npm:^1.6.4": + version: 1.6.6 + resolution: "b4a@npm:1.6.6" + checksum: c46a27e3ac9c84426ae728f0fc46a6ae7703a7bc03e771fa0bef4827fd7cf3bb976d1a3d5afff54606248372ab8fdf595bd0114406690edf37f14d120630cf7f + languageName: node + linkType: hard + +"babel-jest@npm:^29.7.0": + version: 29.7.0 + resolution: "babel-jest@npm:29.7.0" + dependencies: + "@jest/transform": ^29.7.0 + "@types/babel__core": ^7.1.14 + babel-plugin-istanbul: ^6.1.1 + babel-preset-jest: ^29.6.3 + chalk: ^4.0.0 + graceful-fs: ^4.2.9 + slash: ^3.0.0 + peerDependencies: + "@babel/core": ^7.8.0 + checksum: ee6f8e0495afee07cac5e4ee167be705c711a8cc8a737e05a587a131fdae2b3c8f9aa55dfd4d9c03009ac2d27f2de63d8ba96d3e8460da4d00e8af19ef9a83f7 + languageName: node + linkType: hard + +"babel-plugin-istanbul@npm:^6.1.1": + version: 6.1.1 + resolution: "babel-plugin-istanbul@npm:6.1.1" + dependencies: + "@babel/helper-plugin-utils": ^7.0.0 + "@istanbuljs/load-nyc-config": ^1.0.0 + "@istanbuljs/schema": ^0.1.2 + istanbul-lib-instrument: ^5.0.4 + test-exclude: ^6.0.0 + checksum: cb4fd95738219f232f0aece1116628cccff16db891713c4ccb501cddbbf9272951a5df81f2f2658dfdf4b3e7b236a9d5cbcf04d5d8c07dd5077297339598061a + languageName: node + linkType: hard + +"babel-plugin-jest-hoist@npm:^29.6.3": + version: 29.6.3 + resolution: "babel-plugin-jest-hoist@npm:29.6.3" + dependencies: + "@babel/template": ^7.3.3 + "@babel/types": ^7.3.3 + "@types/babel__core": ^7.1.14 + "@types/babel__traverse": ^7.0.6 + checksum: 51250f22815a7318f17214a9d44650ba89551e6d4f47a2dc259128428324b52f5a73979d010cefd921fd5a720d8c1d55ad74ff601cd94c7bd44d5f6292fde2d1 + languageName: node + linkType: hard + +"babel-preset-current-node-syntax@npm:^1.0.0": + version: 1.0.1 + resolution: "babel-preset-current-node-syntax@npm:1.0.1" + dependencies: + "@babel/plugin-syntax-async-generators": ^7.8.4 + "@babel/plugin-syntax-bigint": ^7.8.3 + "@babel/plugin-syntax-class-properties": ^7.8.3 + "@babel/plugin-syntax-import-meta": ^7.8.3 + "@babel/plugin-syntax-json-strings": ^7.8.3 + "@babel/plugin-syntax-logical-assignment-operators": ^7.8.3 + "@babel/plugin-syntax-nullish-coalescing-operator": ^7.8.3 + "@babel/plugin-syntax-numeric-separator": ^7.8.3 + "@babel/plugin-syntax-object-rest-spread": ^7.8.3 + "@babel/plugin-syntax-optional-catch-binding": ^7.8.3 + "@babel/plugin-syntax-optional-chaining": ^7.8.3 + "@babel/plugin-syntax-top-level-await": ^7.8.3 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: d118c2742498c5492c095bc8541f4076b253e705b5f1ad9a2e7d302d81a84866f0070346662355c8e25fc02caa28dc2da8d69bcd67794a0d60c4d6fab6913cc8 + languageName: node + linkType: hard + +"babel-preset-jest@npm:^29.6.3": + version: 29.6.3 + resolution: "babel-preset-jest@npm:29.6.3" + dependencies: + babel-plugin-jest-hoist: ^29.6.3 + babel-preset-current-node-syntax: ^1.0.0 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: aa4ff2a8a728d9d698ed521e3461a109a1e66202b13d3494e41eea30729a5e7cc03b3a2d56c594423a135429c37bf63a9fa8b0b9ce275298be3095a88c69f6fb + languageName: node + linkType: hard + +"balanced-match@npm:^1.0.0": + version: 1.0.2 + resolution: "balanced-match@npm:1.0.2" + checksum: 9706c088a283058a8a99e0bf91b0a2f75497f185980d9ffa8b304de1d9e58ebda7c72c07ebf01dadedaac5b2907b2c6f566f660d62bd336c3468e960403b9d65 + languageName: node + linkType: hard + +"bare-events@npm:^2.0.0, bare-events@npm:^2.2.0": + version: 2.2.2 + resolution: "bare-events@npm:2.2.2" + checksum: 154d3fc044cc171d3b85a89b768e626417b60c050123ac2ac10fc002152b4bdeb359ed1453ad54c0f1d05a7786f780d3b976af68e55c09fe4579d8466d3ff256 + languageName: node + linkType: hard + +"bare-fs@npm:^2.1.1": + version: 2.3.0 + resolution: "bare-fs@npm:2.3.0" + dependencies: + bare-events: ^2.0.0 + bare-path: ^2.0.0 + bare-stream: ^1.0.0 + checksum: 0b2033551d30e51acbca64a885f76e0361cb1e783c410e10589206a9c6a4ac25ff5865aa67e6a5e412d3175694c7aff6ffe490c509f1cb38b329a855dc7471a5 + languageName: node + linkType: hard + +"bare-os@npm:^2.1.0": + version: 2.3.0 + resolution: "bare-os@npm:2.3.0" + checksum: 873aa2d18c5dc4614b63f5a7eaf4ffdd1b5385c57167aa90895d6ba308c92c28e5f7e2cdc8474695df26b3320e72e3174f7b8d7202c46b46f47e016e2ade5185 + languageName: node + linkType: hard + +"bare-path@npm:^2.0.0, bare-path@npm:^2.1.0": + version: 2.1.2 + resolution: "bare-path@npm:2.1.2" + dependencies: + bare-os: ^2.1.0 + checksum: 06bdb3f5909b459dc34aa42624c6d3fcf8baf46203e36add063f3040ea86dda527620c2d06d53926ee5725502f4d0c57eb0a0bf0b5c14a687fd81246104e5ca5 + languageName: node + linkType: hard + +"bare-stream@npm:^1.0.0": + version: 1.0.0 + resolution: "bare-stream@npm:1.0.0" + dependencies: + streamx: ^2.16.1 + checksum: 3bc1fab505e12628257e9e162e4194af26a5bb4a66adae142ad82570faf2a4b2a934deef7fd93b180cc6ba1bdf0b57068e79d3d635f14ab38cddd66827379919 + languageName: node + linkType: hard + +"base64-js@npm:^1.3.1, base64-js@npm:^1.5.1": + version: 1.5.1 + resolution: "base64-js@npm:1.5.1" + checksum: 669632eb3745404c2f822a18fc3a0122d2f9a7a13f7fb8b5823ee19d1d2ff9ee5b52c53367176ea4ad093c332fd5ab4bd0ebae5a8e27917a4105a4cfc86b1005 + languageName: node + linkType: hard + +"basic-ftp@npm:^5.0.2": + version: 5.0.5 + resolution: "basic-ftp@npm:5.0.5" + checksum: bc82d1c1c61cd838eaca96d68ece888bacf07546642fb6b9b8328ed410756f5935f8cf43a42cb44bb343e0565e28e908adc54c298bd2f1a6e0976871fb11fec6 + languageName: node + linkType: hard + +"bcrypto@npm:^5.4.0": + version: 5.5.2 + resolution: "bcrypto@npm:5.5.2" + dependencies: + bufio: ~1.0.7 + loady: ~0.0.5 + node-gyp: latest + checksum: 6eb78e0e6f8b06afb55174407df9b5395451519bab2dcec139fb8dbe3480c4a83be74d15cbe503904d3d98314e384a35cb47fe4a779f4f8188da0e944d188f24 + languageName: node + linkType: hard + +"bigint-buffer@npm:^1.1.5": + version: 1.1.5 + resolution: "bigint-buffer@npm:1.1.5" + dependencies: + bindings: ^1.3.0 + node-gyp: latest + checksum: d010c9f57758bcdaccb435d88b483ffcc95fe8bbc6e7fb3a44fb5221f29c894ffaf4a3c5a4a530e0e7d6608203c2cde9b79ee4f2386cd6d4462d1070bc8c9f4e + languageName: node + linkType: hard + +"bindings@npm:^1.3.0": + version: 1.5.0 + resolution: "bindings@npm:1.5.0" + dependencies: + file-uri-to-path: 1.0.0 + checksum: 65b6b48095717c2e6105a021a7da4ea435aa8d3d3cd085cb9e85bcb6e5773cf318c4745c3f7c504412855940b585bdf9b918236612a1c7a7942491de176f1ae7 + languageName: node + linkType: hard + +"bl@npm:^4.1.0": + version: 4.1.0 + resolution: "bl@npm:4.1.0" + dependencies: + buffer: ^5.5.0 + inherits: ^2.0.4 + readable-stream: ^3.4.0 + checksum: 9e8521fa7e83aa9427c6f8ccdcba6e8167ef30cc9a22df26effcc5ab682ef91d2cbc23a239f945d099289e4bbcfae7a192e9c28c84c6202e710a0dfec3722662 + languageName: node + linkType: hard + +"bn.js@npm:^4.0.0, bn.js@npm:^4.1.0, bn.js@npm:^4.11.9": + version: 4.12.0 + resolution: "bn.js@npm:4.12.0" + checksum: 39afb4f15f4ea537b55eaf1446c896af28ac948fdcf47171961475724d1bb65118cca49fa6e3d67706e4790955ec0e74de584e45c8f1ef89f46c812bee5b5a12 + languageName: node + linkType: hard + +"bn.js@npm:^5.0.0, bn.js@npm:^5.2.0, bn.js@npm:^5.2.1": + version: 5.2.1 + resolution: "bn.js@npm:5.2.1" + checksum: 3dd8c8d38055fedfa95c1d5fc3c99f8dd547b36287b37768db0abab3c239711f88ff58d18d155dd8ad902b0b0cee973747b7ae20ea12a09473272b0201c9edd3 + languageName: node + linkType: hard + +"brace-expansion@npm:^1.1.7": + version: 1.1.11 + resolution: "brace-expansion@npm:1.1.11" + dependencies: + balanced-match: ^1.0.0 + concat-map: 0.0.1 + checksum: faf34a7bb0c3fcf4b59c7808bc5d2a96a40988addf2e7e09dfbb67a2251800e0d14cd2bfc1aa79174f2f5095c54ff27f46fb1289fe2d77dac755b5eb3434cc07 + languageName: node + linkType: hard + +"brace-expansion@npm:^2.0.1": + version: 2.0.1 + resolution: "brace-expansion@npm:2.0.1" + dependencies: + balanced-match: ^1.0.0 + checksum: a61e7cd2e8a8505e9f0036b3b6108ba5e926b4b55089eeb5550cd04a471fe216c96d4fe7e4c7f995c728c554ae20ddfc4244cad10aef255e72b62930afd233d1 + languageName: node + linkType: hard + +"braces@npm:^3.0.2": + version: 3.0.2 + resolution: "braces@npm:3.0.2" + dependencies: + fill-range: ^7.0.1 + checksum: e2a8e769a863f3d4ee887b5fe21f63193a891c68b612ddb4b68d82d1b5f3ff9073af066c343e9867a393fe4c2555dcb33e89b937195feb9c1613d259edfcd459 + languageName: node + linkType: hard + +"brorand@npm:^1.0.1, brorand@npm:^1.1.0": + version: 1.1.0 + resolution: "brorand@npm:1.1.0" + checksum: 8a05c9f3c4b46572dec6ef71012b1946db6cae8c7bb60ccd4b7dd5a84655db49fe043ecc6272e7ef1f69dc53d6730b9e2a3a03a8310509a3d797a618cbee52be + languageName: node + linkType: hard + +"browserify-aes@npm:^1.0.4, browserify-aes@npm:^1.2.0": + version: 1.2.0 + resolution: "browserify-aes@npm:1.2.0" + dependencies: + buffer-xor: ^1.0.3 + cipher-base: ^1.0.0 + create-hash: ^1.1.0 + evp_bytestokey: ^1.0.3 + inherits: ^2.0.1 + safe-buffer: ^5.0.1 + checksum: 4a17c3eb55a2aa61c934c286f34921933086bf6d67f02d4adb09fcc6f2fc93977b47d9d884c25619144fccd47b3b3a399e1ad8b3ff5a346be47270114bcf7104 + languageName: node + linkType: hard + +"browserify-cipher@npm:^1.0.0, browserify-cipher@npm:^1.0.1": + version: 1.0.1 + resolution: "browserify-cipher@npm:1.0.1" + dependencies: + browserify-aes: ^1.0.4 + browserify-des: ^1.0.0 + evp_bytestokey: ^1.0.0 + checksum: 2d8500acf1ee535e6bebe808f7a20e4c3a9e2ed1a6885fff1facbfd201ac013ef030422bec65ca9ece8ffe82b03ca580421463f9c45af6c8415fd629f4118c13 + languageName: node + linkType: hard + +"browserify-des@npm:^1.0.0": + version: 1.0.2 + resolution: "browserify-des@npm:1.0.2" + dependencies: + cipher-base: ^1.0.1 + des.js: ^1.0.0 + inherits: ^2.0.1 + safe-buffer: ^5.1.2 + checksum: b15a3e358a1d78a3b62ddc06c845d02afde6fc826dab23f1b9c016e643e7b1fda41de628d2110b712f6a44fb10cbc1800bc6872a03ddd363fb50768e010395b7 + languageName: node + linkType: hard + +"browserify-rsa@npm:^4.0.0, browserify-rsa@npm:^4.1.0": + version: 4.1.0 + resolution: "browserify-rsa@npm:4.1.0" + dependencies: + bn.js: ^5.0.0 + randombytes: ^2.0.1 + checksum: 155f0c135873efc85620571a33d884aa8810e40176125ad424ec9d85016ff105a07f6231650914a760cca66f29af0494087947b7be34880dd4599a0cd3c38e54 + languageName: node + linkType: hard + +"browserify-sign@npm:^4.0.0": + version: 4.2.3 + resolution: "browserify-sign@npm:4.2.3" + dependencies: + bn.js: ^5.2.1 + browserify-rsa: ^4.1.0 + create-hash: ^1.2.0 + create-hmac: ^1.1.7 + elliptic: ^6.5.5 + hash-base: ~3.0 + inherits: ^2.0.4 + parse-asn1: ^5.1.7 + readable-stream: ^2.3.8 + safe-buffer: ^5.2.1 + checksum: 403a8061d229ae31266670345b4a7c00051266761d2c9bbeb68b1a9bcb05f68143b16110cf23a171a5d6716396a1f41296282b3e73eeec0a1871c77f0ff4ee6b + languageName: node + linkType: hard + +"browserslist@npm:^4.21.10, browserslist@npm:^4.22.2": + version: 4.23.0 + resolution: "browserslist@npm:4.23.0" + dependencies: + caniuse-lite: ^1.0.30001587 + electron-to-chromium: ^1.4.668 + node-releases: ^2.0.14 + update-browserslist-db: ^1.0.13 + bin: + browserslist: cli.js + checksum: 436f49e796782ca751ebab7edc010cfc9c29f68536f387666cd70ea22f7105563f04dd62c6ff89cb24cc3254d17cba385f979eeeb3484d43e012412ff7e75def + languageName: node + linkType: hard + +"bs-logger@npm:0.x": + version: 0.2.6 + resolution: "bs-logger@npm:0.2.6" + dependencies: + fast-json-stable-stringify: 2.x + checksum: d34bdaf68c64bd099ab97c3ea608c9ae7d3f5faa1178b3f3f345acd94e852e608b2d4f9103fb2e503f5e69780e98293df41691b84be909b41cf5045374d54606 + languageName: node + linkType: hard + +"bser@npm:2.1.1": + version: 2.1.1 + resolution: "bser@npm:2.1.1" + dependencies: + node-int64: ^0.4.0 + checksum: 9ba4dc58ce86300c862bffc3ae91f00b2a03b01ee07f3564beeeaf82aa243b8b03ba53f123b0b842c190d4399b94697970c8e7cf7b1ea44b61aa28c3526a4449 + languageName: node + linkType: hard + +"buffer-crc32@npm:~0.2.3": + version: 0.2.13 + resolution: "buffer-crc32@npm:0.2.13" + checksum: 06252347ae6daca3453b94e4b2f1d3754a3b146a111d81c68924c22d91889a40623264e95e67955b1cb4a68cbedf317abeabb5140a9766ed248973096db5ce1c + languageName: node + linkType: hard + +"buffer-from@npm:^1.0.0": + version: 1.1.2 + resolution: "buffer-from@npm:1.1.2" + checksum: 0448524a562b37d4d7ed9efd91685a5b77a50672c556ea254ac9a6d30e3403a517d8981f10e565db24e8339413b43c97ca2951f10e399c6125a0d8911f5679bb + languageName: node + linkType: hard + +"buffer-xor@npm:^1.0.3": + version: 1.0.3 + resolution: "buffer-xor@npm:1.0.3" + checksum: 10c520df29d62fa6e785e2800e586a20fc4f6dfad84bcdbd12e1e8a83856de1cb75c7ebd7abe6d036bbfab738a6cf18a3ae9c8e5a2e2eb3167ca7399ce65373a + languageName: node + linkType: hard + +"buffer@npm:6.0.3, buffer@npm:^6.0.3": + version: 6.0.3 + resolution: "buffer@npm:6.0.3" + dependencies: + base64-js: ^1.3.1 + ieee754: ^1.2.1 + checksum: 5ad23293d9a731e4318e420025800b42bf0d264004c0286c8cc010af7a270c7a0f6522e84f54b9ad65cbd6db20b8badbfd8d2ebf4f80fa03dab093b89e68c3f9 + languageName: node + linkType: hard + +"buffer@npm:^5.2.1, buffer@npm:^5.5.0": + version: 5.7.1 + resolution: "buffer@npm:5.7.1" + dependencies: + base64-js: ^1.3.1 + ieee754: ^1.1.13 + checksum: e2cf8429e1c4c7b8cbd30834ac09bd61da46ce35f5c22a78e6c2f04497d6d25541b16881e30a019c6fd3154150650ccee27a308eff3e26229d788bbdeb08ab84 + languageName: node + linkType: hard + +"bufio@npm:~1.0.7": + version: 1.0.7 + resolution: "bufio@npm:1.0.7" + checksum: 4871b8060a8d3bc04de8722f5cc5575b77f4cb18af389eab62d51bf42b08f43fe75159126ef11f15fe4045dc8c20e0e344406ca8388cb1371e558b986e971a57 + languageName: node + linkType: hard + +"bytes@npm:3.1.2, bytes@npm:^3.1.2": + version: 3.1.2 + resolution: "bytes@npm:3.1.2" + checksum: e4bcd3948d289c5127591fbedf10c0b639ccbf00243504e4e127374a15c3bc8eed0d28d4aaab08ff6f1cf2abc0cce6ba3085ed32f4f90e82a5683ce0014e1b6e + languageName: node + linkType: hard + +"cacache@npm:^18.0.0": + version: 18.0.3 + resolution: "cacache@npm:18.0.3" + dependencies: + "@npmcli/fs": ^3.1.0 + fs-minipass: ^3.0.0 + glob: ^10.2.2 + lru-cache: ^10.0.1 + minipass: ^7.0.3 + minipass-collect: ^2.0.1 + minipass-flush: ^1.0.5 + minipass-pipeline: ^1.2.4 + p-map: ^4.0.0 + ssri: ^10.0.0 + tar: ^6.1.11 + unique-filename: ^3.0.0 + checksum: b717fd9b36e9c3279bfde4545c3a8f6d5a539b084ee26a9504d48f83694beb724057d26e090b97540f9cc62bea18b9f6cf671c50e18fb7dac60eda9db691714f + languageName: node + linkType: hard + +"cache-content-type@npm:^1.0.0": + version: 1.0.1 + resolution: "cache-content-type@npm:1.0.1" + dependencies: + mime-types: ^2.1.18 + ylru: ^1.2.0 + checksum: 18db4d59452669ccbfd7146a1510a37eb28e9eccf18ca7a4eb603dff2edc5cccdca7498fc3042a2978f76f11151fba486eb9eb69d9afa3fb124957870aef4fd3 + languageName: node + linkType: hard + +"call-bind@npm:^1.0.2, call-bind@npm:^1.0.5, call-bind@npm:^1.0.6, call-bind@npm:^1.0.7": + version: 1.0.7 + resolution: "call-bind@npm:1.0.7" + dependencies: + es-define-property: ^1.0.0 + es-errors: ^1.3.0 + function-bind: ^1.1.2 + get-intrinsic: ^1.2.4 + set-function-length: ^1.2.1 + checksum: 295c0c62b90dd6522e6db3b0ab1ce26bdf9e7404215bda13cfee25b626b5ff1a7761324d58d38b1ef1607fc65aca2d06e44d2e18d0dfc6c14b465b00d8660029 + languageName: node + linkType: hard + +"callsites@npm:^3.0.0": + version: 3.1.0 + resolution: "callsites@npm:3.1.0" + checksum: 072d17b6abb459c2ba96598918b55868af677154bec7e73d222ef95a8fdb9bbf7dae96a8421085cdad8cd190d86653b5b6dc55a4484f2e5b2e27d5e0c3fc15b3 + languageName: node + linkType: hard + +"camelcase-keys@npm:^6.2.2": + version: 6.2.2 + resolution: "camelcase-keys@npm:6.2.2" + dependencies: + camelcase: ^5.3.1 + map-obj: ^4.0.0 + quick-lru: ^4.0.1 + checksum: 43c9af1adf840471e54c68ab3e5fe8a62719a6b7dbf4e2e86886b7b0ff96112c945736342b837bd2529ec9d1c7d1934e5653318478d98e0cf22c475c04658e2a + languageName: node + linkType: hard + +"camelcase@npm:^5.0.0, camelcase@npm:^5.3.1": + version: 5.3.1 + resolution: "camelcase@npm:5.3.1" + checksum: e6effce26b9404e3c0f301498184f243811c30dfe6d0b9051863bd8e4034d09c8c2923794f280d6827e5aa055f6c434115ff97864a16a963366fb35fd673024b + languageName: node + linkType: hard + +"camelcase@npm:^6.2.0": + version: 6.3.0 + resolution: "camelcase@npm:6.3.0" + checksum: 8c96818a9076434998511251dcb2761a94817ea17dbdc37f47ac080bd088fc62c7369429a19e2178b993497132c8cbcf5cc1f44ba963e76782ba469c0474938d + languageName: node + linkType: hard + +"caniuse-lite@npm:^1.0.30001587": + version: 1.0.30001617 + resolution: "caniuse-lite@npm:1.0.30001617" + checksum: a03bfd6ed474d14378f1b93bf90e9b0031e56a813cf42b364e5a86881ecdcdfdd58bf94c56febb0e4128c5ab57cc0a760ab7f3ef7ce0c1ead1af78a8e806375e + languageName: node + linkType: hard + +"catering@npm:^2.0.0, catering@npm:^2.1.0": + version: 2.1.1 + resolution: "catering@npm:2.1.1" + checksum: 205daefa69c935b0c19f3d8f2e0a520dd69aebe9bda55902958003f7c9cff8f967dfb90071b421bd6eb618576f657a89d2bc0986872c9bc04bbd66655e9d4bd6 + languageName: node + linkType: hard + +"chalk@npm:^2.4.2": + version: 2.4.2 + resolution: "chalk@npm:2.4.2" + dependencies: + ansi-styles: ^3.2.1 + escape-string-regexp: ^1.0.5 + supports-color: ^5.3.0 + checksum: ec3661d38fe77f681200f878edbd9448821924e0f93a9cefc0e26a33b145f1027a2084bf19967160d11e1f03bfe4eaffcabf5493b89098b2782c3fe0b03d80c2 + languageName: node + linkType: hard + +"chalk@npm:^4.0.0, chalk@npm:^4.1.0, chalk@npm:^4.1.1, chalk@npm:^4.1.2": + version: 4.1.2 + resolution: "chalk@npm:4.1.2" + dependencies: + ansi-styles: ^4.1.0 + supports-color: ^7.1.0 + checksum: fe75c9d5c76a7a98d45495b91b2172fa3b7a09e0cc9370e5c8feb1c567b85c4288e2b3fded7cfdd7359ac28d6b3844feb8b82b8686842e93d23c827c417e83fc + languageName: node + linkType: hard + +"change-case@npm:^5.4.4": + version: 5.4.4 + resolution: "change-case@npm:5.4.4" + checksum: a22a25a763719658424ffbcd41e931d2d19cc22399cc765dca447fbe1eaf13e179d5e8ab1677af75f2e814dbddf74e42ffdecb526cd5bc906cc859f62aa154b2 + languageName: node + linkType: hard + +"char-regex@npm:^1.0.2": + version: 1.0.2 + resolution: "char-regex@npm:1.0.2" + checksum: b563e4b6039b15213114626621e7a3d12f31008bdce20f9c741d69987f62aeaace7ec30f6018890ad77b2e9b4d95324c9f5acfca58a9441e3b1dcdd1e2525d17 + languageName: node + linkType: hard + +"chownr@npm:^2.0.0": + version: 2.0.0 + resolution: "chownr@npm:2.0.0" + checksum: c57cf9dd0791e2f18a5ee9c1a299ae6e801ff58fee96dc8bfd0dcb4738a6ce58dd252a3605b1c93c6418fe4f9d5093b28ffbf4d66648cb2a9c67eaef9679be2f + languageName: node + linkType: hard + +"chrome-trace-event@npm:^1.0.2": + version: 1.0.3 + resolution: "chrome-trace-event@npm:1.0.3" + checksum: cb8b1fc7e881aaef973bd0c4a43cd353c2ad8323fb471a041e64f7c2dd849cde4aad15f8b753331a32dda45c973f032c8a03b8177fc85d60eaa75e91e08bfb97 + languageName: node + linkType: hard + +"chromium-bidi@npm:0.5.19": + version: 0.5.19 + resolution: "chromium-bidi@npm:0.5.19" + dependencies: + mitt: 3.0.1 + urlpattern-polyfill: 10.0.0 + zod: 3.22.4 + peerDependencies: + devtools-protocol: "*" + checksum: aec876416dc856150c2fe4af1eb0328497c6859af8f9e5be0e0275435d7c0996654bfff68ea1fcd6125bf605957f16ad431c1961f47897542f0cb927ceb93e31 + languageName: node + linkType: hard + +"ci-info@npm:^3.2.0": + version: 3.9.0 + resolution: "ci-info@npm:3.9.0" + checksum: 6b19dc9b2966d1f8c2041a838217299718f15d6c4b63ae36e4674edd2bee48f780e94761286a56aa59eb305a85fbea4ddffb7630ec063e7ec7e7e5ad42549a87 + languageName: node + linkType: hard + +"cipher-base@npm:^1.0.0, cipher-base@npm:^1.0.1, cipher-base@npm:^1.0.3": + version: 1.0.4 + resolution: "cipher-base@npm:1.0.4" + dependencies: + inherits: ^2.0.1 + safe-buffer: ^5.0.1 + checksum: 47d3568dbc17431a339bad1fe7dff83ac0891be8206911ace3d3b818fc695f376df809bea406e759cdea07fff4b454fa25f1013e648851bec790c1d75763032e + languageName: node + linkType: hard + +"cjs-module-lexer@npm:^1.0.0": + version: 1.3.1 + resolution: "cjs-module-lexer@npm:1.3.1" + checksum: 75f20ac264a397ea5c63f9c2343a51ab878043666468f275e94862f7180ec1d764a400ec0c09085dcf0db3193c74a8b571519abd2bf4be0d2be510d1377c8d4b + languageName: node + linkType: hard + +"clean-stack@npm:^2.0.0": + version: 2.2.0 + resolution: "clean-stack@npm:2.2.0" + checksum: 2ac8cd2b2f5ec986a3c743935ec85b07bc174d5421a5efc8017e1f146a1cf5f781ae962618f416352103b32c9cd7e203276e8c28241bbe946160cab16149fb68 + languageName: node + linkType: hard + +"cli-cursor@npm:^3.1.0": + version: 3.1.0 + resolution: "cli-cursor@npm:3.1.0" + dependencies: + restore-cursor: ^3.1.0 + checksum: 2692784c6cd2fd85cfdbd11f53aea73a463a6d64a77c3e098b2b4697a20443f430c220629e1ca3b195ea5ac4a97a74c2ee411f3807abf6df2b66211fec0c0a29 + languageName: node + linkType: hard + +"cli-spinners@npm:^2.5.0": + version: 2.9.2 + resolution: "cli-spinners@npm:2.9.2" + checksum: 1bd588289b28432e4676cb5d40505cfe3e53f2e4e10fbe05c8a710a154d6fe0ce7836844b00d6858f740f2ffe67cdc36e0fce9c7b6a8430e80e6388d5aa4956c + languageName: node + linkType: hard + +"cliui@npm:^8.0.1": + version: 8.0.1 + resolution: "cliui@npm:8.0.1" + dependencies: + string-width: ^4.2.0 + strip-ansi: ^6.0.1 + wrap-ansi: ^7.0.0 + checksum: 79648b3b0045f2e285b76fb2e24e207c6db44323581e421c3acbd0e86454cba1b37aea976ab50195a49e7384b871e6dfb2247ad7dec53c02454ac6497394cb56 + languageName: node + linkType: hard + +"clone-deep@npm:^4.0.1": + version: 4.0.1 + resolution: "clone-deep@npm:4.0.1" + dependencies: + is-plain-object: ^2.0.4 + kind-of: ^6.0.2 + shallow-clone: ^3.0.0 + checksum: 770f912fe4e6f21873c8e8fbb1e99134db3b93da32df271d00589ea4a29dbe83a9808a322c93f3bcaf8584b8b4fa6fc269fc8032efbaa6728e0c9886c74467d2 + languageName: node + linkType: hard + +"clone@npm:^1.0.2": + version: 1.0.4 + resolution: "clone@npm:1.0.4" + checksum: d06418b7335897209e77bdd430d04f882189582e67bd1f75a04565f3f07f5b3f119a9d670c943b6697d0afb100f03b866b3b8a1f91d4d02d72c4ecf2bb64b5dd + languageName: node + linkType: hard + +"co-body@npm:^6.0.0": + version: 6.1.0 + resolution: "co-body@npm:6.1.0" + dependencies: + inflation: ^2.0.0 + qs: ^6.5.2 + raw-body: ^2.3.3 + type-is: ^1.6.16 + checksum: d0a78831a6651f2085fce16b0ecdc49f45fb5baf4f94148c2f499e7ec89d188205362548b9c500eae15a819360cfda208079e68a72c204cf66ca3ffa2fc0f57e + languageName: node + linkType: hard + +"co@npm:^4.6.0": + version: 4.6.0 + resolution: "co@npm:4.6.0" + checksum: 5210d9223010eb95b29df06a91116f2cf7c8e0748a9013ed853b53f362ea0e822f1e5bb054fb3cefc645239a4cf966af1f6133a3b43f40d591f3b68ed6cf0510 + languageName: node + linkType: hard + +"collect-v8-coverage@npm:^1.0.0": + version: 1.0.2 + resolution: "collect-v8-coverage@npm:1.0.2" + checksum: c10f41c39ab84629d16f9f6137bc8a63d332244383fc368caf2d2052b5e04c20cd1fd70f66fcf4e2422b84c8226598b776d39d5f2d2a51867cc1ed5d1982b4da + languageName: node + linkType: hard + +"color-convert@npm:^1.9.0, color-convert@npm:^1.9.3": + version: 1.9.3 + resolution: "color-convert@npm:1.9.3" + dependencies: + color-name: 1.1.3 + checksum: fd7a64a17cde98fb923b1dd05c5f2e6f7aefda1b60d67e8d449f9328b4e53b228a428fd38bfeaeb2db2ff6b6503a776a996150b80cdf224062af08a5c8a3a203 + languageName: node + linkType: hard + +"color-convert@npm:^2.0.1": + version: 2.0.1 + resolution: "color-convert@npm:2.0.1" + dependencies: + color-name: ~1.1.4 + checksum: 79e6bdb9fd479a205c71d89574fccfb22bd9053bd98c6c4d870d65c132e5e904e6034978e55b43d69fcaa7433af2016ee203ce76eeba9cfa554b373e7f7db336 + languageName: node + linkType: hard + +"color-name@npm:1.1.3": + version: 1.1.3 + resolution: "color-name@npm:1.1.3" + checksum: 09c5d3e33d2105850153b14466501f2bfb30324a2f76568a408763a3b7433b0e50e5b4ab1947868e65cb101bb7cb75029553f2c333b6d4b8138a73fcc133d69d + languageName: node + linkType: hard + +"color-name@npm:^1.0.0, color-name@npm:^1.1.4, color-name@npm:~1.1.4": + version: 1.1.4 + resolution: "color-name@npm:1.1.4" + checksum: b0445859521eb4021cd0fb0cc1a75cecf67fceecae89b63f62b201cca8d345baf8b952c966862a9d9a2632987d4f6581f0ec8d957dfacece86f0a7919316f610 + languageName: node + linkType: hard + +"color-string@npm:^1.6.0": + version: 1.9.1 + resolution: "color-string@npm:1.9.1" + dependencies: + color-name: ^1.0.0 + simple-swizzle: ^0.2.2 + checksum: c13fe7cff7885f603f49105827d621ce87f4571d78ba28ef4a3f1a104304748f620615e6bf065ecd2145d0d9dad83a3553f52bb25ede7239d18e9f81622f1cc5 + languageName: node + linkType: hard + +"color@npm:^3.1.3": + version: 3.2.1 + resolution: "color@npm:3.2.1" + dependencies: + color-convert: ^1.9.3 + color-string: ^1.6.0 + checksum: f81220e8b774d35865c2561be921f5652117638dcda7ca4029262046e37fc2444ac7bbfdd110cf1fd9c074a4ee5eda8f85944ffbdda26186b602dd9bb05f6400 + languageName: node + linkType: hard + +"colorette@npm:^2.0.14": + version: 2.0.20 + resolution: "colorette@npm:2.0.20" + checksum: 0c016fea2b91b733eb9f4bcdb580018f52c0bc0979443dad930e5037a968237ac53d9beb98e218d2e9235834f8eebce7f8e080422d6194e957454255bde71d3d + languageName: node + linkType: hard + +"colorspace@npm:1.1.x": + version: 1.1.4 + resolution: "colorspace@npm:1.1.4" + dependencies: + color: ^3.1.3 + text-hex: 1.0.x + checksum: bb3934ef3c417e961e6d03d7ca60ea6e175947029bfadfcdb65109b01881a1c0ecf9c2b0b59abcd0ee4a0d7c1eae93beed01b0e65848936472270a0b341ebce8 + languageName: node + linkType: hard + +"combined-stream@npm:^1.0.8": + version: 1.0.8 + resolution: "combined-stream@npm:1.0.8" + dependencies: + delayed-stream: ~1.0.0 + checksum: 49fa4aeb4916567e33ea81d088f6584749fc90c7abec76fd516bf1c5aa5c79f3584b5ba3de6b86d26ddd64bae5329c4c7479343250cfe71c75bb366eae53bb7c + languageName: node + linkType: hard + +"comlink@npm:^4.4.1": + version: 4.4.1 + resolution: "comlink@npm:4.4.1" + checksum: 16d58a8f590087fc45432e31d6c138308dfd4b75b89aec0b7f7bb97ad33d810381bd2b1e608a1fb2cf05979af9cbfcdcaf1715996d5fcf77aeb013b6da3260af + languageName: node + linkType: hard + +"command-exists@npm:^1.2.8": + version: 1.2.9 + resolution: "command-exists@npm:1.2.9" + checksum: 729ae3d88a2058c93c58840f30341b7f82688a573019535d198b57a4d8cb0135ced0ad7f52b591e5b28a90feb2c675080ce916e56254a0f7c15cb2395277cac3 + languageName: node + linkType: hard + +"command-line-args@npm:^5.1.1": + version: 5.2.1 + resolution: "command-line-args@npm:5.2.1" + dependencies: + array-back: ^3.1.0 + find-replace: ^3.0.0 + lodash.camelcase: ^4.3.0 + typical: ^4.0.0 + checksum: e759519087be3cf2e86af8b9a97d3058b4910cd11ee852495be881a067b72891f6a32718fb685ee6d41531ab76b2b7bfb6602f79f882cd4b7587ff1e827982c7 + languageName: node + linkType: hard + +"command-line-usage@npm:^6.1.0": + version: 6.1.3 + resolution: "command-line-usage@npm:6.1.3" + dependencies: + array-back: ^4.0.2 + chalk: ^2.4.2 + table-layout: ^1.0.2 + typical: ^5.2.0 + checksum: 8261d4e5536eb0bcddee0ec5e89c05bb2abd18e5760785c8078ede5020bc1c612cbe28eb6586f5ed4a3660689748e5aaad4a72f21566f4ef39393694e2fa1a0b + languageName: node + linkType: hard + +"commander@npm:^10.0.1": + version: 10.0.1 + resolution: "commander@npm:10.0.1" + checksum: 436901d64a818295803c1996cd856621a74f30b9f9e28a588e726b2b1670665bccd7c1a77007ebf328729f0139838a88a19265858a0fa7a8728c4656796db948 + languageName: node + linkType: hard + +"commander@npm:^11.1.0": + version: 11.1.0 + resolution: "commander@npm:11.1.0" + checksum: fd1a8557c6b5b622c89ecdfde703242ab7db3b628ea5d1755784c79b8e7cb0d74d65b4a262289b533359cd58e1bfc0bf50245dfbcd2954682a6f367c828b79ef + languageName: node + linkType: hard + +"commander@npm:^2.16.0, commander@npm:^2.20.0, commander@npm:^2.20.3, commander@npm:^2.8.1": + version: 2.20.3 + resolution: "commander@npm:2.20.3" + checksum: ab8c07884e42c3a8dbc5dd9592c606176c7eb5c1ca5ff274bcf907039b2c41de3626f684ea75ccf4d361ba004bbaff1f577d5384c155f3871e456bdf27becf9e + languageName: node + linkType: hard + +"commander@npm:^7.2.0": + version: 7.2.0 + resolution: "commander@npm:7.2.0" + checksum: 53501cbeee61d5157546c0bef0fedb6cdfc763a882136284bed9a07225f09a14b82d2a84e7637edfd1a679fb35ed9502fd58ef1d091e6287f60d790147f68ddc + languageName: node + linkType: hard + +"commander@npm:^8.1.0": + version: 8.3.0 + resolution: "commander@npm:8.3.0" + checksum: 0f82321821fc27b83bd409510bb9deeebcfa799ff0bf5d102128b500b7af22872c0c92cb6a0ebc5a4cf19c6b550fba9cedfa7329d18c6442a625f851377bacf0 + languageName: node + linkType: hard + +"commander@npm:^9.0.0, commander@npm:^9.5.0": + version: 9.5.0 + resolution: "commander@npm:9.5.0" + checksum: c7a3e27aa59e913b54a1bafd366b88650bc41d6651f0cbe258d4ff09d43d6a7394232a4dadd0bf518b3e696fdf595db1028a0d82c785b88bd61f8a440cecfade + languageName: node + linkType: hard + +"comment-json@npm:^3.0.3": + version: 3.0.3 + resolution: "comment-json@npm:3.0.3" + dependencies: + core-util-is: ^1.0.2 + esprima: ^4.0.1 + has-own-prop: ^2.0.0 + repeat-string: ^1.6.1 + checksum: c8e92e820b73e7bd83890e38680617b21028eca9a7e83a2af72750eae8c7e2570dd40e5848148b1e1d34d58ce62a0cb4e2b5836df0f8daa1d6bceca8666936cd + languageName: node + linkType: hard + +"comment-parser@npm:1.3.1": + version: 1.3.1 + resolution: "comment-parser@npm:1.3.1" + checksum: 421e6a113a3afd548500e7174ab46a2049dccf92e82bbaa3b209031b1bdf97552aabfa1ae2a120c0b62df17e1ba70e0d8b05d68504fee78e1ef974c59bcfe718 + languageName: node + linkType: hard + +"commondir@npm:^1.0.1": + version: 1.0.1 + resolution: "commondir@npm:1.0.1" + checksum: 59715f2fc456a73f68826285718503340b9f0dd89bfffc42749906c5cf3d4277ef11ef1cca0350d0e79204f00f1f6d83851ececc9095dc88512a697ac0b9bdcb + languageName: node + linkType: hard + +"component-emitter@npm:^1.3.0": + version: 1.3.1 + resolution: "component-emitter@npm:1.3.1" + checksum: 94550aa462c7bd5a61c1bc480e28554aa306066930152d1b1844a0dd3845d4e5db7e261ddec62ae184913b3e59b55a2ad84093b9d3596a8f17c341514d6c483d + languageName: node + linkType: hard + +"compressible@npm:^2.0.18": + version: 2.0.18 + resolution: "compressible@npm:2.0.18" + dependencies: + mime-db: ">= 1.43.0 < 2" + checksum: 58321a85b375d39230405654721353f709d0c1442129e9a17081771b816302a012471a9b8f4864c7dbe02eef7f2aaac3c614795197092262e94b409c9be108f0 + languageName: node + linkType: hard + +"concat-map@npm:0.0.1": + version: 0.0.1 + resolution: "concat-map@npm:0.0.1" + checksum: 902a9f5d8967a3e2faf138d5cb784b9979bad2e6db5357c5b21c568df4ebe62bcb15108af1b2253744844eb964fc023fbd9afbbbb6ddd0bcc204c6fb5b7bf3af + languageName: node + linkType: hard + +"concurrently@npm:^7.6.0": + version: 7.6.0 + resolution: "concurrently@npm:7.6.0" + dependencies: + chalk: ^4.1.0 + date-fns: ^2.29.1 + lodash: ^4.17.21 + rxjs: ^7.0.0 + shell-quote: ^1.7.3 + spawn-command: ^0.0.2-1 + supports-color: ^8.1.0 + tree-kill: ^1.2.2 + yargs: ^17.3.1 + bin: + conc: dist/bin/concurrently.js + concurrently: dist/bin/concurrently.js + checksum: f705c9a7960f1b16559ca64958043faeeef6385c0bf30a03d1375e15ab2d96dba4f8166f1bbbb1c85e8da35ca0ce3c353875d71dff2aa132b2357bb533b3332e + languageName: node + linkType: hard + +"concurrently@npm:^8.0.1": + version: 8.2.2 + resolution: "concurrently@npm:8.2.2" + dependencies: + chalk: ^4.1.2 + date-fns: ^2.30.0 + lodash: ^4.17.21 + rxjs: ^7.8.1 + shell-quote: ^1.8.1 + spawn-command: 0.0.2 + supports-color: ^8.1.1 + tree-kill: ^1.2.2 + yargs: ^17.7.2 + bin: + conc: dist/bin/concurrently.js + concurrently: dist/bin/concurrently.js + checksum: 8ac774df06869773438f1bf91025180c52d5b53139bc86cf47659136c0d97461d0579c515d848d1e945d4e3e0cafe646b2ea18af8d74259b46abddcfe39b2c6c + languageName: node + linkType: hard + +"content-disposition@npm:~0.5.2": + version: 0.5.4 + resolution: "content-disposition@npm:0.5.4" + dependencies: + safe-buffer: 5.2.1 + checksum: afb9d545e296a5171d7574fcad634b2fdf698875f4006a9dd04a3e1333880c5c0c98d47b560d01216fb6505a54a2ba6a843ee3a02ec86d7e911e8315255f56c3 + languageName: node + linkType: hard + +"content-type@npm:^1.0.4": + version: 1.0.5 + resolution: "content-type@npm:1.0.5" + checksum: 566271e0a251642254cde0f845f9dd4f9856e52d988f4eb0d0dcffbb7a1f8ec98de7a5215fc628f3bce30fe2fb6fd2bc064b562d721658c59b544e2d34ea2766 + languageName: node + linkType: hard + +"convert-hex@npm:~0.1.0": + version: 0.1.0 + resolution: "convert-hex@npm:0.1.0" + checksum: eacb880dbc45a36a0e6b5f5674f7e57bdce59bbf5a3ebfba980f694e2be81f1b2c81c9c89834f8054f23cc9c21d1fd210265e2000287a1cd0426657797b2f462 + languageName: node + linkType: hard + +"convert-source-map@npm:^2.0.0": + version: 2.0.0 + resolution: "convert-source-map@npm:2.0.0" + checksum: 63ae9933be5a2b8d4509daca5124e20c14d023c820258e484e32dc324d34c2754e71297c94a05784064ad27615037ef677e3f0c00469fb55f409d2bb21261035 + languageName: node + linkType: hard + +"convert-string@npm:~0.1.0": + version: 0.1.0 + resolution: "convert-string@npm:0.1.0" + checksum: a1775cb186d2fbf175486f02e3f7cc68c75e7a0c7609bf434d2a933e801b3a0499ab57de4230919ec824351dc344055bf639a1db5e44a976787145817106d9aa + languageName: node + linkType: hard + +"cookiejar@npm:^2.1.4": + version: 2.1.4 + resolution: "cookiejar@npm:2.1.4" + checksum: c4442111963077dc0e5672359956d6556a195d31cbb35b528356ce5f184922b99ac48245ac05ed86cf993f7df157c56da10ab3efdadfed79778a0d9b1b092d5b + languageName: node + linkType: hard + +"cookies@npm:~0.9.0": + version: 0.9.1 + resolution: "cookies@npm:0.9.1" + dependencies: + depd: ~2.0.0 + keygrip: ~1.1.0 + checksum: 213e4d14847b582fbd8a003203d3621a4b9fa792a315c37954e89332d38fac5bcc34ba92ef316ad6d5fe28f0187aaa115927fbbe2080744ad1707a93b4313247 + languageName: node + linkType: hard + +"copy-to@npm:^2.0.1": + version: 2.0.1 + resolution: "copy-to@npm:2.0.1" + checksum: 05ea12875bdc96ae053a3b30148e9d992026035ff2bfcc0b615e8d49d1cf8fc3d1f40843f9a4b7b1b6d9118eeebcba31e621076d7de525828aa9c07d22a81dab + languageName: node + linkType: hard + +"core-util-is@npm:^1.0.2, core-util-is@npm:~1.0.0": + version: 1.0.3 + resolution: "core-util-is@npm:1.0.3" + checksum: 9de8597363a8e9b9952491ebe18167e3b36e7707569eed0ebf14f8bba773611376466ae34575bca8cfe3c767890c859c74056084738f09d4e4a6f902b2ad7d99 + languageName: node + linkType: hard + +"cosmiconfig@npm:9.0.0": + version: 9.0.0 + resolution: "cosmiconfig@npm:9.0.0" + dependencies: + env-paths: ^2.2.1 + import-fresh: ^3.3.0 + js-yaml: ^4.1.0 + parse-json: ^5.2.0 + peerDependencies: + typescript: ">=4.9.5" + peerDependenciesMeta: + typescript: + optional: true + checksum: a30c424b53d442ea0bdd24cb1b3d0d8687c8dda4a17ab6afcdc439f8964438801619cdb66e8e79f63b9caa3e6586b60d8bab9ce203e72df6c5e80179b971fe8f + languageName: node + linkType: hard + +"create-ecdh@npm:^4.0.0": + version: 4.0.4 + resolution: "create-ecdh@npm:4.0.4" + dependencies: + bn.js: ^4.1.0 + elliptic: ^6.5.3 + checksum: 0dd7fca9711d09e152375b79acf1e3f306d1a25ba87b8ff14c2fd8e68b83aafe0a7dd6c4e540c9ffbdd227a5fa1ad9b81eca1f233c38bb47770597ba247e614b + languageName: node + linkType: hard + +"create-hash@npm:^1.1.0, create-hash@npm:^1.1.2, create-hash@npm:^1.2.0": + version: 1.2.0 + resolution: "create-hash@npm:1.2.0" + dependencies: + cipher-base: ^1.0.1 + inherits: ^2.0.1 + md5.js: ^1.3.4 + ripemd160: ^2.0.1 + sha.js: ^2.4.0 + checksum: 02a6ae3bb9cd4afee3fabd846c1d8426a0e6b495560a977ba46120c473cb283be6aa1cace76b5f927cf4e499c6146fb798253e48e83d522feba807d6b722eaa9 + languageName: node + linkType: hard + +"create-hmac@npm:^1.1.0, create-hmac@npm:^1.1.4, create-hmac@npm:^1.1.7": + version: 1.1.7 + resolution: "create-hmac@npm:1.1.7" + dependencies: + cipher-base: ^1.0.3 + create-hash: ^1.1.0 + inherits: ^2.0.1 + ripemd160: ^2.0.0 + safe-buffer: ^5.0.1 + sha.js: ^2.4.8 + checksum: ba12bb2257b585a0396108c72830e85f882ab659c3320c83584b1037f8ab72415095167ced80dc4ce8e446a8ecc4b2acf36d87befe0707d73b26cf9dc77440ed + languageName: node + linkType: hard + +"create-jest@npm:^29.7.0": + version: 29.7.0 + resolution: "create-jest@npm:29.7.0" + dependencies: + "@jest/types": ^29.6.3 + chalk: ^4.0.0 + exit: ^0.1.2 + graceful-fs: ^4.2.9 + jest-config: ^29.7.0 + jest-util: ^29.7.0 + prompts: ^2.0.1 + bin: + create-jest: bin/create-jest.js + checksum: 1427d49458adcd88547ef6fa39041e1fe9033a661293aa8d2c3aa1b4967cb5bf4f0c00436c7a61816558f28ba2ba81a94d5c962e8022ea9a883978fc8e1f2945 + languageName: node + linkType: hard + +"create-require@npm:^1.1.0": + version: 1.1.1 + resolution: "create-require@npm:1.1.1" + checksum: a9a1503d4390d8b59ad86f4607de7870b39cad43d929813599a23714831e81c520bddf61bcdd1f8e30f05fd3a2b71ae8538e946eb2786dc65c2bbc520f692eff + languageName: node + linkType: hard + +"cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.2, cross-spawn@npm:^7.0.3": + version: 7.0.3 + resolution: "cross-spawn@npm:7.0.3" + dependencies: + path-key: ^3.1.0 + shebang-command: ^2.0.0 + which: ^2.0.1 + checksum: 671cc7c7288c3a8406f3c69a3ae2fc85555c04169e9d611def9a675635472614f1c0ed0ef80955d5b6d4e724f6ced67f0ad1bb006c2ea643488fcfef994d7f52 + languageName: node + linkType: hard + +"crypto-browserify@npm:^3.12.0": + version: 3.12.0 + resolution: "crypto-browserify@npm:3.12.0" + dependencies: + browserify-cipher: ^1.0.0 + browserify-sign: ^4.0.0 + create-ecdh: ^4.0.0 + create-hash: ^1.1.0 + create-hmac: ^1.1.0 + diffie-hellman: ^5.0.0 + inherits: ^2.0.1 + pbkdf2: ^3.0.3 + public-encrypt: ^4.0.0 + randombytes: ^2.0.0 + randomfill: ^1.0.3 + checksum: c1609af82605474262f3eaa07daa0b2140026bd264ab316d4bf1170272570dbe02f0c49e29407fe0d3634f96c507c27a19a6765fb856fed854a625f9d15618e2 + languageName: node + linkType: hard + +"data-uri-to-buffer@npm:^4.0.0": + version: 4.0.1 + resolution: "data-uri-to-buffer@npm:4.0.1" + checksum: 0d0790b67ffec5302f204c2ccca4494f70b4e2d940fea3d36b09f0bb2b8539c2e86690429eb1f1dc4bcc9e4df0644193073e63d9ee48ac9fce79ec1506e4aa4c + languageName: node + linkType: hard + +"data-uri-to-buffer@npm:^6.0.2": + version: 6.0.2 + resolution: "data-uri-to-buffer@npm:6.0.2" + checksum: 8b6927c33f9b54037f442856be0aa20e5fd49fa6c9c8ceece408dc306445d593ad72d207d57037c529ce65f413b421da800c6827b1dbefb607b8056f17123a61 + languageName: node + linkType: hard + +"data-view-buffer@npm:^1.0.1": + version: 1.0.1 + resolution: "data-view-buffer@npm:1.0.1" + dependencies: + call-bind: ^1.0.6 + es-errors: ^1.3.0 + is-data-view: ^1.0.1 + checksum: ce24348f3c6231223b216da92e7e6a57a12b4af81a23f27eff8feabdf06acfb16c00639c8b705ca4d167f761cfc756e27e5f065d0a1f840c10b907fdaf8b988c + languageName: node + linkType: hard + +"data-view-byte-length@npm:^1.0.1": + version: 1.0.1 + resolution: "data-view-byte-length@npm:1.0.1" + dependencies: + call-bind: ^1.0.7 + es-errors: ^1.3.0 + is-data-view: ^1.0.1 + checksum: dbb3200edcb7c1ef0d68979834f81d64fd8cab2f7691b3a4c6b97e67f22182f3ec2c8602efd7b76997b55af6ff8bce485829c1feda4fa2165a6b71fb7baa4269 + languageName: node + linkType: hard + +"data-view-byte-offset@npm:^1.0.0": + version: 1.0.0 + resolution: "data-view-byte-offset@npm:1.0.0" + dependencies: + call-bind: ^1.0.6 + es-errors: ^1.3.0 + is-data-view: ^1.0.1 + checksum: 7f0bf8720b7414ca719eedf1846aeec392f2054d7af707c5dc9a753cc77eb8625f067fa901e0b5127e831f9da9056138d894b9c2be79c27a21f6db5824f009c2 + languageName: node + linkType: hard + +"datastore-core@npm:^9.0.1, datastore-core@npm:^9.2.9": + version: 9.2.9 + resolution: "datastore-core@npm:9.2.9" + dependencies: + "@libp2p/logger": ^4.0.6 + err-code: ^3.0.1 + interface-datastore: ^8.0.0 + interface-store: ^5.0.0 + it-drain: ^3.0.5 + it-filter: ^3.0.4 + it-map: ^3.0.5 + it-merge: ^3.0.3 + it-pipe: ^3.0.1 + it-pushable: ^3.2.3 + it-sort: ^3.0.4 + it-take: ^3.0.4 + checksum: 82311198971b0603c7ca5a3275a2ef7df82981d29fd0c120d190c7902d3b08afa5497cbe80551a363a9d6b9b1a1f587147df600a5c217765e50d9f1b0d9db338 + languageName: node + linkType: hard + +"date-fns@npm:^2.29.1, date-fns@npm:^2.30.0": + version: 2.30.0 + resolution: "date-fns@npm:2.30.0" + dependencies: + "@babel/runtime": ^7.21.0 + checksum: f7be01523282e9bb06c0cd2693d34f245247a29098527d4420628966a2d9aad154bd0e90a6b1cf66d37adcb769cd108cf8a7bd49d76db0fb119af5cdd13644f4 + languageName: node + linkType: hard + +"debug@npm:4, debug@npm:4.3.4, debug@npm:^4.0.0, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.3, debug@npm:^4.3.4": + version: 4.3.4 + resolution: "debug@npm:4.3.4" + dependencies: + ms: 2.1.2 + peerDependenciesMeta: + supports-color: + optional: true + checksum: 3dbad3f94ea64f34431a9cbf0bafb61853eda57bff2880036153438f50fb5a84f27683ba0d8e5426bf41a8c6ff03879488120cf5b3a761e77953169c0600a708 + languageName: node + linkType: hard + +"debug@npm:^3.1.0, debug@npm:^3.2.7": + version: 3.2.7 + resolution: "debug@npm:3.2.7" + dependencies: + ms: ^2.1.1 + checksum: b3d8c5940799914d30314b7c3304a43305fd0715581a919dacb8b3176d024a782062368405b47491516d2091d6462d4d11f2f4974a405048094f8bfebfa3071c + languageName: node + linkType: hard + +"decamelize-keys@npm:^1.1.0": + version: 1.1.1 + resolution: "decamelize-keys@npm:1.1.1" + dependencies: + decamelize: ^1.1.0 + map-obj: ^1.0.0 + checksum: fc645fe20b7bda2680bbf9481a3477257a7f9304b1691036092b97ab04c0ab53e3bf9fcc2d2ae382536568e402ec41fb11e1d4c3836a9abe2d813dd9ef4311e0 + languageName: node + linkType: hard + +"decamelize@npm:^1.1.0, decamelize@npm:^1.2.0": + version: 1.2.0 + resolution: "decamelize@npm:1.2.0" + checksum: ad8c51a7e7e0720c70ec2eeb1163b66da03e7616d7b98c9ef43cce2416395e84c1e9548dd94f5f6ffecfee9f8b94251fc57121a8b021f2ff2469b2bae247b8aa + languageName: node + linkType: hard + +"dedent@npm:^1.0.0": + version: 1.5.3 + resolution: "dedent@npm:1.5.3" + peerDependencies: + babel-plugin-macros: ^3.1.0 + peerDependenciesMeta: + babel-plugin-macros: + optional: true + checksum: 045b595557b2a8ea2eb9b0b4623d764e9a87326486fe2b61191b4342ed93dc01245644d8a09f3108a50c0ee7965f1eedd92e4a3a503ed89ea8e810566ea27f9a + languageName: node + linkType: hard + +"deep-equal@npm:~1.0.1": + version: 1.0.1 + resolution: "deep-equal@npm:1.0.1" + checksum: 5af8cbfcebf190491878a498caccc7dc9592f8ebd1685b976eacc3825619d222b5e929923163b92c4f414494e2b884f7ebf00c022e8198e8292deb70dd9785f4 + languageName: node + linkType: hard + +"deep-extend@npm:^0.6.0, deep-extend@npm:~0.6.0": + version: 0.6.0 + resolution: "deep-extend@npm:0.6.0" + checksum: 7be7e5a8d468d6b10e6a67c3de828f55001b6eb515d014f7aeb9066ce36bd5717161eb47d6a0f7bed8a9083935b465bc163ee2581c8b128d29bf61092fdf57a7 + languageName: node + linkType: hard + +"deep-is@npm:^0.1.3": + version: 0.1.4 + resolution: "deep-is@npm:0.1.4" + checksum: edb65dd0d7d1b9c40b2f50219aef30e116cedd6fc79290e740972c132c09106d2e80aa0bc8826673dd5a00222d4179c84b36a790eef63a4c4bca75a37ef90804 + languageName: node + linkType: hard + +"deepmerge@npm:^4.2.2": + version: 4.3.1 + resolution: "deepmerge@npm:4.3.1" + checksum: 2024c6a980a1b7128084170c4cf56b0fd58a63f2da1660dcfe977415f27b17dbe5888668b59d0b063753f3220719d5e400b7f113609489c90160bb9a5518d052 + languageName: node + linkType: hard + +"defaults@npm:^1.0.3": + version: 1.0.4 + resolution: "defaults@npm:1.0.4" + dependencies: + clone: ^1.0.2 + checksum: 3a88b7a587fc076b84e60affad8b85245c01f60f38fc1d259e7ac1d89eb9ce6abb19e27215de46b98568dd5bc48471730b327637e6f20b0f1bc85cf00440c80a + languageName: node + linkType: hard + +"deferred-leveldown@npm:^7.0.0": + version: 7.0.0 + resolution: "deferred-leveldown@npm:7.0.0" + dependencies: + abstract-leveldown: ^7.2.0 + inherits: ^2.0.3 + checksum: 1ed5eb73e381aeb36d7153bf94dd957060b0294903660c1c8123a375e2b5cd5b3865428d7490aa1561c6ea08a5559563751e59e468d5786c99c765d2a868c658 + languageName: node + linkType: hard + +"define-data-property@npm:^1.0.1, define-data-property@npm:^1.1.4": + version: 1.1.4 + resolution: "define-data-property@npm:1.1.4" + dependencies: + es-define-property: ^1.0.0 + es-errors: ^1.3.0 + gopd: ^1.0.1 + checksum: 8068ee6cab694d409ac25936eb861eea704b7763f7f342adbdfe337fc27c78d7ae0eff2364b2917b58c508d723c7a074326d068eef2e45c4edcd85cf94d0313b + languageName: node + linkType: hard + +"define-properties@npm:^1.2.0, define-properties@npm:^1.2.1": + version: 1.2.1 + resolution: "define-properties@npm:1.2.1" + dependencies: + define-data-property: ^1.0.1 + has-property-descriptors: ^1.0.0 + object-keys: ^1.1.1 + checksum: b4ccd00597dd46cb2d4a379398f5b19fca84a16f3374e2249201992f36b30f6835949a9429669ee6b41b6e837205a163eadd745e472069e70dfc10f03e5fcc12 + languageName: node + linkType: hard + +"degenerator@npm:^5.0.0": + version: 5.0.1 + resolution: "degenerator@npm:5.0.1" + dependencies: + ast-types: ^0.13.4 + escodegen: ^2.1.0 + esprima: ^4.0.1 + checksum: a64fa39cdf6c2edd75188157d32338ee9de7193d7dbb2aeb4acb1eb30fa4a15ed80ba8dae9bd4d7b085472cf174a5baf81adb761aaa8e326771392c922084152 + languageName: node + linkType: hard + +"delay@npm:^6.0.0": + version: 6.0.0 + resolution: "delay@npm:6.0.0" + checksum: e00190cf6e56e3f746af6664a9b7a837a582a70b96ce18d83b86a97300cc9f727189b9f6a7082557134223c0bd23eee88e681cab54cb4e5d8f6b2f4054e7b49a + languageName: node + linkType: hard + +"delayed-stream@npm:~1.0.0": + version: 1.0.0 + resolution: "delayed-stream@npm:1.0.0" + checksum: 46fe6e83e2cb1d85ba50bd52803c68be9bd953282fa7096f51fc29edd5d67ff84ff753c51966061e5ba7cb5e47ef6d36a91924eddb7f3f3483b1c560f77a0020 + languageName: node + linkType: hard + +"delegates@npm:^1.0.0": + version: 1.0.0 + resolution: "delegates@npm:1.0.0" + checksum: a51744d9b53c164ba9c0492471a1a2ffa0b6727451bdc89e31627fdf4adda9d51277cfcbfb20f0a6f08ccb3c436f341df3e92631a3440226d93a8971724771fd + languageName: node + linkType: hard + +"denque@npm:^2.1.0": + version: 2.1.0 + resolution: "denque@npm:2.1.0" + checksum: 1d4ae1d05e59ac3a3481e7b478293f4b4c813819342273f3d5b826c7ffa9753c520919ba264f377e09108d24ec6cf0ec0ac729a5686cbb8f32d797126c5dae74 + languageName: node + linkType: hard + +"depd@npm:2.0.0, depd@npm:^2.0.0, depd@npm:~2.0.0": + version: 2.0.0 + resolution: "depd@npm:2.0.0" + checksum: abbe19c768c97ee2eed6282d8ce3031126662252c58d711f646921c9623f9052e3e1906443066beec1095832f534e57c523b7333f8e7e0d93051ab6baef5ab3a + languageName: node + linkType: hard + +"depd@npm:~1.1.2": + version: 1.1.2 + resolution: "depd@npm:1.1.2" + checksum: 6b406620d269619852885ce15965272b829df6f409724415e0002c8632ab6a8c0a08ec1f0bd2add05dc7bd7507606f7e2cc034fa24224ab829580040b835ecd9 + languageName: node + linkType: hard + +"dependency-tree@npm:^9.0.0": + version: 9.0.0 + resolution: "dependency-tree@npm:9.0.0" + dependencies: + commander: ^2.20.3 + debug: ^4.3.1 + filing-cabinet: ^3.0.1 + precinct: ^9.0.0 + typescript: ^4.0.0 + bin: + dependency-tree: bin/cli.js + checksum: 38f95ec248f350f3ed443e0aac520c8ad979b3801262a1e67f6a5972c14f972887150d88972fb9e2630cef8c75efcd82719f93a55f9fc3207e64174ab9d3b0f3 + languageName: node + linkType: hard + +"des.js@npm:^1.0.0": + version: 1.1.0 + resolution: "des.js@npm:1.1.0" + dependencies: + inherits: ^2.0.1 + minimalistic-assert: ^1.0.0 + checksum: 0e9c1584b70d31e20f20a613fc9ef60fbc6a147dfec9e448a168794a4b97ac04d8dc47ea008f1fa93b0f8aaf7c1ead632a5e59ce1913a6079d2d244c9f5ebe33 + languageName: node + linkType: hard + +"destroy@npm:^1.0.4": + version: 1.2.0 + resolution: "destroy@npm:1.2.0" + checksum: 0acb300b7478a08b92d810ab229d5afe0d2f4399272045ab22affa0d99dbaf12637659411530a6fcd597a9bdac718fc94373a61a95b4651bbc7b83684a565e38 + languageName: node + linkType: hard + +"detect-libc@npm:^2.0.1": + version: 2.0.3 + resolution: "detect-libc@npm:2.0.3" + checksum: 2ba6a939ae55f189aea996ac67afceb650413c7a34726ee92c40fb0deb2400d57ef94631a8a3f052055eea7efb0f99a9b5e6ce923415daa3e68221f963cfc27d + languageName: node + linkType: hard + +"detect-newline@npm:^3.0.0": + version: 3.1.0 + resolution: "detect-newline@npm:3.1.0" + checksum: ae6cd429c41ad01b164c59ea36f264a2c479598e61cba7c99da24175a7ab80ddf066420f2bec9a1c57a6bead411b4655ff15ad7d281c000a89791f48cbe939e7 + languageName: node + linkType: hard + +"detect-node@npm:^2.1.0": + version: 2.1.0 + resolution: "detect-node@npm:2.1.0" + checksum: 832184ec458353e41533ac9c622f16c19f7c02d8b10c303dfd3a756f56be93e903616c0bb2d4226183c9351c15fc0b3dba41a17a2308262afabcfa3776e6ae6e + languageName: node + linkType: hard + +"detective-amd@npm:^3.1.0": + version: 3.1.2 + resolution: "detective-amd@npm:3.1.2" + dependencies: + ast-module-types: ^3.0.0 + escodegen: ^2.0.0 + get-amd-module-type: ^3.0.0 + node-source-walk: ^4.2.0 + bin: + detective-amd: bin/cli.js + checksum: 0b71555edad8e85c9a2ae85e2799d5faf2bdfe0de969587c9288ca76e717494678e34f444dffe32ffdd432e85ce50ca7017a5d0441a4855677a45a40c4590c74 + languageName: node + linkType: hard + +"detective-amd@npm:^4.0.1, detective-amd@npm:^4.1.0": + version: 4.2.0 + resolution: "detective-amd@npm:4.2.0" + dependencies: + ast-module-types: ^4.0.0 + escodegen: ^2.0.0 + get-amd-module-type: ^4.1.0 + node-source-walk: ^5.0.1 + bin: + detective-amd: bin/cli.js + checksum: c1e829a3202045796105680c9fe90ac61f63b0ccecc12cc30c7204c9e7ec22a4e2c3e2357719b9346a4e3579eba778cdce9a050e642938e2a4c8b57b091278e4 + languageName: node + linkType: hard + +"detective-cjs@npm:^3.1.1": + version: 3.1.3 + resolution: "detective-cjs@npm:3.1.3" + dependencies: + ast-module-types: ^3.0.0 + node-source-walk: ^4.0.0 + checksum: a691cb4afbbfea59d9aae0ee00752ec1a825a7ef18fc9178b53664975f162f3b537268590def009d9ce1cccfc5bc4f38cf775df08d0872aaacc05d96c72de85a + languageName: node + linkType: hard + +"detective-cjs@npm:^4.0.0, detective-cjs@npm:^4.1.0": + version: 4.1.0 + resolution: "detective-cjs@npm:4.1.0" + dependencies: + ast-module-types: ^4.0.0 + node-source-walk: ^5.0.1 + checksum: 17e40183959e9f377333a9fd03dcf4cbabf1b7a9f588882311066ecaaad68ad16765a7b63ffc096fc91d2a3c14ac044ed1823257c76105c9cb96dfc141a806e2 + languageName: node + linkType: hard + +"detective-es6@npm:^2.2.1": + version: 2.2.2 + resolution: "detective-es6@npm:2.2.2" + dependencies: + node-source-walk: ^4.0.0 + checksum: 9ee9909c089f5dcd1f89eccd347d509197996280ba24e2e08742bbc5ca3eef655ff07b4edfd76b52d6b4376ba03b8ec17d621c9f9c4382a6ba233dc1b1d00d33 + languageName: node + linkType: hard + +"detective-es6@npm:^3.0.0, detective-es6@npm:^3.0.1": + version: 3.0.1 + resolution: "detective-es6@npm:3.0.1" + dependencies: + node-source-walk: ^5.0.0 + checksum: 881a0c16b49504c212e61a521231ebbb4299a6102b178230959c74d2ca22d5f7538dfaf9518d01fb568ff93eadcf61d865d4428c9fed893dd4c91a7f29d515c5 + languageName: node + linkType: hard + +"detective-less@npm:^1.0.2": + version: 1.0.2 + resolution: "detective-less@npm:1.0.2" + dependencies: + debug: ^4.0.0 + gonzales-pe: ^4.2.3 + node-source-walk: ^4.0.0 + checksum: 858936fbad87423bd5d7502ff5fafca023e7c99e4006ed01b31c12c4b5ff8697edce91419798479d857efec68ee8f022fcac64de5530db6a64012be600a2249e + languageName: node + linkType: hard + +"detective-postcss@npm:^4.0.0": + version: 4.0.0 + resolution: "detective-postcss@npm:4.0.0" + dependencies: + debug: ^4.1.1 + is-url: ^1.2.4 + postcss: ^8.1.7 + postcss-values-parser: ^2.0.1 + checksum: e4c9fed31613df43466357fb104c4c5cdaf45a12909f7c1174161a45ebb2ebe77bb0843b3c0c117b68f55c9acb4e0578668298594c7f0108dfb73e54aaec8513 + languageName: node + linkType: hard + +"detective-postcss@npm:^6.1.0, detective-postcss@npm:^6.1.1": + version: 6.1.3 + resolution: "detective-postcss@npm:6.1.3" + dependencies: + is-url: ^1.2.4 + postcss: ^8.4.23 + postcss-values-parser: ^6.0.2 + checksum: 54c58227d5a1ec27e1b2b23bd992d823d0161d80e3d8ff6b202094e9841d53e88ac96a4d4cc9762ba4f09a9e038832b5d7c7a45b5e373c1c995c424a8289857b + languageName: node + linkType: hard + +"detective-sass@npm:^3.0.1": + version: 3.0.2 + resolution: "detective-sass@npm:3.0.2" + dependencies: + gonzales-pe: ^4.3.0 + node-source-walk: ^4.0.0 + checksum: 7489e5ae7dbed2eba89855cea21ad32321e8e92bd9f2d3b925e7feec0dd9aa8b4b865296525275938e573a3be9759715490038103cbc970570a1c48c4f2fd23d + languageName: node + linkType: hard + +"detective-sass@npm:^4.0.1, detective-sass@npm:^4.1.1": + version: 4.1.3 + resolution: "detective-sass@npm:4.1.3" + dependencies: + gonzales-pe: ^4.3.0 + node-source-walk: ^5.0.1 + checksum: 91681e90037cc935f38b2867fab2aa5585848491b3a269dfb44b37721146ff83f57a540d964b15db22dc1f232623568bedfd13470ec7363e6111991d4d3fe573 + languageName: node + linkType: hard + +"detective-scss@npm:^2.0.1": + version: 2.0.2 + resolution: "detective-scss@npm:2.0.2" + dependencies: + gonzales-pe: ^4.3.0 + node-source-walk: ^4.0.0 + checksum: 515ff1b8946ec92baead48ef435efe1ea0f33ee1d98a7537dd700f1d06dd192f9ea0971c10343adcb08b561ab296d01c18a1f62d0b63163a8f4c09885a956e1a + languageName: node + linkType: hard + +"detective-scss@npm:^3.0.0, detective-scss@npm:^3.0.1": + version: 3.1.1 + resolution: "detective-scss@npm:3.1.1" + dependencies: + gonzales-pe: ^4.3.0 + node-source-walk: ^5.0.1 + checksum: 3d9c0468216c822c25572e700b9aba1e2e2797d336b6b84fd455d83ce849263324855008d1e58d6ccdf9c7a4f099e31277b99e885407cd19674e0bb10fc458cd + languageName: node + linkType: hard + +"detective-stylus@npm:^1.0.0": + version: 1.0.3 + resolution: "detective-stylus@npm:1.0.3" + checksum: 2723da93545f3a55a2a7eaa76b50712457af3c93c2b003e95d02f4c240d5e5206a5df99209a4f5b54128c11fc4270c2de1d7316b4f7d02b359483ae74f5a6637 + languageName: node + linkType: hard + +"detective-stylus@npm:^2.0.1": + version: 2.0.1 + resolution: "detective-stylus@npm:2.0.1" + checksum: c701ba6df3e6b5346aa5dd37b8329a9069a20fd7d075933e2e3b819a75922a2adab809143591151e7337183d59c980e6bc64ad6e51ce96de864575221c1b9506 + languageName: node + linkType: hard + +"detective-stylus@npm:^3.0.0": + version: 3.0.0 + resolution: "detective-stylus@npm:3.0.0" + checksum: e82eda490406d289f7b22050423ad69eb1c0f0d88414adaa292de4ab533be3c50d4cf512a9fefba426f3ad20789f0c0db3b0d32f70162112ca89034bbc5ca9d3 + languageName: node + linkType: hard + +"detective-typescript@npm:^7.0.0": + version: 7.0.2 + resolution: "detective-typescript@npm:7.0.2" + dependencies: + "@typescript-eslint/typescript-estree": ^4.33.0 + ast-module-types: ^2.7.1 + node-source-walk: ^4.2.0 + typescript: ^3.9.10 + checksum: 77703410baa242029dc5e7d02cca7a26278dea498ec1c3320f92efa08a85263affc3b102fc2b09952ece1d2c851a3808733d7bfa9ed11944a7c0f39920e33ec9 + languageName: node + linkType: hard + +"detective-typescript@npm:^9.0.0, detective-typescript@npm:^9.1.1": + version: 9.1.1 + resolution: "detective-typescript@npm:9.1.1" + dependencies: + "@typescript-eslint/typescript-estree": ^5.55.0 + ast-module-types: ^4.0.0 + node-source-walk: ^5.0.1 + typescript: ^4.9.5 + checksum: 5f50801f622740d4e9d724ce04518ceb81591215bf18c18c5d22f6f3948df49dfb0a8bbe3596dac47220a37028bc2879ccd7a968f265217c9855817bda4622f5 + languageName: node + linkType: hard + +"devtools-protocol@npm:0.0.1273771": + version: 0.0.1273771 + resolution: "devtools-protocol@npm:0.0.1273771" + checksum: 2a88694ec0f2f167f826cea8c3d6030ede911c2db79d2a62d76d1be450bcb395e8283ca03f225fa308710ab06182dced47eed8cece56b377d1946403a321b64f + languageName: node + linkType: hard + +"dezalgo@npm:^1.0.4": + version: 1.0.4 + resolution: "dezalgo@npm:1.0.4" + dependencies: + asap: ^2.0.0 + wrappy: 1 + checksum: 895389c6aead740d2ab5da4d3466d20fa30f738010a4d3f4dcccc9fc645ca31c9d10b7e1804ae489b1eb02c7986f9f1f34ba132d409b043082a86d9a4e745624 + languageName: node + linkType: hard + +"diff-sequences@npm:^29.6.3": + version: 29.6.3 + resolution: "diff-sequences@npm:29.6.3" + checksum: f4914158e1f2276343d98ff5b31fc004e7304f5470bf0f1adb2ac6955d85a531a6458d33e87667f98f6ae52ebd3891bb47d420bb48a5bd8b7a27ee25b20e33aa + languageName: node + linkType: hard + +"diff@npm:^4.0.1": + version: 4.0.2 + resolution: "diff@npm:4.0.2" + checksum: f2c09b0ce4e6b301c221addd83bf3f454c0bc00caa3dd837cf6c127d6edf7223aa2bbe3b688feea110b7f262adbfc845b757c44c8a9f8c0c5b15d8fa9ce9d20d + languageName: node + linkType: hard + +"diffie-hellman@npm:^5.0.0": + version: 5.0.3 + resolution: "diffie-hellman@npm:5.0.3" + dependencies: + bn.js: ^4.1.0 + miller-rabin: ^4.0.0 + randombytes: ^2.0.0 + checksum: 0e620f322170c41076e70181dd1c24e23b08b47dbb92a22a644f3b89b6d3834b0f8ee19e37916164e5eb1ee26d2aa836d6129f92723995267250a0b541811065 + languageName: node + linkType: hard + +"dir-glob@npm:^3.0.1": + version: 3.0.1 + resolution: "dir-glob@npm:3.0.1" + dependencies: + path-type: ^4.0.0 + checksum: fa05e18324510d7283f55862f3161c6759a3f2f8dbce491a2fc14c8324c498286c54282c1f0e933cb930da8419b30679389499b919122952a4f8592362ef4615 + languageName: node + linkType: hard + +"dns-over-http-resolver@npm:^3.0.2": + version: 3.0.2 + resolution: "dns-over-http-resolver@npm:3.0.2" + dependencies: + debug: ^4.3.4 + receptacle: ^1.3.2 + checksum: 782739450bae3329fdbafcb3c53b497eeb0b3af3bdd8de91977a513d4fe797446597a09d6e042a2c5da99cfc0039c4acac8a7efb93aca5b3424b58f4174d4a4f + languageName: node + linkType: hard + +"dns-packet@npm:^5.6.1": + version: 5.6.1 + resolution: "dns-packet@npm:5.6.1" + dependencies: + "@leichtgewicht/ip-codec": ^2.0.1 + checksum: 64c06457f0c6e143f7a0946e0aeb8de1c5f752217cfa143ef527467c00a6d78db1835cfdb6bb68333d9f9a4963cf23f410439b5262a8935cce1236f45e344b81 + languageName: node + linkType: hard + +"doctrine@npm:^2.1.0": + version: 2.1.0 + resolution: "doctrine@npm:2.1.0" + dependencies: + esutils: ^2.0.2 + checksum: a45e277f7feaed309fe658ace1ff286c6e2002ac515af0aaf37145b8baa96e49899638c7cd47dccf84c3d32abfc113246625b3ac8f552d1046072adee13b0dc8 + languageName: node + linkType: hard + +"doctrine@npm:^3.0.0": + version: 3.0.0 + resolution: "doctrine@npm:3.0.0" + dependencies: + esutils: ^2.0.2 + checksum: fd7673ca77fe26cd5cba38d816bc72d641f500f1f9b25b83e8ce28827fe2da7ad583a8da26ab6af85f834138cf8dae9f69b0cd6ab925f52ddab1754db44d99ce + languageName: node + linkType: hard + +"dotenv@npm:^16.0.3": + version: 16.4.5 + resolution: "dotenv@npm:16.4.5" + checksum: 301a12c3d44fd49888b74eb9ccf9f07a1f5df43f489e7fcb89647a2edcd84c42d6bc349dc8df099cd18f07c35c7b04685c1a4f3e6a6a9e6b30f8d48c15b7f49c + languageName: node + linkType: hard + +"duplexer@npm:~0.1.1": + version: 0.1.2 + resolution: "duplexer@npm:0.1.2" + checksum: 62ba61a830c56801db28ff6305c7d289b6dc9f859054e8c982abd8ee0b0a14d2e9a8e7d086ffee12e868d43e2bbe8a964be55ddbd8c8957714c87373c7a4f9b0 + languageName: node + linkType: hard + +"eastasianwidth@npm:^0.2.0": + version: 0.2.0 + resolution: "eastasianwidth@npm:0.2.0" + checksum: 7d00d7cd8e49b9afa762a813faac332dee781932d6f2c848dc348939c4253f1d4564341b7af1d041853bc3f32c2ef141b58e0a4d9862c17a7f08f68df1e0f1ed + languageName: node + linkType: hard + +"ee-first@npm:1.1.1": + version: 1.1.1 + resolution: "ee-first@npm:1.1.1" + checksum: 1b4cac778d64ce3b582a7e26b218afe07e207a0f9bfe13cc7395a6d307849cfe361e65033c3251e00c27dd060cab43014c2d6b2647676135e18b77d2d05b3f4f + languageName: node + linkType: hard + +"electron-to-chromium@npm:^1.4.668": + version: 1.4.761 + resolution: "electron-to-chromium@npm:1.4.761" + checksum: c69d459966682a68e3505ca2d6a72d02612ce3fe0e27b6cf33fa5e8205307504263b930b2d8e6f38b2abb01327c2657d29b63b6bfa296d8ca19d173208115d20 + languageName: node + linkType: hard + +"elliptic@npm:^6.5.3, elliptic@npm:^6.5.4, elliptic@npm:^6.5.5": + version: 6.5.5 + resolution: "elliptic@npm:6.5.5" + dependencies: + bn.js: ^4.11.9 + brorand: ^1.1.0 + hash.js: ^1.0.0 + hmac-drbg: ^1.0.1 + inherits: ^2.0.4 + minimalistic-assert: ^1.0.1 + minimalistic-crypto-utils: ^1.0.1 + checksum: ec9105e4469eb3b32b0ee2579756c888ddf3f99d259aa0d65fccb906ee877768aaf8880caae73e3e669c9a4adeb3eb1945703aa974ec5000d2d33a239f4567eb + languageName: node + linkType: hard + +"emittery@npm:^0.13.1": + version: 0.13.1 + resolution: "emittery@npm:0.13.1" + checksum: 2b089ab6306f38feaabf4f6f02792f9ec85fc054fda79f44f6790e61bbf6bc4e1616afb9b232e0c5ec5289a8a452f79bfa6d905a6fd64e94b49981f0934001c6 + languageName: node + linkType: hard + +"emoji-regex@npm:^8.0.0": + version: 8.0.0 + resolution: "emoji-regex@npm:8.0.0" + checksum: d4c5c39d5a9868b5fa152f00cada8a936868fd3367f33f71be515ecee4c803132d11b31a6222b2571b1e5f7e13890156a94880345594d0ce7e3c9895f560f192 + languageName: node + linkType: hard + +"emoji-regex@npm:^9.2.2": + version: 9.2.2 + resolution: "emoji-regex@npm:9.2.2" + checksum: 8487182da74aabd810ac6d6f1994111dfc0e331b01271ae01ec1eb0ad7b5ecc2bbbbd2f053c05cb55a1ac30449527d819bbfbf0e3de1023db308cbcb47f86601 + languageName: node + linkType: hard + +"enabled@npm:2.0.x": + version: 2.0.0 + resolution: "enabled@npm:2.0.0" + checksum: 9d256d89f4e8a46ff988c6a79b22fa814b4ffd82826c4fdacd9b42e9b9465709d3b748866d0ab4d442dfc6002d81de7f7b384146ccd1681f6a7f868d2acca063 + languageName: node + linkType: hard + +"encodeurl@npm:^1.0.2": + version: 1.0.2 + resolution: "encodeurl@npm:1.0.2" + checksum: e50e3d508cdd9c4565ba72d2012e65038e5d71bdc9198cb125beb6237b5b1ade6c0d343998da9e170fb2eae52c1bed37d4d6d98a46ea423a0cddbed5ac3f780c + languageName: node + linkType: hard + +"encoding@npm:^0.1.13": + version: 0.1.13 + resolution: "encoding@npm:0.1.13" + dependencies: + iconv-lite: ^0.6.2 + checksum: bb98632f8ffa823996e508ce6a58ffcf5856330fde839ae42c9e1f436cc3b5cc651d4aeae72222916545428e54fd0f6aa8862fd8d25bdbcc4589f1e3f3715e7f + languageName: node + linkType: hard + +"end-of-stream@npm:^1.1.0": + version: 1.4.4 + resolution: "end-of-stream@npm:1.4.4" + dependencies: + once: ^1.4.0 + checksum: 530a5a5a1e517e962854a31693dbb5c0b2fc40b46dad2a56a2deec656ca040631124f4795823acc68238147805f8b021abbe221f4afed5ef3c8e8efc2024908b + languageName: node + linkType: hard + +"enhanced-resolve@npm:^5.0.0, enhanced-resolve@npm:^5.12.0, enhanced-resolve@npm:^5.16.0, enhanced-resolve@npm:^5.8.3": + version: 5.16.1 + resolution: "enhanced-resolve@npm:5.16.1" + dependencies: + graceful-fs: ^4.2.4 + tapable: ^2.2.0 + checksum: 6e4c166fef72ef231455f9119686d93ecccb11874f8256d73a42de5b293cb2536050849382468864b25973514ca4fa4cb13c37be2ff857a211e2aca3ff05bb6c + languageName: node + linkType: hard + +"env-paths@npm:^2.2.0, env-paths@npm:^2.2.1": + version: 2.2.1 + resolution: "env-paths@npm:2.2.1" + checksum: 65b5df55a8bab92229ab2b40dad3b387fad24613263d103a97f91c9fe43ceb21965cd3392b1ccb5d77088021e525c4e0481adb309625d0cb94ade1d1fb8dc17e + languageName: node + linkType: hard + +"envinfo@npm:^7.7.3": + version: 7.13.0 + resolution: "envinfo@npm:7.13.0" + bin: + envinfo: dist/cli.js + checksum: 822fc30f53bd0be67f0e25be96eb6a2562b8062f3058846bbd7ec471bd4b7835fca6436ee72c4029c8ae4a3d8f8cddbe2ee725b22291f015232d20a682bee732 + languageName: node + linkType: hard + +"err-code@npm:^2.0.2": + version: 2.0.3 + resolution: "err-code@npm:2.0.3" + checksum: 8b7b1be20d2de12d2255c0bc2ca638b7af5171142693299416e6a9339bd7d88fc8d7707d913d78e0993176005405a236b066b45666b27b797252c771156ace54 + languageName: node + linkType: hard + +"err-code@npm:^3.0.1": + version: 3.0.1 + resolution: "err-code@npm:3.0.1" + checksum: aede1f1d5ebe6d6b30b5e3175e3cc13e67de2e2e1ad99ce4917e957d7b59e8451ed10ee37dbc6493521920a47082c479b9097e5c39438d4aff4cc84438568a5a + languageName: node + linkType: hard + +"error-ex@npm:^1.3.1": + version: 1.3.2 + resolution: "error-ex@npm:1.3.2" + dependencies: + is-arrayish: ^0.2.1 + checksum: c1c2b8b65f9c91b0f9d75f0debaa7ec5b35c266c2cac5de412c1a6de86d4cbae04ae44e510378cb14d032d0645a36925d0186f8bb7367bcc629db256b743a001 + languageName: node + linkType: hard + +"es-abstract@npm:^1.22.1, es-abstract@npm:^1.22.3, es-abstract@npm:^1.23.0, es-abstract@npm:^1.23.2": + version: 1.23.3 + resolution: "es-abstract@npm:1.23.3" + dependencies: + array-buffer-byte-length: ^1.0.1 + arraybuffer.prototype.slice: ^1.0.3 + available-typed-arrays: ^1.0.7 + call-bind: ^1.0.7 + data-view-buffer: ^1.0.1 + data-view-byte-length: ^1.0.1 + data-view-byte-offset: ^1.0.0 + es-define-property: ^1.0.0 + es-errors: ^1.3.0 + es-object-atoms: ^1.0.0 + es-set-tostringtag: ^2.0.3 + es-to-primitive: ^1.2.1 + function.prototype.name: ^1.1.6 + get-intrinsic: ^1.2.4 + get-symbol-description: ^1.0.2 + globalthis: ^1.0.3 + gopd: ^1.0.1 + has-property-descriptors: ^1.0.2 + has-proto: ^1.0.3 + has-symbols: ^1.0.3 + hasown: ^2.0.2 + internal-slot: ^1.0.7 + is-array-buffer: ^3.0.4 + is-callable: ^1.2.7 + is-data-view: ^1.0.1 + is-negative-zero: ^2.0.3 + is-regex: ^1.1.4 + is-shared-array-buffer: ^1.0.3 + is-string: ^1.0.7 + is-typed-array: ^1.1.13 + is-weakref: ^1.0.2 + object-inspect: ^1.13.1 + object-keys: ^1.1.1 + object.assign: ^4.1.5 + regexp.prototype.flags: ^1.5.2 + safe-array-concat: ^1.1.2 + safe-regex-test: ^1.0.3 + string.prototype.trim: ^1.2.9 + string.prototype.trimend: ^1.0.8 + string.prototype.trimstart: ^1.0.8 + typed-array-buffer: ^1.0.2 + typed-array-byte-length: ^1.0.1 + typed-array-byte-offset: ^1.0.2 + typed-array-length: ^1.0.6 + unbox-primitive: ^1.0.2 + which-typed-array: ^1.1.15 + checksum: f840cf161224252512f9527306b57117192696571e07920f777cb893454e32999206198b4f075516112af6459daca282826d1735c450528470356d09eff3a9ae + languageName: node + linkType: hard + +"es-define-property@npm:^1.0.0": + version: 1.0.0 + resolution: "es-define-property@npm:1.0.0" + dependencies: + get-intrinsic: ^1.2.4 + checksum: f66ece0a887b6dca71848fa71f70461357c0e4e7249696f81bad0a1f347eed7b31262af4a29f5d726dc026426f085483b6b90301855e647aa8e21936f07293c6 + languageName: node + linkType: hard + +"es-errors@npm:^1.2.1, es-errors@npm:^1.3.0": + version: 1.3.0 + resolution: "es-errors@npm:1.3.0" + checksum: ec1414527a0ccacd7f15f4a3bc66e215f04f595ba23ca75cdae0927af099b5ec865f9f4d33e9d7e86f512f252876ac77d4281a7871531a50678132429b1271b5 + languageName: node + linkType: hard + +"es-module-lexer@npm:^1.2.1": + version: 1.5.2 + resolution: "es-module-lexer@npm:1.5.2" + checksum: 59c47109eca80b93dda2418337b4308c194c578704dc57d5aa54973b196e378d31e92f258e5525655b99b3de8a84dda2debb9646cddf6fe8830f1bfca95ee060 + languageName: node + linkType: hard + +"es-object-atoms@npm:^1.0.0": + version: 1.0.0 + resolution: "es-object-atoms@npm:1.0.0" + dependencies: + es-errors: ^1.3.0 + checksum: 26f0ff78ab93b63394e8403c353842b2272836968de4eafe97656adfb8a7c84b9099bf0fe96ed58f4a4cddc860f6e34c77f91649a58a5daa4a9c40b902744e3c + languageName: node + linkType: hard + +"es-set-tostringtag@npm:^2.0.3": + version: 2.0.3 + resolution: "es-set-tostringtag@npm:2.0.3" + dependencies: + get-intrinsic: ^1.2.4 + has-tostringtag: ^1.0.2 + hasown: ^2.0.1 + checksum: 7227fa48a41c0ce83e0377b11130d324ac797390688135b8da5c28994c0165be8b252e15cd1de41e1325e5a5412511586960213e88f9ab4a5e7d028895db5129 + languageName: node + linkType: hard + +"es-shim-unscopables@npm:^1.0.0, es-shim-unscopables@npm:^1.0.2": + version: 1.0.2 + resolution: "es-shim-unscopables@npm:1.0.2" + dependencies: + hasown: ^2.0.0 + checksum: 432bd527c62065da09ed1d37a3f8e623c423683285e6188108286f4a1e8e164a5bcbfbc0051557c7d14633cd2a41ce24c7048e6bbb66a985413fd32f1be72626 + languageName: node + linkType: hard + +"es-to-primitive@npm:^1.2.1": + version: 1.2.1 + resolution: "es-to-primitive@npm:1.2.1" + dependencies: + is-callable: ^1.1.4 + is-date-object: ^1.0.1 + is-symbol: ^1.0.2 + checksum: 4ead6671a2c1402619bdd77f3503991232ca15e17e46222b0a41a5d81aebc8740a77822f5b3c965008e631153e9ef0580540007744521e72de8e33599fca2eed + languageName: node + linkType: hard + +"esbuild@npm:^0.18.10": + version: 0.18.20 + resolution: "esbuild@npm:0.18.20" + dependencies: + "@esbuild/android-arm": 0.18.20 + "@esbuild/android-arm64": 0.18.20 + "@esbuild/android-x64": 0.18.20 + "@esbuild/darwin-arm64": 0.18.20 + "@esbuild/darwin-x64": 0.18.20 + "@esbuild/freebsd-arm64": 0.18.20 + "@esbuild/freebsd-x64": 0.18.20 + "@esbuild/linux-arm": 0.18.20 + "@esbuild/linux-arm64": 0.18.20 + "@esbuild/linux-ia32": 0.18.20 + "@esbuild/linux-loong64": 0.18.20 + "@esbuild/linux-mips64el": 0.18.20 + "@esbuild/linux-ppc64": 0.18.20 + "@esbuild/linux-riscv64": 0.18.20 + "@esbuild/linux-s390x": 0.18.20 + "@esbuild/linux-x64": 0.18.20 + "@esbuild/netbsd-x64": 0.18.20 + "@esbuild/openbsd-x64": 0.18.20 + "@esbuild/sunos-x64": 0.18.20 + "@esbuild/win32-arm64": 0.18.20 + "@esbuild/win32-ia32": 0.18.20 + "@esbuild/win32-x64": 0.18.20 + dependenciesMeta: + "@esbuild/android-arm": + optional: true + "@esbuild/android-arm64": + optional: true + "@esbuild/android-x64": + optional: true + "@esbuild/darwin-arm64": + optional: true + "@esbuild/darwin-x64": + optional: true + "@esbuild/freebsd-arm64": + optional: true + "@esbuild/freebsd-x64": + optional: true + "@esbuild/linux-arm": + optional: true + "@esbuild/linux-arm64": + optional: true + "@esbuild/linux-ia32": + optional: true + "@esbuild/linux-loong64": + optional: true + "@esbuild/linux-mips64el": + optional: true + "@esbuild/linux-ppc64": + optional: true + "@esbuild/linux-riscv64": + optional: true + "@esbuild/linux-s390x": + optional: true + "@esbuild/linux-x64": + optional: true + "@esbuild/netbsd-x64": + optional: true + "@esbuild/openbsd-x64": + optional: true + "@esbuild/sunos-x64": + optional: true + "@esbuild/win32-arm64": + optional: true + "@esbuild/win32-ia32": + optional: true + "@esbuild/win32-x64": + optional: true + bin: + esbuild: bin/esbuild + checksum: 5d253614e50cdb6ec22095afd0c414f15688e7278a7eb4f3720a6dd1306b0909cf431e7b9437a90d065a31b1c57be60130f63fe3e8d0083b588571f31ee6ec7b + languageName: node + linkType: hard + +"escalade@npm:^3.1.1, escalade@npm:^3.1.2": + version: 3.1.2 + resolution: "escalade@npm:3.1.2" + checksum: 1ec0977aa2772075493002bdbd549d595ff6e9393b1cb0d7d6fcaf78c750da0c158f180938365486f75cb69fba20294351caddfce1b46552a7b6c3cde52eaa02 + languageName: node + linkType: hard + +"escape-html@npm:^1.0.3": + version: 1.0.3 + resolution: "escape-html@npm:1.0.3" + checksum: 6213ca9ae00d0ab8bccb6d8d4e0a98e76237b2410302cf7df70aaa6591d509a2a37ce8998008cbecae8fc8ffaadf3fb0229535e6a145f3ce0b211d060decbb24 + languageName: node + linkType: hard + +"escape-string-regexp@npm:^1.0.5": + version: 1.0.5 + resolution: "escape-string-regexp@npm:1.0.5" + checksum: 6092fda75c63b110c706b6a9bfde8a612ad595b628f0bd2147eea1d3406723020810e591effc7db1da91d80a71a737a313567c5abb3813e8d9c71f4aa595b410 + languageName: node + linkType: hard + +"escape-string-regexp@npm:^2.0.0": + version: 2.0.0 + resolution: "escape-string-regexp@npm:2.0.0" + checksum: 9f8a2d5743677c16e85c810e3024d54f0c8dea6424fad3c79ef6666e81dd0846f7437f5e729dfcdac8981bc9e5294c39b4580814d114076b8d36318f46ae4395 + languageName: node + linkType: hard + +"escape-string-regexp@npm:^4.0.0": + version: 4.0.0 + resolution: "escape-string-regexp@npm:4.0.0" + checksum: 98b48897d93060f2322108bf29db0feba7dd774be96cd069458d1453347b25ce8682ecc39859d4bca2203cc0ab19c237bcc71755eff49a0f8d90beadeeba5cc5 + languageName: node + linkType: hard + +"escodegen@npm:^2.0.0, escodegen@npm:^2.1.0": + version: 2.1.0 + resolution: "escodegen@npm:2.1.0" + dependencies: + esprima: ^4.0.1 + estraverse: ^5.2.0 + esutils: ^2.0.2 + source-map: ~0.6.1 + dependenciesMeta: + source-map: + optional: true + bin: + escodegen: bin/escodegen.js + esgenerate: bin/esgenerate.js + checksum: 096696407e161305cd05aebb95134ad176708bc5cb13d0dcc89a5fcbb959b8ed757e7f2591a5f8036f8f4952d4a724de0df14cd419e29212729fa6df5ce16bf6 + languageName: node + linkType: hard + +"eslint-config-prettier@npm:^8.5.0": + version: 8.10.0 + resolution: "eslint-config-prettier@npm:8.10.0" + peerDependencies: + eslint: ">=7.0.0" + bin: + eslint-config-prettier: bin/cli.js + checksum: 153266badd477e49b0759816246b2132f1dbdb6c7f313ca60a9af5822fd1071c2bc5684a3720d78b725452bbac04bb130878b2513aea5e72b1b792de5a69fec8 + languageName: node + linkType: hard + +"eslint-import-resolver-node@npm:^0.3.9": + version: 0.3.9 + resolution: "eslint-import-resolver-node@npm:0.3.9" + dependencies: + debug: ^3.2.7 + is-core-module: ^2.13.0 + resolve: ^1.22.4 + checksum: 439b91271236b452d478d0522a44482e8c8540bf9df9bd744062ebb89ab45727a3acd03366a6ba2bdbcde8f9f718bab7fe8db64688aca75acf37e04eafd25e22 + languageName: node + linkType: hard + +"eslint-import-resolver-typescript@npm:^3.5.5": + version: 3.6.1 + resolution: "eslint-import-resolver-typescript@npm:3.6.1" + dependencies: + debug: ^4.3.4 + enhanced-resolve: ^5.12.0 + eslint-module-utils: ^2.7.4 + fast-glob: ^3.3.1 + get-tsconfig: ^4.5.0 + is-core-module: ^2.11.0 + is-glob: ^4.0.3 + peerDependencies: + eslint: "*" + eslint-plugin-import: "*" + checksum: 454fa0646533050fb57f13d27daf8c71f51b0bb9156d6a461290ccb8576d892209fcc6702a89553f3f5ea8e5b407395ca2e5de169a952c953685f1f7c46b4496 + languageName: node + linkType: hard + +"eslint-module-utils@npm:^2.7.4, eslint-module-utils@npm:^2.8.0": + version: 2.8.1 + resolution: "eslint-module-utils@npm:2.8.1" + dependencies: + debug: ^3.2.7 + peerDependenciesMeta: + eslint: + optional: true + checksum: 3cecd99b6baf45ffc269167da0f95dcb75e5aa67b93d73a3bab63e2a7eedd9cdd6f188eed048e2f57c1b77db82c9cbf2adac20b512fa70e597d863dd3720170d + languageName: node + linkType: hard + +"eslint-plugin-import@npm:^2.27.5": + version: 2.29.1 + resolution: "eslint-plugin-import@npm:2.29.1" + dependencies: + array-includes: ^3.1.7 + array.prototype.findlastindex: ^1.2.3 + array.prototype.flat: ^1.3.2 + array.prototype.flatmap: ^1.3.2 + debug: ^3.2.7 + doctrine: ^2.1.0 + eslint-import-resolver-node: ^0.3.9 + eslint-module-utils: ^2.8.0 + hasown: ^2.0.0 + is-core-module: ^2.13.1 + is-glob: ^4.0.3 + minimatch: ^3.1.2 + object.fromentries: ^2.0.7 + object.groupby: ^1.0.1 + object.values: ^1.1.7 + semver: ^6.3.1 + tsconfig-paths: ^3.15.0 + peerDependencies: + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + checksum: e65159aef808136d26d029b71c8c6e4cb5c628e65e5de77f1eb4c13a379315ae55c9c3afa847f43f4ff9df7e54515c77ffc6489c6a6f81f7dd7359267577468c + languageName: node + linkType: hard + +"eslint-plugin-jsdoc@npm:^40.1.0": + version: 40.3.0 + resolution: "eslint-plugin-jsdoc@npm:40.3.0" + dependencies: + "@es-joy/jsdoccomment": ~0.37.0 + comment-parser: 1.3.1 + debug: ^4.3.4 + escape-string-regexp: ^4.0.0 + esquery: ^1.5.0 + semver: ^7.3.8 + spdx-expression-parse: ^3.0.1 + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + checksum: 7671ac3cc7165cd894cc2fc4c67ddf075f01502c25bbdc649559e7dfd6a525126debe756c83e11887972ffbe57d0d10d3bb17c7269594823654f55be3a3ca5ef + languageName: node + linkType: hard + +"eslint-plugin-no-only-tests@npm:^3.1.0": + version: 3.1.0 + resolution: "eslint-plugin-no-only-tests@npm:3.1.0" + checksum: 2a5de82f3a732dbd46792661dd0f8546cf819f76d8828968166dee35741e8039904ba473dafe1eed585f401a496d260c2c38354bb887c94bd4ced0ddca00fb62 + languageName: node + linkType: hard + +"eslint-plugin-tsdoc@npm:^0.2.17": + version: 0.2.17 + resolution: "eslint-plugin-tsdoc@npm:0.2.17" + dependencies: + "@microsoft/tsdoc": 0.14.2 + "@microsoft/tsdoc-config": 0.16.2 + checksum: d143a5f1c5967812d75f246ae2776cb030f6e7966b981406c9df9352a9ab02b035f294cedb30054eac2c4a217ee4ab2ed9fb76292bdccda9438e54d2d7b0146e + languageName: node + linkType: hard + +"eslint-scope@npm:5.1.1": + version: 5.1.1 + resolution: "eslint-scope@npm:5.1.1" + dependencies: + esrecurse: ^4.3.0 + estraverse: ^4.1.1 + checksum: 47e4b6a3f0cc29c7feedee6c67b225a2da7e155802c6ea13bbef4ac6b9e10c66cd2dcb987867ef176292bf4e64eccc680a49e35e9e9c669f4a02bac17e86abdb + languageName: node + linkType: hard + +"eslint-scope@npm:^7.2.2": + version: 7.2.2 + resolution: "eslint-scope@npm:7.2.2" + dependencies: + esrecurse: ^4.3.0 + estraverse: ^5.2.0 + checksum: ec97dbf5fb04b94e8f4c5a91a7f0a6dd3c55e46bfc7bbcd0e3138c3a76977570e02ed89a1810c778dcd72072ff0e9621ba1379b4babe53921d71e2e4486fda3e + languageName: node + linkType: hard + +"eslint-visitor-keys@npm:^2.0.0": + version: 2.1.0 + resolution: "eslint-visitor-keys@npm:2.1.0" + checksum: e3081d7dd2611a35f0388bbdc2f5da60b3a3c5b8b6e928daffff7391146b434d691577aa95064c8b7faad0b8a680266bcda0a42439c18c717b80e6718d7e267d + languageName: node + linkType: hard + +"eslint-visitor-keys@npm:^3.3.0, eslint-visitor-keys@npm:^3.4.1, eslint-visitor-keys@npm:^3.4.3": + version: 3.4.3 + resolution: "eslint-visitor-keys@npm:3.4.3" + checksum: 36e9ef87fca698b6fd7ca5ca35d7b2b6eeaaf106572e2f7fd31c12d3bfdaccdb587bba6d3621067e5aece31c8c3a348b93922ab8f7b2cbc6aaab5e1d89040c60 + languageName: node + linkType: hard + +"eslint@npm:^8.21.0, eslint@npm:^8.35.0, eslint@npm:^8.37.0": + version: 8.57.0 + resolution: "eslint@npm:8.57.0" + dependencies: + "@eslint-community/eslint-utils": ^4.2.0 + "@eslint-community/regexpp": ^4.6.1 + "@eslint/eslintrc": ^2.1.4 + "@eslint/js": 8.57.0 + "@humanwhocodes/config-array": ^0.11.14 + "@humanwhocodes/module-importer": ^1.0.1 + "@nodelib/fs.walk": ^1.2.8 + "@ungap/structured-clone": ^1.2.0 + ajv: ^6.12.4 + chalk: ^4.0.0 + cross-spawn: ^7.0.2 + debug: ^4.3.2 + doctrine: ^3.0.0 + escape-string-regexp: ^4.0.0 + eslint-scope: ^7.2.2 + eslint-visitor-keys: ^3.4.3 + espree: ^9.6.1 + esquery: ^1.4.2 + esutils: ^2.0.2 + fast-deep-equal: ^3.1.3 + file-entry-cache: ^6.0.1 + find-up: ^5.0.0 + glob-parent: ^6.0.2 + globals: ^13.19.0 + graphemer: ^1.4.0 + ignore: ^5.2.0 + imurmurhash: ^0.1.4 + is-glob: ^4.0.0 + is-path-inside: ^3.0.3 + js-yaml: ^4.1.0 + json-stable-stringify-without-jsonify: ^1.0.1 + levn: ^0.4.1 + lodash.merge: ^4.6.2 + minimatch: ^3.1.2 + natural-compare: ^1.4.0 + optionator: ^0.9.3 + strip-ansi: ^6.0.1 + text-table: ^0.2.0 + bin: + eslint: bin/eslint.js + checksum: 3a48d7ff85ab420a8447e9810d8087aea5b1df9ef68c9151732b478de698389ee656fd895635b5f2871c89ee5a2652b3f343d11e9db6f8486880374ebc74a2d9 + languageName: node + linkType: hard + +"espree@npm:^9.6.0, espree@npm:^9.6.1": + version: 9.6.1 + resolution: "espree@npm:9.6.1" + dependencies: + acorn: ^8.9.0 + acorn-jsx: ^5.3.2 + eslint-visitor-keys: ^3.4.1 + checksum: eb8c149c7a2a77b3f33a5af80c10875c3abd65450f60b8af6db1bfcfa8f101e21c1e56a561c6dc13b848e18148d43469e7cd208506238554fb5395a9ea5a1ab9 + languageName: node + linkType: hard + +"esprima@npm:^4.0.0, esprima@npm:^4.0.1": + version: 4.0.1 + resolution: "esprima@npm:4.0.1" + bin: + esparse: ./bin/esparse.js + esvalidate: ./bin/esvalidate.js + checksum: b45bc805a613dbea2835278c306b91aff6173c8d034223fa81498c77dcbce3b2931bf6006db816f62eacd9fd4ea975dfd85a5b7f3c6402cfd050d4ca3c13a628 + languageName: node + linkType: hard + +"esquery@npm:^1.4.2, esquery@npm:^1.5.0": + version: 1.5.0 + resolution: "esquery@npm:1.5.0" + dependencies: + estraverse: ^5.1.0 + checksum: aefb0d2596c230118656cd4ec7532d447333a410a48834d80ea648b1e7b5c9bc9ed8b5e33a89cb04e487b60d622f44cf5713bf4abed7c97343edefdc84a35900 + languageName: node + linkType: hard + +"esrecurse@npm:^4.3.0": + version: 4.3.0 + resolution: "esrecurse@npm:4.3.0" + dependencies: + estraverse: ^5.2.0 + checksum: ebc17b1a33c51cef46fdc28b958994b1dc43cd2e86237515cbc3b4e5d2be6a811b2315d0a1a4d9d340b6d2308b15322f5c8291059521cc5f4802f65e7ec32837 + languageName: node + linkType: hard + +"estraverse@npm:^4.1.1": + version: 4.3.0 + resolution: "estraverse@npm:4.3.0" + checksum: a6299491f9940bb246124a8d44b7b7a413a8336f5436f9837aaa9330209bd9ee8af7e91a654a3545aee9c54b3308e78ee360cef1d777d37cfef77d2fa33b5827 + languageName: node + linkType: hard + +"estraverse@npm:^5.1.0, estraverse@npm:^5.2.0": + version: 5.3.0 + resolution: "estraverse@npm:5.3.0" + checksum: 072780882dc8416ad144f8fe199628d2b3e7bbc9989d9ed43795d2c90309a2047e6bc5979d7e2322a341163d22cfad9e21f4110597fe487519697389497e4e2b + languageName: node + linkType: hard + +"esutils@npm:^2.0.2": + version: 2.0.3 + resolution: "esutils@npm:2.0.3" + checksum: 22b5b08f74737379a840b8ed2036a5fb35826c709ab000683b092d9054e5c2a82c27818f12604bfc2a9a76b90b6834ef081edbc1c7ae30d1627012e067c6ec87 + languageName: node + linkType: hard + +"ethereum-cryptography@npm:^2.1.3": + version: 2.1.3 + resolution: "ethereum-cryptography@npm:2.1.3" + dependencies: + "@noble/curves": 1.3.0 + "@noble/hashes": 1.3.3 + "@scure/bip32": 1.3.3 + "@scure/bip39": 1.2.2 + checksum: 7f9c14f868a588641179cace3eb86c332c4743290865db699870710253cabc4dc74bd4bce5e7bc6db667482e032e94d6f79521219eb6be5dc422059d279a27b7 + languageName: node + linkType: hard + +"event-stream@npm:=3.3.4": + version: 3.3.4 + resolution: "event-stream@npm:3.3.4" + dependencies: + duplexer: ~0.1.1 + from: ~0 + map-stream: ~0.1.0 + pause-stream: 0.0.11 + split: 0.3 + stream-combiner: ~0.0.4 + through: ~2.3.1 + checksum: 80b467820b6daf824d9fb4345d2daf115a056e5c104463f2e98534e92d196a27f2df5ea2aa085624db26f4c45698905499e881d13bc7c01f7a13eac85be72a22 + languageName: node + linkType: hard + +"eventemitter3@npm:^4.0.0": + version: 4.0.7 + resolution: "eventemitter3@npm:4.0.7" + checksum: 1875311c42fcfe9c707b2712c32664a245629b42bb0a5a84439762dd0fd637fc54d078155ea83c2af9e0323c9ac13687e03cfba79b03af9f40c89b4960099374 + languageName: node + linkType: hard + +"eventemitter3@npm:^5.0.1": + version: 5.0.1 + resolution: "eventemitter3@npm:5.0.1" + checksum: 543d6c858ab699303c3c32e0f0f47fc64d360bf73c3daf0ac0b5079710e340d6fe9f15487f94e66c629f5f82cd1a8678d692f3dbb6f6fcd1190e1b97fcad36f8 + languageName: node + linkType: hard + +"events@npm:^3.2.0, events@npm:^3.3.0": + version: 3.3.0 + resolution: "events@npm:3.3.0" + checksum: f6f487ad2198aa41d878fa31452f1a3c00958f46e9019286ff4787c84aac329332ab45c9cdc8c445928fc6d7ded294b9e005a7fce9426488518017831b272780 + languageName: node + linkType: hard + +"evp_bytestokey@npm:^1.0.0, evp_bytestokey@npm:^1.0.3": + version: 1.0.3 + resolution: "evp_bytestokey@npm:1.0.3" + dependencies: + md5.js: ^1.3.4 + node-gyp: latest + safe-buffer: ^5.1.1 + checksum: ad4e1577f1a6b721c7800dcc7c733fe01f6c310732bb5bf2240245c2a5b45a38518b91d8be2c610611623160b9d1c0e91f1ce96d639f8b53e8894625cf20fa45 + languageName: node + linkType: hard + +"execa@npm:^5.0.0": + version: 5.1.1 + resolution: "execa@npm:5.1.1" + dependencies: + cross-spawn: ^7.0.3 + get-stream: ^6.0.0 + human-signals: ^2.1.0 + is-stream: ^2.0.0 + merge-stream: ^2.0.0 + npm-run-path: ^4.0.1 + onetime: ^5.1.2 + signal-exit: ^3.0.3 + strip-final-newline: ^2.0.0 + checksum: fba9022c8c8c15ed862847e94c252b3d946036d7547af310e344a527e59021fd8b6bb0723883ea87044dc4f0201f949046993124a42ccb0855cae5bf8c786343 + languageName: node + linkType: hard + +"execa@npm:^7.1.1": + version: 7.2.0 + resolution: "execa@npm:7.2.0" + dependencies: + cross-spawn: ^7.0.3 + get-stream: ^6.0.1 + human-signals: ^4.3.0 + is-stream: ^3.0.0 + merge-stream: ^2.0.0 + npm-run-path: ^5.1.0 + onetime: ^6.0.0 + signal-exit: ^3.0.7 + strip-final-newline: ^3.0.0 + checksum: 14fd17ba0ca8c87b277584d93b1d9fc24f2a65e5152b31d5eb159a3b814854283eaae5f51efa9525e304447e2f757c691877f7adff8fde5746aae67eb1edd1cc + languageName: node + linkType: hard + +"exit@npm:^0.1.2": + version: 0.1.2 + resolution: "exit@npm:0.1.2" + checksum: abc407f07a875c3961e4781dfcb743b58d6c93de9ab263f4f8c9d23bb6da5f9b7764fc773f86b43dd88030444d5ab8abcb611cb680fba8ca075362b77114bba3 + languageName: node + linkType: hard + +"expect@npm:^29.0.0, expect@npm:^29.7.0": + version: 29.7.0 + resolution: "expect@npm:29.7.0" + dependencies: + "@jest/expect-utils": ^29.7.0 + jest-get-type: ^29.6.3 + jest-matcher-utils: ^29.7.0 + jest-message-util: ^29.7.0 + jest-util: ^29.7.0 + checksum: 9257f10288e149b81254a0fda8ffe8d54a7061cd61d7515779998b012579d2b8c22354b0eb901daf0145f347403da582f75f359f4810c007182ad3fb318b5c0c + languageName: node + linkType: hard + +"exponential-backoff@npm:^3.1.1": + version: 3.1.1 + resolution: "exponential-backoff@npm:3.1.1" + checksum: 3d21519a4f8207c99f7457287291316306255a328770d320b401114ec8481986e4e467e854cb9914dd965e0a1ca810a23ccb559c642c88f4c7f55c55778a9b48 + languageName: node + linkType: hard + +"extract-zip@npm:2.0.1": + version: 2.0.1 + resolution: "extract-zip@npm:2.0.1" + dependencies: + "@types/yauzl": ^2.9.1 + debug: ^4.1.1 + get-stream: ^5.1.0 + yauzl: ^2.10.0 + dependenciesMeta: + "@types/yauzl": + optional: true + bin: + extract-zip: cli.js + checksum: 8cbda9debdd6d6980819cc69734d874ddd71051c9fe5bde1ef307ebcedfe949ba57b004894b585f758b7c9eeeea0e3d87f2dda89b7d25320459c2c9643ebb635 + languageName: node + linkType: hard + +"fast-deep-equal@npm:^3.1.1, fast-deep-equal@npm:^3.1.3": + version: 3.1.3 + resolution: "fast-deep-equal@npm:3.1.3" + checksum: e21a9d8d84f53493b6aa15efc9cfd53dd5b714a1f23f67fb5dc8f574af80df889b3bce25dc081887c6d25457cce704e636395333abad896ccdec03abaf1f3f9d + languageName: node + linkType: hard + +"fast-fifo@npm:^1.1.0, fast-fifo@npm:^1.2.0": + version: 1.3.2 + resolution: "fast-fifo@npm:1.3.2" + checksum: 6bfcba3e4df5af7be3332703b69a7898a8ed7020837ec4395bb341bd96cc3a6d86c3f6071dd98da289618cf2234c70d84b2a6f09a33dd6f988b1ff60d8e54275 + languageName: node + linkType: hard + +"fast-glob@npm:^3.2.9, fast-glob@npm:^3.3.1": + version: 3.3.2 + resolution: "fast-glob@npm:3.3.2" + dependencies: + "@nodelib/fs.stat": ^2.0.2 + "@nodelib/fs.walk": ^1.2.3 + glob-parent: ^5.1.2 + merge2: ^1.3.0 + micromatch: ^4.0.4 + checksum: 900e4979f4dbc3313840078419245621259f349950411ca2fa445a2f9a1a6d98c3b5e7e0660c5ccd563aa61abe133a21765c6c0dec8e57da1ba71d8000b05ec1 + languageName: node + linkType: hard + +"fast-json-stable-stringify@npm:2.x, fast-json-stable-stringify@npm:^2.0.0, fast-json-stable-stringify@npm:^2.1.0": + version: 2.1.0 + resolution: "fast-json-stable-stringify@npm:2.1.0" + checksum: b191531e36c607977e5b1c47811158733c34ccb3bfde92c44798929e9b4154884378536d26ad90dfecd32e1ffc09c545d23535ad91b3161a27ddbb8ebe0cbecb + languageName: node + linkType: hard + +"fast-levenshtein@npm:^2.0.6": + version: 2.0.6 + resolution: "fast-levenshtein@npm:2.0.6" + checksum: 92cfec0a8dfafd9c7a15fba8f2cc29cd0b62b85f056d99ce448bbcd9f708e18ab2764bda4dd5158364f4145a7c72788538994f0d1787b956ef0d1062b0f7c24c + languageName: node + linkType: hard + +"fast-safe-stringify@npm:^2.1.1": + version: 2.1.1 + resolution: "fast-safe-stringify@npm:2.1.1" + checksum: a851cbddc451745662f8f00ddb622d6766f9bd97642dabfd9a405fb0d646d69fc0b9a1243cbf67f5f18a39f40f6fa821737651ff1bceeba06c9992ca2dc5bd3d + languageName: node + linkType: hard + +"fastest-levenshtein@npm:^1.0.12": + version: 1.0.16 + resolution: "fastest-levenshtein@npm:1.0.16" + checksum: a78d44285c9e2ae2c25f3ef0f8a73f332c1247b7ea7fb4a191e6bb51aa6ee1ef0dfb3ed113616dcdc7023e18e35a8db41f61c8d88988e877cf510df8edafbc71 + languageName: node + linkType: hard + +"fastq@npm:^1.6.0": + version: 1.17.1 + resolution: "fastq@npm:1.17.1" + dependencies: + reusify: ^1.0.4 + checksum: a8c5b26788d5a1763f88bae56a8ddeee579f935a831c5fe7a8268cea5b0a91fbfe705f612209e02d639b881d7b48e461a50da4a10cfaa40da5ca7cc9da098d88 + languageName: node + linkType: hard + +"fb-watchman@npm:^2.0.0": + version: 2.0.2 + resolution: "fb-watchman@npm:2.0.2" + dependencies: + bser: 2.1.1 + checksum: b15a124cef28916fe07b400eb87cbc73ca082c142abf7ca8e8de6af43eca79ca7bd13eb4d4d48240b3bd3136eaac40d16e42d6edf87a8e5d1dd8070626860c78 + languageName: node + linkType: hard + +"fd-slicer@npm:~1.1.0": + version: 1.1.0 + resolution: "fd-slicer@npm:1.1.0" + dependencies: + pend: ~1.2.0 + checksum: c8585fd5713f4476eb8261150900d2cb7f6ff2d87f8feb306ccc8a1122efd152f1783bdb2b8dc891395744583436bfd8081d8e63ece0ec8687eeefea394d4ff2 + languageName: node + linkType: hard + +"fecha@npm:^4.2.0": + version: 4.2.3 + resolution: "fecha@npm:4.2.3" + checksum: f94e2fb3acf5a7754165d04549460d3ae6c34830394d20c552197e3e000035d69732d74af04b9bed3283bf29fe2a9ebdcc0085e640b0be3cc3658b9726265e31 + languageName: node + linkType: hard + +"fetch-blob@npm:^3.1.2, fetch-blob@npm:^3.1.4": + version: 3.2.0 + resolution: "fetch-blob@npm:3.2.0" + dependencies: + node-domexception: ^1.0.0 + web-streams-polyfill: ^3.0.3 + checksum: f19bc28a2a0b9626e69fd7cf3a05798706db7f6c7548da657cbf5026a570945f5eeaedff52007ea35c8bcd3d237c58a20bf1543bc568ab2422411d762dd3d5bf + languageName: node + linkType: hard + +"file-entry-cache@npm:^6.0.1": + version: 6.0.1 + resolution: "file-entry-cache@npm:6.0.1" + dependencies: + flat-cache: ^3.0.4 + checksum: f49701feaa6314c8127c3c2f6173cfefff17612f5ed2daaafc6da13b5c91fd43e3b2a58fd0d63f9f94478a501b167615931e7200e31485e320f74a33885a9c74 + languageName: node + linkType: hard + +"file-stream-rotator@npm:^0.6.1": + version: 0.6.1 + resolution: "file-stream-rotator@npm:0.6.1" + dependencies: + moment: ^2.29.1 + checksum: ebdf6a9e7ca886a50f4dafb2284d4569cefd5bdf4e4451ead25f4d68b7f9776b2620a3d110d534edd40935d1e17f37d818e2129303201870ff89c71b19b49ac1 + languageName: node + linkType: hard + +"file-uri-to-path@npm:1.0.0": + version: 1.0.0 + resolution: "file-uri-to-path@npm:1.0.0" + checksum: b648580bdd893a008c92c7ecc96c3ee57a5e7b6c4c18a9a09b44fb5d36d79146f8e442578bc0e173dc027adf3987e254ba1dfd6e3ec998b7c282873010502144 + languageName: node + linkType: hard + +"filing-cabinet@npm:^3.0.1": + version: 3.3.1 + resolution: "filing-cabinet@npm:3.3.1" + dependencies: + app-module-path: ^2.2.0 + commander: ^2.20.3 + debug: ^4.3.3 + enhanced-resolve: ^5.8.3 + is-relative-path: ^1.0.2 + module-definition: ^3.3.1 + module-lookup-amd: ^7.0.1 + resolve: ^1.21.0 + resolve-dependency-path: ^2.0.0 + sass-lookup: ^3.0.0 + stylus-lookup: ^3.0.1 + tsconfig-paths: ^3.10.1 + typescript: ^3.9.7 + bin: + filing-cabinet: bin/cli.js + checksum: f6511c2e93e236c0d882244b49936a2c8cb2fde47e0d1a0a93345ce171995c2734670c38ed1c0aceaee9ed4958fcce48bfbbb687efe4dedf04b6ea46b0a8c1c0 + languageName: node + linkType: hard + +"fill-range@npm:^7.0.1": + version: 7.0.1 + resolution: "fill-range@npm:7.0.1" + dependencies: + to-regex-range: ^5.0.1 + checksum: cc283f4e65b504259e64fd969bcf4def4eb08d85565e906b7d36516e87819db52029a76b6363d0f02d0d532f0033c9603b9e2d943d56ee3b0d4f7ad3328ff917 + languageName: node + linkType: hard + +"find-replace@npm:^3.0.0": + version: 3.0.0 + resolution: "find-replace@npm:3.0.0" + dependencies: + array-back: ^3.0.1 + checksum: 6b04bcfd79027f5b84aa1dfe100e3295da989bdac4b4de6b277f4d063e78f5c9e92ebc8a1fec6dd3b448c924ba404ee051cc759e14a3ee3e825fa1361025df08 + languageName: node + linkType: hard + +"find-up@npm:^4.0.0, find-up@npm:^4.1.0": + version: 4.1.0 + resolution: "find-up@npm:4.1.0" + dependencies: + locate-path: ^5.0.0 + path-exists: ^4.0.0 + checksum: 4c172680e8f8c1f78839486e14a43ef82e9decd0e74145f40707cc42e7420506d5ec92d9a11c22bd2c48fb0c384ea05dd30e10dd152fefeec6f2f75282a8b844 + languageName: node + linkType: hard + +"find-up@npm:^5.0.0": + version: 5.0.0 + resolution: "find-up@npm:5.0.0" + dependencies: + locate-path: ^6.0.0 + path-exists: ^4.0.0 + checksum: 07955e357348f34660bde7920783204ff5a26ac2cafcaa28bace494027158a97b9f56faaf2d89a6106211a8174db650dd9f503f9c0d526b1202d5554a00b9095 + languageName: node + linkType: hard + +"flat-cache@npm:^3.0.4": + version: 3.2.0 + resolution: "flat-cache@npm:3.2.0" + dependencies: + flatted: ^3.2.9 + keyv: ^4.5.3 + rimraf: ^3.0.2 + checksum: e7e0f59801e288b54bee5cb9681e9ee21ee28ef309f886b312c9d08415b79fc0f24ac842f84356ce80f47d6a53de62197ce0e6e148dc42d5db005992e2a756ec + languageName: node + linkType: hard + +"flat@npm:^5.0.2": + version: 5.0.2 + resolution: "flat@npm:5.0.2" + bin: + flat: cli.js + checksum: 12a1536ac746db74881316a181499a78ef953632ddd28050b7a3a43c62ef5462e3357c8c29d76072bb635f147f7a9a1f0c02efef6b4be28f8db62ceb3d5c7f5d + languageName: node + linkType: hard + +"flatted@npm:^3.2.9": + version: 3.3.1 + resolution: "flatted@npm:3.3.1" + checksum: 85ae7181650bb728c221e7644cbc9f4bf28bc556f2fc89bb21266962bdf0ce1029cc7acc44bb646cd469d9baac7c317f64e841c4c4c00516afa97320cdac7f94 + languageName: node + linkType: hard + +"flatten@npm:^1.0.2": + version: 1.0.3 + resolution: "flatten@npm:1.0.3" + checksum: 5c57379816f1692aaa79fbc6390e0a0644e5e8442c5783ed57c6d315468eddbc53a659eaa03c9bb1e771b0f4a9bd8dd8a2620286bf21fd6538a7857321fdfb20 + languageName: node + linkType: hard + +"fn.name@npm:1.x.x": + version: 1.1.0 + resolution: "fn.name@npm:1.1.0" + checksum: e357144f48cfc9a7f52a82bbc6c23df7c8de639fce049cac41d41d62cabb740cdb9f14eddc6485e29c933104455bdd7a69bb14a9012cef9cd4fa252a4d0cf293 + languageName: node + linkType: hard + +"follow-redirects@npm:^1.0.0, follow-redirects@npm:^1.12.1": + version: 1.15.6 + resolution: "follow-redirects@npm:1.15.6" + peerDependenciesMeta: + debug: + optional: true + checksum: a62c378dfc8c00f60b9c80cab158ba54e99ba0239a5dd7c81245e5a5b39d10f0c35e249c3379eae719ff0285fff88c365dd446fab19dee771f1d76252df1bbf5 + languageName: node + linkType: hard + +"for-each@npm:^0.3.3": + version: 0.3.3 + resolution: "for-each@npm:0.3.3" + dependencies: + is-callable: ^1.1.3 + checksum: 6c48ff2bc63362319c65e2edca4a8e1e3483a2fabc72fbe7feaf8c73db94fc7861bd53bc02c8a66a0c1dd709da6b04eec42e0abdd6b40ce47305ae92a25e5d28 + languageName: node + linkType: hard + +"foreground-child@npm:^3.1.0": + version: 3.1.1 + resolution: "foreground-child@npm:3.1.1" + dependencies: + cross-spawn: ^7.0.0 + signal-exit: ^4.0.1 + checksum: 139d270bc82dc9e6f8bc045fe2aae4001dc2472157044fdfad376d0a3457f77857fa883c1c8b21b491c6caade9a926a4bed3d3d2e8d3c9202b151a4cbbd0bcd5 + languageName: node + linkType: hard + +"form-data@npm:^4.0.0": + version: 4.0.0 + resolution: "form-data@npm:4.0.0" + dependencies: + asynckit: ^0.4.0 + combined-stream: ^1.0.8 + mime-types: ^2.1.12 + checksum: 01135bf8675f9d5c61ff18e2e2932f719ca4de964e3be90ef4c36aacfc7b9cb2fceb5eca0b7e0190e3383fe51c5b37f4cb80b62ca06a99aaabfcfd6ac7c9328c + languageName: node + linkType: hard + +"formdata-polyfill@npm:^4.0.10": + version: 4.0.10 + resolution: "formdata-polyfill@npm:4.0.10" + dependencies: + fetch-blob: ^3.1.2 + checksum: 82a34df292afadd82b43d4a740ce387bc08541e0a534358425193017bf9fb3567875dc5f69564984b1da979979b70703aa73dee715a17b6c229752ae736dd9db + languageName: node + linkType: hard + +"formidable@npm:^2.1.2": + version: 2.1.2 + resolution: "formidable@npm:2.1.2" + dependencies: + dezalgo: ^1.0.4 + hexoid: ^1.0.0 + once: ^1.4.0 + qs: ^6.11.0 + checksum: 81c8e5d89f5eb873e992893468f0de22c01678ca3d315db62be0560f9de1c77d4faefc9b1f4575098eb2263b3c81ba1024833a9fc3206297ddbac88a4f69b7a8 + languageName: node + linkType: hard + +"fresh@npm:~0.5.2": + version: 0.5.2 + resolution: "fresh@npm:0.5.2" + checksum: 13ea8b08f91e669a64e3ba3a20eb79d7ca5379a81f1ff7f4310d54e2320645503cc0c78daedc93dfb6191287295f6479544a649c64d8e41a1c0fb0c221552346 + languageName: node + linkType: hard + +"from@npm:~0": + version: 0.1.7 + resolution: "from@npm:0.1.7" + checksum: b85125b7890489656eb2e4f208f7654a93ec26e3aefaf3bbbcc0d496fc1941e4405834fcc9fe7333192aa2187905510ace70417bbf9ac6f6f4784a731d986939 + languageName: node + linkType: hard + +"fs-extra@npm:^11.1.1, fs-extra@npm:^11.2.0": + version: 11.2.0 + resolution: "fs-extra@npm:11.2.0" + dependencies: + graceful-fs: ^4.2.0 + jsonfile: ^6.0.1 + universalify: ^2.0.0 + checksum: b12e42fa40ba47104202f57b8480dd098aa931c2724565e5e70779ab87605665594e76ee5fb00545f772ab9ace167fe06d2ab009c416dc8c842c5ae6df7aa7e8 + languageName: node + linkType: hard + +"fs-minipass@npm:^2.0.0": + version: 2.1.0 + resolution: "fs-minipass@npm:2.1.0" + dependencies: + minipass: ^3.0.0 + checksum: 1b8d128dae2ac6cc94230cc5ead341ba3e0efaef82dab46a33d171c044caaa6ca001364178d42069b2809c35a1c3c35079a32107c770e9ffab3901b59af8c8b1 + languageName: node + linkType: hard + +"fs-minipass@npm:^3.0.0": + version: 3.0.3 + resolution: "fs-minipass@npm:3.0.3" + dependencies: + minipass: ^7.0.3 + checksum: 8722a41109130851d979222d3ec88aabaceeaaf8f57b2a8f744ef8bd2d1ce95453b04a61daa0078822bc5cd21e008814f06fe6586f56fef511e71b8d2394d802 + languageName: node + linkType: hard + +"fs.realpath@npm:^1.0.0": + version: 1.0.0 + resolution: "fs.realpath@npm:1.0.0" + checksum: 99ddea01a7e75aa276c250a04eedeffe5662bce66c65c07164ad6264f9de18fb21be9433ead460e54cff20e31721c811f4fb5d70591799df5f85dce6d6746fd0 + languageName: node + linkType: hard + +"fsevents@npm:^2.3.2, fsevents@npm:~2.3.2": + version: 2.3.3 + resolution: "fsevents@npm:2.3.3" + dependencies: + node-gyp: latest + checksum: 11e6ea6fea15e42461fc55b4b0e4a0a3c654faa567f1877dbd353f39156f69def97a69936d1746619d656c4b93de2238bf731f6085a03a50cabf287c9d024317 + conditions: os=darwin + languageName: node + linkType: hard + +"fsevents@patch:fsevents@^2.3.2#~builtin, fsevents@patch:fsevents@~2.3.2#~builtin": + version: 2.3.3 + resolution: "fsevents@patch:fsevents@npm%3A2.3.3#~builtin::version=2.3.3&hash=df0bf1" + dependencies: + node-gyp: latest + conditions: os=darwin + languageName: node + linkType: hard + +"function-bind@npm:^1.1.2": + version: 1.1.2 + resolution: "function-bind@npm:1.1.2" + checksum: 2b0ff4ce708d99715ad14a6d1f894e2a83242e4a52ccfcefaee5e40050562e5f6dafc1adbb4ce2d4ab47279a45dc736ab91ea5042d843c3c092820dfe032efb1 + languageName: node + linkType: hard + +"function.prototype.name@npm:^1.1.6": + version: 1.1.6 + resolution: "function.prototype.name@npm:1.1.6" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.2.0 + es-abstract: ^1.22.1 + functions-have-names: ^1.2.3 + checksum: 7a3f9bd98adab09a07f6e1f03da03d3f7c26abbdeaeee15223f6c04a9fb5674792bdf5e689dac19b97ac71de6aad2027ba3048a9b883aa1b3173eed6ab07f479 + languageName: node + linkType: hard + +"functional-red-black-tree@npm:^1.0.1": + version: 1.0.1 + resolution: "functional-red-black-tree@npm:1.0.1" + checksum: ca6c170f37640e2d94297da8bb4bf27a1d12bea3e00e6a3e007fd7aa32e37e000f5772acf941b4e4f3cf1c95c3752033d0c509af157ad8f526e7f00723b9eb9f + languageName: node + linkType: hard + +"functions-have-names@npm:^1.2.3": + version: 1.2.3 + resolution: "functions-have-names@npm:1.2.3" + checksum: c3f1f5ba20f4e962efb71344ce0a40722163e85bee2101ce25f88214e78182d2d2476aa85ef37950c579eb6cf6ee811c17b3101bb84004bb75655f3e33f3fdb5 + languageName: node + linkType: hard + +"gensync@npm:^1.0.0-beta.2": + version: 1.0.0-beta.2 + resolution: "gensync@npm:1.0.0-beta.2" + checksum: a7437e58c6be12aa6c90f7730eac7fa9833dc78872b4ad2963d2031b00a3367a93f98aec75f9aaac7220848e4026d67a8655e870b24f20a543d103c0d65952ec + languageName: node + linkType: hard + +"get-amd-module-type@npm:^3.0.0": + version: 3.0.2 + resolution: "get-amd-module-type@npm:3.0.2" + dependencies: + ast-module-types: ^3.0.0 + node-source-walk: ^4.2.2 + checksum: d16fac5037f63027992e6ebd2d642e6d4feef2f8fa71ff3da6aa76006e05b3dcd4aa6044b4c5966f13ba5d412fd7c1367d910df86b58f9c13f53cbb35d2e4b72 + languageName: node + linkType: hard + +"get-amd-module-type@npm:^4.1.0": + version: 4.1.0 + resolution: "get-amd-module-type@npm:4.1.0" + dependencies: + ast-module-types: ^4.0.0 + node-source-walk: ^5.0.1 + checksum: dd3f58e88efb6a2224bb38325fe21b1ab417ba105b7f90d49089141b0eb3c24aab1866a2e2bf370430bbfc7ef226fc0a2a5c657e161d1d42d8a243f44ebd4fbe + languageName: node + linkType: hard + +"get-caller-file@npm:^2.0.5": + version: 2.0.5 + resolution: "get-caller-file@npm:2.0.5" + checksum: b9769a836d2a98c3ee734a88ba712e62703f1df31b94b784762c433c27a386dd6029ff55c2a920c392e33657d80191edbf18c61487e198844844516f843496b9 + languageName: node + linkType: hard + +"get-intrinsic@npm:^1.1.3, get-intrinsic@npm:^1.2.1, get-intrinsic@npm:^1.2.3, get-intrinsic@npm:^1.2.4": + version: 1.2.4 + resolution: "get-intrinsic@npm:1.2.4" + dependencies: + es-errors: ^1.3.0 + function-bind: ^1.1.2 + has-proto: ^1.0.1 + has-symbols: ^1.0.3 + hasown: ^2.0.0 + checksum: 414e3cdf2c203d1b9d7d33111df746a4512a1aa622770b361dadddf8ed0b5aeb26c560f49ca077e24bfafb0acb55ca908d1f709216ccba33ffc548ec8a79a951 + languageName: node + linkType: hard + +"get-iterator@npm:^2.0.0, get-iterator@npm:^2.0.1": + version: 2.0.1 + resolution: "get-iterator@npm:2.0.1" + checksum: 353baac51f5e335c19cb734cbf0401d7c47deeac9d375e2939fed646fe52db2912d61ed2a60112050cf4687080817d159ec938803e48e03cd602edd489a116f2 + languageName: node + linkType: hard + +"get-own-enumerable-property-symbols@npm:^3.0.0": + version: 3.0.2 + resolution: "get-own-enumerable-property-symbols@npm:3.0.2" + checksum: 8f0331f14159f939830884799f937343c8c0a2c330506094bc12cbee3665d88337fe97a4ea35c002cc2bdba0f5d9975ad7ec3abb925015cdf2a93e76d4759ede + languageName: node + linkType: hard + +"get-package-type@npm:^0.1.0": + version: 0.1.0 + resolution: "get-package-type@npm:0.1.0" + checksum: bba0811116d11e56d702682ddef7c73ba3481f114590e705fc549f4d868972263896af313c57a25c076e3c0d567e11d919a64ba1b30c879be985fc9d44f96148 + languageName: node + linkType: hard + +"get-port@npm:^6.1.2": + version: 6.1.2 + resolution: "get-port@npm:6.1.2" + checksum: e3c3d591492a11393455ef220f24c812a28f7da56ec3e4a2512d931a1f196d42850b50ac6138349a44622eda6dc3c0ccd8495cd91376d968e2d9e6f6f849e0a9 + languageName: node + linkType: hard + +"get-port@npm:^7.1.0": + version: 7.1.0 + resolution: "get-port@npm:7.1.0" + checksum: f4d23b43026124007663a899578cc87ff37bfcf645c5c72651e9810ebafc759857784e409fb8e0ada9b90e5c5db089b0ae2f5f6b49fba1ce2e0aff86094ab17d + languageName: node + linkType: hard + +"get-stream@npm:^5.1.0": + version: 5.2.0 + resolution: "get-stream@npm:5.2.0" + dependencies: + pump: ^3.0.0 + checksum: 8bc1a23174a06b2b4ce600df38d6c98d2ef6d84e020c1ddad632ad75bac4e092eeb40e4c09e0761c35fc2dbc5e7fff5dab5e763a383582c4a167dd69a905bd12 + languageName: node + linkType: hard + +"get-stream@npm:^6.0.0, get-stream@npm:^6.0.1": + version: 6.0.1 + resolution: "get-stream@npm:6.0.1" + checksum: e04ecece32c92eebf5b8c940f51468cd53554dcbb0ea725b2748be583c9523d00128137966afce410b9b051eb2ef16d657cd2b120ca8edafcf5a65e81af63cad + languageName: node + linkType: hard + +"get-symbol-description@npm:^1.0.2": + version: 1.0.2 + resolution: "get-symbol-description@npm:1.0.2" + dependencies: + call-bind: ^1.0.5 + es-errors: ^1.3.0 + get-intrinsic: ^1.2.4 + checksum: e1cb53bc211f9dbe9691a4f97a46837a553c4e7caadd0488dc24ac694db8a390b93edd412b48dcdd0b4bbb4c595de1709effc75fc87c0839deedc6968f5bd973 + languageName: node + linkType: hard + +"get-tsconfig@npm:^4.5.0": + version: 4.7.4 + resolution: "get-tsconfig@npm:4.7.4" + dependencies: + resolve-pkg-maps: ^1.0.0 + checksum: d6519a1b20d1bc2811d3dc1e3bef08e96e83d31f10f27c9c5a3a7ed8913698c7c01cfae9c34aff9f1348687a0ec48d9d19b668c091f7cfa0ddf816bf28d1ea0d + languageName: node + linkType: hard + +"get-uri@npm:^6.0.1": + version: 6.0.3 + resolution: "get-uri@npm:6.0.3" + dependencies: + basic-ftp: ^5.0.2 + data-uri-to-buffer: ^6.0.2 + debug: ^4.3.4 + fs-extra: ^11.2.0 + checksum: 3eda448a59fa1ba82ad4f252e58490fec586b644f2dc9c98ba3ab20e801ecc8a1bc1784829c474c9d188edb633d4dfd81c33894ca6117a33a16e8e013b41b40f + languageName: node + linkType: hard + +"glob-parent@npm:^5.1.2": + version: 5.1.2 + resolution: "glob-parent@npm:5.1.2" + dependencies: + is-glob: ^4.0.1 + checksum: f4f2bfe2425296e8a47e36864e4f42be38a996db40420fe434565e4480e3322f18eb37589617a98640c5dc8fdec1a387007ee18dbb1f3f5553409c34d17f425e + languageName: node + linkType: hard + +"glob-parent@npm:^6.0.2": + version: 6.0.2 + resolution: "glob-parent@npm:6.0.2" + dependencies: + is-glob: ^4.0.3 + checksum: c13ee97978bef4f55106b71e66428eb1512e71a7466ba49025fc2aec59a5bfb0954d5abd58fc5ee6c9b076eef4e1f6d3375c2e964b88466ca390da4419a786a8 + languageName: node + linkType: hard + +"glob-to-regexp@npm:^0.4.1": + version: 0.4.1 + resolution: "glob-to-regexp@npm:0.4.1" + checksum: e795f4e8f06d2a15e86f76e4d92751cf8bbfcf0157cea5c2f0f35678a8195a750b34096b1256e436f0cebc1883b5ff0888c47348443e69546a5a87f9e1eb1167 + languageName: node + linkType: hard + +"glob@npm:^10.2.2, glob@npm:^10.3.10": + version: 10.3.12 + resolution: "glob@npm:10.3.12" + dependencies: + foreground-child: ^3.1.0 + jackspeak: ^2.3.6 + minimatch: ^9.0.1 + minipass: ^7.0.4 + path-scurry: ^1.10.2 + bin: + glob: dist/esm/bin.mjs + checksum: 2b0949d6363021aaa561b108ac317bf5a97271b8a5d7a5fac1a176e40e8068ecdcccc992f8a7e958593d501103ac06d673de92adc1efcbdab45edefe35f8d7c6 + languageName: node + linkType: hard + +"glob@npm:^7.1.3, glob@npm:^7.1.4, glob@npm:^7.1.6": + version: 7.2.3 + resolution: "glob@npm:7.2.3" + dependencies: + fs.realpath: ^1.0.0 + inflight: ^1.0.4 + inherits: 2 + minimatch: ^3.1.1 + once: ^1.3.0 + path-is-absolute: ^1.0.0 + checksum: 29452e97b38fa704dabb1d1045350fb2467cf0277e155aa9ff7077e90ad81d1ea9d53d3ee63bd37c05b09a065e90f16aec4a65f5b8de401d1dac40bc5605d133 + languageName: node + linkType: hard + +"globals@npm:^11.1.0": + version: 11.12.0 + resolution: "globals@npm:11.12.0" + checksum: 67051a45eca3db904aee189dfc7cd53c20c7d881679c93f6146ddd4c9f4ab2268e68a919df740d39c71f4445d2b38ee360fc234428baea1dbdfe68bbcb46979e + languageName: node + linkType: hard + +"globals@npm:^13.19.0": + version: 13.24.0 + resolution: "globals@npm:13.24.0" + dependencies: + type-fest: ^0.20.2 + checksum: 56066ef058f6867c04ff203b8a44c15b038346a62efbc3060052a1016be9f56f4cf0b2cd45b74b22b81e521a889fc7786c73691b0549c2f3a6e825b3d394f43c + languageName: node + linkType: hard + +"globalthis@npm:^1.0.3": + version: 1.0.4 + resolution: "globalthis@npm:1.0.4" + dependencies: + define-properties: ^1.2.1 + gopd: ^1.0.1 + checksum: 39ad667ad9f01476474633a1834a70842041f70a55571e8dcef5fb957980a92da5022db5430fca8aecc5d47704ae30618c0bc877a579c70710c904e9ef06108a + languageName: node + linkType: hard + +"globby@npm:^11.0.1, globby@npm:^11.0.3, globby@npm:^11.1.0": + version: 11.1.0 + resolution: "globby@npm:11.1.0" + dependencies: + array-union: ^2.1.0 + dir-glob: ^3.0.1 + fast-glob: ^3.2.9 + ignore: ^5.2.0 + merge2: ^1.4.1 + slash: ^3.0.0 + checksum: b4be8885e0cfa018fc783792942d53926c35c50b3aefd3fdcfb9d22c627639dc26bd2327a40a0b74b074100ce95bb7187bfeae2f236856aa3de183af7a02aea6 + languageName: node + linkType: hard + +"gonzales-pe@npm:^4.2.3, gonzales-pe@npm:^4.3.0": + version: 4.3.0 + resolution: "gonzales-pe@npm:4.3.0" + dependencies: + minimist: ^1.2.5 + bin: + gonzales: bin/gonzales.js + checksum: 49d60fc49ad35639e5d55923c1516d3ec2e4de5e6e5913ec3458a479b66623e54a060d568295349b0bb9f96ee970c473ff984d4b82a5cfeaf736c55f0d6dc3b7 + languageName: node + linkType: hard + +"gopd@npm:^1.0.1": + version: 1.0.1 + resolution: "gopd@npm:1.0.1" + dependencies: + get-intrinsic: ^1.1.3 + checksum: a5ccfb8806e0917a94e0b3de2af2ea4979c1da920bc381667c260e00e7cafdbe844e2cb9c5bcfef4e5412e8bf73bab837285bc35c7ba73aaaf0134d4583393a6 + languageName: node + linkType: hard + +"graceful-fs@npm:^4.1.15, graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.11, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.9": + version: 4.2.11 + resolution: "graceful-fs@npm:4.2.11" + checksum: ac85f94da92d8eb6b7f5a8b20ce65e43d66761c55ce85ac96df6865308390da45a8d3f0296dd3a663de65d30ba497bd46c696cc1e248c72b13d6d567138a4fc7 + languageName: node + linkType: hard + +"graphemer@npm:^1.4.0": + version: 1.4.0 + resolution: "graphemer@npm:1.4.0" + checksum: bab8f0be9b568857c7bec9fda95a89f87b783546d02951c40c33f84d05bb7da3fd10f863a9beb901463669b6583173a8c8cc6d6b306ea2b9b9d5d3d943c3a673 + languageName: node + linkType: hard + +"hard-rejection@npm:^2.1.0": + version: 2.1.0 + resolution: "hard-rejection@npm:2.1.0" + checksum: 7baaf80a0c7fff4ca79687b4060113f1529589852152fa935e6787a2bc96211e784ad4588fb3048136ff8ffc9dfcf3ae385314a5b24db32de20bea0d1597f9dc + languageName: node + linkType: hard + +"has-bigints@npm:^1.0.1, has-bigints@npm:^1.0.2": + version: 1.0.2 + resolution: "has-bigints@npm:1.0.2" + checksum: 390e31e7be7e5c6fe68b81babb73dfc35d413604d7ee5f56da101417027a4b4ce6a27e46eff97ad040c835b5d228676eae99a9b5c3bc0e23c8e81a49241ff45b + languageName: node + linkType: hard + +"has-flag@npm:^3.0.0": + version: 3.0.0 + resolution: "has-flag@npm:3.0.0" + checksum: 4a15638b454bf086c8148979aae044dd6e39d63904cd452d970374fa6a87623423da485dfb814e7be882e05c096a7ccf1ebd48e7e7501d0208d8384ff4dea73b + languageName: node + linkType: hard + +"has-flag@npm:^4.0.0": + version: 4.0.0 + resolution: "has-flag@npm:4.0.0" + checksum: 261a1357037ead75e338156b1f9452c016a37dcd3283a972a30d9e4a87441ba372c8b81f818cd0fbcd9c0354b4ae7e18b9e1afa1971164aef6d18c2b6095a8ad + languageName: node + linkType: hard + +"has-own-prop@npm:^2.0.0": + version: 2.0.0 + resolution: "has-own-prop@npm:2.0.0" + checksum: ca6336e85ead2295c9603880cbc199e2d3ff7eaea0e9035d68fbc79892e9cf681abc62c0909520f112c671dad9961be2173b21dff951358cc98425c560e789e0 + languageName: node + linkType: hard + +"has-property-descriptors@npm:^1.0.0, has-property-descriptors@npm:^1.0.2": + version: 1.0.2 + resolution: "has-property-descriptors@npm:1.0.2" + dependencies: + es-define-property: ^1.0.0 + checksum: fcbb246ea2838058be39887935231c6d5788babed499d0e9d0cc5737494c48aba4fe17ba1449e0d0fbbb1e36175442faa37f9c427ae357d6ccb1d895fbcd3de3 + languageName: node + linkType: hard + +"has-proto@npm:^1.0.1, has-proto@npm:^1.0.3": + version: 1.0.3 + resolution: "has-proto@npm:1.0.3" + checksum: fe7c3d50b33f50f3933a04413ed1f69441d21d2d2944f81036276d30635cad9279f6b43bc8f32036c31ebdfcf6e731150f46c1907ad90c669ffe9b066c3ba5c4 + languageName: node + linkType: hard + +"has-symbols@npm:^1.0.2, has-symbols@npm:^1.0.3": + version: 1.0.3 + resolution: "has-symbols@npm:1.0.3" + checksum: a054c40c631c0d5741a8285010a0777ea0c068f99ed43e5d6eb12972da223f8af553a455132fdb0801bdcfa0e0f443c0c03a68d8555aa529b3144b446c3f2410 + languageName: node + linkType: hard + +"has-tostringtag@npm:^1.0.0, has-tostringtag@npm:^1.0.2": + version: 1.0.2 + resolution: "has-tostringtag@npm:1.0.2" + dependencies: + has-symbols: ^1.0.3 + checksum: 999d60bb753ad714356b2c6c87b7fb74f32463b8426e159397da4bde5bca7e598ab1073f4d8d4deafac297f2eb311484cd177af242776bf05f0d11565680468d + languageName: node + linkType: hard + +"hash-base@npm:^3.0.0": + version: 3.1.0 + resolution: "hash-base@npm:3.1.0" + dependencies: + inherits: ^2.0.4 + readable-stream: ^3.6.0 + safe-buffer: ^5.2.0 + checksum: 26b7e97ac3de13cb23fc3145e7e3450b0530274a9562144fc2bf5c1e2983afd0e09ed7cc3b20974ba66039fad316db463da80eb452e7373e780cbee9a0d2f2dc + languageName: node + linkType: hard + +"hash-base@npm:~3.0": + version: 3.0.4 + resolution: "hash-base@npm:3.0.4" + dependencies: + inherits: ^2.0.1 + safe-buffer: ^5.0.1 + checksum: 878465a0dfcc33cce195c2804135352c590d6d10980adc91a9005fd377e77f2011256c2b7cfce472e3f2e92d561d1bf3228d2da06348a9017ce9a258b3b49764 + languageName: node + linkType: hard + +"hash.js@npm:^1.0.0, hash.js@npm:^1.0.3, hash.js@npm:^1.1.7": + version: 1.1.7 + resolution: "hash.js@npm:1.1.7" + dependencies: + inherits: ^2.0.3 + minimalistic-assert: ^1.0.1 + checksum: e350096e659c62422b85fa508e4b3669017311aa4c49b74f19f8e1bc7f3a54a584fdfd45326d4964d6011f2b2d882e38bea775a96046f2a61b7779a979629d8f + languageName: node + linkType: hard + +"hashlru@npm:^2.3.0": + version: 2.3.0 + resolution: "hashlru@npm:2.3.0" + checksum: 38b3559e6fb9d19fa731edc52d8d7e72cd378f708dcb01cecd4a6ba0c52f06d7d06d6277249f5c43d9915d8dda9be31adad768a379eef188db213c3f2b09278d + languageName: node + linkType: hard + +"hasown@npm:^2.0.0, hasown@npm:^2.0.1, hasown@npm:^2.0.2": + version: 2.0.2 + resolution: "hasown@npm:2.0.2" + dependencies: + function-bind: ^1.1.2 + checksum: e8516f776a15149ca6c6ed2ae3110c417a00b62260e222590e54aa367cbcd6ed99122020b37b7fbdf05748df57b265e70095d7bf35a47660587619b15ffb93db + languageName: node + linkType: hard + +"hexoid@npm:^1.0.0": + version: 1.0.0 + resolution: "hexoid@npm:1.0.0" + checksum: 27a148ca76a2358287f40445870116baaff4a0ed0acc99900bf167f0f708ffd82e044ff55e9949c71963852b580fc024146d3ac6d5d76b508b78d927fa48ae2d + languageName: node + linkType: hard + +"hmac-drbg@npm:^1.0.1": + version: 1.0.1 + resolution: "hmac-drbg@npm:1.0.1" + dependencies: + hash.js: ^1.0.3 + minimalistic-assert: ^1.0.0 + minimalistic-crypto-utils: ^1.0.1 + checksum: bd30b6a68d7f22d63f10e1888aee497d7c2c5c0bb469e66bbdac99f143904d1dfe95f8131f95b3e86c86dd239963c9d972fcbe147e7cffa00e55d18585c43fe0 + languageName: node + linkType: hard + +"hosted-git-info@npm:^2.1.4": + version: 2.8.9 + resolution: "hosted-git-info@npm:2.8.9" + checksum: c955394bdab888a1e9bb10eb33029e0f7ce5a2ac7b3f158099dc8c486c99e73809dca609f5694b223920ca2174db33d32b12f9a2a47141dc59607c29da5a62dd + languageName: node + linkType: hard + +"html-escaper@npm:^2.0.0": + version: 2.0.2 + resolution: "html-escaper@npm:2.0.2" + checksum: d2df2da3ad40ca9ee3a39c5cc6475ef67c8f83c234475f24d8e9ce0dc80a2c82df8e1d6fa78ddd1e9022a586ea1bd247a615e80a5cd9273d90111ddda7d9e974 + languageName: node + linkType: hard + +"http-assert@npm:^1.3.0": + version: 1.5.0 + resolution: "http-assert@npm:1.5.0" + dependencies: + deep-equal: ~1.0.1 + http-errors: ~1.8.0 + checksum: 69c9b3c14cf8b2822916360a365089ce936c883c49068f91c365eccba5c141a9964d19fdda589150a480013bf503bf37d8936c732e9635819339e730ab0e7527 + languageName: node + linkType: hard + +"http-cache-semantics@npm:^4.1.1": + version: 4.1.1 + resolution: "http-cache-semantics@npm:4.1.1" + checksum: 83ac0bc60b17a3a36f9953e7be55e5c8f41acc61b22583060e8dedc9dd5e3607c823a88d0926f9150e571f90946835c7fe150732801010845c72cd8bbff1a236 + languageName: node + linkType: hard + +"http-errors@npm:2.0.0, http-errors@npm:^2.0.0": + version: 2.0.0 + resolution: "http-errors@npm:2.0.0" + dependencies: + depd: 2.0.0 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 2.0.1 + toidentifier: 1.0.1 + checksum: 9b0a3782665c52ce9dc658a0d1560bcb0214ba5699e4ea15aefb2a496e2ca83db03ebc42e1cce4ac1f413e4e0d2d736a3fd755772c556a9a06853ba2a0b7d920 + languageName: node + linkType: hard + +"http-errors@npm:^1.6.3, http-errors@npm:^1.7.3, http-errors@npm:^1.8.1, http-errors@npm:~1.8.0": + version: 1.8.1 + resolution: "http-errors@npm:1.8.1" + dependencies: + depd: ~1.1.2 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: ">= 1.5.0 < 2" + toidentifier: 1.0.1 + checksum: d3c7e7e776fd51c0a812baff570bdf06fe49a5dc448b700ab6171b1250e4cf7db8b8f4c0b133e4bfe2451022a5790c1ca6c2cae4094dedd6ac8304a1267f91d2 + languageName: node + linkType: hard + +"http-errors@npm:~1.6.2": + version: 1.6.3 + resolution: "http-errors@npm:1.6.3" + dependencies: + depd: ~1.1.2 + inherits: 2.0.3 + setprototypeof: 1.1.0 + statuses: ">= 1.4.0 < 2" + checksum: a9654ee027e3d5de305a56db1d1461f25709ac23267c6dc28cdab8323e3f96caa58a9a6a5e93ac15d7285cee0c2f019378c3ada9026e7fe19c872d695f27de7c + languageName: node + linkType: hard + +"http-proxy-agent@npm:^7.0.0, http-proxy-agent@npm:^7.0.1": + version: 7.0.2 + resolution: "http-proxy-agent@npm:7.0.2" + dependencies: + agent-base: ^7.1.0 + debug: ^4.3.4 + checksum: 670858c8f8f3146db5889e1fa117630910101db601fff7d5a8aa637da0abedf68c899f03d3451cac2f83bcc4c3d2dabf339b3aa00ff8080571cceb02c3ce02f3 + languageName: node + linkType: hard + +"http-proxy@npm:^1.18.1": + version: 1.18.1 + resolution: "http-proxy@npm:1.18.1" + dependencies: + eventemitter3: ^4.0.0 + follow-redirects: ^1.0.0 + requires-port: ^1.0.0 + checksum: f5bd96bf83e0b1e4226633dbb51f8b056c3e6321917df402deacec31dd7fe433914fc7a2c1831cf7ae21e69c90b3a669b8f434723e9e8b71fd68afe30737b6a5 + languageName: node + linkType: hard + +"https-proxy-agent@npm:^7.0.1, https-proxy-agent@npm:^7.0.2, https-proxy-agent@npm:^7.0.3": + version: 7.0.4 + resolution: "https-proxy-agent@npm:7.0.4" + dependencies: + agent-base: ^7.0.2 + debug: 4 + checksum: daaab857a967a2519ddc724f91edbbd388d766ff141b9025b629f92b9408fc83cee8a27e11a907aede392938e9c398e240d643e178408a59e4073539cde8cfe9 + languageName: node + linkType: hard + +"human-signals@npm:^2.1.0": + version: 2.1.0 + resolution: "human-signals@npm:2.1.0" + checksum: b87fd89fce72391625271454e70f67fe405277415b48bcc0117ca73d31fa23a4241787afdc8d67f5a116cf37258c052f59ea82daffa72364d61351423848e3b8 + languageName: node + linkType: hard + +"human-signals@npm:^4.3.0": + version: 4.3.1 + resolution: "human-signals@npm:4.3.1" + checksum: 6f12958df3f21b6fdaf02d90896c271df00636a31e2bbea05bddf817a35c66b38a6fdac5863e2df85bd52f34958997f1f50350ff97249e1dff8452865d5235d1 + languageName: node + linkType: hard + +"hyperdyperid@npm:^1.2.0": + version: 1.2.0 + resolution: "hyperdyperid@npm:1.2.0" + checksum: 210029d1c86926f09109f6317d143f8b056fc38e8dd11b0c3e3205fc6c6ff8429fb55b4b9c2bce065462719ed9d34366eced387aaa0035d93eb76b306a8547ef + languageName: node + linkType: hard + +"iconv-lite@npm:0.4.24": + version: 0.4.24 + resolution: "iconv-lite@npm:0.4.24" + dependencies: + safer-buffer: ">= 2.1.2 < 3" + checksum: bd9f120f5a5b306f0bc0b9ae1edeb1577161503f5f8252a20f1a9e56ef8775c9959fd01c55f2d3a39d9a8abaf3e30c1abeb1895f367dcbbe0a8fd1c9ca01c4f6 + languageName: node + linkType: hard + +"iconv-lite@npm:^0.6.2": + version: 0.6.3 + resolution: "iconv-lite@npm:0.6.3" + dependencies: + safer-buffer: ">= 2.1.2 < 3.0.0" + checksum: 3f60d47a5c8fc3313317edfd29a00a692cc87a19cac0159e2ce711d0ebc9019064108323b5e493625e25594f11c6236647d8e256fbe7a58f4a3b33b89e6d30bf + languageName: node + linkType: hard + +"ieee754@npm:^1.1.13, ieee754@npm:^1.2.1": + version: 1.2.1 + resolution: "ieee754@npm:1.2.1" + checksum: 5144c0c9815e54ada181d80a0b810221a253562422e7c6c3a60b1901154184f49326ec239d618c416c1c5945a2e197107aee8d986a3dd836b53dffefd99b5e7e + languageName: node + linkType: hard + +"ignore@npm:^5.2.0, ignore@npm:^5.2.4": + version: 5.3.1 + resolution: "ignore@npm:5.3.1" + checksum: 71d7bb4c1dbe020f915fd881108cbe85a0db3d636a0ea3ba911393c53946711d13a9b1143c7e70db06d571a5822c0a324a6bcde5c9904e7ca5047f01f1bf8cd3 + languageName: node + linkType: hard + +"immediate@npm:~3.0.5": + version: 3.0.6 + resolution: "immediate@npm:3.0.6" + checksum: f9b3486477555997657f70318cc8d3416159f208bec4cca3ff3442fd266bc23f50f0c9bd8547e1371a6b5e82b821ec9a7044a4f7b944798b25aa3cc6d5e63e62 + languageName: node + linkType: hard + +"import-fresh@npm:^3.2.1, import-fresh@npm:^3.3.0": + version: 3.3.0 + resolution: "import-fresh@npm:3.3.0" + dependencies: + parent-module: ^1.0.0 + resolve-from: ^4.0.0 + checksum: 2cacfad06e652b1edc50be650f7ec3be08c5e5a6f6d12d035c440a42a8cc028e60a5b99ca08a77ab4d6b1346da7d971915828f33cdab730d3d42f08242d09baa + languageName: node + linkType: hard + +"import-local@npm:^3.0.2": + version: 3.1.0 + resolution: "import-local@npm:3.1.0" + dependencies: + pkg-dir: ^4.2.0 + resolve-cwd: ^3.0.0 + bin: + import-local-fixture: fixtures/cli.js + checksum: bfcdb63b5e3c0e245e347f3107564035b128a414c4da1172a20dc67db2504e05ede4ac2eee1252359f78b0bfd7b19ef180aec427c2fce6493ae782d73a04cddd + languageName: node + linkType: hard + +"imurmurhash@npm:^0.1.4": + version: 0.1.4 + resolution: "imurmurhash@npm:0.1.4" + checksum: 7cae75c8cd9a50f57dadd77482359f659eaebac0319dd9368bcd1714f55e65badd6929ca58569da2b6494ef13fdd5598cd700b1eba23f8b79c5f19d195a3ecf7 + languageName: node + linkType: hard + +"indent-string@npm:^4.0.0": + version: 4.0.0 + resolution: "indent-string@npm:4.0.0" + checksum: 824cfb9929d031dabf059bebfe08cf3137365e112019086ed3dcff6a0a7b698cb80cf67ccccde0e25b9e2d7527aa6cc1fed1ac490c752162496caba3e6699612 + languageName: node + linkType: hard + +"indexes-of@npm:^1.0.1": + version: 1.0.1 + resolution: "indexes-of@npm:1.0.1" + checksum: 4f9799b1739a62f3e02d09f6f4162cf9673025282af7fa36e790146e7f4e216dad3e776a25b08536c093209c9fcb5ea7bd04b082d42686a45f58ff401d6da32e + languageName: node + linkType: hard + +"inflation@npm:^2.0.0": + version: 2.1.0 + resolution: "inflation@npm:2.1.0" + checksum: 80c1b5d9ec408105a85f0623c824d668ddf0cadafd8d9716c0737990e5a712ae5f7d6bb0ff216b6648eccb9c6ac69fe06c0d8c58456d168db5bf550c89dd74ed + languageName: node + linkType: hard + +"inflight@npm:^1.0.4": + version: 1.0.6 + resolution: "inflight@npm:1.0.6" + dependencies: + once: ^1.3.0 + wrappy: 1 + checksum: f4f76aa072ce19fae87ce1ef7d221e709afb59d445e05d47fba710e85470923a75de35bfae47da6de1b18afc3ce83d70facf44cfb0aff89f0a3f45c0a0244dfd + languageName: node + linkType: hard + +"inherits@npm:2, inherits@npm:2.0.4, inherits@npm:^2.0.1, inherits@npm:^2.0.3, inherits@npm:^2.0.4, inherits@npm:~2.0.3, inherits@npm:~2.0.4": + version: 2.0.4 + resolution: "inherits@npm:2.0.4" + checksum: 4a48a733847879d6cf6691860a6b1e3f0f4754176e4d71494c41f3475553768b10f84b5ce1d40fbd0e34e6bfbb864ee35858ad4dd2cf31e02fc4a154b724d7f1 + languageName: node + linkType: hard + +"inherits@npm:2.0.3": + version: 2.0.3 + resolution: "inherits@npm:2.0.3" + checksum: 78cb8d7d850d20a5e9a7f3620db31483aa00ad5f722ce03a55b110e5a723539b3716a3b463e2b96ce3fe286f33afc7c131fa2f91407528ba80cea98a7545d4c0 + languageName: node + linkType: hard + +"ini@npm:~1.3.0": + version: 1.3.8 + resolution: "ini@npm:1.3.8" + checksum: dfd98b0ca3a4fc1e323e38a6c8eb8936e31a97a918d3b377649ea15bdb15d481207a0dda1021efbd86b464cae29a0d33c1d7dcaf6c5672bee17fa849bc50a1b3 + languageName: node + linkType: hard + +"interface-datastore@npm:^8.0.0, interface-datastore@npm:^8.2.0, interface-datastore@npm:^8.2.11": + version: 8.2.11 + resolution: "interface-datastore@npm:8.2.11" + dependencies: + interface-store: ^5.0.0 + uint8arrays: ^5.0.2 + checksum: 24c906277c21d8d74d981fe08cc5a2dde727e60d7d77b82930a09d0c8315a63e30e1e4a4b9f781f2c2e2a2e905f4dbb8e6db9184bd305bd4174c94c4dad3aefb + languageName: node + linkType: hard + +"interface-store@npm:^5.0.0, interface-store@npm:^5.1.8": + version: 5.1.8 + resolution: "interface-store@npm:5.1.8" + checksum: 7b3b67e5fc3e2d9286db94e1941893176a989f89e6cb8027425acfbb5509b8d9845aaa614bac1b03514f6e7852cc713e568c67e3ab349bf56b3c9ffdc516e9bb + languageName: node + linkType: hard + +"internal-slot@npm:^1.0.7": + version: 1.0.7 + resolution: "internal-slot@npm:1.0.7" + dependencies: + es-errors: ^1.3.0 + hasown: ^2.0.0 + side-channel: ^1.0.4 + checksum: cadc5eea5d7d9bc2342e93aae9f31f04c196afebb11bde97448327049f492cd7081e18623ae71388aac9cd237b692ca3a105be9c68ac39c1dec679d7409e33eb + languageName: node + linkType: hard + +"interpret@npm:^3.1.1": + version: 3.1.1 + resolution: "interpret@npm:3.1.1" + checksum: 35cebcf48c7351130437596d9ab8c8fe131ce4038da4561e6d665f25640e0034702a031cf7e3a5cea60ac7ac548bf17465e0571ede126f3d3a6933152171ac82 + languageName: node + linkType: hard + +"ip-address@npm:^9.0.5": + version: 9.0.5 + resolution: "ip-address@npm:9.0.5" + dependencies: + jsbn: 1.1.0 + sprintf-js: ^1.1.3 + checksum: aa15f12cfd0ef5e38349744e3654bae649a34c3b10c77a674a167e99925d1549486c5b14730eebce9fea26f6db9d5e42097b00aa4f9f612e68c79121c71652dc + languageName: node + linkType: hard + +"ip-regex@npm:^5.0.0": + version: 5.0.0 + resolution: "ip-regex@npm:5.0.0" + checksum: 4098b2df89c015f1484a5946e733ec126af8c1828719d90e09f04af23ce487e1a852670e4d3f51b0dc6dfbaf7d8bfab23fd7893ca60e69833da99b7b1ee3623b + languageName: node + linkType: hard + +"ipaddr.js@npm:^2.1.0": + version: 2.2.0 + resolution: "ipaddr.js@npm:2.2.0" + checksum: 770ba8451fd9bf78015e8edac0d5abd7a708cbf75f9429ca9147a9d2f3a2d60767cd5de2aab2b1e13ca6e4445bdeff42bf12ef6f151c07a5c6cf8a44328e2859 + languageName: node + linkType: hard + +"is-arguments@npm:^1.0.4": + version: 1.1.1 + resolution: "is-arguments@npm:1.1.1" + dependencies: + call-bind: ^1.0.2 + has-tostringtag: ^1.0.0 + checksum: 7f02700ec2171b691ef3e4d0e3e6c0ba408e8434368504bb593d0d7c891c0dbfda6d19d30808b904a6cb1929bca648c061ba438c39f296c2a8ca083229c49f27 + languageName: node + linkType: hard + +"is-array-buffer@npm:^3.0.4": + version: 3.0.4 + resolution: "is-array-buffer@npm:3.0.4" + dependencies: + call-bind: ^1.0.2 + get-intrinsic: ^1.2.1 + checksum: e4e3e6ef0ff2239e75371d221f74bc3c26a03564a22efb39f6bb02609b598917ddeecef4e8c877df2a25888f247a98198959842a5e73236bc7f22cabdf6351a7 + languageName: node + linkType: hard + +"is-arrayish@npm:^0.2.1": + version: 0.2.1 + resolution: "is-arrayish@npm:0.2.1" + checksum: eef4417e3c10e60e2c810b6084942b3ead455af16c4509959a27e490e7aee87cfb3f38e01bbde92220b528a0ee1a18d52b787e1458ee86174d8c7f0e58cd488f + languageName: node + linkType: hard + +"is-arrayish@npm:^0.3.1": + version: 0.3.2 + resolution: "is-arrayish@npm:0.3.2" + checksum: 977e64f54d91c8f169b59afcd80ff19227e9f5c791fa28fa2e5bce355cbaf6c2c356711b734656e80c9dd4a854dd7efcf7894402f1031dfc5de5d620775b4d5f + languageName: node + linkType: hard + +"is-bigint@npm:^1.0.1": + version: 1.0.4 + resolution: "is-bigint@npm:1.0.4" + dependencies: + has-bigints: ^1.0.1 + checksum: c56edfe09b1154f8668e53ebe8252b6f185ee852a50f9b41e8d921cb2bed425652049fbe438723f6cb48a63ca1aa051e948e7e401e093477c99c84eba244f666 + languageName: node + linkType: hard + +"is-boolean-object@npm:^1.1.0": + version: 1.1.2 + resolution: "is-boolean-object@npm:1.1.2" + dependencies: + call-bind: ^1.0.2 + has-tostringtag: ^1.0.0 + checksum: c03b23dbaacadc18940defb12c1c0e3aaece7553ef58b162a0f6bba0c2a7e1551b59f365b91e00d2dbac0522392d576ef322628cb1d036a0fe51eb466db67222 + languageName: node + linkType: hard + +"is-buffer@npm:^2.0.5": + version: 2.0.5 + resolution: "is-buffer@npm:2.0.5" + checksum: 764c9ad8b523a9f5a32af29bdf772b08eb48c04d2ad0a7240916ac2688c983bf5f8504bf25b35e66240edeb9d9085461f9b5dae1f3d2861c6b06a65fe983de42 + languageName: node + linkType: hard + +"is-callable@npm:^1.1.3, is-callable@npm:^1.1.4, is-callable@npm:^1.2.7": + version: 1.2.7 + resolution: "is-callable@npm:1.2.7" + checksum: 61fd57d03b0d984e2ed3720fb1c7a897827ea174bd44402878e059542ea8c4aeedee0ea0985998aa5cc2736b2fa6e271c08587addb5b3959ac52cf665173d1ac + languageName: node + linkType: hard + +"is-core-module@npm:^2.1.0, is-core-module@npm:^2.11.0, is-core-module@npm:^2.13.0, is-core-module@npm:^2.13.1": + version: 2.13.1 + resolution: "is-core-module@npm:2.13.1" + dependencies: + hasown: ^2.0.0 + checksum: 256559ee8a9488af90e4bad16f5583c6d59e92f0742e9e8bb4331e758521ee86b810b93bae44f390766ffbc518a0488b18d9dab7da9a5ff997d499efc9403f7c + languageName: node + linkType: hard + +"is-data-view@npm:^1.0.1": + version: 1.0.1 + resolution: "is-data-view@npm:1.0.1" + dependencies: + is-typed-array: ^1.1.13 + checksum: 4ba4562ac2b2ec005fefe48269d6bd0152785458cd253c746154ffb8a8ab506a29d0cfb3b74af87513843776a88e4981ae25c89457bf640a33748eab1a7216b5 + languageName: node + linkType: hard + +"is-date-object@npm:^1.0.1": + version: 1.0.5 + resolution: "is-date-object@npm:1.0.5" + dependencies: + has-tostringtag: ^1.0.0 + checksum: baa9077cdf15eb7b58c79398604ca57379b2fc4cf9aa7a9b9e295278648f628c9b201400c01c5e0f7afae56507d741185730307cbe7cad3b9f90a77e5ee342fc + languageName: node + linkType: hard + +"is-electron@npm:^2.2.0": + version: 2.2.2 + resolution: "is-electron@npm:2.2.2" + checksum: de5aa8bd8d72c96675b8d0f93fab4cc21f62be5440f65bc05c61338ca27bd851a64200f31f1bf9facbaa01b3dbfed7997b2186741d84b93b63e0aff1db6a9494 + languageName: node + linkType: hard + +"is-extglob@npm:^2.1.1": + version: 2.1.1 + resolution: "is-extglob@npm:2.1.1" + checksum: df033653d06d0eb567461e58a7a8c9f940bd8c22274b94bf7671ab36df5719791aae15eef6d83bbb5e23283967f2f984b8914559d4449efda578c775c4be6f85 + languageName: node + linkType: hard + +"is-fullwidth-code-point@npm:^3.0.0": + version: 3.0.0 + resolution: "is-fullwidth-code-point@npm:3.0.0" + checksum: 44a30c29457c7fb8f00297bce733f0a64cd22eca270f83e58c105e0d015e45c019491a4ab2faef91ab51d4738c670daff901c799f6a700e27f7314029e99e348 + languageName: node + linkType: hard + +"is-generator-fn@npm:^2.0.0": + version: 2.1.0 + resolution: "is-generator-fn@npm:2.1.0" + checksum: a6ad5492cf9d1746f73b6744e0c43c0020510b59d56ddcb78a91cbc173f09b5e6beff53d75c9c5a29feb618bfef2bf458e025ecf3a57ad2268e2fb2569f56215 + languageName: node + linkType: hard + +"is-generator-function@npm:^1.0.7": + version: 1.0.10 + resolution: "is-generator-function@npm:1.0.10" + dependencies: + has-tostringtag: ^1.0.0 + checksum: d54644e7dbaccef15ceb1e5d91d680eb5068c9ee9f9eb0a9e04173eb5542c9b51b5ab52c5537f5703e48d5fddfd376817c1ca07a84a407b7115b769d4bdde72b + languageName: node + linkType: hard + +"is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:^4.0.3": + version: 4.0.3 + resolution: "is-glob@npm:4.0.3" + dependencies: + is-extglob: ^2.1.1 + checksum: d381c1319fcb69d341cc6e6c7cd588e17cd94722d9a32dbd60660b993c4fb7d0f19438674e68dfec686d09b7c73139c9166b47597f846af387450224a8101ab4 + languageName: node + linkType: hard + +"is-interactive@npm:^1.0.0": + version: 1.0.0 + resolution: "is-interactive@npm:1.0.0" + checksum: 824808776e2d468b2916cdd6c16acacebce060d844c35ca6d82267da692e92c3a16fdba624c50b54a63f38bdc4016055b6f443ce57d7147240de4f8cdabaf6f9 + languageName: node + linkType: hard + +"is-lambda@npm:^1.0.1": + version: 1.0.1 + resolution: "is-lambda@npm:1.0.1" + checksum: 93a32f01940220532e5948538699ad610d5924ac86093fcee83022252b363eb0cc99ba53ab084a04e4fb62bf7b5731f55496257a4c38adf87af9c4d352c71c35 + languageName: node + linkType: hard + +"is-loopback-addr@npm:^2.0.2": + version: 2.0.2 + resolution: "is-loopback-addr@npm:2.0.2" + checksum: c7818bd2815aa7aad1efd410d38f58647759e206b43fcf5b3a35db866ceff9af0b0145f1dcba472267c6e1b965883d1ebf321f3eb18c6a8c1c609c4f91092f2f + languageName: node + linkType: hard + +"is-negative-zero@npm:^2.0.3": + version: 2.0.3 + resolution: "is-negative-zero@npm:2.0.3" + checksum: c1e6b23d2070c0539d7b36022d5a94407132411d01aba39ec549af824231f3804b1aea90b5e4e58e807a65d23ceb538ed6e355ce76b267bdd86edb757ffcbdcd + languageName: node + linkType: hard + +"is-number-object@npm:^1.0.4": + version: 1.0.7 + resolution: "is-number-object@npm:1.0.7" + dependencies: + has-tostringtag: ^1.0.0 + checksum: d1e8d01bb0a7134c74649c4e62da0c6118a0bfc6771ea3c560914d52a627873e6920dd0fd0ebc0e12ad2ff4687eac4c308f7e80320b973b2c8a2c8f97a7524f7 + languageName: node + linkType: hard + +"is-number@npm:^7.0.0": + version: 7.0.0 + resolution: "is-number@npm:7.0.0" + checksum: 456ac6f8e0f3111ed34668a624e45315201dff921e5ac181f8ec24923b99e9f32ca1a194912dc79d539c97d33dba17dc635202ff0b2cf98326f608323276d27a + languageName: node + linkType: hard + +"is-obj@npm:^1.0.1": + version: 1.0.1 + resolution: "is-obj@npm:1.0.1" + checksum: 3ccf0efdea12951e0b9c784e2b00e77e87b2f8bd30b42a498548a8afcc11b3287342a2030c308e473e93a7a19c9ea7854c99a8832a476591c727df2a9c79796c + languageName: node + linkType: hard + +"is-path-inside@npm:^3.0.3": + version: 3.0.3 + resolution: "is-path-inside@npm:3.0.3" + checksum: abd50f06186a052b349c15e55b182326f1936c89a78bf6c8f2b707412517c097ce04bc49a0ca221787bc44e1049f51f09a2ffb63d22899051988d3a618ba13e9 + languageName: node + linkType: hard + +"is-plain-obj@npm:^1.1.0": + version: 1.1.0 + resolution: "is-plain-obj@npm:1.1.0" + checksum: 0ee04807797aad50859652a7467481816cbb57e5cc97d813a7dcd8915da8195dc68c436010bf39d195226cde6a2d352f4b815f16f26b7bf486a5754290629931 + languageName: node + linkType: hard + +"is-plain-obj@npm:^2.1.0": + version: 2.1.0 + resolution: "is-plain-obj@npm:2.1.0" + checksum: cec9100678b0a9fe0248a81743041ed990c2d4c99f893d935545cfbc42876cbe86d207f3b895700c690ad2fa520e568c44afc1605044b535a7820c1d40e38daa + languageName: node + linkType: hard + +"is-plain-object@npm:^2.0.4": + version: 2.0.4 + resolution: "is-plain-object@npm:2.0.4" + dependencies: + isobject: ^3.0.1 + checksum: 2a401140cfd86cabe25214956ae2cfee6fbd8186809555cd0e84574f88de7b17abacb2e477a6a658fa54c6083ecbda1e6ae404c7720244cd198903848fca70ca + languageName: node + linkType: hard + +"is-regex@npm:^1.1.4": + version: 1.1.4 + resolution: "is-regex@npm:1.1.4" + dependencies: + call-bind: ^1.0.2 + has-tostringtag: ^1.0.0 + checksum: 362399b33535bc8f386d96c45c9feb04cf7f8b41c182f54174c1a45c9abbbe5e31290bbad09a458583ff6bf3b2048672cdb1881b13289569a7c548370856a652 + languageName: node + linkType: hard + +"is-regexp@npm:^1.0.0": + version: 1.0.0 + resolution: "is-regexp@npm:1.0.0" + checksum: be692828e24cba479ec33644326fa98959ec68ba77965e0291088c1a741feaea4919d79f8031708f85fd25e39de002b4520622b55460660b9c369e6f7187faef + languageName: node + linkType: hard + +"is-relative-path@npm:^1.0.2": + version: 1.0.2 + resolution: "is-relative-path@npm:1.0.2" + checksum: 6c2ccffd3c0a3e3990535d0571370883d558b825b51940085f3446ec338857f4552f44521dfec3e83b7e067de08c0b0369de290208a91200bcae2c569533e340 + languageName: node + linkType: hard + +"is-shared-array-buffer@npm:^1.0.2, is-shared-array-buffer@npm:^1.0.3": + version: 1.0.3 + resolution: "is-shared-array-buffer@npm:1.0.3" + dependencies: + call-bind: ^1.0.7 + checksum: a4fff602c309e64ccaa83b859255a43bb011145a42d3f56f67d9268b55bc7e6d98a5981a1d834186ad3105d6739d21547083fe7259c76c0468483fc538e716d8 + languageName: node + linkType: hard + +"is-stream@npm:^2.0.0": + version: 2.0.1 + resolution: "is-stream@npm:2.0.1" + checksum: b8e05ccdf96ac330ea83c12450304d4a591f9958c11fd17bed240af8d5ffe08aedafa4c0f4cfccd4d28dc9d4d129daca1023633d5c11601a6cbc77521f6fae66 + languageName: node + linkType: hard + +"is-stream@npm:^3.0.0": + version: 3.0.0 + resolution: "is-stream@npm:3.0.0" + checksum: 172093fe99119ffd07611ab6d1bcccfe8bc4aa80d864b15f43e63e54b7abc71e779acd69afdb854c4e2a67fdc16ae710e370eda40088d1cfc956a50ed82d8f16 + languageName: node + linkType: hard + +"is-string@npm:^1.0.5, is-string@npm:^1.0.7": + version: 1.0.7 + resolution: "is-string@npm:1.0.7" + dependencies: + has-tostringtag: ^1.0.0 + checksum: 323b3d04622f78d45077cf89aab783b2f49d24dc641aa89b5ad1a72114cfeff2585efc8c12ef42466dff32bde93d839ad321b26884cf75e5a7892a938b089989 + languageName: node + linkType: hard + +"is-symbol@npm:^1.0.2, is-symbol@npm:^1.0.3": + version: 1.0.4 + resolution: "is-symbol@npm:1.0.4" + dependencies: + has-symbols: ^1.0.2 + checksum: 92805812ef590738d9de49d677cd17dfd486794773fb6fa0032d16452af46e9b91bb43ffe82c983570f015b37136f4b53b28b8523bfb10b0ece7a66c31a54510 + languageName: node + linkType: hard + +"is-typed-array@npm:^1.1.13, is-typed-array@npm:^1.1.3": + version: 1.1.13 + resolution: "is-typed-array@npm:1.1.13" + dependencies: + which-typed-array: ^1.1.14 + checksum: 150f9ada183a61554c91e1c4290086d2c100b0dff45f60b028519be72a8db964da403c48760723bf5253979b8dffe7b544246e0e5351dcd05c5fdb1dcc1dc0f0 + languageName: node + linkType: hard + +"is-unicode-supported@npm:^0.1.0": + version: 0.1.0 + resolution: "is-unicode-supported@npm:0.1.0" + checksum: a2aab86ee7712f5c2f999180daaba5f361bdad1efadc9610ff5b8ab5495b86e4f627839d085c6530363c6d6d4ecbde340fb8e54bdb83da4ba8e0865ed5513c52 + languageName: node + linkType: hard + +"is-url-superb@npm:^4.0.0": + version: 4.0.0 + resolution: "is-url-superb@npm:4.0.0" + checksum: fd55e91c96349acb0d688f95fcb1ac67450e5db934976e3a8ff13ef446841e779a6f4d18b15f02331f05a3429c8fdaba2382ac1ab444059e86e9ffcde1ec8db0 + languageName: node + linkType: hard + +"is-url@npm:^1.2.4": + version: 1.2.4 + resolution: "is-url@npm:1.2.4" + checksum: 100e74b3b1feab87a43ef7653736e88d997eb7bd32e71fd3ebc413e58c1cbe56269699c776aaea84244b0567f2a7d68dfaa512a062293ed2f9fdecb394148432 + languageName: node + linkType: hard + +"is-weakref@npm:^1.0.2": + version: 1.0.2 + resolution: "is-weakref@npm:1.0.2" + dependencies: + call-bind: ^1.0.2 + checksum: 95bd9a57cdcb58c63b1c401c60a474b0f45b94719c30f548c891860f051bc2231575c290a6b420c6bc6e7ed99459d424c652bd5bf9a1d5259505dc35b4bf83de + languageName: node + linkType: hard + +"isarray@npm:^2.0.5": + version: 2.0.5 + resolution: "isarray@npm:2.0.5" + checksum: bd5bbe4104438c4196ba58a54650116007fa0262eccef13a4c55b2e09a5b36b59f1e75b9fcc49883dd9d4953892e6fc007eef9e9155648ceea036e184b0f930a + languageName: node + linkType: hard + +"isarray@npm:~1.0.0": + version: 1.0.0 + resolution: "isarray@npm:1.0.0" + checksum: f032df8e02dce8ec565cf2eb605ea939bdccea528dbcf565cdf92bfa2da9110461159d86a537388ef1acef8815a330642d7885b29010e8f7eac967c9993b65ab + languageName: node + linkType: hard + +"isexe@npm:^2.0.0": + version: 2.0.0 + resolution: "isexe@npm:2.0.0" + checksum: 26bf6c5480dda5161c820c5b5c751ae1e766c587b1f951ea3fcfc973bafb7831ae5b54a31a69bd670220e42e99ec154475025a468eae58ea262f813fdc8d1c62 + languageName: node + linkType: hard + +"isexe@npm:^3.1.1": + version: 3.1.1 + resolution: "isexe@npm:3.1.1" + checksum: 7fe1931ee4e88eb5aa524cd3ceb8c882537bc3a81b02e438b240e47012eef49c86904d0f0e593ea7c3a9996d18d0f1f3be8d3eaa92333977b0c3a9d353d5563e + languageName: node + linkType: hard + +"isobject@npm:^3.0.1": + version: 3.0.1 + resolution: "isobject@npm:3.0.1" + checksum: db85c4c970ce30693676487cca0e61da2ca34e8d4967c2e1309143ff910c207133a969f9e4ddb2dc6aba670aabce4e0e307146c310350b298e74a31f7d464703 + languageName: node + linkType: hard + +"isows@npm:1.0.3": + version: 1.0.3 + resolution: "isows@npm:1.0.3" + peerDependencies: + ws: "*" + checksum: 9cacd5cf59f67deb51e825580cd445ab1725ecb05a67c704050383fb772856f3cd5e7da8ad08f5a3bd2823680d77d099459d0c6a7037972a74d6429af61af440 + languageName: node + linkType: hard + +"istanbul-lib-coverage@npm:^3.0.0, istanbul-lib-coverage@npm:^3.2.0": + version: 3.2.2 + resolution: "istanbul-lib-coverage@npm:3.2.2" + checksum: 2367407a8d13982d8f7a859a35e7f8dd5d8f75aae4bb5484ede3a9ea1b426dc245aff28b976a2af48ee759fdd9be374ce2bd2669b644f31e76c5f46a2e29a831 + languageName: node + linkType: hard + +"istanbul-lib-instrument@npm:^5.0.4": + version: 5.2.1 + resolution: "istanbul-lib-instrument@npm:5.2.1" + dependencies: + "@babel/core": ^7.12.3 + "@babel/parser": ^7.14.7 + "@istanbuljs/schema": ^0.1.2 + istanbul-lib-coverage: ^3.2.0 + semver: ^6.3.0 + checksum: bf16f1803ba5e51b28bbd49ed955a736488381e09375d830e42ddeb403855b2006f850711d95ad726f2ba3f1ae8e7366de7e51d2b9ac67dc4d80191ef7ddf272 + languageName: node + linkType: hard + +"istanbul-lib-instrument@npm:^6.0.0": + version: 6.0.2 + resolution: "istanbul-lib-instrument@npm:6.0.2" + dependencies: + "@babel/core": ^7.23.9 + "@babel/parser": ^7.23.9 + "@istanbuljs/schema": ^0.1.3 + istanbul-lib-coverage: ^3.2.0 + semver: ^7.5.4 + checksum: c10aa1e93a022f9767d7f41e6c07d244cc0a5c090fbb5522d70a5f21fcb98c52b7038850276c6fd1a7a17d1868c14a9d4eb8a24efe58a0ebb9a06f3da68131fe + languageName: node + linkType: hard + +"istanbul-lib-report@npm:^3.0.0": + version: 3.0.1 + resolution: "istanbul-lib-report@npm:3.0.1" + dependencies: + istanbul-lib-coverage: ^3.0.0 + make-dir: ^4.0.0 + supports-color: ^7.1.0 + checksum: fd17a1b879e7faf9bb1dc8f80b2a16e9f5b7b8498fe6ed580a618c34df0bfe53d2abd35bf8a0a00e628fb7405462576427c7df20bbe4148d19c14b431c974b21 + languageName: node + linkType: hard + +"istanbul-lib-source-maps@npm:^4.0.0": + version: 4.0.1 + resolution: "istanbul-lib-source-maps@npm:4.0.1" + dependencies: + debug: ^4.1.1 + istanbul-lib-coverage: ^3.0.0 + source-map: ^0.6.1 + checksum: 21ad3df45db4b81852b662b8d4161f6446cd250c1ddc70ef96a585e2e85c26ed7cd9c2a396a71533cfb981d1a645508bc9618cae431e55d01a0628e7dec62ef2 + languageName: node + linkType: hard + +"istanbul-reports@npm:^3.1.3": + version: 3.1.7 + resolution: "istanbul-reports@npm:3.1.7" + dependencies: + html-escaper: ^2.0.0 + istanbul-lib-report: ^3.0.0 + checksum: 2072db6e07bfbb4d0eb30e2700250636182398c1af811aea5032acb219d2080f7586923c09fa194029efd6b92361afb3dcbe1ebcc3ee6651d13340f7c6c4ed95 + languageName: node + linkType: hard + +"it-all@npm:^3.0.0, it-all@npm:^3.0.2, it-all@npm:^3.0.4": + version: 3.0.6 + resolution: "it-all@npm:3.0.6" + checksum: 7c43b0aab7b496d9c590102edd9fa640e82f166e14c05d879a7f669a1c592acc7e0c37329a1ee8a93ad1ed338d5f29cdee0f6d29bcec613a4f3690f43ac298ce + languageName: node + linkType: hard + +"it-byte-stream@npm:^1.0.0": + version: 1.0.10 + resolution: "it-byte-stream@npm:1.0.10" + dependencies: + it-stream-types: ^2.0.1 + p-defer: ^4.0.1 + race-signal: ^1.0.2 + uint8arraylist: ^2.4.8 + checksum: 3504667d11b16ff2da5006f9ad65bf789e658358b8845437afe35e80dbee2b40f06ffe61a360136cbebd766bda36ad636dc6ce8a3c961dc617eaf365e8d26bc3 + languageName: node + linkType: hard + +"it-drain@npm:^3.0.2, it-drain@npm:^3.0.5": + version: 3.0.7 + resolution: "it-drain@npm:3.0.7" + checksum: fd41a759a397594f4fd3bc96e6efe7b738e294573da1cb0617a3dfcedd616f03413cdb18852f9856900fbbf48e4d9dc9d7ac459b5bf94f12767f9d46600f776e + languageName: node + linkType: hard + +"it-filter@npm:^3.0.4": + version: 3.1.0 + resolution: "it-filter@npm:3.1.0" + dependencies: + it-peekable: ^3.0.0 + checksum: cecc2eadfb71889338966e81beb10b8d264b0d8be2b0afa9315f302cbd62eb8fa8fa9393840ffa46d45990a9c0369d1b485b1dfc98d52f000705e5dfb5d12c77 + languageName: node + linkType: hard + +"it-first@npm:^3.0.1": + version: 3.0.6 + resolution: "it-first@npm:3.0.6" + checksum: 36a76248ea326992b47ced7f5e793e60e760ce229f871fc335850bfe2bfceb21e4b75badfd687be6a407d662e1b85357eee82e596d14afbfae5aecef7c822937 + languageName: node + linkType: hard + +"it-foreach@npm:^2.0.6": + version: 2.1.0 + resolution: "it-foreach@npm:2.1.0" + dependencies: + it-peekable: ^3.0.0 + checksum: 28de345c532b4c42cb5feab8189bdcdd08384dd33a921464b396bcda25b6b0fc285b44900a4ce6792bc67e50f100776ae6c1212389d7eb20f3bfeacd017d8598 + languageName: node + linkType: hard + +"it-length-prefixed-stream@npm:^1.0.0, it-length-prefixed-stream@npm:^1.1.6": + version: 1.1.7 + resolution: "it-length-prefixed-stream@npm:1.1.7" + dependencies: + it-byte-stream: ^1.0.0 + it-stream-types: ^2.0.1 + uint8-varint: ^2.0.4 + uint8arraylist: ^2.4.8 + checksum: 599912ec364208b662b36397c5c83cd890c65fd7fc6b6f1449bd8b3cc370763a3702249c1c55ffe864b8a808dc3a0c989adc2e51d6047f1d639f62f7a561e3bf + languageName: node + linkType: hard + +"it-length-prefixed@npm:^9.0.1, it-length-prefixed@npm:^9.0.4": + version: 9.0.4 + resolution: "it-length-prefixed@npm:9.0.4" + dependencies: + err-code: ^3.0.1 + it-reader: ^6.0.1 + it-stream-types: ^2.0.1 + uint8-varint: ^2.0.1 + uint8arraylist: ^2.0.0 + uint8arrays: ^5.0.1 + checksum: 18e7c4a96299c14ec654b2c41784d4e9889d9239ba858acd0a97b6ea0261b504b306c0850b1c28dd9e8678de03ff95f1e81ba03aed6ebf92f6d01b6e9cee3bab + languageName: node + linkType: hard + +"it-length@npm:^3.0.1, it-length@npm:^3.0.6": + version: 3.0.6 + resolution: "it-length@npm:3.0.6" + checksum: 3d18197d040029c30ff3aadcbe499c6e2355e342dc40cd9359c494fbd1fccb01ce4638bd76f37d099e49aef2e26df97a1934a27488988804c9f12ced604a736c + languageName: node + linkType: hard + +"it-map@npm:^3.0.3, it-map@npm:^3.0.5": + version: 3.1.0 + resolution: "it-map@npm:3.1.0" + dependencies: + it-peekable: ^3.0.0 + checksum: 003c0f1b51a59278efbcadf2117eff91789855556f8f42a4ee594aa44d292ad476d29fa10ab37db74e4b80b04862e6a605dda68af69d511cfea074928da78641 + languageName: node + linkType: hard + +"it-merge@npm:^3.0.0, it-merge@npm:^3.0.3": + version: 3.0.5 + resolution: "it-merge@npm:3.0.5" + dependencies: + it-pushable: ^3.2.3 + checksum: e79c21151af43c769653003d5f7a002c8c4f5cb62dfd586643a7014b06a94f660459650b2748aa8c5a0d103660cecf38617ebc552215cad0d36344ffa450ab82 + languageName: node + linkType: hard + +"it-pair@npm:^2.0.6": + version: 2.0.6 + resolution: "it-pair@npm:2.0.6" + dependencies: + it-stream-types: ^2.0.1 + p-defer: ^4.0.0 + checksum: aadd87d4f6c4e3281dc6d77758252c32c55f8646b19d87b8273437a48ecd2f37aa8b3363aeeddc161466005df0f63ff3515245fe835c4a38d6a22988ea16285a + languageName: node + linkType: hard + +"it-parallel@npm:^3.0.0, it-parallel@npm:^3.0.6": + version: 3.0.7 + resolution: "it-parallel@npm:3.0.7" + dependencies: + p-defer: ^4.0.1 + checksum: 3b8ff6d4ae69ceaadc8e120a17efaf1855abff7e712afb952bb232eddd0467365fb0e28a591b5c7510042fe05860b8ac150edd0fd33a74023bea8f89c1584ca9 + languageName: node + linkType: hard + +"it-peekable@npm:^3.0.0": + version: 3.0.4 + resolution: "it-peekable@npm:3.0.4" + checksum: 6d13b7d69eb2b4b4a1f7a7706d7efd56855f5304be5e3ac4d73b735ffd61d74b30223ef89adbe20d4da45fe44a594a1087b3033da46935bab14daab49306f68f + languageName: node + linkType: hard + +"it-pipe@npm:^3.0.1": + version: 3.0.1 + resolution: "it-pipe@npm:3.0.1" + dependencies: + it-merge: ^3.0.0 + it-pushable: ^3.1.2 + it-stream-types: ^2.0.1 + checksum: 4f6a67f32e26a965c2908be55f567ac6f6cc813ed3d29637dd7e1b3124045b5cef9d138626d4e60e5b3f1e0e5f9fd5fcba28609b24ebef761276ca4478d34089 + languageName: node + linkType: hard + +"it-protobuf-stream@npm:^1.1.2": + version: 1.1.3 + resolution: "it-protobuf-stream@npm:1.1.3" + dependencies: + it-length-prefixed-stream: ^1.0.0 + it-stream-types: ^2.0.1 + uint8arraylist: ^2.4.8 + checksum: 89b6e1857f4f3c32fa3409dd835ea3cc6b7f95f0be02c71447c6b87e98dbce433af2ea1e47eb1dff5dbb23b962cf4581420a4de16e5748ce06a49d7f4763c118 + languageName: node + linkType: hard + +"it-pushable@npm:^3.1.2, it-pushable@npm:^3.2.0, it-pushable@npm:^3.2.3": + version: 3.2.3 + resolution: "it-pushable@npm:3.2.3" + dependencies: + p-defer: ^4.0.0 + checksum: 8b1d1ceb2a42b31b55119f9721b1f4568c498627470bac18479e6f8db3791fe1185653480cd1c319462bae3d64091bd9ca9e6e90e217e38a5ab7f078559ccca4 + languageName: node + linkType: hard + +"it-reader@npm:^6.0.1": + version: 6.0.4 + resolution: "it-reader@npm:6.0.4" + dependencies: + it-stream-types: ^2.0.1 + uint8arraylist: ^2.0.0 + checksum: c2f89362bd7379814bcfe324361ee88e958d311a1f1c2d3cd5395e16517fbafb626b87d3a8aefb7a9d649e719c892f5e3f12aee214d03b0c28a983bb83b249e1 + languageName: node + linkType: hard + +"it-sort@npm:^3.0.4": + version: 3.0.5 + resolution: "it-sort@npm:3.0.5" + dependencies: + it-all: ^3.0.0 + checksum: 83678c9bc792bc61e703723b421f0ee86b352cade4c22321ed1cdb59a48354fda40530221ece90e6164e3cc28d70af4c46d5343a9b26279aee67f12cb0fb6507 + languageName: node + linkType: hard + +"it-stream-types@npm:^2.0.1": + version: 2.0.1 + resolution: "it-stream-types@npm:2.0.1" + checksum: 14c5a13dbef08ae3a9b824ae9d05a8f3eb25ef46994ede25f763472f8367498395bd4be13c88b93846fd4b56c9a4763beb268ef8fa26575b17ef8f9327f9bf77 + languageName: node + linkType: hard + +"it-take@npm:^3.0.1, it-take@npm:^3.0.4": + version: 3.0.5 + resolution: "it-take@npm:3.0.5" + checksum: c3bf22a9d6d04ca7d728fec528e9a2e57c71473033576d7be52684fbdb279984915d921a552a605cd51b1635ad6a5a1a5f1326fbb563007b88d1dde0975b0c7d + languageName: node + linkType: hard + +"jackspeak@npm:^2.3.6": + version: 2.3.6 + resolution: "jackspeak@npm:2.3.6" + dependencies: + "@isaacs/cliui": ^8.0.2 + "@pkgjs/parseargs": ^0.11.0 + dependenciesMeta: + "@pkgjs/parseargs": + optional: true + checksum: 57d43ad11eadc98cdfe7496612f6bbb5255ea69fe51ea431162db302c2a11011642f50cfad57288bd0aea78384a0612b16e131944ad8ecd09d619041c8531b54 + languageName: node + linkType: hard + +"javascript-natural-sort@npm:0.7.1": + version: 0.7.1 + resolution: "javascript-natural-sort@npm:0.7.1" + checksum: 161e2c512cc7884bc055a582c6645d9032cab88497a76123d73cb23bfb03d97a04cf7772ecdb8bd3366fc07192c2f996366f479f725c23ef073fffe03d6a586a + languageName: node + linkType: hard + +"jest-changed-files@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-changed-files@npm:29.7.0" + dependencies: + execa: ^5.0.0 + jest-util: ^29.7.0 + p-limit: ^3.1.0 + checksum: 963e203893c396c5dfc75e00a49426688efea7361b0f0e040035809cecd2d46b3c01c02be2d9e8d38b1138357d2de7719ea5b5be21f66c10f2e9685a5a73bb99 + languageName: node + linkType: hard + +"jest-circus@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-circus@npm:29.7.0" + dependencies: + "@jest/environment": ^29.7.0 + "@jest/expect": ^29.7.0 + "@jest/test-result": ^29.7.0 + "@jest/types": ^29.6.3 + "@types/node": "*" + chalk: ^4.0.0 + co: ^4.6.0 + dedent: ^1.0.0 + is-generator-fn: ^2.0.0 + jest-each: ^29.7.0 + jest-matcher-utils: ^29.7.0 + jest-message-util: ^29.7.0 + jest-runtime: ^29.7.0 + jest-snapshot: ^29.7.0 + jest-util: ^29.7.0 + p-limit: ^3.1.0 + pretty-format: ^29.7.0 + pure-rand: ^6.0.0 + slash: ^3.0.0 + stack-utils: ^2.0.3 + checksum: 349437148924a5a109c9b8aad6d393a9591b4dac1918fc97d81b7fc515bc905af9918495055071404af1fab4e48e4b04ac3593477b1d5dcf48c4e71b527c70a7 + languageName: node + linkType: hard + +"jest-cli@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-cli@npm:29.7.0" + dependencies: + "@jest/core": ^29.7.0 + "@jest/test-result": ^29.7.0 + "@jest/types": ^29.6.3 + chalk: ^4.0.0 + create-jest: ^29.7.0 + exit: ^0.1.2 + import-local: ^3.0.2 + jest-config: ^29.7.0 + jest-util: ^29.7.0 + jest-validate: ^29.7.0 + yargs: ^17.3.1 + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + bin: + jest: bin/jest.js + checksum: 664901277a3f5007ea4870632ed6e7889db9da35b2434e7cb488443e6bf5513889b344b7fddf15112135495b9875892b156faeb2d7391ddb9e2a849dcb7b6c36 + languageName: node + linkType: hard + +"jest-config@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-config@npm:29.7.0" + dependencies: + "@babel/core": ^7.11.6 + "@jest/test-sequencer": ^29.7.0 + "@jest/types": ^29.6.3 + babel-jest: ^29.7.0 + chalk: ^4.0.0 + ci-info: ^3.2.0 + deepmerge: ^4.2.2 + glob: ^7.1.3 + graceful-fs: ^4.2.9 + jest-circus: ^29.7.0 + jest-environment-node: ^29.7.0 + jest-get-type: ^29.6.3 + jest-regex-util: ^29.6.3 + jest-resolve: ^29.7.0 + jest-runner: ^29.7.0 + jest-util: ^29.7.0 + jest-validate: ^29.7.0 + micromatch: ^4.0.4 + parse-json: ^5.2.0 + pretty-format: ^29.7.0 + slash: ^3.0.0 + strip-json-comments: ^3.1.1 + peerDependencies: + "@types/node": "*" + ts-node: ">=9.0.0" + peerDependenciesMeta: + "@types/node": + optional: true + ts-node: + optional: true + checksum: 4cabf8f894c180cac80b7df1038912a3fc88f96f2622de33832f4b3314f83e22b08fb751da570c0ab2b7988f21604bdabade95e3c0c041068ac578c085cf7dff + languageName: node + linkType: hard + +"jest-diff@npm:^29.0.0, jest-diff@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-diff@npm:29.7.0" + dependencies: + chalk: ^4.0.0 + diff-sequences: ^29.6.3 + jest-get-type: ^29.6.3 + pretty-format: ^29.7.0 + checksum: 08e24a9dd43bfba1ef07a6374e5af138f53137b79ec3d5cc71a2303515335898888fa5409959172e1e05de966c9e714368d15e8994b0af7441f0721ee8e1bb77 + languageName: node + linkType: hard + +"jest-docblock@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-docblock@npm:29.7.0" + dependencies: + detect-newline: ^3.0.0 + checksum: 66390c3e9451f8d96c5da62f577a1dad701180cfa9b071c5025acab2f94d7a3efc2515cfa1654ebe707213241541ce9c5530232cdc8017c91ed64eea1bd3b192 + languageName: node + linkType: hard + +"jest-each@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-each@npm:29.7.0" + dependencies: + "@jest/types": ^29.6.3 + chalk: ^4.0.0 + jest-get-type: ^29.6.3 + jest-util: ^29.7.0 + pretty-format: ^29.7.0 + checksum: e88f99f0184000fc8813f2a0aa79e29deeb63700a3b9b7928b8a418d7d93cd24933608591dbbdea732b473eb2021c72991b5cc51a17966842841c6e28e6f691c + languageName: node + linkType: hard + +"jest-environment-node@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-environment-node@npm:29.7.0" + dependencies: + "@jest/environment": ^29.7.0 + "@jest/fake-timers": ^29.7.0 + "@jest/types": ^29.6.3 + "@types/node": "*" + jest-mock: ^29.7.0 + jest-util: ^29.7.0 + checksum: 501a9966292cbe0ca3f40057a37587cb6def25e1e0c5e39ac6c650fe78d3c70a2428304341d084ac0cced5041483acef41c477abac47e9a290d5545fd2f15646 + languageName: node + linkType: hard + +"jest-extended@npm:^4.0.2": + version: 4.0.2 + resolution: "jest-extended@npm:4.0.2" + dependencies: + jest-diff: ^29.0.0 + jest-get-type: ^29.0.0 + peerDependencies: + jest: ">=27.2.5" + peerDependenciesMeta: + jest: + optional: true + checksum: afdc255eec7caa173f9e805e94562273d8b8aa4c7ab9b396668f018c18ea5236270a6ac499ca84b8c60e90ccbe9ccb4aebf998daef13aec9542c426df1df6079 + languageName: node + linkType: hard + +"jest-get-type@npm:^29.0.0, jest-get-type@npm:^29.6.3": + version: 29.6.3 + resolution: "jest-get-type@npm:29.6.3" + checksum: 88ac9102d4679d768accae29f1e75f592b760b44277df288ad76ce5bf038c3f5ce3719dea8aa0f035dac30e9eb034b848ce716b9183ad7cc222d029f03e92205 + languageName: node + linkType: hard + +"jest-haste-map@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-haste-map@npm:29.7.0" + dependencies: + "@jest/types": ^29.6.3 + "@types/graceful-fs": ^4.1.3 + "@types/node": "*" + anymatch: ^3.0.3 + fb-watchman: ^2.0.0 + fsevents: ^2.3.2 + graceful-fs: ^4.2.9 + jest-regex-util: ^29.6.3 + jest-util: ^29.7.0 + jest-worker: ^29.7.0 + micromatch: ^4.0.4 + walker: ^1.0.8 + dependenciesMeta: + fsevents: + optional: true + checksum: c2c8f2d3e792a963940fbdfa563ce14ef9e14d4d86da645b96d3cd346b8d35c5ce0b992ee08593939b5f718cf0a1f5a90011a056548a1dbf58397d4356786f01 + languageName: node + linkType: hard + +"jest-leak-detector@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-leak-detector@npm:29.7.0" + dependencies: + jest-get-type: ^29.6.3 + pretty-format: ^29.7.0 + checksum: e3950e3ddd71e1d0c22924c51a300a1c2db6cf69ec1e51f95ccf424bcc070f78664813bef7aed4b16b96dfbdeea53fe358f8aeaaea84346ae15c3735758f1605 + languageName: node + linkType: hard + +"jest-matcher-utils@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-matcher-utils@npm:29.7.0" + dependencies: + chalk: ^4.0.0 + jest-diff: ^29.7.0 + jest-get-type: ^29.6.3 + pretty-format: ^29.7.0 + checksum: d7259e5f995d915e8a37a8fd494cb7d6af24cd2a287b200f831717ba0d015190375f9f5dc35393b8ba2aae9b2ebd60984635269c7f8cff7d85b077543b7744cd + languageName: node + linkType: hard + +"jest-message-util@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-message-util@npm:29.7.0" + dependencies: + "@babel/code-frame": ^7.12.13 + "@jest/types": ^29.6.3 + "@types/stack-utils": ^2.0.0 + chalk: ^4.0.0 + graceful-fs: ^4.2.9 + micromatch: ^4.0.4 + pretty-format: ^29.7.0 + slash: ^3.0.0 + stack-utils: ^2.0.3 + checksum: a9d025b1c6726a2ff17d54cc694de088b0489456c69106be6b615db7a51b7beb66788bea7a59991a019d924fbf20f67d085a445aedb9a4d6760363f4d7d09930 + languageName: node + linkType: hard + +"jest-mock-extended@npm:^3.0.3, jest-mock-extended@npm:^3.0.4, jest-mock-extended@npm:^3.0.5": + version: 3.0.7 + resolution: "jest-mock-extended@npm:3.0.7" + dependencies: + ts-essentials: ^10.0.0 + peerDependencies: + jest: ^24.0.0 || ^25.0.0 || ^26.0.0 || ^27.0.0 || ^28.0.0 || ^29.0.0 + typescript: ^3.0.0 || ^4.0.0 || ^5.0.0 + checksum: 59ab510934b0b66e0752c170b6e069f8c93a5b9de40ea2bd3e734f773a70be4b0c251451f8770e60c1c3754d5ddbd25dd1f55568a6379f396d109694d6d3ab79 + languageName: node + linkType: hard + +"jest-mock@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-mock@npm:29.7.0" + dependencies: + "@jest/types": ^29.6.3 + "@types/node": "*" + jest-util: ^29.7.0 + checksum: 81ba9b68689a60be1482212878973700347cb72833c5e5af09895882b9eb5c4e02843a1bbdf23f94c52d42708bab53a30c45a3482952c9eec173d1eaac5b86c5 + languageName: node + linkType: hard + +"jest-pnp-resolver@npm:^1.2.2": + version: 1.2.3 + resolution: "jest-pnp-resolver@npm:1.2.3" + peerDependencies: + jest-resolve: "*" + peerDependenciesMeta: + jest-resolve: + optional: true + checksum: db1a8ab2cb97ca19c01b1cfa9a9c8c69a143fde833c14df1fab0766f411b1148ff0df878adea09007ac6a2085ec116ba9a996a6ad104b1e58c20adbf88eed9b2 + languageName: node + linkType: hard + +"jest-regex-util@npm:^29.6.3": + version: 29.6.3 + resolution: "jest-regex-util@npm:29.6.3" + checksum: 0518beeb9bf1228261695e54f0feaad3606df26a19764bc19541e0fc6e2a3737191904607fb72f3f2ce85d9c16b28df79b7b1ec9443aa08c3ef0e9efda6f8f2a + languageName: node + linkType: hard + +"jest-resolve-dependencies@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-resolve-dependencies@npm:29.7.0" + dependencies: + jest-regex-util: ^29.6.3 + jest-snapshot: ^29.7.0 + checksum: aeb75d8150aaae60ca2bb345a0d198f23496494677cd6aefa26fc005faf354061f073982175daaf32b4b9d86b26ca928586344516e3e6969aa614cb13b883984 + languageName: node + linkType: hard + +"jest-resolve@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-resolve@npm:29.7.0" + dependencies: + chalk: ^4.0.0 + graceful-fs: ^4.2.9 + jest-haste-map: ^29.7.0 + jest-pnp-resolver: ^1.2.2 + jest-util: ^29.7.0 + jest-validate: ^29.7.0 + resolve: ^1.20.0 + resolve.exports: ^2.0.0 + slash: ^3.0.0 + checksum: 0ca218e10731aa17920526ec39deaec59ab9b966237905ffc4545444481112cd422f01581230eceb7e82d86f44a543d520a71391ec66e1b4ef1a578bd5c73487 + languageName: node + linkType: hard + +"jest-runner@npm:29.7.0": + version: 29.7.0 + resolution: "jest-runner@npm:29.7.0" + dependencies: + "@jest/console": ^29.7.0 + "@jest/environment": ^29.7.0 + "@jest/test-result": ^29.7.0 + "@jest/transform": ^29.7.0 + "@jest/types": ^29.6.3 + "@types/node": "*" + chalk: ^4.0.0 + emittery: ^0.13.1 + graceful-fs: ^4.2.9 + jest-docblock: ^29.7.0 + jest-environment-node: ^29.7.0 + jest-haste-map: ^29.7.0 + jest-leak-detector: ^29.7.0 + jest-message-util: ^29.7.0 + jest-resolve: ^29.7.0 + jest-runtime: ^29.7.0 + jest-util: ^29.7.0 + jest-watcher: ^29.7.0 + jest-worker: ^29.7.0 + p-limit: ^3.1.0 + source-map-support: 0.5.13 + checksum: f0405778ea64812bf9b5c50b598850d94ccf95d7ba21f090c64827b41decd680ee19fcbb494007cdd7f5d0d8906bfc9eceddd8fa583e753e736ecd462d4682fb + languageName: node + linkType: hard + +"jest-runner@patch:jest-runner@npm%3A29.7.0#./.yarn/patches/jest-runner-npm-29.7.0-3bc9f82b58.patch::locator=%40aztec%2Faztec3-packages%40workspace%3A.": + version: 29.7.0 + resolution: "jest-runner@patch:jest-runner@npm%3A29.7.0#./.yarn/patches/jest-runner-npm-29.7.0-3bc9f82b58.patch::version=29.7.0&hash=a79dea&locator=%40aztec%2Faztec3-packages%40workspace%3A." + dependencies: + "@jest/console": ^29.7.0 + "@jest/environment": ^29.7.0 + "@jest/test-result": ^29.7.0 + "@jest/transform": ^29.7.0 + "@jest/types": ^29.6.3 + "@types/node": "*" + chalk: ^4.0.0 + emittery: ^0.13.1 + graceful-fs: ^4.2.9 + jest-docblock: ^29.7.0 + jest-environment-node: ^29.7.0 + jest-haste-map: ^29.7.0 + jest-leak-detector: ^29.7.0 + jest-message-util: ^29.7.0 + jest-resolve: ^29.7.0 + jest-runtime: ^29.7.0 + jest-util: ^29.7.0 + jest-watcher: ^29.7.0 + jest-worker: ^29.7.0 + p-limit: ^3.1.0 + source-map-support: 0.5.13 + checksum: 8345cba67695e45a6cc1fddca470ba61d981c6fa3565b53728ba36678acf6ce7657868e7483ab34b75e433efd42f57fd2894031069c06ac48b7b22ac9950ff1d + languageName: node + linkType: hard + +"jest-runtime@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-runtime@npm:29.7.0" + dependencies: + "@jest/environment": ^29.7.0 + "@jest/fake-timers": ^29.7.0 + "@jest/globals": ^29.7.0 + "@jest/source-map": ^29.6.3 + "@jest/test-result": ^29.7.0 + "@jest/transform": ^29.7.0 + "@jest/types": ^29.6.3 + "@types/node": "*" + chalk: ^4.0.0 + cjs-module-lexer: ^1.0.0 + collect-v8-coverage: ^1.0.0 + glob: ^7.1.3 + graceful-fs: ^4.2.9 + jest-haste-map: ^29.7.0 + jest-message-util: ^29.7.0 + jest-mock: ^29.7.0 + jest-regex-util: ^29.6.3 + jest-resolve: ^29.7.0 + jest-snapshot: ^29.7.0 + jest-util: ^29.7.0 + slash: ^3.0.0 + strip-bom: ^4.0.0 + checksum: d19f113d013e80691e07047f68e1e3448ef024ff2c6b586ce4f90cd7d4c62a2cd1d460110491019719f3c59bfebe16f0e201ed005ef9f80e2cf798c374eed54e + languageName: node + linkType: hard + +"jest-snapshot@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-snapshot@npm:29.7.0" + dependencies: + "@babel/core": ^7.11.6 + "@babel/generator": ^7.7.2 + "@babel/plugin-syntax-jsx": ^7.7.2 + "@babel/plugin-syntax-typescript": ^7.7.2 + "@babel/types": ^7.3.3 + "@jest/expect-utils": ^29.7.0 + "@jest/transform": ^29.7.0 + "@jest/types": ^29.6.3 + babel-preset-current-node-syntax: ^1.0.0 + chalk: ^4.0.0 + expect: ^29.7.0 + graceful-fs: ^4.2.9 + jest-diff: ^29.7.0 + jest-get-type: ^29.6.3 + jest-matcher-utils: ^29.7.0 + jest-message-util: ^29.7.0 + jest-util: ^29.7.0 + natural-compare: ^1.4.0 + pretty-format: ^29.7.0 + semver: ^7.5.3 + checksum: 86821c3ad0b6899521ce75ee1ae7b01b17e6dfeff9166f2cf17f012e0c5d8c798f30f9e4f8f7f5bed01ea7b55a6bc159f5eda778311162cbfa48785447c237ad + languageName: node + linkType: hard + +"jest-util@npm:^29.0.0, jest-util@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-util@npm:29.7.0" + dependencies: + "@jest/types": ^29.6.3 + "@types/node": "*" + chalk: ^4.0.0 + ci-info: ^3.2.0 + graceful-fs: ^4.2.9 + picomatch: ^2.2.3 + checksum: 042ab4980f4ccd4d50226e01e5c7376a8556b472442ca6091a8f102488c0f22e6e8b89ea874111d2328a2080083bf3225c86f3788c52af0bd0345a00eb57a3ca + languageName: node + linkType: hard + +"jest-validate@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-validate@npm:29.7.0" + dependencies: + "@jest/types": ^29.6.3 + camelcase: ^6.2.0 + chalk: ^4.0.0 + jest-get-type: ^29.6.3 + leven: ^3.1.0 + pretty-format: ^29.7.0 + checksum: 191fcdc980f8a0de4dbdd879fa276435d00eb157a48683af7b3b1b98b0f7d9de7ffe12689b617779097ff1ed77601b9f7126b0871bba4f776e222c40f62e9dae + languageName: node + linkType: hard + +"jest-watcher@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-watcher@npm:29.7.0" + dependencies: + "@jest/test-result": ^29.7.0 + "@jest/types": ^29.6.3 + "@types/node": "*" + ansi-escapes: ^4.2.1 + chalk: ^4.0.0 + emittery: ^0.13.1 + jest-util: ^29.7.0 + string-length: ^4.0.1 + checksum: 67e6e7fe695416deff96b93a14a561a6db69389a0667e9489f24485bb85e5b54e12f3b2ba511ec0b777eca1e727235b073e3ebcdd473d68888650489f88df92f + languageName: node + linkType: hard + +"jest-worker@npm:^27.4.5": + version: 27.5.1 + resolution: "jest-worker@npm:27.5.1" + dependencies: + "@types/node": "*" + merge-stream: ^2.0.0 + supports-color: ^8.0.0 + checksum: 98cd68b696781caed61c983a3ee30bf880b5bd021c01d98f47b143d4362b85d0737f8523761e2713d45e18b4f9a2b98af1eaee77afade4111bb65c77d6f7c980 + languageName: node + linkType: hard + +"jest-worker@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-worker@npm:29.7.0" + dependencies: + "@types/node": "*" + jest-util: ^29.7.0 + merge-stream: ^2.0.0 + supports-color: ^8.0.0 + checksum: 30fff60af49675273644d408b650fc2eb4b5dcafc5a0a455f238322a8f9d8a98d847baca9d51ff197b6747f54c7901daa2287799230b856a0f48287d131f8c13 + languageName: node + linkType: hard + +"jest@npm:^29.5.0": + version: 29.7.0 + resolution: "jest@npm:29.7.0" + dependencies: + "@jest/core": ^29.7.0 + "@jest/types": ^29.6.3 + import-local: ^3.0.2 + jest-cli: ^29.7.0 + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + bin: + jest: bin/jest.js + checksum: 17ca8d67504a7dbb1998cf3c3077ec9031ba3eb512da8d71cb91bcabb2b8995c4e4b292b740cb9bf1cbff5ce3e110b3f7c777b0cefb6f41ab05445f248d0ee0b + languageName: node + linkType: hard + +"jju@npm:~1.4.0": + version: 1.4.0 + resolution: "jju@npm:1.4.0" + checksum: 3790481bd2b7827dd6336e6e3dc2dcc6d425679ba7ebde7b679f61dceb4457ea0cda330972494de608571f4973c6dfb5f70fab6f3c5037dbab19ac449a60424f + languageName: node + linkType: hard + +"js-sha3@npm:0.8.0": + version: 0.8.0 + resolution: "js-sha3@npm:0.8.0" + checksum: 75df77c1fc266973f06cce8309ce010e9e9f07ec35ab12022ed29b7f0d9c8757f5a73e1b35aa24840dced0dea7059085aa143d817aea9e188e2a80d569d9adce + languageName: node + linkType: hard + +"js-tokens@npm:^4.0.0": + version: 4.0.0 + resolution: "js-tokens@npm:4.0.0" + checksum: 8a95213a5a77deb6cbe94d86340e8d9ace2b93bc367790b260101d2f36a2eaf4e4e22d9fa9cf459b38af3a32fb4190e638024cf82ec95ef708680e405ea7cc78 + languageName: node + linkType: hard + +"js-yaml@npm:^3.13.1": + version: 3.14.1 + resolution: "js-yaml@npm:3.14.1" + dependencies: + argparse: ^1.0.7 + esprima: ^4.0.0 + bin: + js-yaml: bin/js-yaml.js + checksum: bef146085f472d44dee30ec34e5cf36bf89164f5d585435a3d3da89e52622dff0b188a580e4ad091c3341889e14cb88cac6e4deb16dc5b1e9623bb0601fc255c + languageName: node + linkType: hard + +"js-yaml@npm:^4.1.0": + version: 4.1.0 + resolution: "js-yaml@npm:4.1.0" + dependencies: + argparse: ^2.0.1 + bin: + js-yaml: bin/js-yaml.js + checksum: c7830dfd456c3ef2c6e355cc5a92e6700ceafa1d14bba54497b34a99f0376cecbb3e9ac14d3e5849b426d5a5140709a66237a8c991c675431271c4ce5504151a + languageName: node + linkType: hard + +"jsbn@npm:1.1.0": + version: 1.1.0 + resolution: "jsbn@npm:1.1.0" + checksum: 944f924f2bd67ad533b3850eee47603eed0f6ae425fd1ee8c760f477e8c34a05f144c1bd4f5a5dd1963141dc79a2c55f89ccc5ab77d039e7077f3ad196b64965 + languageName: node + linkType: hard + +"jsdoc-type-pratt-parser@npm:~4.0.0": + version: 4.0.0 + resolution: "jsdoc-type-pratt-parser@npm:4.0.0" + checksum: af0629c9517e484be778d8564440fec8de5b7610e0c9c88a3ba4554321364faf72b46689c8d8845faa12c0718437a9ed97e231977efc0f2d50e8a2dbad807eb3 + languageName: node + linkType: hard + +"jsesc@npm:^2.5.1": + version: 2.5.2 + resolution: "jsesc@npm:2.5.2" + bin: + jsesc: bin/jsesc + checksum: 4dc190771129e12023f729ce20e1e0bfceac84d73a85bc3119f7f938843fe25a4aeccb54b6494dce26fcf263d815f5f31acdefac7cc9329efb8422a4f4d9fa9d + languageName: node + linkType: hard + +"json-buffer@npm:3.0.1": + version: 3.0.1 + resolution: "json-buffer@npm:3.0.1" + checksum: 9026b03edc2847eefa2e37646c579300a1f3a4586cfb62bf857832b60c852042d0d6ae55d1afb8926163fa54c2b01d83ae24705f34990348bdac6273a29d4581 + languageName: node + linkType: hard + +"json-parse-even-better-errors@npm:^2.3.0, json-parse-even-better-errors@npm:^2.3.1": + version: 2.3.1 + resolution: "json-parse-even-better-errors@npm:2.3.1" + checksum: 798ed4cf3354a2d9ccd78e86d2169515a0097a5c133337807cdf7f1fc32e1391d207ccfc276518cc1d7d8d4db93288b8a50ba4293d212ad1336e52a8ec0a941f + languageName: node + linkType: hard + +"json-schema-traverse@npm:^0.4.1": + version: 0.4.1 + resolution: "json-schema-traverse@npm:0.4.1" + checksum: 7486074d3ba247769fda17d5181b345c9fb7d12e0da98b22d1d71a5db9698d8b4bd900a3ec1a4ffdd60846fc2556274a5c894d0c48795f14cb03aeae7b55260b + languageName: node + linkType: hard + +"json-stable-stringify-without-jsonify@npm:^1.0.1": + version: 1.0.1 + resolution: "json-stable-stringify-without-jsonify@npm:1.0.1" + checksum: cff44156ddce9c67c44386ad5cddf91925fe06b1d217f2da9c4910d01f358c6e3989c4d5a02683c7a5667f9727ff05831f7aa8ae66c8ff691c556f0884d49215 + languageName: node + linkType: hard + +"json5@npm:^1.0.2": + version: 1.0.2 + resolution: "json5@npm:1.0.2" + dependencies: + minimist: ^1.2.0 + bin: + json5: lib/cli.js + checksum: 866458a8c58a95a49bef3adba929c625e82532bcff1fe93f01d29cb02cac7c3fe1f4b79951b7792c2da9de0b32871a8401a6e3c5b36778ad852bf5b8a61165d7 + languageName: node + linkType: hard + +"json5@npm:^2.2.3": + version: 2.2.3 + resolution: "json5@npm:2.2.3" + bin: + json5: lib/cli.js + checksum: 2a7436a93393830bce797d4626275152e37e877b265e94ca69c99e3d20c2b9dab021279146a39cdb700e71b2dd32a4cebd1514cd57cee102b1af906ce5040349 + languageName: node + linkType: hard + +"jsonc-parser@npm:^3.2.0": + version: 3.2.1 + resolution: "jsonc-parser@npm:3.2.1" + checksum: 656d9027b91de98d8ab91b3aa0d0a4cab7dc798a6830845ca664f3e76c82d46b973675bbe9b500fae1de37fd3e81aceacbaa2a57884bf2f8f29192150d2d1ef7 + languageName: node + linkType: hard + +"jsonfile@npm:^6.0.1": + version: 6.1.0 + resolution: "jsonfile@npm:6.1.0" + dependencies: + graceful-fs: ^4.1.6 + universalify: ^2.0.0 + dependenciesMeta: + graceful-fs: + optional: true + checksum: 7af3b8e1ac8fe7f1eccc6263c6ca14e1966fcbc74b618d3c78a0a2075579487547b94f72b7a1114e844a1e15bb00d440e5d1720bfc4612d790a6f285d5ea8354 + languageName: node + linkType: hard + +"jszip@npm:^3.10.1": + version: 3.10.1 + resolution: "jszip@npm:3.10.1" + dependencies: + lie: ~3.3.0 + pako: ~1.0.2 + readable-stream: ~2.3.6 + setimmediate: ^1.0.5 + checksum: abc77bfbe33e691d4d1ac9c74c8851b5761fba6a6986630864f98d876f3fcc2d36817dfc183779f32c00157b5d53a016796677298272a714ae096dfe6b1c8b60 + languageName: node + linkType: hard + +"keygrip@npm:~1.1.0": + version: 1.1.0 + resolution: "keygrip@npm:1.1.0" + dependencies: + tsscmp: 1.0.6 + checksum: 078cd16a463d187121f0a27c1c9c95c52ad392b620f823431689f345a0501132cee60f6e96914b07d570105af470b96960402accd6c48a0b1f3cd8fac4fa2cae + languageName: node + linkType: hard + +"keyv@npm:^4.5.3": + version: 4.5.4 + resolution: "keyv@npm:4.5.4" + dependencies: + json-buffer: 3.0.1 + checksum: 74a24395b1c34bd44ad5cb2b49140d087553e170625240b86755a6604cd65aa16efdbdeae5cdb17ba1284a0fbb25ad06263755dbc71b8d8b06f74232ce3cdd72 + languageName: node + linkType: hard + +"kind-of@npm:^6.0.2, kind-of@npm:^6.0.3": + version: 6.0.3 + resolution: "kind-of@npm:6.0.3" + checksum: 3ab01e7b1d440b22fe4c31f23d8d38b4d9b91d9f291df683476576493d5dfd2e03848a8b05813dd0c3f0e835bc63f433007ddeceb71f05cb25c45ae1b19c6d3b + languageName: node + linkType: hard + +"kleur@npm:^3.0.3": + version: 3.0.3 + resolution: "kleur@npm:3.0.3" + checksum: df82cd1e172f957bae9c536286265a5cdbd5eeca487cb0a3b2a7b41ef959fc61f8e7c0e9aeea9c114ccf2c166b6a8dd45a46fd619c1c569d210ecd2765ad5169 + languageName: node + linkType: hard + +"koa-bodyparser@npm:^4.4.0": + version: 4.4.1 + resolution: "koa-bodyparser@npm:4.4.1" + dependencies: + co-body: ^6.0.0 + copy-to: ^2.0.1 + type-is: ^1.6.18 + checksum: 2b839acc53d6c86558a5faf750ea42527ab0a9f90228abfd559fdae388be1c4789a9c36b178b33883d83701d4d9a5c3e3b55fbadd950a2d9fab32ec4d1e67a75 + languageName: node + linkType: hard + +"koa-compose@npm:^4.1.0": + version: 4.1.0 + resolution: "koa-compose@npm:4.1.0" + checksum: 46cb16792d96425e977c2ae4e5cb04930280740e907242ec9c25e3fb8b4a1d7b54451d7432bc24f40ec62255edea71894d2ceeb8238501842b4e48014f2e83db + languageName: node + linkType: hard + +"koa-compress@npm:^5.1.0": + version: 5.1.1 + resolution: "koa-compress@npm:5.1.1" + dependencies: + bytes: ^3.1.2 + compressible: ^2.0.18 + http-errors: ^1.8.1 + koa-is-json: ^1.0.0 + checksum: e768d336756e2009cd65db28c48472827a0eb503cdf3055bdb0af0e5d74b821bb8b9820dfdcb956e359fdea3c302286d2a17eef28bd4683217a6e8d503749e68 + languageName: node + linkType: hard + +"koa-convert@npm:^2.0.0": + version: 2.0.0 + resolution: "koa-convert@npm:2.0.0" + dependencies: + co: ^4.6.0 + koa-compose: ^4.1.0 + checksum: 7385b3391995f59c1312142e110d5dff677f9850dbfbcf387cd36a7b0af03b5d26e82b811eb9bb008b4f3e661cdab1f8817596e46b1929da2cf6e97a2f7456ed + languageName: node + linkType: hard + +"koa-cors@npm:^0.0.16": + version: 0.0.16 + resolution: "koa-cors@npm:0.0.16" + checksum: 66d85b7a4834c436a6bfbe77248a19edebc2082c5e73d907c680a96f75ec1963146024b29cc3bb04c7790e52c6f0067f3dd71a0e341bdcc83dbc6971b86a3339 + languageName: node + linkType: hard + +"koa-is-json@npm:^1.0.0": + version: 1.0.0 + resolution: "koa-is-json@npm:1.0.0" + checksum: 0f14a7780d7ca0caeda5981ab425b66dd9711fd1bc7a25c091b38331ade8861a2eea41ac9fec7f96537302690de68fe1213b576f2c765ff3b5be3c23e995fbe2 + languageName: node + linkType: hard + +"koa-router@npm:^12.0.0, koa-router@npm:^12.0.1": + version: 12.0.1 + resolution: "koa-router@npm:12.0.1" + dependencies: + debug: ^4.3.4 + http-errors: ^2.0.0 + koa-compose: ^4.1.0 + methods: ^1.1.2 + path-to-regexp: ^6.2.1 + checksum: 62852af6c47dba9327c993594367b8bcd995fd49972d2539eae9afa231571680f75ebe0f439bf886256cdfaf791900c2d11fe31b894d9ba8c60d1c727c03b9ed + languageName: node + linkType: hard + +"koa-send@npm:^5.0.0": + version: 5.0.1 + resolution: "koa-send@npm:5.0.1" + dependencies: + debug: ^4.1.1 + http-errors: ^1.7.3 + resolve-path: ^1.4.0 + checksum: a9fbaadbe0f50efd157a733df4a1cc2b3b79b0cdf12e67c718641e6038d1792c0bebe40913e6d4ceb707d970301155be3859b98d1ef08b0fd1766f7326b82853 + languageName: node + linkType: hard + +"koa-static@npm:^5.0.0": + version: 5.0.0 + resolution: "koa-static@npm:5.0.0" + dependencies: + debug: ^3.1.0 + koa-send: ^5.0.0 + checksum: 8d9b9c4d2b3b13e8818e804245d784099c4b353b55ddd7dbeeb90f27a2e9f5b6f86bd16a4909e337cb89db4d332d9002e6c0f5056caf75749cab62f93c1f0cc5 + languageName: node + linkType: hard + +"koa@npm:^2.14.2, koa@npm:^2.15.3": + version: 2.15.3 + resolution: "koa@npm:2.15.3" + dependencies: + accepts: ^1.3.5 + cache-content-type: ^1.0.0 + content-disposition: ~0.5.2 + content-type: ^1.0.4 + cookies: ~0.9.0 + debug: ^4.3.2 + delegates: ^1.0.0 + depd: ^2.0.0 + destroy: ^1.0.4 + encodeurl: ^1.0.2 + escape-html: ^1.0.3 + fresh: ~0.5.2 + http-assert: ^1.3.0 + http-errors: ^1.6.3 + is-generator-function: ^1.0.7 + koa-compose: ^4.1.0 + koa-convert: ^2.0.0 + on-finished: ^2.3.0 + only: ~0.0.2 + parseurl: ^1.3.2 + statuses: ^1.5.0 + type-is: ^1.6.16 + vary: ^1.1.2 + checksum: 7c3537443b1a588cf5c3e5554b914ff2bad510323d22b41861d5e0c97d47e9c5997965f303ede8be8bd83d309a4eea1f82cd45d35d6838bc21bb1bb6a90d5d25 + languageName: node + linkType: hard + +"kuler@npm:^2.0.0": + version: 2.0.0 + resolution: "kuler@npm:2.0.0" + checksum: 9e10b5a1659f9ed8761d38df3c35effabffbd19fc6107324095238e4ef0ff044392cae9ac64a1c2dda26e532426485342226b93806bd97504b174b0dcf04ed81 + languageName: node + linkType: hard + +"level-concat-iterator@npm:^3.0.0": + version: 3.1.0 + resolution: "level-concat-iterator@npm:3.1.0" + dependencies: + catering: ^2.1.0 + checksum: a15bc4c5fbbb30c1efa7fad06b72feaac84d90990b356b461593c198a833336f31f6daff8f40c3908fabd14cfd8856d1c5ecae9e1cb0575037b65fa607e760e9 + languageName: node + linkType: hard + +"level-errors@npm:^3.0.1": + version: 3.0.1 + resolution: "level-errors@npm:3.0.1" + checksum: fe4486c423e78ab509a8f7908b89a1692cc810dd47e02d9ceca50543b5be0ce3a4d555fb8f4d3c82122f56bd48c27e6175ca06da359b8e359ea2c7848209d8e7 + languageName: node + linkType: hard + +"level-iterator-stream@npm:^5.0.0": + version: 5.0.0 + resolution: "level-iterator-stream@npm:5.0.0" + dependencies: + inherits: ^2.0.4 + readable-stream: ^3.4.0 + checksum: 3f5bbb9caf6cf6d6c4735219194b85f903377d9da76d37db0691b836c8ea3a78e5233fb18c91f0ef8ca8faaa19bd59e46572ebe27ad2039c51cf83e6c974b9f1 + languageName: node + linkType: hard + +"level-supports@npm:^2.0.1": + version: 2.1.0 + resolution: "level-supports@npm:2.1.0" + checksum: f7b16aea7ddd13326ee4fbc2c1099bcaf8a74dc95346af9ebedea4e02518c6f7a438e829b79b7890d67489b59f615a9428369a0a065021797aa7cb6b6bd84d75 + languageName: node + linkType: hard + +"leveldown@npm:^6.1.1": + version: 6.1.1 + resolution: "leveldown@npm:6.1.1" + dependencies: + abstract-leveldown: ^7.2.0 + napi-macros: ~2.0.0 + node-gyp: latest + node-gyp-build: ^4.3.0 + checksum: 00ba086f83c930683271aae35c89ce684bd31afcc4ba15912a071865f21d86000c48eb83b55ae554b6d328e0ba82a08868dd3b64abed750db89f38b8718c84af + languageName: node + linkType: hard + +"levelup@npm:^5.1.1": + version: 5.1.1 + resolution: "levelup@npm:5.1.1" + dependencies: + catering: ^2.0.0 + deferred-leveldown: ^7.0.0 + level-errors: ^3.0.1 + level-iterator-stream: ^5.0.0 + level-supports: ^2.0.1 + queue-microtask: ^1.2.3 + checksum: 3053cd3495f615874f1695a47bc7c1eaf432f4c1323b41d58770230b39f2b845100c6e6e912bcffdc504051a8540a39b5d05f3b54f65cfdcb43ce613f6182dd6 + languageName: node + linkType: hard + +"leven@npm:^3.1.0": + version: 3.1.0 + resolution: "leven@npm:3.1.0" + checksum: 638401d534585261b6003db9d99afd244dfe82d75ddb6db5c0df412842d5ab30b2ef18de471aaec70fe69a46f17b4ae3c7f01d8a4e6580ef7adb9f4273ad1e55 + languageName: node + linkType: hard + +"levn@npm:^0.4.1": + version: 0.4.1 + resolution: "levn@npm:0.4.1" + dependencies: + prelude-ls: ^1.2.1 + type-check: ~0.4.0 + checksum: 12c5021c859bd0f5248561bf139121f0358285ec545ebf48bb3d346820d5c61a4309535c7f387ed7d84361cf821e124ce346c6b7cef8ee09a67c1473b46d0fc4 + languageName: node + linkType: hard + +"libp2p@npm:1.5.0": + version: 1.5.0 + resolution: "libp2p@npm:1.5.0" + dependencies: + "@libp2p/crypto": ^4.1.1 + "@libp2p/interface": ^1.3.1 + "@libp2p/interface-internal": ^1.2.0 + "@libp2p/logger": ^4.0.12 + "@libp2p/multistream-select": ^5.1.9 + "@libp2p/peer-collections": ^5.2.0 + "@libp2p/peer-id": ^4.1.1 + "@libp2p/peer-id-factory": ^4.1.1 + "@libp2p/peer-store": ^10.0.17 + "@libp2p/utils": ^5.4.0 + "@multiformats/dns": ^1.0.5 + "@multiformats/multiaddr": ^12.2.1 + "@multiformats/multiaddr-matcher": ^1.2.0 + any-signal: ^4.1.1 + datastore-core: ^9.2.9 + interface-datastore: ^8.2.11 + it-merge: ^3.0.3 + it-parallel: ^3.0.6 + merge-options: ^3.0.4 + multiformats: ^13.1.0 + p-defer: ^4.0.1 + race-event: ^1.3.0 + race-signal: ^1.0.2 + uint8arrays: ^5.0.3 + checksum: 6a587061f03cf01feea0dcf80e290944c906de943fa4f2f118051ddfdd3ac9394a6faf2cdd1d193e52f7a0f2eda5478237c5628dd87e2541b9e03803a46ff714 + languageName: node + linkType: hard + +"lie@npm:~3.3.0": + version: 3.3.0 + resolution: "lie@npm:3.3.0" + dependencies: + immediate: ~3.0.5 + checksum: 33102302cf19766f97919a6a98d481e01393288b17a6aa1f030a3542031df42736edde8dab29ffdbf90bebeffc48c761eb1d064dc77592ca3ba3556f9fe6d2a8 + languageName: node + linkType: hard + +"lines-and-columns@npm:^1.1.6": + version: 1.2.4 + resolution: "lines-and-columns@npm:1.2.4" + checksum: 0c37f9f7fa212b38912b7145e1cd16a5f3cd34d782441c3e6ca653485d326f58b3caccda66efce1c5812bde4961bbde3374fae4b0d11bf1226152337f3894aa5 + languageName: node + linkType: hard + +"lmdb@npm:^3.0.6": + version: 3.0.8 + resolution: "lmdb@npm:3.0.8" + dependencies: + "@lmdb/lmdb-darwin-arm64": 3.0.8 + "@lmdb/lmdb-darwin-x64": 3.0.8 + "@lmdb/lmdb-linux-arm": 3.0.8 + "@lmdb/lmdb-linux-arm64": 3.0.8 + "@lmdb/lmdb-linux-x64": 3.0.8 + "@lmdb/lmdb-win32-x64": 3.0.8 + msgpackr: ^1.9.9 + node-addon-api: ^6.1.0 + node-gyp: latest + node-gyp-build-optional-packages: 5.1.1 + ordered-binary: ^1.4.1 + weak-lru-cache: ^1.2.2 + dependenciesMeta: + "@lmdb/lmdb-darwin-arm64": + optional: true + "@lmdb/lmdb-darwin-x64": + optional: true + "@lmdb/lmdb-linux-arm": + optional: true + "@lmdb/lmdb-linux-arm64": + optional: true + "@lmdb/lmdb-linux-x64": + optional: true + "@lmdb/lmdb-win32-x64": + optional: true + bin: + download-lmdb-prebuilds: bin/download-prebuilds.js + checksum: 8778fee2527e869db560bd46ac91398504df804313ab5a5918bd6ca368cc134a5ec47f71cd3becf9bb62ce1f99dbdcf2b5c89601d9058a32d364457ae6e54a4b + languageName: node + linkType: hard + +"load-json-file@npm:^6.2.0": + version: 6.2.0 + resolution: "load-json-file@npm:6.2.0" + dependencies: + graceful-fs: ^4.1.15 + parse-json: ^5.0.0 + strip-bom: ^4.0.0 + type-fest: ^0.6.0 + checksum: 4429e430ebb99375fc7cd936348e4f7ba729486080ced4272091c1e386a7f5f738ea3337d8ffd4b01c2f5bc3ddde92f2c780045b66838fe98bdb79f901884643 + languageName: node + linkType: hard + +"loader-runner@npm:^4.2.0": + version: 4.3.0 + resolution: "loader-runner@npm:4.3.0" + checksum: a90e00dee9a16be118ea43fec3192d0b491fe03a32ed48a4132eb61d498f5536a03a1315531c19d284392a8726a4ecad71d82044c28d7f22ef62e029bf761569 + languageName: node + linkType: hard + +"loady@npm:~0.0.5": + version: 0.0.5 + resolution: "loady@npm:0.0.5" + checksum: 3cba2ffa8cef8a082b3d23f22c1269a339e9f268105c30229bb3fed9123bb79830c0c7f3fa79f52286e1de9303b87e4eb3236952a6ee3fcffa83e7c576f7a8f5 + languageName: node + linkType: hard + +"locate-path@npm:^5.0.0": + version: 5.0.0 + resolution: "locate-path@npm:5.0.0" + dependencies: + p-locate: ^4.1.0 + checksum: 83e51725e67517287d73e1ded92b28602e3ae5580b301fe54bfb76c0c723e3f285b19252e375712316774cf52006cb236aed5704692c32db0d5d089b69696e30 + languageName: node + linkType: hard + +"locate-path@npm:^6.0.0": + version: 6.0.0 + resolution: "locate-path@npm:6.0.0" + dependencies: + p-locate: ^5.0.0 + checksum: 72eb661788a0368c099a184c59d2fee760b3831c9c1c33955e8a19ae4a21b4116e53fa736dc086cdeb9fce9f7cc508f2f92d2d3aae516f133e16a2bb59a39f5a + languageName: node + linkType: hard + +"lodash.camelcase@npm:^4.3.0": + version: 4.3.0 + resolution: "lodash.camelcase@npm:4.3.0" + checksum: cb9227612f71b83e42de93eccf1232feeb25e705bdb19ba26c04f91e885bfd3dd5c517c4a97137658190581d3493ea3973072ca010aab7e301046d90740393d1 + languageName: node + linkType: hard + +"lodash.capitalize@npm:^4.2.1": + version: 4.2.1 + resolution: "lodash.capitalize@npm:4.2.1" + checksum: d9195f31d48c105206f1099946d8bbc8ab71435bc1c8708296992a31a992bb901baf120fdcadd773098ac96e62a79e6b023ee7d26a2deb0d6c6aada930e6ad0a + languageName: node + linkType: hard + +"lodash.chunk@npm:^4.2.0": + version: 4.2.0 + resolution: "lodash.chunk@npm:4.2.0" + checksum: 6286c6d06814fbeda502164015c42ef53a9194e6ebaac52ec2b41e83344aefe7bc3d94fdfec525adcd2c66cefdf05dc333b6a1128e4de739797342315c17cbc7 + languageName: node + linkType: hard + +"lodash.clonedeep@npm:^4.5.0": + version: 4.5.0 + resolution: "lodash.clonedeep@npm:4.5.0" + checksum: 92c46f094b064e876a23c97f57f81fbffd5d760bf2d8a1c61d85db6d1e488c66b0384c943abee4f6af7debf5ad4e4282e74ff83177c9e63d8ff081a4837c3489 + languageName: node + linkType: hard + +"lodash.clonedeepwith@npm:^4.5.0": + version: 4.5.0 + resolution: "lodash.clonedeepwith@npm:4.5.0" + checksum: 9fbf4ebfa04b381df226a2298eba680327bea3d0d5d19c5118de7ae218fd219186e30e9fd0d33b13729f34ffbc83c1cf09cb27aff265ba94cb602b8a2b1e71c9 + languageName: node + linkType: hard + +"lodash.compact@npm:^3.0.1": + version: 3.0.1 + resolution: "lodash.compact@npm:3.0.1" + checksum: 75039eddfa5ef2ea0da1fc3d36515e92227241f94258b3dcf771196e741c878698ce5b79c0cb7fe758841c9dfd0e6fa222888985aadc0384fd79bbc9680dd829 + languageName: node + linkType: hard + +"lodash.every@npm:^4.6.0": + version: 4.6.0 + resolution: "lodash.every@npm:4.6.0" + checksum: bfb96426ccdf05ef230339ba57400c59a60a16ce6a4f41f50eb89e7ba612686900fcaf1c3a28f907a8ba993b96da681303bd622cdcadfc7d60e1f0f098384aa4 + languageName: node + linkType: hard + +"lodash.groupby@npm:^4.6.0": + version: 4.6.0 + resolution: "lodash.groupby@npm:4.6.0" + checksum: e2d4d13d12790a1cacab3f5f120b7c072a792224e83b2f403218866d18efde76024b2579996dfebb230a61ce06469332e16639103669a35a605287e19ced6b9b + languageName: node + linkType: hard + +"lodash.isequal@npm:^4.5.0": + version: 4.5.0 + resolution: "lodash.isequal@npm:4.5.0" + checksum: da27515dc5230eb1140ba65ff8de3613649620e8656b19a6270afe4866b7bd461d9ba2ac8a48dcc57f7adac4ee80e1de9f965d89d4d81a0ad52bb3eec2609644 + languageName: node + linkType: hard + +"lodash.memoize@npm:4.x": + version: 4.1.2 + resolution: "lodash.memoize@npm:4.1.2" + checksum: 9ff3942feeccffa4f1fafa88d32f0d24fdc62fd15ded5a74a5f950ff5f0c6f61916157246744c620173dddf38d37095a92327d5fd3861e2063e736a5c207d089 + languageName: node + linkType: hard + +"lodash.merge@npm:^4.6.2": + version: 4.6.2 + resolution: "lodash.merge@npm:4.6.2" + checksum: ad580b4bdbb7ca1f7abf7e1bce63a9a0b98e370cf40194b03380a46b4ed799c9573029599caebc1b14e3f24b111aef72b96674a56cfa105e0f5ac70546cdc005 + languageName: node + linkType: hard + +"lodash.omit@npm:^4.5.0": + version: 4.5.0 + resolution: "lodash.omit@npm:4.5.0" + checksum: 434645e49fe84ab315719bd5a9a3a585a0f624aa4160bc09157dd041a414bcc287c15840365c1379476a3f3eda41fbe838976c3f7bdecbbf4c5478e86c471a30 + languageName: node + linkType: hard + +"lodash.pick@npm:^4.4.0": + version: 4.4.0 + resolution: "lodash.pick@npm:4.4.0" + checksum: 2c36cab7da6b999a20bd3373b40e31a3ef81fa264f34a6979c852c5bc8ac039379686b27380f0cb8e3781610844fafec6949c6fbbebc059c98f8fa8570e3675f + languageName: node + linkType: hard + +"lodash.startcase@npm:^4.4.0": + version: 4.4.0 + resolution: "lodash.startcase@npm:4.4.0" + checksum: c03a4a784aca653845fe09d0ef67c902b6e49288dc45f542a4ab345a9c406a6dc194c774423fa313ee7b06283950301c1221dd2a1d8ecb2dac8dfbb9ed5606b5 + languageName: node + linkType: hard + +"lodash.times@npm:^4.3.2": + version: 4.3.2 + resolution: "lodash.times@npm:4.3.2" + checksum: d26a9022e025d6061d356d3098fd80cdc062e7bf896bbbb56e643b2ae39156bf19b6167a4b046aa924b6d572a1e717853e552342ce34016fc5183308e329b575 + languageName: node + linkType: hard + +"lodash@npm:^4.17.21": + version: 4.17.21 + resolution: "lodash@npm:4.17.21" + checksum: eb835a2e51d381e561e508ce932ea50a8e5a68f4ebdd771ea240d3048244a8d13658acbd502cd4829768c56f2e16bdd4340b9ea141297d472517b83868e677f7 + languageName: node + linkType: hard + +"log-symbols@npm:^4.1.0": + version: 4.1.0 + resolution: "log-symbols@npm:4.1.0" + dependencies: + chalk: ^4.1.0 + is-unicode-supported: ^0.1.0 + checksum: fce1497b3135a0198803f9f07464165e9eb83ed02ceb2273930a6f8a508951178d8cf4f0378e9d28300a2ed2bc49050995d2bd5f53ab716bb15ac84d58c6ef74 + languageName: node + linkType: hard + +"logform@npm:^2.3.2, logform@npm:^2.4.0": + version: 2.6.0 + resolution: "logform@npm:2.6.0" + dependencies: + "@colors/colors": 1.6.0 + "@types/triple-beam": ^1.3.2 + fecha: ^4.2.0 + ms: ^2.1.1 + safe-stable-stringify: ^2.3.1 + triple-beam: ^1.3.0 + checksum: b9ea74bb75e55379ad0eb3e4d65ae6e8d02bc45b431c218162878bf663997ab9258a73104c2b30e09dd2db288bb83c8bf8748e46689d75f5e7e34cf69378d6df + languageName: node + linkType: hard + +"lru-cache@npm:^10.0.1, lru-cache@npm:^10.1.0, lru-cache@npm:^10.2.0": + version: 10.2.2 + resolution: "lru-cache@npm:10.2.2" + checksum: 98e8fc93691c546f719a76103ef2bee5a3ac823955c755a47641ec41f8c7fafa1baeaba466937cc1cbfa9cfd47e03536d10e2db3158a64ad91ff3a58a32c893e + languageName: node + linkType: hard + +"lru-cache@npm:^5.1.1": + version: 5.1.1 + resolution: "lru-cache@npm:5.1.1" + dependencies: + yallist: ^3.0.2 + checksum: c154ae1cbb0c2206d1501a0e94df349653c92c8cbb25236d7e85190bcaf4567a03ac6eb43166fabfa36fd35623694da7233e88d9601fbf411a9a481d85dbd2cb + languageName: node + linkType: hard + +"lru-cache@npm:^6.0.0": + version: 6.0.0 + resolution: "lru-cache@npm:6.0.0" + dependencies: + yallist: ^4.0.0 + checksum: f97f499f898f23e4585742138a22f22526254fdba6d75d41a1c2526b3b6cc5747ef59c5612ba7375f42aca4f8461950e925ba08c991ead0651b4918b7c978297 + languageName: node + linkType: hard + +"lru-cache@npm:^7.14.1": + version: 7.18.3 + resolution: "lru-cache@npm:7.18.3" + checksum: e550d772384709deea3f141af34b6d4fa392e2e418c1498c078de0ee63670f1f46f5eee746e8ef7e69e1c895af0d4224e62ee33e66a543a14763b0f2e74c1356 + languageName: node + linkType: hard + +"ltgt@npm:^2.2.0": + version: 2.2.1 + resolution: "ltgt@npm:2.2.1" + checksum: 7e3874296f7538bc8087b428ac4208008d7b76916354b34a08818ca7c83958c1df10ec427eeeaad895f6b81e41e24745b18d30f89abcc21d228b94f6961d50a2 + languageName: node + linkType: hard + +"lunr@npm:^2.3.9": + version: 2.3.9 + resolution: "lunr@npm:2.3.9" + checksum: 176719e24fcce7d3cf1baccce9dd5633cd8bdc1f41ebe6a180112e5ee99d80373fe2454f5d4624d437e5a8319698ca6837b9950566e15d2cae5f2a543a3db4b8 + languageName: node + linkType: hard + +"madge@npm:^6.1.0": + version: 6.1.0 + resolution: "madge@npm:6.1.0" + dependencies: + chalk: ^4.1.1 + commander: ^7.2.0 + commondir: ^1.0.1 + debug: ^4.3.1 + dependency-tree: ^9.0.0 + detective-amd: ^4.0.1 + detective-cjs: ^4.0.0 + detective-es6: ^3.0.0 + detective-less: ^1.0.2 + detective-postcss: ^6.1.0 + detective-sass: ^4.0.1 + detective-scss: ^3.0.0 + detective-stylus: ^2.0.1 + detective-typescript: ^9.0.0 + ora: ^5.4.1 + pluralize: ^8.0.0 + precinct: ^8.1.0 + pretty-ms: ^7.0.1 + rc: ^1.2.7 + stream-to-array: ^2.3.0 + ts-graphviz: ^1.5.0 + walkdir: ^0.4.1 + peerDependencies: + typescript: ^3.9.5 || ^4.9.5 || ^5 + peerDependenciesMeta: + typescript: + optional: true + bin: + madge: bin/cli.js + checksum: cb8a629c1eb837640ca2416dbd2236f1ea8657eb188725ff42294718dd1769ece5ec635ef02c344c72e3b4faab3cd8f084b043ce8ecccf4018915738b3329096 + languageName: node + linkType: hard + +"make-dir@npm:^4.0.0": + version: 4.0.0 + resolution: "make-dir@npm:4.0.0" + dependencies: + semver: ^7.5.3 + checksum: bf0731a2dd3aab4db6f3de1585cea0b746bb73eb5a02e3d8d72757e376e64e6ada190b1eddcde5b2f24a81b688a9897efd5018737d05e02e2a671dda9cff8a8a + languageName: node + linkType: hard + +"make-error@npm:1.x, make-error@npm:^1.1.1": + version: 1.3.6 + resolution: "make-error@npm:1.3.6" + checksum: b86e5e0e25f7f777b77fabd8e2cbf15737972869d852a22b7e73c17623928fccb826d8e46b9951501d3f20e51ad74ba8c59ed584f610526a48f8ccf88aaec402 + languageName: node + linkType: hard + +"make-fetch-happen@npm:^13.0.0": + version: 13.0.1 + resolution: "make-fetch-happen@npm:13.0.1" + dependencies: + "@npmcli/agent": ^2.0.0 + cacache: ^18.0.0 + http-cache-semantics: ^4.1.1 + is-lambda: ^1.0.1 + minipass: ^7.0.2 + minipass-fetch: ^3.0.0 + minipass-flush: ^1.0.5 + minipass-pipeline: ^1.2.4 + negotiator: ^0.6.3 + proc-log: ^4.2.0 + promise-retry: ^2.0.1 + ssri: ^10.0.0 + checksum: 5c9fad695579b79488fa100da05777213dd9365222f85e4757630f8dd2a21a79ddd3206c78cfd6f9b37346819681782b67900ac847a57cf04190f52dda5343fd + languageName: node + linkType: hard + +"makeerror@npm:1.0.12": + version: 1.0.12 + resolution: "makeerror@npm:1.0.12" + dependencies: + tmpl: 1.0.5 + checksum: b38a025a12c8146d6eeea5a7f2bf27d51d8ad6064da8ca9405fcf7bf9b54acd43e3b30ddd7abb9b1bfa4ddb266019133313482570ddb207de568f71ecfcf6060 + languageName: node + linkType: hard + +"map-obj@npm:^1.0.0": + version: 1.0.1 + resolution: "map-obj@npm:1.0.1" + checksum: 9949e7baec2a336e63b8d4dc71018c117c3ce6e39d2451ccbfd3b8350c547c4f6af331a4cbe1c83193d7c6b786082b6256bde843db90cb7da2a21e8fcc28afed + languageName: node + linkType: hard + +"map-obj@npm:^4.0.0": + version: 4.3.0 + resolution: "map-obj@npm:4.3.0" + checksum: fbc554934d1a27a1910e842bc87b177b1a556609dd803747c85ece420692380827c6ae94a95cce4407c054fa0964be3bf8226f7f2cb2e9eeee432c7c1985684e + languageName: node + linkType: hard + +"map-stream@npm:~0.1.0": + version: 0.1.0 + resolution: "map-stream@npm:0.1.0" + checksum: 38abbe4eb883888031e6b2fc0630bc583c99396be16b8ace5794b937b682a8a081f03e8b15bfd4914d1bc88318f0e9ac73ba3512ae65955cd449f63256ddb31d + languageName: node + linkType: hard + +"marked@npm:^4.3.0": + version: 4.3.0 + resolution: "marked@npm:4.3.0" + bin: + marked: bin/marked.js + checksum: 0db6817893952c3ec710eb9ceafb8468bf5ae38cb0f92b7b083baa13d70b19774674be04db5b817681fa7c5c6a088f61300815e4dd75a59696f4716ad69f6260 + languageName: node + linkType: hard + +"md5.js@npm:^1.3.4": + version: 1.3.5 + resolution: "md5.js@npm:1.3.5" + dependencies: + hash-base: ^3.0.0 + inherits: ^2.0.1 + safe-buffer: ^5.1.2 + checksum: 098494d885684bcc4f92294b18ba61b7bd353c23147fbc4688c75b45cb8590f5a95fd4584d742415dcc52487f7a1ef6ea611cfa1543b0dc4492fe026357f3f0c + languageName: node + linkType: hard + +"media-typer@npm:0.3.0": + version: 0.3.0 + resolution: "media-typer@npm:0.3.0" + checksum: af1b38516c28ec95d6b0826f6c8f276c58aec391f76be42aa07646b4e39d317723e869700933ca6995b056db4b09a78c92d5440dc23657e6764be5d28874bba1 + languageName: node + linkType: hard + +"memdown@npm:^6.1.1": + version: 6.1.1 + resolution: "memdown@npm:6.1.1" + dependencies: + abstract-leveldown: ^7.2.0 + buffer: ^6.0.3 + functional-red-black-tree: ^1.0.1 + inherits: ^2.0.1 + ltgt: ^2.2.0 + checksum: a8c418620781a396e650834ab18022c1ae13060b3ca47dc80152eff45caf0e4780598610fd0f9b5a50ebdf195e686ed53fadbae1272addfafad98d598a165a4b + languageName: node + linkType: hard + +"memfs@npm:^4.6.0": + version: 4.9.2 + resolution: "memfs@npm:4.9.2" + dependencies: + "@jsonjoy.com/json-pack": ^1.0.3 + "@jsonjoy.com/util": ^1.1.2 + sonic-forest: ^1.0.0 + tslib: ^2.0.0 + checksum: 72850691d37b4e67fb78fceced7294e381caf7a614b22b81fa643c03ac6c13270d52e2ac96d8ed95edab715fd0fba2db1bf604a815cbd6d53ecb3f56c038a583 + languageName: node + linkType: hard + +"memorystream@npm:^0.3.1": + version: 0.3.1 + resolution: "memorystream@npm:0.3.1" + checksum: f18b42440d24d09516d01466c06adf797df7873f0d40aa7db02e5fb9ed83074e5e65412d0720901d7069363465f82dc4f8bcb44f0cde271567a61426ce6ca2e9 + languageName: node + linkType: hard + +"meow@npm:^7.1.1": + version: 7.1.1 + resolution: "meow@npm:7.1.1" + dependencies: + "@types/minimist": ^1.2.0 + camelcase-keys: ^6.2.2 + decamelize-keys: ^1.1.0 + hard-rejection: ^2.1.0 + minimist-options: 4.1.0 + normalize-package-data: ^2.5.0 + read-pkg-up: ^7.0.1 + redent: ^3.0.0 + trim-newlines: ^3.0.0 + type-fest: ^0.13.1 + yargs-parser: ^18.1.3 + checksum: 87bba177ab858a9b606ee52220e6bf395277beebafefe8ab5dbdf178f5825274a24ca16dca7e0ddd41e5ac3533164ee52e3d0eec87b66d78aae796d24a817842 + languageName: node + linkType: hard + +"merge-options@npm:^3.0.4": + version: 3.0.4 + resolution: "merge-options@npm:3.0.4" + dependencies: + is-plain-obj: ^2.1.0 + checksum: d86ddb3dd6e85d558dbf25dc944f3527b6bacb944db3fdda6e84a3f59c4e4b85231095f58b835758b9a57708342dee0f8de0dffa352974a48221487fe9f4584f + languageName: node + linkType: hard + +"merge-stream@npm:^2.0.0": + version: 2.0.0 + resolution: "merge-stream@npm:2.0.0" + checksum: 6fa4dcc8d86629705cea944a4b88ef4cb0e07656ebf223fa287443256414283dd25d91c1cd84c77987f2aec5927af1a9db6085757cb43d90eb170ebf4b47f4f4 + languageName: node + linkType: hard + +"merge2@npm:^1.3.0, merge2@npm:^1.4.1": + version: 1.4.1 + resolution: "merge2@npm:1.4.1" + checksum: 7268db63ed5169466540b6fb947aec313200bcf6d40c5ab722c22e242f651994619bcd85601602972d3c85bd2cc45a358a4c61937e9f11a061919a1da569b0c2 + languageName: node + linkType: hard + +"methods@npm:^1.1.2": + version: 1.1.2 + resolution: "methods@npm:1.1.2" + checksum: 0917ff4041fa8e2f2fda5425a955fe16ca411591fbd123c0d722fcf02b73971ed6f764d85f0a6f547ce49ee0221ce2c19a5fa692157931cecb422984f1dcd13a + languageName: node + linkType: hard + +"micromatch@npm:^4.0.0, micromatch@npm:^4.0.4": + version: 4.0.5 + resolution: "micromatch@npm:4.0.5" + dependencies: + braces: ^3.0.2 + picomatch: ^2.3.1 + checksum: 02a17b671c06e8fefeeb6ef996119c1e597c942e632a21ef589154f23898c9c6a9858526246abb14f8bca6e77734aa9dcf65476fca47cedfb80d9577d52843fc + languageName: node + linkType: hard + +"miller-rabin@npm:^4.0.0": + version: 4.0.1 + resolution: "miller-rabin@npm:4.0.1" + dependencies: + bn.js: ^4.0.0 + brorand: ^1.0.1 + bin: + miller-rabin: bin/miller-rabin + checksum: 00cd1ab838ac49b03f236cc32a14d29d7d28637a53096bf5c6246a032a37749c9bd9ce7360cbf55b41b89b7d649824949ff12bc8eee29ac77c6b38eada619ece + languageName: node + linkType: hard + +"mime-db@npm:1.52.0, mime-db@npm:>= 1.43.0 < 2": + version: 1.52.0 + resolution: "mime-db@npm:1.52.0" + checksum: 0d99a03585f8b39d68182803b12ac601d9c01abfa28ec56204fa330bc9f3d1c5e14beb049bafadb3dbdf646dfb94b87e24d4ec7b31b7279ef906a8ea9b6a513f + languageName: node + linkType: hard + +"mime-types@npm:^2.1.12, mime-types@npm:^2.1.18, mime-types@npm:^2.1.27, mime-types@npm:~2.1.24, mime-types@npm:~2.1.34": + version: 2.1.35 + resolution: "mime-types@npm:2.1.35" + dependencies: + mime-db: 1.52.0 + checksum: 89a5b7f1def9f3af5dad6496c5ed50191ae4331cc5389d7c521c8ad28d5fdad2d06fd81baf38fed813dc4e46bb55c8145bb0ff406330818c9cf712fb2e9b3836 + languageName: node + linkType: hard + +"mime@npm:2.6.0": + version: 2.6.0 + resolution: "mime@npm:2.6.0" + bin: + mime: cli.js + checksum: 1497ba7b9f6960694268a557eae24b743fd2923da46ec392b042469f4b901721ba0adcf8b0d3c2677839d0e243b209d76e5edcbd09cfdeffa2dfb6bb4df4b862 + languageName: node + linkType: hard + +"mimic-fn@npm:^2.1.0": + version: 2.1.0 + resolution: "mimic-fn@npm:2.1.0" + checksum: d2421a3444848ce7f84bd49115ddacff29c15745db73f54041edc906c14b131a38d05298dae3081667627a59b2eb1ca4b436ff2e1b80f69679522410418b478a + languageName: node + linkType: hard + +"mimic-fn@npm:^4.0.0": + version: 4.0.0 + resolution: "mimic-fn@npm:4.0.0" + checksum: 995dcece15ee29aa16e188de6633d43a3db4611bcf93620e7e62109ec41c79c0f34277165b8ce5e361205049766e371851264c21ac64ca35499acb5421c2ba56 + languageName: node + linkType: hard + +"min-indent@npm:^1.0.0": + version: 1.0.1 + resolution: "min-indent@npm:1.0.1" + checksum: bfc6dd03c5eaf623a4963ebd94d087f6f4bbbfd8c41329a7f09706b0cb66969c4ddd336abeb587bc44bc6f08e13bf90f0b374f9d71f9f01e04adc2cd6f083ef1 + languageName: node + linkType: hard + +"minimalistic-assert@npm:^1.0.0, minimalistic-assert@npm:^1.0.1": + version: 1.0.1 + resolution: "minimalistic-assert@npm:1.0.1" + checksum: cc7974a9268fbf130fb055aff76700d7e2d8be5f761fb5c60318d0ed010d839ab3661a533ad29a5d37653133385204c503bfac995aaa4236f4e847461ea32ba7 + languageName: node + linkType: hard + +"minimalistic-crypto-utils@npm:^1.0.1": + version: 1.0.1 + resolution: "minimalistic-crypto-utils@npm:1.0.1" + checksum: 6e8a0422b30039406efd4c440829ea8f988845db02a3299f372fceba56ffa94994a9c0f2fd70c17f9969eedfbd72f34b5070ead9656a34d3f71c0bd72583a0ed + languageName: node + linkType: hard + +"minimatch@npm:9.0.3": + version: 9.0.3 + resolution: "minimatch@npm:9.0.3" + dependencies: + brace-expansion: ^2.0.1 + checksum: 253487976bf485b612f16bf57463520a14f512662e592e95c571afdab1442a6a6864b6c88f248ce6fc4ff0b6de04ac7aa6c8bb51e868e99d1d65eb0658a708b5 + languageName: node + linkType: hard + +"minimatch@npm:^3.0.4, minimatch@npm:^3.0.5, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": + version: 3.1.2 + resolution: "minimatch@npm:3.1.2" + dependencies: + brace-expansion: ^1.1.7 + checksum: c154e566406683e7bcb746e000b84d74465b3a832c45d59912b9b55cd50dee66e5c4b1e5566dba26154040e51672f9aa450a9aef0c97cfc7336b78b7afb9540a + languageName: node + linkType: hard + +"minimatch@npm:^9.0.0, minimatch@npm:^9.0.1": + version: 9.0.4 + resolution: "minimatch@npm:9.0.4" + dependencies: + brace-expansion: ^2.0.1 + checksum: cf717f597ec3eed7dabc33153482a2e8d49f4fd3c26e58fd9c71a94c5029a0838728841b93f46bf1263b65a8010e2ee800d0dc9b004ab8ba8b6d1ec07cc115b5 + languageName: node + linkType: hard + +"minimist-options@npm:4.1.0": + version: 4.1.0 + resolution: "minimist-options@npm:4.1.0" + dependencies: + arrify: ^1.0.1 + is-plain-obj: ^1.1.0 + kind-of: ^6.0.3 + checksum: 8c040b3068811e79de1140ca2b708d3e203c8003eb9a414c1ab3cd467fc5f17c9ca02a5aef23bedc51a7f8bfbe77f87e9a7e31ec81fba304cda675b019496f4e + languageName: node + linkType: hard + +"minimist@npm:^1.2.0, minimist@npm:^1.2.5, minimist@npm:^1.2.6": + version: 1.2.8 + resolution: "minimist@npm:1.2.8" + checksum: 75a6d645fb122dad29c06a7597bddea977258957ed88d7a6df59b5cd3fe4a527e253e9bbf2e783e4b73657f9098b96a5fe96ab8a113655d4109108577ecf85b0 + languageName: node + linkType: hard + +"minipass-collect@npm:^2.0.1": + version: 2.0.1 + resolution: "minipass-collect@npm:2.0.1" + dependencies: + minipass: ^7.0.3 + checksum: b251bceea62090f67a6cced7a446a36f4cd61ee2d5cea9aee7fff79ba8030e416327a1c5aa2908dc22629d06214b46d88fdab8c51ac76bacbf5703851b5ad342 + languageName: node + linkType: hard + +"minipass-fetch@npm:^3.0.0": + version: 3.0.5 + resolution: "minipass-fetch@npm:3.0.5" + dependencies: + encoding: ^0.1.13 + minipass: ^7.0.3 + minipass-sized: ^1.0.3 + minizlib: ^2.1.2 + dependenciesMeta: + encoding: + optional: true + checksum: 8047d273236157aab27ab7cd8eab7ea79e6ecd63e8f80c3366ec076cb9a0fed550a6935bab51764369027c414647fd8256c2a20c5445fb250c483de43350de83 + languageName: node + linkType: hard + +"minipass-flush@npm:^1.0.5": + version: 1.0.5 + resolution: "minipass-flush@npm:1.0.5" + dependencies: + minipass: ^3.0.0 + checksum: 56269a0b22bad756a08a94b1ffc36b7c9c5de0735a4dd1ab2b06c066d795cfd1f0ac44a0fcae13eece5589b908ecddc867f04c745c7009be0b566421ea0944cf + languageName: node + linkType: hard + +"minipass-pipeline@npm:^1.2.4": + version: 1.2.4 + resolution: "minipass-pipeline@npm:1.2.4" + dependencies: + minipass: ^3.0.0 + checksum: b14240dac0d29823c3d5911c286069e36d0b81173d7bdf07a7e4a91ecdef92cdff4baaf31ea3746f1c61e0957f652e641223970870e2353593f382112257971b + languageName: node + linkType: hard + +"minipass-sized@npm:^1.0.3": + version: 1.0.3 + resolution: "minipass-sized@npm:1.0.3" + dependencies: + minipass: ^3.0.0 + checksum: 79076749fcacf21b5d16dd596d32c3b6bf4d6e62abb43868fac21674078505c8b15eaca4e47ed844985a4514854f917d78f588fcd029693709417d8f98b2bd60 + languageName: node + linkType: hard + +"minipass@npm:^3.0.0": + version: 3.3.6 + resolution: "minipass@npm:3.3.6" + dependencies: + yallist: ^4.0.0 + checksum: a30d083c8054cee83cdcdc97f97e4641a3f58ae743970457b1489ce38ee1167b3aaf7d815cd39ec7a99b9c40397fd4f686e83750e73e652b21cb516f6d845e48 + languageName: node + linkType: hard + +"minipass@npm:^5.0.0": + version: 5.0.0 + resolution: "minipass@npm:5.0.0" + checksum: 425dab288738853fded43da3314a0b5c035844d6f3097a8e3b5b29b328da8f3c1af6fc70618b32c29ff906284cf6406b6841376f21caaadd0793c1d5a6a620ea + languageName: node + linkType: hard + +"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.2, minipass@npm:^7.0.3, minipass@npm:^7.0.4": + version: 7.1.0 + resolution: "minipass@npm:7.1.0" + checksum: c057d4b1d7fdb35b8f4b9d8f627b1f6832c441cd7dff9304ee5efef68abb3b460309bf97b1b0ce5b960e259caa53c724f609d058e4dc12d547e2a074aaae2cd6 + languageName: node + linkType: hard + +"minizlib@npm:^2.1.1, minizlib@npm:^2.1.2": + version: 2.1.2 + resolution: "minizlib@npm:2.1.2" + dependencies: + minipass: ^3.0.0 + yallist: ^4.0.0 + checksum: f1fdeac0b07cf8f30fcf12f4b586795b97be856edea22b5e9072707be51fc95d41487faec3f265b42973a304fe3a64acd91a44a3826a963e37b37bafde0212c3 + languageName: node + linkType: hard + +"mitt@npm:3.0.1": + version: 3.0.1 + resolution: "mitt@npm:3.0.1" + checksum: b55a489ac9c2949ab166b7f060601d3b6d893a852515ae9eca4e11df01c013876df777ea109317622b5c1c60e8aae252558e33c8c94e14124db38f64a39614b1 + languageName: node + linkType: hard + +"mkdirp@npm:^1.0.3": + version: 1.0.4 + resolution: "mkdirp@npm:1.0.4" + bin: + mkdirp: bin/cmd.js + checksum: a96865108c6c3b1b8e1d5e9f11843de1e077e57737602de1b82030815f311be11f96f09cce59bd5b903d0b29834733e5313f9301e3ed6d6f6fba2eae0df4298f + languageName: node + linkType: hard + +"module-definition@npm:^3.3.1": + version: 3.4.0 + resolution: "module-definition@npm:3.4.0" + dependencies: + ast-module-types: ^3.0.0 + node-source-walk: ^4.0.0 + bin: + module-definition: bin/cli.js + checksum: 5cbfd38aab1a9169b5c31924e208e430a87a1b1512ab9736a9a368d950e3cc8e2f5cf642e37fe74123e25402cae50bfb8fdf1f5f0fd3d4d9270df705a2360bfa + languageName: node + linkType: hard + +"module-definition@npm:^4.1.0": + version: 4.1.0 + resolution: "module-definition@npm:4.1.0" + dependencies: + ast-module-types: ^4.0.0 + node-source-walk: ^5.0.1 + bin: + module-definition: bin/cli.js + checksum: d9b6397c9ba04b08bc035fd87a3652900530b9a5d6e5263f8a1e05c927dfc103fdffcecd7071a9fd6cd7813fc9feafbbe828f5277e5b706e5de82831153ef0fb + languageName: node + linkType: hard + +"module-lookup-amd@npm:^7.0.1": + version: 7.0.1 + resolution: "module-lookup-amd@npm:7.0.1" + dependencies: + commander: ^2.8.1 + debug: ^4.1.0 + glob: ^7.1.6 + requirejs: ^2.3.5 + requirejs-config-file: ^4.0.0 + bin: + lookup-amd: bin/cli.js + checksum: 911abd6b8fb1d82cfae4ef38050981d4eb7e710bfeba898903c5c49a4d3a44b3cacb6201ddf9930a39fae3473faf9b96d39930cfa8766dbf0da86689108895b1 + languageName: node + linkType: hard + +"moment@npm:^2.29.1": + version: 2.30.1 + resolution: "moment@npm:2.30.1" + checksum: 859236bab1e88c3e5802afcf797fc801acdbd0ee509d34ea3df6eea21eb6bcc2abd4ae4e4e64aa7c986aa6cba563c6e62806218e6412a765010712e5fa121ba6 + languageName: node + linkType: hard + +"mortice@npm:^3.0.4": + version: 3.0.4 + resolution: "mortice@npm:3.0.4" + dependencies: + observable-webworkers: ^2.0.1 + p-queue: ^8.0.1 + p-timeout: ^6.0.0 + checksum: 64d63b6d724636e94f59a8f72208561d621f601707df17e8c1ea5e236bc3f208eae98609586898458851228733908028d61b1bf5a2b6db58bd2aa9c1f7e8166b + languageName: node + linkType: hard + +"ms@npm:2.1.2": + version: 2.1.2 + resolution: "ms@npm:2.1.2" + checksum: 673cdb2c3133eb050c745908d8ce632ed2c02d85640e2edb3ace856a2266a813b30c613569bf3354fdf4ea7d1a1494add3bfa95e2713baa27d0c2c71fc44f58f + languageName: node + linkType: hard + +"ms@npm:^2.1.1": + version: 2.1.3 + resolution: "ms@npm:2.1.3" + checksum: aa92de608021b242401676e35cfa5aa42dd70cbdc082b916da7fb925c542173e36bce97ea3e804923fe92c0ad991434e4a38327e15a1b5b5f945d66df615ae6d + languageName: node + linkType: hard + +"msgpackr-extract@npm:^3.0.2": + version: 3.0.2 + resolution: "msgpackr-extract@npm:3.0.2" + dependencies: + "@msgpackr-extract/msgpackr-extract-darwin-arm64": 3.0.2 + "@msgpackr-extract/msgpackr-extract-darwin-x64": 3.0.2 + "@msgpackr-extract/msgpackr-extract-linux-arm": 3.0.2 + "@msgpackr-extract/msgpackr-extract-linux-arm64": 3.0.2 + "@msgpackr-extract/msgpackr-extract-linux-x64": 3.0.2 + "@msgpackr-extract/msgpackr-extract-win32-x64": 3.0.2 + node-gyp: latest + node-gyp-build-optional-packages: 5.0.7 + dependenciesMeta: + "@msgpackr-extract/msgpackr-extract-darwin-arm64": + optional: true + "@msgpackr-extract/msgpackr-extract-darwin-x64": + optional: true + "@msgpackr-extract/msgpackr-extract-linux-arm": + optional: true + "@msgpackr-extract/msgpackr-extract-linux-arm64": + optional: true + "@msgpackr-extract/msgpackr-extract-linux-x64": + optional: true + "@msgpackr-extract/msgpackr-extract-win32-x64": + optional: true + bin: + download-msgpackr-prebuilds: bin/download-prebuilds.js + checksum: 5adb809b965bac41c310e60373d54c955fe78e4d134ab036d0f9ee5b322cec0a739878d395e17c1ac82d840705896b2dafae6a8cc04ad34c14d2de4b06b58330 + languageName: node + linkType: hard + +"msgpackr@npm:^1.9.9": + version: 1.10.1 + resolution: "msgpackr@npm:1.10.1" + dependencies: + msgpackr-extract: ^3.0.2 + dependenciesMeta: + msgpackr-extract: + optional: true + checksum: e422d18b01051598b23701eebeb4b9e2c686b9c7826b20f564724837ba2b5cd4af74c91a549eaeaf8186645cc95e8196274a4a19442aa3286ac611b98069c194 + languageName: node + linkType: hard + +"multiformats@npm:^12.0.1": + version: 12.1.3 + resolution: "multiformats@npm:12.1.3" + checksum: 1060488612f8e6729c600f47a8741b91aa6e7b807ce165eca3c8cf07ab7465d2d9b212415a9c18886938b9e35b30ea7b9ae19b5ab5122589c65063440643e6bb + languageName: node + linkType: hard + +"multiformats@npm:^13.0.0, multiformats@npm:^13.0.1, multiformats@npm:^13.1.0": + version: 13.1.0 + resolution: "multiformats@npm:13.1.0" + checksum: b970e3622a80192a4df8c23378c4854520df8b2d17db773ac8b77c19750019e1c9813cc05e12b0e3b0d03599ff5d073681e847d43b4b273efca5aabbb28eb0e0 + languageName: node + linkType: hard + +"murmurhash3js-revisited@npm:^3.0.0": + version: 3.0.0 + resolution: "murmurhash3js-revisited@npm:3.0.0" + checksum: 24b60657ce296b1d3cf358af70688c8ed777e93c4ee263967f066a4adb0ade0d689863a1a51adc74ab134d61a877f41a06e2b73842ac3fc924799cc96b249a40 + languageName: node + linkType: hard + +"nanoid@npm:^3.3.7": + version: 3.3.7 + resolution: "nanoid@npm:3.3.7" + bin: + nanoid: bin/nanoid.cjs + checksum: d36c427e530713e4ac6567d488b489a36582ef89da1d6d4e3b87eded11eb10d7042a877958c6f104929809b2ab0bafa17652b076cdf84324aa75b30b722204f2 + languageName: node + linkType: hard + +"napi-macros@npm:~2.0.0": + version: 2.0.0 + resolution: "napi-macros@npm:2.0.0" + checksum: 30384819386977c1f82034757014163fa60ab3c5a538094f778d38788bebb52534966279956f796a92ea771c7f8ae072b975df65de910d051ffbdc927f62320c + languageName: node + linkType: hard + +"natural-compare@npm:^1.4.0": + version: 1.4.0 + resolution: "natural-compare@npm:1.4.0" + checksum: 23ad088b08f898fc9b53011d7bb78ec48e79de7627e01ab5518e806033861bef68d5b0cd0e2205c2f36690ac9571ff6bcb05eb777ced2eeda8d4ac5b44592c3d + languageName: node + linkType: hard + +"negotiator@npm:0.6.3, negotiator@npm:^0.6.3": + version: 0.6.3 + resolution: "negotiator@npm:0.6.3" + checksum: b8ffeb1e262eff7968fc90a2b6767b04cfd9842582a9d0ece0af7049537266e7b2506dfb1d107a32f06dd849ab2aea834d5830f7f4d0e5cb7d36e1ae55d021d9 + languageName: node + linkType: hard + +"neo-async@npm:^2.6.2": + version: 2.6.2 + resolution: "neo-async@npm:2.6.2" + checksum: deac9f8d00eda7b2e5cd1b2549e26e10a0faa70adaa6fdadca701cc55f49ee9018e427f424bac0c790b7c7e2d3068db97f3093f1093975f2acb8f8818b936ed9 + languageName: node + linkType: hard + +"netmask@npm:^2.0.2": + version: 2.0.2 + resolution: "netmask@npm:2.0.2" + checksum: c65cb8d3f7ea5669edddb3217e4c96910a60d0d9a4b52d9847ff6b28b2d0277cd8464eee0ef85133cdee32605c57940cacdd04a9a019079b091b6bba4cb0ec22 + languageName: node + linkType: hard + +"node-addon-api@npm:^6.1.0": + version: 6.1.0 + resolution: "node-addon-api@npm:6.1.0" + dependencies: + node-gyp: latest + checksum: 3a539510e677cfa3a833aca5397300e36141aca064cdc487554f2017110709a03a95da937e98c2a14ec3c626af7b2d1b6dabe629a481f9883143d0d5bff07bf2 + languageName: node + linkType: hard + +"node-cleanup@npm:^2.1.2": + version: 2.1.2 + resolution: "node-cleanup@npm:2.1.2" + checksum: 584cdc3e42560a998b4579f91ed8f936b27011628f3102e5a1093205f0691cdf8d899287d1f2e4d2071ea4ab1d615810bad6dbe2b988ef173a1cbaa76d8165b3 + languageName: node + linkType: hard + +"node-domexception@npm:^1.0.0": + version: 1.0.0 + resolution: "node-domexception@npm:1.0.0" + checksum: ee1d37dd2a4eb26a8a92cd6b64dfc29caec72bff5e1ed9aba80c294f57a31ba4895a60fd48347cf17dd6e766da0ae87d75657dfd1f384ebfa60462c2283f5c7f + languageName: node + linkType: hard + +"node-fetch@npm:^3.3.2": + version: 3.3.2 + resolution: "node-fetch@npm:3.3.2" + dependencies: + data-uri-to-buffer: ^4.0.0 + fetch-blob: ^3.1.4 + formdata-polyfill: ^4.0.10 + checksum: 06a04095a2ddf05b0830a0d5302699704d59bda3102894ea64c7b9d4c865ecdff2d90fd042df7f5bc40337266961cb6183dcc808ea4f3000d024f422b462da92 + languageName: node + linkType: hard + +"node-forge@npm:^1.1.0": + version: 1.3.1 + resolution: "node-forge@npm:1.3.1" + checksum: 08fb072d3d670599c89a1704b3e9c649ff1b998256737f0e06fbd1a5bf41cae4457ccaee32d95052d80bbafd9ffe01284e078c8071f0267dc9744e51c5ed42a9 + languageName: node + linkType: hard + +"node-gyp-build-optional-packages@npm:5.0.7": + version: 5.0.7 + resolution: "node-gyp-build-optional-packages@npm:5.0.7" + bin: + node-gyp-build-optional-packages: bin.js + node-gyp-build-optional-packages-optional: optional.js + node-gyp-build-optional-packages-test: build-test.js + checksum: bcb4537af15bcb3811914ea0db8f69284ca10db1cc7543a167a4c41ae4b9b5044b133f789fdadad0b7adc6931f6ae7def3c75b0bc7b05836881aae52400163e6 + languageName: node + linkType: hard + +"node-gyp-build-optional-packages@npm:5.1.1": + version: 5.1.1 + resolution: "node-gyp-build-optional-packages@npm:5.1.1" + dependencies: + detect-libc: ^2.0.1 + bin: + node-gyp-build-optional-packages: bin.js + node-gyp-build-optional-packages-optional: optional.js + node-gyp-build-optional-packages-test: build-test.js + checksum: f3cb197862516e6879377adaa58142ae9013ab69c86cf2645f8b008db339354145d8ebd9140a13ec7ece5ce28a372ca7e14660379d3a3dd7b908a6f2743606e9 + languageName: node + linkType: hard + +"node-gyp-build@npm:^4.3.0": + version: 4.8.1 + resolution: "node-gyp-build@npm:4.8.1" + bin: + node-gyp-build: bin.js + node-gyp-build-optional: optional.js + node-gyp-build-test: build-test.js + checksum: fe6e95da6f4608c1a98655f6bf2fe4e8dd9c877cd13256056a8acaf585cc7f98718823fe9366be11b78c2f332d5a184b00cf07a4af96c9d8fea45f640c019f98 + languageName: node + linkType: hard + +"node-gyp@npm:latest": + version: 10.1.0 + resolution: "node-gyp@npm:10.1.0" + dependencies: + env-paths: ^2.2.0 + exponential-backoff: ^3.1.1 + glob: ^10.3.10 + graceful-fs: ^4.2.6 + make-fetch-happen: ^13.0.0 + nopt: ^7.0.0 + proc-log: ^3.0.0 + semver: ^7.3.5 + tar: ^6.1.2 + which: ^4.0.0 + bin: + node-gyp: bin/node-gyp.js + checksum: 72e2ab4b23fc32007a763da94018f58069fc0694bf36115d49a2b195c8831e12cf5dd1e7a3718fa85c06969aedf8fc126722d3b672ec1cb27e06ed33caee3c60 + languageName: node + linkType: hard + +"node-int64@npm:^0.4.0": + version: 0.4.0 + resolution: "node-int64@npm:0.4.0" + checksum: d0b30b1ee6d961851c60d5eaa745d30b5c95d94bc0e74b81e5292f7c42a49e3af87f1eb9e89f59456f80645d679202537de751b7d72e9e40ceea40c5e449057e + languageName: node + linkType: hard + +"node-releases@npm:^2.0.14": + version: 2.0.14 + resolution: "node-releases@npm:2.0.14" + checksum: 59443a2f77acac854c42d321bf1b43dea0aef55cd544c6a686e9816a697300458d4e82239e2d794ea05f7bbbc8a94500332e2d3ac3f11f52e4b16cbe638b3c41 + languageName: node + linkType: hard + +"node-source-walk@npm:^4.0.0, node-source-walk@npm:^4.2.0, node-source-walk@npm:^4.2.2": + version: 4.3.0 + resolution: "node-source-walk@npm:4.3.0" + dependencies: + "@babel/parser": ^7.0.0 + checksum: 124bcec61f73141a5f13e63f773beb00c9a9620e9eec6d7505b9de8fa884797f3eb0b9e9d225bb324930234ae03b28a4a7a231e2c2f23d71405d4a562b404e34 + languageName: node + linkType: hard + +"node-source-walk@npm:^5.0.0, node-source-walk@npm:^5.0.1": + version: 5.0.2 + resolution: "node-source-walk@npm:5.0.2" + dependencies: + "@babel/parser": ^7.21.4 + checksum: 1031bc0871bb77ace33bd09fb1e9ef7589b03e6a2fa441b8e684023102362da6dba77d6b9b086dc1f995c7e69e3517666d5316c3831b9d9ff077cb36d57179e8 + languageName: node + linkType: hard + +"nopt@npm:^7.0.0": + version: 7.2.1 + resolution: "nopt@npm:7.2.1" + dependencies: + abbrev: ^2.0.0 + bin: + nopt: bin/nopt.js + checksum: 6fa729cc77ce4162cfad8abbc9ba31d4a0ff6850c3af61d59b505653bef4781ec059f8890ecfe93ee8aa0c511093369cca88bfc998101616a2904e715bbbb7c9 + languageName: node + linkType: hard + +"normalize-package-data@npm:^2.5.0": + version: 2.5.0 + resolution: "normalize-package-data@npm:2.5.0" + dependencies: + hosted-git-info: ^2.1.4 + resolve: ^1.10.0 + semver: 2 || 3 || 4 || 5 + validate-npm-package-license: ^3.0.1 + checksum: 7999112efc35a6259bc22db460540cae06564aa65d0271e3bdfa86876d08b0e578b7b5b0028ee61b23f1cae9fc0e7847e4edc0948d3068a39a2a82853efc8499 + languageName: node + linkType: hard + +"normalize-path@npm:^3.0.0": + version: 3.0.0 + resolution: "normalize-path@npm:3.0.0" + checksum: 88eeb4da891e10b1318c4b2476b6e2ecbeb5ff97d946815ffea7794c31a89017c70d7f34b3c2ebf23ef4e9fc9fb99f7dffe36da22011b5b5c6ffa34f4873ec20 + languageName: node + linkType: hard + +"npm-run-path@npm:^4.0.1": + version: 4.0.1 + resolution: "npm-run-path@npm:4.0.1" + dependencies: + path-key: ^3.0.0 + checksum: 5374c0cea4b0bbfdfae62da7bbdf1e1558d338335f4cacf2515c282ff358ff27b2ecb91ffa5330a8b14390ac66a1e146e10700440c1ab868208430f56b5f4d23 + languageName: node + linkType: hard + +"npm-run-path@npm:^5.1.0": + version: 5.3.0 + resolution: "npm-run-path@npm:5.3.0" + dependencies: + path-key: ^4.0.0 + checksum: ae8e7a89da9594fb9c308f6555c73f618152340dcaae423e5fb3620026fefbec463618a8b761920382d666fa7a2d8d240b6fe320e8a6cdd54dc3687e2b659d25 + languageName: node + linkType: hard + +"object-hash@npm:^2.0.1": + version: 2.2.0 + resolution: "object-hash@npm:2.2.0" + checksum: 55ba841e3adce9c4f1b9b46b41983eda40f854e0d01af2802d3ae18a7085a17168d6b81731d43fdf1d6bcbb3c9f9c56d22c8fea992203ad90a38d7d919bc28f1 + languageName: node + linkType: hard + +"object-inspect@npm:^1.13.1": + version: 1.13.1 + resolution: "object-inspect@npm:1.13.1" + checksum: 7d9fa9221de3311dcb5c7c307ee5dc011cdd31dc43624b7c184b3840514e118e05ef0002be5388304c416c0eb592feb46e983db12577fc47e47d5752fbbfb61f + languageName: node + linkType: hard + +"object-keys@npm:^1.1.1": + version: 1.1.1 + resolution: "object-keys@npm:1.1.1" + checksum: b363c5e7644b1e1b04aa507e88dcb8e3a2f52b6ffd0ea801e4c7a62d5aa559affe21c55a07fd4b1fd55fc03a33c610d73426664b20032405d7b92a1414c34d6a + languageName: node + linkType: hard + +"object.assign@npm:^4.1.5": + version: 4.1.5 + resolution: "object.assign@npm:4.1.5" + dependencies: + call-bind: ^1.0.5 + define-properties: ^1.2.1 + has-symbols: ^1.0.3 + object-keys: ^1.1.1 + checksum: f9aeac0541661370a1fc86e6a8065eb1668d3e771f7dbb33ee54578201336c057b21ee61207a186dd42db0c62201d91aac703d20d12a79fc79c353eed44d4e25 + languageName: node + linkType: hard + +"object.fromentries@npm:^2.0.7": + version: 2.0.8 + resolution: "object.fromentries@npm:2.0.8" + dependencies: + call-bind: ^1.0.7 + define-properties: ^1.2.1 + es-abstract: ^1.23.2 + es-object-atoms: ^1.0.0 + checksum: 29b2207a2db2782d7ced83f93b3ff5d425f901945f3665ffda1821e30a7253cd1fd6b891a64279976098137ddfa883d748787a6fea53ecdb51f8df8b8cec0ae1 + languageName: node + linkType: hard + +"object.groupby@npm:^1.0.1": + version: 1.0.3 + resolution: "object.groupby@npm:1.0.3" + dependencies: + call-bind: ^1.0.7 + define-properties: ^1.2.1 + es-abstract: ^1.23.2 + checksum: 0d30693ca3ace29720bffd20b3130451dca7a56c612e1926c0a1a15e4306061d84410bdb1456be2656c5aca53c81b7a3661eceaa362db1bba6669c2c9b6d1982 + languageName: node + linkType: hard + +"object.values@npm:^1.1.7": + version: 1.2.0 + resolution: "object.values@npm:1.2.0" + dependencies: + call-bind: ^1.0.7 + define-properties: ^1.2.1 + es-object-atoms: ^1.0.0 + checksum: 51fef456c2a544275cb1766897f34ded968b22adfc13ba13b5e4815fdaf4304a90d42a3aee114b1f1ede048a4890381d47a5594d84296f2767c6a0364b9da8fa + languageName: node + linkType: hard + +"observable-webworkers@npm:^2.0.1": + version: 2.0.1 + resolution: "observable-webworkers@npm:2.0.1" + checksum: ce278b74b62da92afc48f9ba782aa4cd794b95c89717d7e7ca2e80fe72c2f853abcd4d190eb198d222ff3eaa91f8a229a490bbc0194063f996f312a07985cff5 + languageName: node + linkType: hard + +"on-finished@npm:^2.3.0": + version: 2.4.1 + resolution: "on-finished@npm:2.4.1" + dependencies: + ee-first: 1.1.1 + checksum: d20929a25e7f0bb62f937a425b5edeb4e4cde0540d77ba146ec9357f00b0d497cdb3b9b05b9c8e46222407d1548d08166bff69cc56dfa55ba0e4469228920ff0 + languageName: node + linkType: hard + +"once@npm:^1.3.0, once@npm:^1.3.1, once@npm:^1.4.0": + version: 1.4.0 + resolution: "once@npm:1.4.0" + dependencies: + wrappy: 1 + checksum: cd0a88501333edd640d95f0d2700fbde6bff20b3d4d9bdc521bdd31af0656b5706570d6c6afe532045a20bb8dc0849f8332d6f2a416e0ba6d3d3b98806c7db68 + languageName: node + linkType: hard + +"one-time@npm:^1.0.0": + version: 1.0.0 + resolution: "one-time@npm:1.0.0" + dependencies: + fn.name: 1.x.x + checksum: fd008d7e992bdec1c67f53a2f9b46381ee12a9b8c309f88b21f0223546003fb47e8ad7c1fd5843751920a8d276c63bd4b45670ef80c61fb3e07dbccc962b5c7d + languageName: node + linkType: hard + +"onetime@npm:^5.1.0, onetime@npm:^5.1.2": + version: 5.1.2 + resolution: "onetime@npm:5.1.2" + dependencies: + mimic-fn: ^2.1.0 + checksum: 2478859ef817fc5d4e9c2f9e5728512ddd1dbc9fb7829ad263765bb6d3b91ce699d6e2332eef6b7dff183c2f490bd3349f1666427eaba4469fba0ac38dfd0d34 + languageName: node + linkType: hard + +"onetime@npm:^6.0.0": + version: 6.0.0 + resolution: "onetime@npm:6.0.0" + dependencies: + mimic-fn: ^4.0.0 + checksum: 0846ce78e440841335d4e9182ef69d5762e9f38aa7499b19f42ea1c4cd40f0b4446094c455c713f9adac3f4ae86f613bb5e30c99e52652764d06a89f709b3788 + languageName: node + linkType: hard + +"only@npm:~0.0.2": + version: 0.0.2 + resolution: "only@npm:0.0.2" + checksum: d399710db867a1ef436dd3ce74499c87ece794aa81ab0370b5d153968766ee4aed2f98d3f92fc87c963e45b7a74d400d6f463ef651a5e7cfb861b15e88e9efe6 + languageName: node + linkType: hard + +"optionator@npm:^0.9.3": + version: 0.9.4 + resolution: "optionator@npm:0.9.4" + dependencies: + deep-is: ^0.1.3 + fast-levenshtein: ^2.0.6 + levn: ^0.4.1 + prelude-ls: ^1.2.1 + type-check: ^0.4.0 + word-wrap: ^1.2.5 + checksum: ecbd010e3dc73e05d239976422d9ef54a82a13f37c11ca5911dff41c98a6c7f0f163b27f922c37e7f8340af9d36febd3b6e9cef508f3339d4c393d7276d716bb + languageName: node + linkType: hard + +"ora@npm:^5.4.1": + version: 5.4.1 + resolution: "ora@npm:5.4.1" + dependencies: + bl: ^4.1.0 + chalk: ^4.1.0 + cli-cursor: ^3.1.0 + cli-spinners: ^2.5.0 + is-interactive: ^1.0.0 + is-unicode-supported: ^0.1.0 + log-symbols: ^4.1.0 + strip-ansi: ^6.0.0 + wcwidth: ^1.0.1 + checksum: 28d476ee6c1049d68368c0dc922e7225e3b5600c3ede88fade8052837f9ed342625fdaa84a6209302587c8ddd9b664f71f0759833cbdb3a4cf81344057e63c63 + languageName: node + linkType: hard + +"ordered-binary@npm:^1.4.1": + version: 1.5.1 + resolution: "ordered-binary@npm:1.5.1" + checksum: ec4d3a6bd7f8c84afec9def1e599e7d460a45d11f94d07b16fdf62db4d2bc16405d79ef0277c2fdf86332fd2539761278981787d2ecf52376ade8b678104a0e6 + languageName: node + linkType: hard + +"os-tmpdir@npm:~1.0.2": + version: 1.0.2 + resolution: "os-tmpdir@npm:1.0.2" + checksum: 5666560f7b9f10182548bf7013883265be33620b1c1b4a4d405c25be2636f970c5488ff3e6c48de75b55d02bde037249fe5dbfbb4c0fb7714953d56aed062e6d + languageName: node + linkType: hard + +"p-defer@npm:^4.0.0, p-defer@npm:^4.0.1": + version: 4.0.1 + resolution: "p-defer@npm:4.0.1" + checksum: a561e7b581b76e6dce8ae763b4980004dbc795781de327d0b760e5341f035b0fa2c14e892a66d6d8122e2e114815a26f5ad154061374df84f88e75405ea4b0bb + languageName: node + linkType: hard + +"p-event@npm:^6.0.0": + version: 6.0.1 + resolution: "p-event@npm:6.0.1" + dependencies: + p-timeout: ^6.1.2 + checksum: 0fcc0c656d76b164a575131b3f5abe1baec08488e37f5e39494106ce5bf1309d7b4b8ebde82d8c3f3261c55122530d95da5da4a00476bf26a9ea4e24a32a27be + languageName: node + linkType: hard + +"p-limit@npm:^2.2.0": + version: 2.3.0 + resolution: "p-limit@npm:2.3.0" + dependencies: + p-try: ^2.0.0 + checksum: 84ff17f1a38126c3314e91ecfe56aecbf36430940e2873dadaa773ffe072dc23b7af8e46d4b6485d302a11673fe94c6b67ca2cfbb60c989848b02100d0594ac1 + languageName: node + linkType: hard + +"p-limit@npm:^3.0.2, p-limit@npm:^3.1.0": + version: 3.1.0 + resolution: "p-limit@npm:3.1.0" + dependencies: + yocto-queue: ^0.1.0 + checksum: 7c3690c4dbf62ef625671e20b7bdf1cbc9534e83352a2780f165b0d3ceba21907e77ad63401708145ca4e25bfc51636588d89a8c0aeb715e6c37d1c066430360 + languageName: node + linkType: hard + +"p-locate@npm:^4.1.0": + version: 4.1.0 + resolution: "p-locate@npm:4.1.0" + dependencies: + p-limit: ^2.2.0 + checksum: 513bd14a455f5da4ebfcb819ef706c54adb09097703de6aeaa5d26fe5ea16df92b48d1ac45e01e3944ce1e6aa2a66f7f8894742b8c9d6e276e16cd2049a2b870 + languageName: node + linkType: hard + +"p-locate@npm:^5.0.0": + version: 5.0.0 + resolution: "p-locate@npm:5.0.0" + dependencies: + p-limit: ^3.0.2 + checksum: 1623088f36cf1cbca58e9b61c4e62bf0c60a07af5ae1ca99a720837356b5b6c5ba3eb1b2127e47a06865fee59dd0453cad7cc844cda9d5a62ac1a5a51b7c86d3 + languageName: node + linkType: hard + +"p-map@npm:^4.0.0": + version: 4.0.0 + resolution: "p-map@npm:4.0.0" + dependencies: + aggregate-error: ^3.0.0 + checksum: cb0ab21ec0f32ddffd31dfc250e3afa61e103ef43d957cc45497afe37513634589316de4eb88abdfd969fe6410c22c0b93ab24328833b8eb1ccc087fc0442a1c + languageName: node + linkType: hard + +"p-queue@npm:^7.3.4": + version: 7.4.1 + resolution: "p-queue@npm:7.4.1" + dependencies: + eventemitter3: ^5.0.1 + p-timeout: ^5.0.2 + checksum: 1c6888aa994d399262a9fbdd49c7066f8359732397f7a42ecf03f22875a1d65899797b46413f97e44acc18dddafbcc101eb135c284714c931dbbc83c3967f450 + languageName: node + linkType: hard + +"p-queue@npm:^8.0.1": + version: 8.0.1 + resolution: "p-queue@npm:8.0.1" + dependencies: + eventemitter3: ^5.0.1 + p-timeout: ^6.1.2 + checksum: 84a27a5b1faf2dcc96b8c0e423c34b5984b241acc07353d3cc6d8d3d1dadefb250b4ec84ce278cb1c946466999c6bf2a36ff718a75810bad8e11c7ca47ce80f5 + languageName: node + linkType: hard + +"p-timeout@npm:^5.0.2": + version: 5.1.0 + resolution: "p-timeout@npm:5.1.0" + checksum: f5cd4e17301ff1ff1d8dbf2817df0ad88c6bba99349fc24d8d181827176ad4f8aca649190b8a5b1a428dfd6ddc091af4606835d3e0cb0656e04045da5c9e270c + languageName: node + linkType: hard + +"p-timeout@npm:^6.0.0, p-timeout@npm:^6.1.2": + version: 6.1.2 + resolution: "p-timeout@npm:6.1.2" + checksum: 887b805eb72c217dbc3c55a60a7f3b89a46cab14f04af62224f253ec84716cbd0880758be13b35444a4fa12d64d37d4c8a300f0b12a57c004d289f0a574cfe91 + languageName: node + linkType: hard + +"p-try@npm:^2.0.0": + version: 2.2.0 + resolution: "p-try@npm:2.2.0" + checksum: f8a8e9a7693659383f06aec604ad5ead237c7a261c18048a6e1b5b85a5f8a067e469aa24f5bc009b991ea3b058a87f5065ef4176793a200d4917349881216cae + languageName: node + linkType: hard + +"pac-proxy-agent@npm:^7.0.1": + version: 7.0.1 + resolution: "pac-proxy-agent@npm:7.0.1" + dependencies: + "@tootallnate/quickjs-emscripten": ^0.23.0 + agent-base: ^7.0.2 + debug: ^4.3.4 + get-uri: ^6.0.1 + http-proxy-agent: ^7.0.0 + https-proxy-agent: ^7.0.2 + pac-resolver: ^7.0.0 + socks-proxy-agent: ^8.0.2 + checksum: 3d4aa48ec1c19db10158ecc1c4c9a9f77792294412d225ceb3dfa45d5a06950dca9755e2db0d9b69f12769119bea0adf2b24390d9c73c8d81df75e28245ae451 + languageName: node + linkType: hard + +"pac-resolver@npm:^7.0.0": + version: 7.0.1 + resolution: "pac-resolver@npm:7.0.1" + dependencies: + degenerator: ^5.0.0 + netmask: ^2.0.2 + checksum: 839134328781b80d49f9684eae1f5c74f50a1d4482076d44c84fc2f3ca93da66fa11245a4725a057231e06b311c20c989fd0681e662a0792d17f644d8fe62a5e + languageName: node + linkType: hard + +"pako@npm:^2.1.0": + version: 2.1.0 + resolution: "pako@npm:2.1.0" + checksum: 71666548644c9a4d056bcaba849ca6fd7242c6cf1af0646d3346f3079a1c7f4a66ffec6f7369ee0dc88f61926c10d6ab05da3e1fca44b83551839e89edd75a3e + languageName: node + linkType: hard + +"pako@npm:~1.0.2": + version: 1.0.11 + resolution: "pako@npm:1.0.11" + checksum: 1be2bfa1f807608c7538afa15d6f25baa523c30ec870a3228a89579e474a4d992f4293859524e46d5d87fd30fa17c5edf34dbef0671251d9749820b488660b16 + languageName: node + linkType: hard + +"parent-module@npm:^1.0.0": + version: 1.0.1 + resolution: "parent-module@npm:1.0.1" + dependencies: + callsites: ^3.0.0 + checksum: 6ba8b255145cae9470cf5551eb74be2d22281587af787a2626683a6c20fbb464978784661478dd2a3f1dad74d1e802d403e1b03c1a31fab310259eec8ac560ff + languageName: node + linkType: hard + +"parse-asn1@npm:^5.0.0, parse-asn1@npm:^5.1.7": + version: 5.1.7 + resolution: "parse-asn1@npm:5.1.7" + dependencies: + asn1.js: ^4.10.1 + browserify-aes: ^1.2.0 + evp_bytestokey: ^1.0.3 + hash-base: ~3.0 + pbkdf2: ^3.1.2 + safe-buffer: ^5.2.1 + checksum: 93c7194c1ed63a13e0b212d854b5213ad1aca0ace41c66b311e97cca0519cf9240f79435a0306a3b412c257f0ea3f1953fd0d9549419a0952c9e995ab361fd6c + languageName: node + linkType: hard + +"parse-json@npm:^5.0.0, parse-json@npm:^5.2.0": + version: 5.2.0 + resolution: "parse-json@npm:5.2.0" + dependencies: + "@babel/code-frame": ^7.0.0 + error-ex: ^1.3.1 + json-parse-even-better-errors: ^2.3.0 + lines-and-columns: ^1.1.6 + checksum: 62085b17d64da57f40f6afc2ac1f4d95def18c4323577e1eced571db75d9ab59b297d1d10582920f84b15985cbfc6b6d450ccbf317644cfa176f3ed982ad87e2 + languageName: node + linkType: hard + +"parse-ms@npm:^2.1.0": + version: 2.1.0 + resolution: "parse-ms@npm:2.1.0" + checksum: d5c66c76cca8df5bd0574e2d11b9c3752893b59b466e74308d4a2f09760dc5436a1633f549cad300fc8c3c19154d14959a3b8333d3b2f7bd75898fe18149d564 + languageName: node + linkType: hard + +"parseurl@npm:^1.3.2": + version: 1.3.3 + resolution: "parseurl@npm:1.3.3" + checksum: 407cee8e0a3a4c5cd472559bca8b6a45b82c124e9a4703302326e9ab60fc1081442ada4e02628efef1eb16197ddc7f8822f5a91fd7d7c86b51f530aedb17dfa2 + languageName: node + linkType: hard + +"path-exists@npm:^4.0.0": + version: 4.0.0 + resolution: "path-exists@npm:4.0.0" + checksum: 505807199dfb7c50737b057dd8d351b82c033029ab94cb10a657609e00c1bc53b951cfdbccab8de04c5584d5eff31128ce6afd3db79281874a5ef2adbba55ed1 + languageName: node + linkType: hard + +"path-is-absolute@npm:1.0.1, path-is-absolute@npm:^1.0.0": + version: 1.0.1 + resolution: "path-is-absolute@npm:1.0.1" + checksum: 060840f92cf8effa293bcc1bea81281bd7d363731d214cbe5c227df207c34cd727430f70c6037b5159c8a870b9157cba65e775446b0ab06fd5ecc7e54615a3b8 + languageName: node + linkType: hard + +"path-key@npm:^3.0.0, path-key@npm:^3.1.0": + version: 3.1.1 + resolution: "path-key@npm:3.1.1" + checksum: 55cd7a9dd4b343412a8386a743f9c746ef196e57c823d90ca3ab917f90ab9f13dd0ded27252ba49dbdfcab2b091d998bc446f6220cd3cea65db407502a740020 + languageName: node + linkType: hard + +"path-key@npm:^4.0.0": + version: 4.0.0 + resolution: "path-key@npm:4.0.0" + checksum: 8e6c314ae6d16b83e93032c61020129f6f4484590a777eed709c4a01b50e498822b00f76ceaf94bc64dbd90b327df56ceadce27da3d83393790f1219e07721d7 + languageName: node + linkType: hard + +"path-parse@npm:^1.0.6, path-parse@npm:^1.0.7": + version: 1.0.7 + resolution: "path-parse@npm:1.0.7" + checksum: 49abf3d81115642938a8700ec580da6e830dde670be21893c62f4e10bd7dd4c3742ddc603fe24f898cba7eb0c6bc1777f8d9ac14185d34540c6d4d80cd9cae8a + languageName: node + linkType: hard + +"path-scurry@npm:^1.10.2": + version: 1.10.2 + resolution: "path-scurry@npm:1.10.2" + dependencies: + lru-cache: ^10.2.0 + minipass: ^5.0.0 || ^6.0.2 || ^7.0.0 + checksum: 6739b4290f7d1a949c61c758b481c07ac7d1a841964c68cf5e1fa153d7e18cbde4872b37aadf9c5173c800d627f219c47945859159de36c977dd82419997b9b8 + languageName: node + linkType: hard + +"path-to-regexp@npm:^6.2.1": + version: 6.2.2 + resolution: "path-to-regexp@npm:6.2.2" + checksum: b7b0005c36f5099f9ed1fb20a820d2e4ed1297ffe683ea1d678f5e976eb9544f01debb281369dabdc26da82e6453901bf71acf2c7ed14b9243536c2a45286c33 + languageName: node + linkType: hard + +"path-type@npm:^4.0.0": + version: 4.0.0 + resolution: "path-type@npm:4.0.0" + checksum: 5b1e2daa247062061325b8fdbfd1fb56dde0a448fb1455453276ea18c60685bdad23a445dc148cf87bc216be1573357509b7d4060494a6fd768c7efad833ee45 + languageName: node + linkType: hard + +"pause-stream@npm:0.0.11": + version: 0.0.11 + resolution: "pause-stream@npm:0.0.11" + dependencies: + through: ~2.3 + checksum: 3c4a14052a638b92e0c96eb00c0d7977df7f79ea28395250c525d197f1fc02d34ce1165d5362e2e6ebbb251524b94a76f3f0d4abc39ab8b016d97449fe15583c + languageName: node + linkType: hard + +"pbkdf2@npm:^3.0.3, pbkdf2@npm:^3.1.2": + version: 3.1.2 + resolution: "pbkdf2@npm:3.1.2" + dependencies: + create-hash: ^1.1.2 + create-hmac: ^1.1.4 + ripemd160: ^2.0.1 + safe-buffer: ^5.0.1 + sha.js: ^2.4.8 + checksum: 2c950a100b1da72123449208e231afc188d980177d021d7121e96a2de7f2abbc96ead2b87d03d8fe5c318face097f203270d7e27908af9f471c165a4e8e69c92 + languageName: node + linkType: hard + +"pend@npm:~1.2.0": + version: 1.2.0 + resolution: "pend@npm:1.2.0" + checksum: 6c72f5243303d9c60bd98e6446ba7d30ae29e3d56fdb6fae8767e8ba6386f33ee284c97efe3230a0d0217e2b1723b8ab490b1bbf34fcbb2180dbc8a9de47850d + languageName: node + linkType: hard + +"picocolors@npm:^1.0.0": + version: 1.0.0 + resolution: "picocolors@npm:1.0.0" + checksum: a2e8092dd86c8396bdba9f2b5481032848525b3dc295ce9b57896f931e63fc16f79805144321f72976383fc249584672a75cc18d6777c6b757603f372f745981 + languageName: node + linkType: hard + +"picomatch@npm:^2.0.4, picomatch@npm:^2.2.3, picomatch@npm:^2.3.1": + version: 2.3.1 + resolution: "picomatch@npm:2.3.1" + checksum: 050c865ce81119c4822c45d3c84f1ced46f93a0126febae20737bd05ca20589c564d6e9226977df859ed5e03dc73f02584a2b0faad36e896936238238b0446cf + languageName: node + linkType: hard + +"pirates@npm:^4.0.4": + version: 4.0.6 + resolution: "pirates@npm:4.0.6" + checksum: 46a65fefaf19c6f57460388a5af9ab81e3d7fd0e7bc44ca59d753cb5c4d0df97c6c6e583674869762101836d68675f027d60f841c105d72734df9dfca97cbcc6 + languageName: node + linkType: hard + +"pkg-dir@npm:^4.2.0": + version: 4.2.0 + resolution: "pkg-dir@npm:4.2.0" + dependencies: + find-up: ^4.0.0 + checksum: 9863e3f35132bf99ae1636d31ff1e1e3501251d480336edb1c211133c8d58906bed80f154a1d723652df1fda91e01c7442c2eeaf9dc83157c7ae89087e43c8d6 + languageName: node + linkType: hard + +"pluralize@npm:^8.0.0": + version: 8.0.0 + resolution: "pluralize@npm:8.0.0" + checksum: 08931d4a6a4a5561a7f94f67a31c17e6632cb21e459ab3ff4f6f629d9a822984cf8afef2311d2005fbea5d7ef26016ebb090db008e2d8bce39d0a9a9d218736e + languageName: node + linkType: hard + +"possible-typed-array-names@npm:^1.0.0": + version: 1.0.0 + resolution: "possible-typed-array-names@npm:1.0.0" + checksum: b32d403ece71e042385cc7856385cecf1cd8e144fa74d2f1de40d1e16035dba097bc189715925e79b67bdd1472796ff168d3a90d296356c9c94d272d5b95f3ae + languageName: node + linkType: hard + +"postcss-values-parser@npm:^2.0.1": + version: 2.0.1 + resolution: "postcss-values-parser@npm:2.0.1" + dependencies: + flatten: ^1.0.2 + indexes-of: ^1.0.1 + uniq: ^1.0.1 + checksum: 050877880937e15af8d18bf48902e547e2123d7cc32c1f215b392642bc5e2598a87a341995d62f38e450aab4186b8afeb2c9541934806d458ad8b117020b2ebf + languageName: node + linkType: hard + +"postcss-values-parser@npm:^6.0.2": + version: 6.0.2 + resolution: "postcss-values-parser@npm:6.0.2" + dependencies: + color-name: ^1.1.4 + is-url-superb: ^4.0.0 + quote-unquote: ^1.0.0 + peerDependencies: + postcss: ^8.2.9 + checksum: 615fea3d7996b3fae84a8674fb0e7c6bd0bc006beddb126692c2e43112b772625329c5f10121b00d69fe7a24f7f18dd25e24745574556735c4e9671774df0eb1 + languageName: node + linkType: hard + +"postcss@npm:^8.1.7, postcss@npm:^8.4.23, postcss@npm:^8.4.27": + version: 8.4.38 + resolution: "postcss@npm:8.4.38" + dependencies: + nanoid: ^3.3.7 + picocolors: ^1.0.0 + source-map-js: ^1.2.0 + checksum: 649f9e60a763ca4b5a7bbec446a069edf07f057f6d780a5a0070576b841538d1ecf7dd888f2fbfd1f76200e26c969e405aeeae66332e6927dbdc8bdcb90b9451 + languageName: node + linkType: hard + +"precinct@npm:^8.1.0": + version: 8.3.1 + resolution: "precinct@npm:8.3.1" + dependencies: + commander: ^2.20.3 + debug: ^4.3.3 + detective-amd: ^3.1.0 + detective-cjs: ^3.1.1 + detective-es6: ^2.2.1 + detective-less: ^1.0.2 + detective-postcss: ^4.0.0 + detective-sass: ^3.0.1 + detective-scss: ^2.0.1 + detective-stylus: ^1.0.0 + detective-typescript: ^7.0.0 + module-definition: ^3.3.1 + node-source-walk: ^4.2.0 + bin: + precinct: bin/cli.js + checksum: 16ba57e545fc53481b3a194f9d7843cefd562ce5e847280355eed360ca4c55def4d03d501776fb49fdf79bfe84a03ec6138003d8387c0426f6a68e1931688399 + languageName: node + linkType: hard + +"precinct@npm:^9.0.0": + version: 9.2.1 + resolution: "precinct@npm:9.2.1" + dependencies: + "@dependents/detective-less": ^3.0.1 + commander: ^9.5.0 + detective-amd: ^4.1.0 + detective-cjs: ^4.1.0 + detective-es6: ^3.0.1 + detective-postcss: ^6.1.1 + detective-sass: ^4.1.1 + detective-scss: ^3.0.1 + detective-stylus: ^3.0.0 + detective-typescript: ^9.1.1 + module-definition: ^4.1.0 + node-source-walk: ^5.0.1 + bin: + precinct: bin/cli.js + checksum: 0352553cca8aff0baa04412429bbe3fab278e9e574fd9bcb2b1bb87dc3ed608f3e08b66c86aee90eed6bac5c4091fe78753ae094d54b01a803189d3259817fe7 + languageName: node + linkType: hard + +"prelude-ls@npm:^1.2.1": + version: 1.2.1 + resolution: "prelude-ls@npm:1.2.1" + checksum: cd192ec0d0a8e4c6da3bb80e4f62afe336df3f76271ac6deb0e6a36187133b6073a19e9727a1ff108cd8b9982e4768850d413baa71214dd80c7979617dca827a + languageName: node + linkType: hard + +"prettier@npm:^2.7.1, prettier@npm:^2.8.4, prettier@npm:^2.8.7, prettier@npm:^2.8.8": + version: 2.8.8 + resolution: "prettier@npm:2.8.8" + bin: + prettier: bin-prettier.js + checksum: b49e409431bf129dd89238d64299ba80717b57ff5a6d1c1a8b1a28b590d998a34e083fa13573bc732bb8d2305becb4c9a4407f8486c81fa7d55100eb08263cf8 + languageName: node + linkType: hard + +"pretty-format@npm:^29.0.0, pretty-format@npm:^29.7.0": + version: 29.7.0 + resolution: "pretty-format@npm:29.7.0" + dependencies: + "@jest/schemas": ^29.6.3 + ansi-styles: ^5.0.0 + react-is: ^18.0.0 + checksum: 032c1602383e71e9c0c02a01bbd25d6759d60e9c7cf21937dde8357aa753da348fcec5def5d1002c9678a8524d5fe099ad98861286550ef44de8808cc61e43b6 + languageName: node + linkType: hard + +"pretty-ms@npm:^7.0.1": + version: 7.0.1 + resolution: "pretty-ms@npm:7.0.1" + dependencies: + parse-ms: ^2.1.0 + checksum: d76c4920283b48be91f1d3797a2ce4bd51187d58d2a609ae993c028f73c92d16439449d857af57ccad91ae3a38b30c87307f5589749a056102ebb494c686957e + languageName: node + linkType: hard + +"private-ip@npm:^3.0.0": + version: 3.0.2 + resolution: "private-ip@npm:3.0.2" + dependencies: + "@chainsafe/is-ip": ^2.0.1 + ip-regex: ^5.0.0 + ipaddr.js: ^2.1.0 + netmask: ^2.0.2 + checksum: dc05f5a915827e09307ced6fcc9d8a40c6c1be7282aef2ffdfc0d6ce917735197fd5173fea92bbf16c776d46fd694070d1849ed58e785a4cbb587f9ffca0152e + languageName: node + linkType: hard + +"proc-log@npm:^3.0.0": + version: 3.0.0 + resolution: "proc-log@npm:3.0.0" + checksum: 02b64e1b3919e63df06f836b98d3af002b5cd92655cab18b5746e37374bfb73e03b84fe305454614b34c25b485cc687a9eebdccf0242cda8fda2475dd2c97e02 + languageName: node + linkType: hard + +"proc-log@npm:^4.2.0": + version: 4.2.0 + resolution: "proc-log@npm:4.2.0" + checksum: 98f6cd012d54b5334144c5255ecb941ee171744f45fca8b43b58ae5a0c1af07352475f481cadd9848e7f0250376ee584f6aa0951a856ff8f021bdfbff4eb33fc + languageName: node + linkType: hard + +"process-nextick-args@npm:~2.0.0": + version: 2.0.1 + resolution: "process-nextick-args@npm:2.0.1" + checksum: 1d38588e520dab7cea67cbbe2efdd86a10cc7a074c09657635e34f035277b59fbb57d09d8638346bf7090f8e8ebc070c96fa5fd183b777fff4f5edff5e9466cf + languageName: node + linkType: hard + +"process@npm:^0.11.10": + version: 0.11.10 + resolution: "process@npm:0.11.10" + checksum: bfcce49814f7d172a6e6a14d5fa3ac92cc3d0c3b9feb1279774708a719e19acd673995226351a082a9ae99978254e320ccda4240ddc474ba31a76c79491ca7c3 + languageName: node + linkType: hard + +"progress-events@npm:^1.0.0": + version: 1.0.0 + resolution: "progress-events@npm:1.0.0" + checksum: 41e5fb20c21cf2c5a6ad0501840120fc793f83216873c8be5ca006a0c904ec53cefc6bdb0b79bed82926c7b4541f590dc3c97ff55bfbaa126dba2cfec8e0976e + languageName: node + linkType: hard + +"progress@npm:2.0.3": + version: 2.0.3 + resolution: "progress@npm:2.0.3" + checksum: f67403fe7b34912148d9252cb7481266a354bd99ce82c835f79070643bb3c6583d10dbcfda4d41e04bbc1d8437e9af0fb1e1f2135727878f5308682a579429b7 + languageName: node + linkType: hard + +"promise-retry@npm:^2.0.1": + version: 2.0.1 + resolution: "promise-retry@npm:2.0.1" + dependencies: + err-code: ^2.0.2 + retry: ^0.12.0 + checksum: f96a3f6d90b92b568a26f71e966cbbc0f63ab85ea6ff6c81284dc869b41510e6cdef99b6b65f9030f0db422bf7c96652a3fff9f2e8fb4a0f069d8f4430359429 + languageName: node + linkType: hard + +"prompts@npm:^2.0.1": + version: 2.4.2 + resolution: "prompts@npm:2.4.2" + dependencies: + kleur: ^3.0.3 + sisteransi: ^1.0.5 + checksum: d8fd1fe63820be2412c13bfc5d0a01909acc1f0367e32396962e737cb2fc52d004f3302475d5ce7d18a1e8a79985f93ff04ee03007d091029c3f9104bffc007d + languageName: node + linkType: hard + +"protons-runtime@npm:5.4.0, protons-runtime@npm:^5.0.0, protons-runtime@npm:^5.4.0": + version: 5.4.0 + resolution: "protons-runtime@npm:5.4.0" + dependencies: + uint8-varint: ^2.0.2 + uint8arraylist: ^2.4.3 + uint8arrays: ^5.0.1 + checksum: d0eb62eb3a319319d1bdd678ebbf4272ab6b10662df0f97c13480959721e8b81ee302d07489c0a2e1dcdad574dd51068c3d96297d7631a7f60925d164f4211d9 + languageName: node + linkType: hard + +"proxy-agent@npm:6.4.0": + version: 6.4.0 + resolution: "proxy-agent@npm:6.4.0" + dependencies: + agent-base: ^7.0.2 + debug: ^4.3.4 + http-proxy-agent: ^7.0.1 + https-proxy-agent: ^7.0.3 + lru-cache: ^7.14.1 + pac-proxy-agent: ^7.0.1 + proxy-from-env: ^1.1.0 + socks-proxy-agent: ^8.0.2 + checksum: 4d3794ad5e07486298902f0a7f250d0f869fa0e92d790767ca3f793a81374ce0ab6c605f8ab8e791c4d754da96656b48d1c24cb7094bfd310a15867e4a0841d7 + languageName: node + linkType: hard + +"proxy-from-env@npm:^1.1.0": + version: 1.1.0 + resolution: "proxy-from-env@npm:1.1.0" + checksum: ed7fcc2ba0a33404958e34d95d18638249a68c430e30fcb6c478497d72739ba64ce9810a24f53a7d921d0c065e5b78e3822759800698167256b04659366ca4d4 + languageName: node + linkType: hard + +"ps-tree@npm:^1.2.0": + version: 1.2.0 + resolution: "ps-tree@npm:1.2.0" + dependencies: + event-stream: =3.3.4 + bin: + ps-tree: ./bin/ps-tree.js + checksum: e635dd00f53d30d31696cf5f95b3a8dbdf9b1aeb36d4391578ce8e8cd22949b7c5536c73b0dc18c78615ea3ddd4be96101166be59ca2e3e3cb1e2f79ba3c7f98 + languageName: node + linkType: hard + +"public-encrypt@npm:^4.0.0": + version: 4.0.3 + resolution: "public-encrypt@npm:4.0.3" + dependencies: + bn.js: ^4.1.0 + browserify-rsa: ^4.0.0 + create-hash: ^1.1.0 + parse-asn1: ^5.0.0 + randombytes: ^2.0.1 + safe-buffer: ^5.1.2 + checksum: 215d446e43cef021a20b67c1df455e5eea134af0b1f9b8a35f9e850abf32991b0c307327bc5b9bc07162c288d5cdb3d4a783ea6c6640979ed7b5017e3e0c9935 + languageName: node + linkType: hard + +"pump@npm:^3.0.0": + version: 3.0.0 + resolution: "pump@npm:3.0.0" + dependencies: + end-of-stream: ^1.1.0 + once: ^1.3.1 + checksum: e42e9229fba14732593a718b04cb5e1cfef8254544870997e0ecd9732b189a48e1256e4e5478148ecb47c8511dca2b09eae56b4d0aad8009e6fac8072923cfc9 + languageName: node + linkType: hard + +"punycode@npm:^2.1.0": + version: 2.3.1 + resolution: "punycode@npm:2.3.1" + checksum: bb0a0ceedca4c3c57a9b981b90601579058903c62be23c5e8e843d2c2d4148a3ecf029d5133486fb0e1822b098ba8bba09e89d6b21742d02fa26bda6441a6fb2 + languageName: node + linkType: hard + +"puppeteer-core@npm:22.8.0": + version: 22.8.0 + resolution: "puppeteer-core@npm:22.8.0" + dependencies: + "@puppeteer/browsers": 2.2.3 + chromium-bidi: 0.5.19 + debug: 4.3.4 + devtools-protocol: 0.0.1273771 + ws: 8.17.0 + checksum: f4250c87c09eb9c73d737ccf08e548babd57e749c9bfc241a7251f2e5e5f3ef2bf3dcb99b7b606763db3a914c866c97cc6714961900566280414b0fad5a330a8 + languageName: node + linkType: hard + +"puppeteer@npm:^22.2": + version: 22.8.0 + resolution: "puppeteer@npm:22.8.0" + dependencies: + "@puppeteer/browsers": 2.2.3 + cosmiconfig: 9.0.0 + devtools-protocol: 0.0.1273771 + puppeteer-core: 22.8.0 + bin: + puppeteer: lib/esm/puppeteer/node/cli.js + checksum: da4855a71b6355e96196b9838fc255fa39f6bdd09cb0b9a6d3cfc377ba839eecef01e40ad7bbff48ef17a5784266bfac5dbf94e1b298f447ce8983f72ff90185 + languageName: node + linkType: hard + +"pure-rand@npm:^6.0.0": + version: 6.1.0 + resolution: "pure-rand@npm:6.1.0" + checksum: 8d53bc02bed99eca0b65b505090152ee7e9bd67dd74f8ff32ba1c883b87234067c5bf68d2614759fb217d82594d7a92919e6df80f97885e7b12b42af4bd3316a + languageName: node + linkType: hard + +"pvtsutils@npm:^1.3.2": + version: 1.3.5 + resolution: "pvtsutils@npm:1.3.5" + dependencies: + tslib: ^2.6.1 + checksum: e734516b3cb26086c18bd9c012fefe818928a5073178842ab7e62885a090f1dd7bda9c7bb8cd317167502cb8ec86c0b1b0ccd71dac7ab469382a4518157b0d12 + languageName: node + linkType: hard + +"pvutils@npm:^1.1.3": + version: 1.1.3 + resolution: "pvutils@npm:1.1.3" + checksum: 2ee26a9e5176c348977d6ec00d8ee80bff62f51743b1c5fe8abeeb4c5d29d9959cdfe0ce146707a9e6801bce88190fed3002d720b072dc87d031c692820b44c9 + languageName: node + linkType: hard + +"qs@npm:^6.11.0, qs@npm:^6.5.2": + version: 6.12.1 + resolution: "qs@npm:6.12.1" + dependencies: + side-channel: ^1.0.6 + checksum: aa761d99e65b6936ba2dd2187f2d9976afbcda38deb3ff1b3fe331d09b0c578ed79ca2abdde1271164b5be619c521ec7db9b34c23f49a074e5921372d16242d5 + languageName: node + linkType: hard + +"queue-microtask@npm:^1.2.2, queue-microtask@npm:^1.2.3": + version: 1.2.3 + resolution: "queue-microtask@npm:1.2.3" + checksum: b676f8c040cdc5b12723ad2f91414d267605b26419d5c821ff03befa817ddd10e238d22b25d604920340fd73efd8ba795465a0377c4adf45a4a41e4234e42dc4 + languageName: node + linkType: hard + +"queue-tick@npm:^1.0.1": + version: 1.0.1 + resolution: "queue-tick@npm:1.0.1" + checksum: 57c3292814b297f87f792fbeb99ce982813e4e54d7a8bdff65cf53d5c084113913289d4a48ec8bbc964927a74b847554f9f4579df43c969a6c8e0f026457ad01 + languageName: node + linkType: hard + +"quick-lru@npm:^4.0.1": + version: 4.0.1 + resolution: "quick-lru@npm:4.0.1" + checksum: bea46e1abfaa07023e047d3cf1716a06172c4947886c053ede5c50321893711577cb6119360f810cc3ffcd70c4d7db4069c3cee876b358ceff8596e062bd1154 + languageName: node + linkType: hard + +"quote-unquote@npm:^1.0.0": + version: 1.0.0 + resolution: "quote-unquote@npm:1.0.0" + checksum: 955a2ead534f5b6a3f8d4dc5a4b95ac6468213d3fb11f8c1592a0a56345c45a3d14d5ca04d3de2bc9891493fcac38c03dfa91c48a6159aef50124e9c5afcea49 + languageName: node + linkType: hard + +"race-event@npm:^1.2.0, race-event@npm:^1.3.0": + version: 1.3.0 + resolution: "race-event@npm:1.3.0" + checksum: 7aaf432c15d0d53221c74d351b7c46dbd7a423be73a21648e46f4f2df6aa3261026b99cad522daa2aee73bff41565b05907ba9ef3a3592e0e7bce2565293e99c + languageName: node + linkType: hard + +"race-signal@npm:^1.0.0, race-signal@npm:^1.0.2": + version: 1.0.2 + resolution: "race-signal@npm:1.0.2" + checksum: 01ea1f70059673cd239acbe9523eaf1649f3b02ec786b5266770d9b045018aa96e316150447f0a12e7b0f8aa02522deb23e7d3a2c3a58d37135c505f595f2e49 + languageName: node + linkType: hard + +"randombytes@npm:^2.0.0, randombytes@npm:^2.0.1, randombytes@npm:^2.0.5, randombytes@npm:^2.1.0": + version: 2.1.0 + resolution: "randombytes@npm:2.1.0" + dependencies: + safe-buffer: ^5.1.0 + checksum: d779499376bd4cbb435ef3ab9a957006c8682f343f14089ed5f27764e4645114196e75b7f6abf1cbd84fd247c0cb0651698444df8c9bf30e62120fbbc52269d6 + languageName: node + linkType: hard + +"randomfill@npm:^1.0.3": + version: 1.0.4 + resolution: "randomfill@npm:1.0.4" + dependencies: + randombytes: ^2.0.5 + safe-buffer: ^5.1.0 + checksum: 33734bb578a868d29ee1b8555e21a36711db084065d94e019a6d03caa67debef8d6a1bfd06a2b597e32901ddc761ab483a85393f0d9a75838f1912461d4dbfc7 + languageName: node + linkType: hard + +"raw-body@npm:^2.3.3": + version: 2.5.2 + resolution: "raw-body@npm:2.5.2" + dependencies: + bytes: 3.1.2 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + unpipe: 1.0.0 + checksum: ba1583c8d8a48e8fbb7a873fdbb2df66ea4ff83775421bfe21ee120140949ab048200668c47d9ae3880012f6e217052690628cf679ddfbd82c9fc9358d574676 + languageName: node + linkType: hard + +"rc@npm:^1.2.7": + version: 1.2.8 + resolution: "rc@npm:1.2.8" + dependencies: + deep-extend: ^0.6.0 + ini: ~1.3.0 + minimist: ^1.2.0 + strip-json-comments: ~2.0.1 + bin: + rc: ./cli.js + checksum: 2e26e052f8be2abd64e6d1dabfbd7be03f80ec18ccbc49562d31f617d0015fbdbcf0f9eed30346ea6ab789e0fdfe4337f033f8016efdbee0df5354751842080e + languageName: node + linkType: hard + +"react-is@npm:^18.0.0": + version: 18.3.1 + resolution: "react-is@npm:18.3.1" + checksum: e20fe84c86ff172fc8d898251b7cc2c43645d108bf96d0b8edf39b98f9a2cae97b40520ee7ed8ee0085ccc94736c4886294456033304151c3f94978cec03df21 + languageName: node + linkType: hard + +"read-pkg-up@npm:^7.0.1": + version: 7.0.1 + resolution: "read-pkg-up@npm:7.0.1" + dependencies: + find-up: ^4.1.0 + read-pkg: ^5.2.0 + type-fest: ^0.8.1 + checksum: e4e93ce70e5905b490ca8f883eb9e48b5d3cebc6cd4527c25a0d8f3ae2903bd4121c5ab9c5a3e217ada0141098eeb661313c86fa008524b089b8ed0b7f165e44 + languageName: node + linkType: hard + +"read-pkg@npm:^5.2.0": + version: 5.2.0 + resolution: "read-pkg@npm:5.2.0" + dependencies: + "@types/normalize-package-data": ^2.4.0 + normalize-package-data: ^2.5.0 + parse-json: ^5.0.0 + type-fest: ^0.6.0 + checksum: eb696e60528b29aebe10e499ba93f44991908c57d70f2d26f369e46b8b9afc208ef11b4ba64f67630f31df8b6872129e0a8933c8c53b7b4daf0eace536901222 + languageName: node + linkType: hard + +"readable-stream@npm:^2.3.8, readable-stream@npm:~2.3.6": + version: 2.3.8 + resolution: "readable-stream@npm:2.3.8" + dependencies: + core-util-is: ~1.0.0 + inherits: ~2.0.3 + isarray: ~1.0.0 + process-nextick-args: ~2.0.0 + safe-buffer: ~5.1.1 + string_decoder: ~1.1.1 + util-deprecate: ~1.0.1 + checksum: 65645467038704f0c8aaf026a72fbb588a9e2ef7a75cd57a01702ee9db1c4a1e4b03aaad36861a6a0926546a74d174149c8c207527963e0c2d3eee2f37678a42 + languageName: node + linkType: hard + +"readable-stream@npm:^3.4.0, readable-stream@npm:^3.5.0, readable-stream@npm:^3.6.0": + version: 3.6.2 + resolution: "readable-stream@npm:3.6.2" + dependencies: + inherits: ^2.0.3 + string_decoder: ^1.1.1 + util-deprecate: ^1.0.1 + checksum: bdcbe6c22e846b6af075e32cf8f4751c2576238c5043169a1c221c92ee2878458a816a4ea33f4c67623c0b6827c8a400409bfb3cf0bf3381392d0b1dfb52ac8d + languageName: node + linkType: hard + +"receptacle@npm:^1.3.2": + version: 1.3.2 + resolution: "receptacle@npm:1.3.2" + dependencies: + ms: ^2.1.1 + checksum: 7c5011f19e6ddcb759c1e6756877cee3c9eb78fbd1278eca4572d75f74993f0ccdc1e5f7761de6e682dff5344ee94f7a69bc492e2e8eb81d8777774a2399ce9c + languageName: node + linkType: hard + +"rechoir@npm:^0.8.0": + version: 0.8.0 + resolution: "rechoir@npm:0.8.0" + dependencies: + resolve: ^1.20.0 + checksum: ad3caed8afdefbc33fbc30e6d22b86c35b3d51c2005546f4e79bcc03c074df804b3640ad18945e6bef9ed12caedc035655ec1082f64a5e94c849ff939dc0a788 + languageName: node + linkType: hard + +"redent@npm:^3.0.0": + version: 3.0.0 + resolution: "redent@npm:3.0.0" + dependencies: + indent-string: ^4.0.0 + strip-indent: ^3.0.0 + checksum: fa1ef20404a2d399235e83cc80bd55a956642e37dd197b4b612ba7327bf87fa32745aeb4a1634b2bab25467164ab4ed9c15be2c307923dd08b0fe7c52431ae6b + languageName: node + linkType: hard + +"reduce-flatten@npm:^2.0.0": + version: 2.0.0 + resolution: "reduce-flatten@npm:2.0.0" + checksum: 64393ef99a16b20692acfd60982d7fdbd7ff8d9f8f185c6023466444c6dd2abb929d67717a83cec7f7f8fb5f46a25d515b3b2bf2238fdbfcdbfd01d2a9e73cb8 + languageName: node + linkType: hard + +"regenerator-runtime@npm:^0.14.0": + version: 0.14.1 + resolution: "regenerator-runtime@npm:0.14.1" + checksum: 9f57c93277b5585d3c83b0cf76be47b473ae8c6d9142a46ce8b0291a04bb2cf902059f0f8445dcabb3fb7378e5fe4bb4ea1e008876343d42e46d3b484534ce38 + languageName: node + linkType: hard + +"regexp.prototype.flags@npm:^1.5.2": + version: 1.5.2 + resolution: "regexp.prototype.flags@npm:1.5.2" + dependencies: + call-bind: ^1.0.6 + define-properties: ^1.2.1 + es-errors: ^1.3.0 + set-function-name: ^2.0.1 + checksum: d7f333667d5c564e2d7a97c56c3075d64c722c9bb51b2b4df6822b2e8096d623a5e63088fb4c83df919b6951ef8113841de8b47de7224872fa6838bc5d8a7d64 + languageName: node + linkType: hard + +"repeat-string@npm:^1.6.1": + version: 1.6.1 + resolution: "repeat-string@npm:1.6.1" + checksum: 1b809fc6db97decdc68f5b12c4d1a671c8e3f65ec4a40c238bc5200e44e85bcc52a54f78268ab9c29fcf5fe4f1343e805420056d1f30fa9a9ee4c2d93e3cc6c0 + languageName: node + linkType: hard + +"require-directory@npm:^2.1.1": + version: 2.1.1 + resolution: "require-directory@npm:2.1.1" + checksum: fb47e70bf0001fdeabdc0429d431863e9475e7e43ea5f94ad86503d918423c1543361cc5166d713eaa7029dd7a3d34775af04764bebff99ef413111a5af18c80 + languageName: node + linkType: hard + +"requirejs-config-file@npm:^4.0.0": + version: 4.0.0 + resolution: "requirejs-config-file@npm:4.0.0" + dependencies: + esprima: ^4.0.0 + stringify-object: ^3.2.1 + checksum: 61ac1c419a8978df9484211827047f0a43d48a97e242ebca9628a2e52da8c739ee068bd67dc4d5dc5fd7be6d1c9a863006bb02df691c86914921fe12713fbebb + languageName: node + linkType: hard + +"requirejs@npm:^2.3.5": + version: 2.3.6 + resolution: "requirejs@npm:2.3.6" + bin: + r.js: ./bin/r.js + r_js: ./bin/r.js + checksum: 7c3c006bf5e1887d93ac7adb7f600328918d23cf3d28282a505a2873d4ddde499c7ec560e55cee3440d17fe1205cb4dcb72b07f35b39e8940372eca850e49b62 + languageName: node + linkType: hard + +"requires-port@npm:^1.0.0": + version: 1.0.0 + resolution: "requires-port@npm:1.0.0" + checksum: eee0e303adffb69be55d1a214e415cf42b7441ae858c76dfc5353148644f6fd6e698926fc4643f510d5c126d12a705e7c8ed7e38061113bdf37547ab356797ff + languageName: node + linkType: hard + +"resolve-cwd@npm:^3.0.0": + version: 3.0.0 + resolution: "resolve-cwd@npm:3.0.0" + dependencies: + resolve-from: ^5.0.0 + checksum: 546e0816012d65778e580ad62b29e975a642989108d9a3c5beabfb2304192fa3c9f9146fbdfe213563c6ff51975ae41bac1d3c6e047dd9572c94863a057b4d81 + languageName: node + linkType: hard + +"resolve-dependency-path@npm:^2.0.0": + version: 2.0.0 + resolution: "resolve-dependency-path@npm:2.0.0" + checksum: 161296969a0a7853ebb7710847154ffb5bd11a51c370b67a0d0c89cacfcb57063d204587617fd030ea227bfd19a3c4af79d39e9d20ae0fbe354c27598d1ea8a8 + languageName: node + linkType: hard + +"resolve-from@npm:^4.0.0": + version: 4.0.0 + resolution: "resolve-from@npm:4.0.0" + checksum: f4ba0b8494846a5066328ad33ef8ac173801a51739eb4d63408c847da9a2e1c1de1e6cbbf72699211f3d13f8fc1325648b169bd15eb7da35688e30a5fb0e4a7f + languageName: node + linkType: hard + +"resolve-from@npm:^5.0.0": + version: 5.0.0 + resolution: "resolve-from@npm:5.0.0" + checksum: 4ceeb9113e1b1372d0cd969f3468fa042daa1dd9527b1b6bb88acb6ab55d8b9cd65dbf18819f9f9ddf0db804990901dcdaade80a215e7b2c23daae38e64f5bdf + languageName: node + linkType: hard + +"resolve-path@npm:^1.4.0": + version: 1.4.0 + resolution: "resolve-path@npm:1.4.0" + dependencies: + http-errors: ~1.6.2 + path-is-absolute: 1.0.1 + checksum: 1a39f569ee54dd5f8ee8576ef8671c9724bea65d9f9982fbb5352af9fb4e500e1e459c1bfb1ae3ebfd8d43a709c3a01dfa4f46cf5b831e45e2caed4f1a208300 + languageName: node + linkType: hard + +"resolve-pkg-maps@npm:^1.0.0": + version: 1.0.0 + resolution: "resolve-pkg-maps@npm:1.0.0" + checksum: 1012afc566b3fdb190a6309cc37ef3b2dcc35dff5fa6683a9d00cd25c3247edfbc4691b91078c97adc82a29b77a2660c30d791d65dab4fc78bfc473f60289977 + languageName: node + linkType: hard + +"resolve-typescript-plugin@npm:^2.0.1": + version: 2.0.1 + resolution: "resolve-typescript-plugin@npm:2.0.1" + dependencies: + tslib: 2.5.0 + peerDependencies: + webpack: ^4.0.0 || ^5.0.0 + checksum: 78c557cb6a7a14f15be0032e3a0b90c7209ae04c12bcced88eb4360d8dda1910e23f8016b20c09b07db19c6871b04d292b5af3472ded41d8189b379bbdaa8116 + languageName: node + linkType: hard + +"resolve.exports@npm:^2.0.0": + version: 2.0.2 + resolution: "resolve.exports@npm:2.0.2" + checksum: 1c7778ca1b86a94f8ab4055d196c7d87d1874b96df4d7c3e67bbf793140f0717fd506dcafd62785b079cd6086b9264424ad634fb904409764c3509c3df1653f2 + languageName: node + linkType: hard + +"resolve@npm:^1.10.0, resolve@npm:^1.20.0, resolve@npm:^1.21.0, resolve@npm:^1.22.4": + version: 1.22.8 + resolution: "resolve@npm:1.22.8" + dependencies: + is-core-module: ^2.13.0 + path-parse: ^1.0.7 + supports-preserve-symlinks-flag: ^1.0.0 + bin: + resolve: bin/resolve + checksum: f8a26958aa572c9b064562750b52131a37c29d072478ea32e129063e2da7f83e31f7f11e7087a18225a8561cfe8d2f0df9dbea7c9d331a897571c0a2527dbb4c + languageName: node + linkType: hard + +"resolve@npm:~1.19.0": + version: 1.19.0 + resolution: "resolve@npm:1.19.0" + dependencies: + is-core-module: ^2.1.0 + path-parse: ^1.0.6 + checksum: a05b356e47b85ad3613d9e2a39a824f3c27f4fcad9c9ff6c7cc71a2e314c5904a90ab37481ad0069d03cab9eaaac6eb68aca1bc3355fdb05f1045cd50e2aacea + languageName: node + linkType: hard + +"resolve@patch:resolve@^1.10.0#~builtin, resolve@patch:resolve@^1.20.0#~builtin, resolve@patch:resolve@^1.21.0#~builtin, resolve@patch:resolve@^1.22.4#~builtin": + version: 1.22.8 + resolution: "resolve@patch:resolve@npm%3A1.22.8#~builtin::version=1.22.8&hash=c3c19d" + dependencies: + is-core-module: ^2.13.0 + path-parse: ^1.0.7 + supports-preserve-symlinks-flag: ^1.0.0 + bin: + resolve: bin/resolve + checksum: 5479b7d431cacd5185f8db64bfcb7286ae5e31eb299f4c4f404ad8aa6098b77599563ac4257cb2c37a42f59dfc06a1bec2bcf283bb448f319e37f0feb9a09847 + languageName: node + linkType: hard + +"resolve@patch:resolve@~1.19.0#~builtin": + version: 1.19.0 + resolution: "resolve@patch:resolve@npm%3A1.19.0#~builtin::version=1.19.0&hash=c3c19d" + dependencies: + is-core-module: ^2.1.0 + path-parse: ^1.0.6 + checksum: 2443b94d347e6946c87c85faf13071f605e609e0b54784829b0ed2b917d050bfc1cbaf4ecc6453f224cfa7d0c5dcd97cbb273454cd210bee68e4af15c1a5abc9 + languageName: node + linkType: hard + +"restore-cursor@npm:^3.1.0": + version: 3.1.0 + resolution: "restore-cursor@npm:3.1.0" + dependencies: + onetime: ^5.1.0 + signal-exit: ^3.0.2 + checksum: f877dd8741796b909f2a82454ec111afb84eb45890eb49ac947d87991379406b3b83ff9673a46012fca0d7844bb989f45cc5b788254cf1a39b6b5a9659de0630 + languageName: node + linkType: hard + +"retry@npm:^0.12.0": + version: 0.12.0 + resolution: "retry@npm:0.12.0" + checksum: 623bd7d2e5119467ba66202d733ec3c2e2e26568074923bc0585b6b99db14f357e79bdedb63cab56cec47491c4a0da7e6021a7465ca6dc4f481d3898fdd3158c + languageName: node + linkType: hard + +"reusify@npm:^1.0.4": + version: 1.0.4 + resolution: "reusify@npm:1.0.4" + checksum: c3076ebcc22a6bc252cb0b9c77561795256c22b757f40c0d8110b1300723f15ec0fc8685e8d4ea6d7666f36c79ccc793b1939c748bf36f18f542744a4e379fcc + languageName: node + linkType: hard + +"rimraf@npm:^3.0.2": + version: 3.0.2 + resolution: "rimraf@npm:3.0.2" + dependencies: + glob: ^7.1.3 + bin: + rimraf: bin.js + checksum: 87f4164e396f0171b0a3386cc1877a817f572148ee13a7e113b238e48e8a9f2f31d009a92ec38a591ff1567d9662c6b67fd8818a2dbbaed74bc26a87a2a4a9a0 + languageName: node + linkType: hard + +"ripemd160@npm:^2.0.0, ripemd160@npm:^2.0.1": + version: 2.0.2 + resolution: "ripemd160@npm:2.0.2" + dependencies: + hash-base: ^3.0.0 + inherits: ^2.0.1 + checksum: 006accc40578ee2beae382757c4ce2908a826b27e2b079efdcd2959ee544ddf210b7b5d7d5e80467807604244e7388427330f5c6d4cd61e6edaddc5773ccc393 + languageName: node + linkType: hard + +"rlp@npm:^2.2.6": + version: 2.2.7 + resolution: "rlp@npm:2.2.7" + dependencies: + bn.js: ^5.2.0 + bin: + rlp: bin/rlp + checksum: 3db4dfe5c793f40ac7e0be689a1f75d05e6f2ca0c66189aeb62adab8c436b857ab4420a419251ee60370d41d957a55698fc5e23ab1e1b41715f33217bc4bb558 + languageName: node + linkType: hard + +"rollup@npm:^3.27.1": + version: 3.29.4 + resolution: "rollup@npm:3.29.4" + dependencies: + fsevents: ~2.3.2 + dependenciesMeta: + fsevents: + optional: true + bin: + rollup: dist/bin/rollup + checksum: 8bb20a39c8d91130825159c3823eccf4dc2295c9a0a5c4ed851a5bf2167dbf24d9a29f23461a54c955e5506395e6cc188eafc8ab0e20399d7489fb33793b184e + languageName: node + linkType: hard + +"run-parallel@npm:^1.1.9": + version: 1.2.0 + resolution: "run-parallel@npm:1.2.0" + dependencies: + queue-microtask: ^1.2.2 + checksum: cb4f97ad25a75ebc11a8ef4e33bb962f8af8516bb2001082ceabd8902e15b98f4b84b4f8a9b222e5d57fc3bd1379c483886ed4619367a7680dad65316993021d + languageName: node + linkType: hard + +"rxjs@npm:^7.0.0, rxjs@npm:^7.8.1": + version: 7.8.1 + resolution: "rxjs@npm:7.8.1" + dependencies: + tslib: ^2.1.0 + checksum: de4b53db1063e618ec2eca0f7965d9137cabe98cf6be9272efe6c86b47c17b987383df8574861bcced18ebd590764125a901d5506082be84a8b8e364bf05f119 + languageName: node + linkType: hard + +"safe-array-concat@npm:^1.1.2": + version: 1.1.2 + resolution: "safe-array-concat@npm:1.1.2" + dependencies: + call-bind: ^1.0.7 + get-intrinsic: ^1.2.4 + has-symbols: ^1.0.3 + isarray: ^2.0.5 + checksum: a3b259694754ddfb73ae0663829e396977b99ff21cbe8607f35a469655656da8e271753497e59da8a7575baa94d2e684bea3e10ddd74ba046c0c9b4418ffa0c4 + languageName: node + linkType: hard + +"safe-buffer@npm:5.2.1, safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.0, safe-buffer@npm:^5.1.1, safe-buffer@npm:^5.1.2, safe-buffer@npm:^5.2.0, safe-buffer@npm:^5.2.1, safe-buffer@npm:~5.2.0": + version: 5.2.1 + resolution: "safe-buffer@npm:5.2.1" + checksum: b99c4b41fdd67a6aaf280fcd05e9ffb0813654894223afb78a31f14a19ad220bba8aba1cb14eddce1fcfb037155fe6de4e861784eb434f7d11ed58d1e70dd491 + languageName: node + linkType: hard + +"safe-buffer@npm:~5.1.0, safe-buffer@npm:~5.1.1": + version: 5.1.2 + resolution: "safe-buffer@npm:5.1.2" + checksum: f2f1f7943ca44a594893a852894055cf619c1fbcb611237fc39e461ae751187e7baf4dc391a72125e0ac4fb2d8c5c0b3c71529622e6a58f46b960211e704903c + languageName: node + linkType: hard + +"safe-regex-test@npm:^1.0.3": + version: 1.0.3 + resolution: "safe-regex-test@npm:1.0.3" + dependencies: + call-bind: ^1.0.6 + es-errors: ^1.3.0 + is-regex: ^1.1.4 + checksum: 6c7d392ff1ae7a3ae85273450ed02d1d131f1d2c76e177d6b03eb88e6df8fa062639070e7d311802c1615f351f18dc58f9454501c58e28d5ffd9b8f502ba6489 + languageName: node + linkType: hard + +"safe-stable-stringify@npm:^2.3.1": + version: 2.4.3 + resolution: "safe-stable-stringify@npm:2.4.3" + checksum: 3aeb64449706ee1f5ad2459fc99648b131d48e7a1fbb608d7c628020177512dc9d94108a5cb61bbc953985d313d0afea6566d243237743e02870490afef04b43 + languageName: node + linkType: hard + +"safer-buffer@npm:>= 2.1.2 < 3, safer-buffer@npm:>= 2.1.2 < 3.0.0": + version: 2.1.2 + resolution: "safer-buffer@npm:2.1.2" + checksum: cab8f25ae6f1434abee8d80023d7e72b598cf1327164ddab31003c51215526801e40b66c5e65d658a0af1e9d6478cadcb4c745f4bd6751f97d8644786c0978b0 + languageName: node + linkType: hard + +"sass-lookup@npm:^3.0.0": + version: 3.0.0 + resolution: "sass-lookup@npm:3.0.0" + dependencies: + commander: ^2.16.0 + bin: + sass-lookup: bin/cli.js + checksum: fd4bf1ad9c54111617dec30dd90aff083e87c96aef50aff6cec443ad2fbbfa65da09f6e67a7e5ef99fa39dff65c937dc7358f18d319e083c6031f21def85ce6d + languageName: node + linkType: hard + +"schema-utils@npm:^3.1.1, schema-utils@npm:^3.2.0": + version: 3.3.0 + resolution: "schema-utils@npm:3.3.0" + dependencies: + "@types/json-schema": ^7.0.8 + ajv: ^6.12.5 + ajv-keywords: ^3.5.2 + checksum: ea56971926fac2487f0757da939a871388891bc87c6a82220d125d587b388f1704788f3706e7f63a7b70e49fc2db974c41343528caea60444afd5ce0fe4b85c0 + languageName: node + linkType: hard + +"semver-match@npm:0.1.1": + version: 0.1.1 + resolution: "semver-match@npm:0.1.1" + dependencies: + semver: ^5.1.0 + checksum: 624968a1d0b665fb08d3e7a4d28b62332ae1695c19f4b7f7cddb34c07bf8e5b6f19d393249bb1b96b09746651bd20d754fc2d64318fd7f959f6bec6abfa883dd + languageName: node + linkType: hard + +"semver@npm:2 || 3 || 4 || 5, semver@npm:^5.1.0, semver@npm:^5.5.0": + version: 5.7.2 + resolution: "semver@npm:5.7.2" + bin: + semver: bin/semver + checksum: fb4ab5e0dd1c22ce0c937ea390b4a822147a9c53dbd2a9a0132f12fe382902beef4fbf12cf51bb955248d8d15874ce8cd89532569756384f994309825f10b686 + languageName: node + linkType: hard + +"semver@npm:7.6.0": + version: 7.6.0 + resolution: "semver@npm:7.6.0" + dependencies: + lru-cache: ^6.0.0 + bin: + semver: bin/semver.js + checksum: 7427f05b70786c696640edc29fdd4bc33b2acf3bbe1740b955029044f80575fc664e1a512e4113c3af21e767154a94b4aa214bf6cd6e42a1f6dba5914e0b208c + languageName: node + linkType: hard + +"semver@npm:^6.3.0, semver@npm:^6.3.1": + version: 6.3.1 + resolution: "semver@npm:6.3.1" + bin: + semver: bin/semver.js + checksum: ae47d06de28836adb9d3e25f22a92943477371292d9b665fb023fae278d345d508ca1958232af086d85e0155aee22e313e100971898bbb8d5d89b8b1d4054ca2 + languageName: node + linkType: hard + +"semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.3.8, semver@npm:^7.5.3, semver@npm:^7.5.4, semver@npm:^7.6.0": + version: 7.6.1 + resolution: "semver@npm:7.6.1" + bin: + semver: bin/semver.js + checksum: 2c9c89b985230c0fcf02c96ae6a3ca40c474f2f4e838634394691e6e10c347a0c6def0f14fc355d82f90f1744a073b8b9c45457b108aa728280b5d68ed7961cd + languageName: node + linkType: hard + +"serialize-javascript@npm:^6.0.1": + version: 6.0.2 + resolution: "serialize-javascript@npm:6.0.2" + dependencies: + randombytes: ^2.1.0 + checksum: c4839c6206c1d143c0f80763997a361310305751171dd95e4b57efee69b8f6edd8960a0b7fbfc45042aadff98b206d55428aee0dc276efe54f100899c7fa8ab7 + languageName: node + linkType: hard + +"set-function-length@npm:^1.2.1": + version: 1.2.2 + resolution: "set-function-length@npm:1.2.2" + dependencies: + define-data-property: ^1.1.4 + es-errors: ^1.3.0 + function-bind: ^1.1.2 + get-intrinsic: ^1.2.4 + gopd: ^1.0.1 + has-property-descriptors: ^1.0.2 + checksum: a8248bdacdf84cb0fab4637774d9fb3c7a8e6089866d04c817583ff48e14149c87044ce683d7f50759a8c50fb87c7a7e173535b06169c87ef76f5fb276dfff72 + languageName: node + linkType: hard + +"set-function-name@npm:^2.0.1": + version: 2.0.2 + resolution: "set-function-name@npm:2.0.2" + dependencies: + define-data-property: ^1.1.4 + es-errors: ^1.3.0 + functions-have-names: ^1.2.3 + has-property-descriptors: ^1.0.2 + checksum: d6229a71527fd0404399fc6227e0ff0652800362510822a291925c9d7b48a1ca1a468b11b281471c34cd5a2da0db4f5d7ff315a61d26655e77f6e971e6d0c80f + languageName: node + linkType: hard + +"setimmediate@npm:^1.0.5": + version: 1.0.5 + resolution: "setimmediate@npm:1.0.5" + checksum: c9a6f2c5b51a2dabdc0247db9c46460152ffc62ee139f3157440bd48e7c59425093f42719ac1d7931f054f153e2d26cf37dfeb8da17a794a58198a2705e527fd + languageName: node + linkType: hard + +"setprototypeof@npm:1.1.0": + version: 1.1.0 + resolution: "setprototypeof@npm:1.1.0" + checksum: 27cb44304d6c9e1a23bc6c706af4acaae1a7aa1054d4ec13c05f01a99fd4887109a83a8042b67ad90dbfcd100d43efc171ee036eb080667172079213242ca36e + languageName: node + linkType: hard + +"setprototypeof@npm:1.2.0": + version: 1.2.0 + resolution: "setprototypeof@npm:1.2.0" + checksum: be18cbbf70e7d8097c97f713a2e76edf84e87299b40d085c6bf8b65314e994cc15e2e317727342fa6996e38e1f52c59720b53fe621e2eb593a6847bf0356db89 + languageName: node + linkType: hard + +"sha.js@npm:^2.4.0, sha.js@npm:^2.4.8": + version: 2.4.11 + resolution: "sha.js@npm:2.4.11" + dependencies: + inherits: ^2.0.1 + safe-buffer: ^5.0.1 + bin: + sha.js: ./bin.js + checksum: ebd3f59d4b799000699097dadb831c8e3da3eb579144fd7eb7a19484cbcbb7aca3c68ba2bb362242eb09e33217de3b4ea56e4678184c334323eca24a58e3ad07 + languageName: node + linkType: hard + +"sha256@npm:^0.2.0": + version: 0.2.0 + resolution: "sha256@npm:0.2.0" + dependencies: + convert-hex: ~0.1.0 + convert-string: ~0.1.0 + checksum: bed2d6507279e34ad2c517d18fbe871900244aca425a298d6ba10115e9beb49a8028296aeff5441b6db4902503a47198138e23ba1be440761a84288c93101ca1 + languageName: node + linkType: hard + +"sha3@npm:^2.1.4": + version: 2.1.4 + resolution: "sha3@npm:2.1.4" + dependencies: + buffer: 6.0.3 + checksum: fb49c8e18143cc46babc0e5d83d5f5d0149e645f26633a0e6a9aa2514df2ef91f10b6ece20da229e7ead8b8002d8e9514dcc747ef96a25b749294d6385c6f29f + languageName: node + linkType: hard + +"shallow-clone@npm:^3.0.0": + version: 3.0.1 + resolution: "shallow-clone@npm:3.0.1" + dependencies: + kind-of: ^6.0.2 + checksum: 39b3dd9630a774aba288a680e7d2901f5c0eae7b8387fc5c8ea559918b29b3da144b7bdb990d7ccd9e11be05508ac9e459ce51d01fd65e583282f6ffafcba2e7 + languageName: node + linkType: hard + +"shebang-command@npm:^2.0.0": + version: 2.0.0 + resolution: "shebang-command@npm:2.0.0" + dependencies: + shebang-regex: ^3.0.0 + checksum: 6b52fe87271c12968f6a054e60f6bde5f0f3d2db483a1e5c3e12d657c488a15474121a1d55cd958f6df026a54374ec38a4a963988c213b7570e1d51575cea7fa + languageName: node + linkType: hard + +"shebang-regex@npm:^3.0.0": + version: 3.0.0 + resolution: "shebang-regex@npm:3.0.0" + checksum: 1a2bcae50de99034fcd92ad4212d8e01eedf52c7ec7830eedcf886622804fe36884278f2be8be0ea5fde3fd1c23911643a4e0f726c8685b61871c8908af01222 + languageName: node + linkType: hard + +"shell-quote@npm:^1.7.3, shell-quote@npm:^1.8.1": + version: 1.8.1 + resolution: "shell-quote@npm:1.8.1" + checksum: 5f01201f4ef504d4c6a9d0d283fa17075f6770bfbe4c5850b074974c68062f37929ca61700d95ad2ac8822e14e8c4b990ca0e6e9272e64befd74ce5e19f0736b + languageName: node + linkType: hard + +"shiki@npm:^0.14.1": + version: 0.14.7 + resolution: "shiki@npm:0.14.7" + dependencies: + ansi-sequence-parser: ^1.1.0 + jsonc-parser: ^3.2.0 + vscode-oniguruma: ^1.7.0 + vscode-textmate: ^8.0.0 + checksum: 2aec3b3519df977c4391df9e1825cb496e9a4d7e11395f05a0da77e4fa2f7c3d9d6e6ee94029ac699533017f2b25637ee68f6d39f05f311535c2704d0329b520 + languageName: node + linkType: hard + +"side-channel@npm:^1.0.4, side-channel@npm:^1.0.6": + version: 1.0.6 + resolution: "side-channel@npm:1.0.6" + dependencies: + call-bind: ^1.0.7 + es-errors: ^1.3.0 + get-intrinsic: ^1.2.4 + object-inspect: ^1.13.1 + checksum: bfc1afc1827d712271453e91b7cd3878ac0efd767495fd4e594c4c2afaa7963b7b510e249572bfd54b0527e66e4a12b61b80c061389e129755f34c493aad9b97 + languageName: node + linkType: hard + +"signal-exit@npm:^3.0.2, signal-exit@npm:^3.0.3, signal-exit@npm:^3.0.7": + version: 3.0.7 + resolution: "signal-exit@npm:3.0.7" + checksum: a2f098f247adc367dffc27845853e9959b9e88b01cb301658cfe4194352d8d2bb32e18467c786a7fe15f1d44b233ea35633d076d5e737870b7139949d1ab6318 + languageName: node + linkType: hard + +"signal-exit@npm:^4.0.1": + version: 4.1.0 + resolution: "signal-exit@npm:4.1.0" + checksum: 64c757b498cb8629ffa5f75485340594d2f8189e9b08700e69199069c8e3070fb3e255f7ab873c05dc0b3cec412aea7402e10a5990cb6a050bd33ba062a6c549 + languageName: node + linkType: hard + +"simple-swizzle@npm:^0.2.2": + version: 0.2.2 + resolution: "simple-swizzle@npm:0.2.2" + dependencies: + is-arrayish: ^0.3.1 + checksum: a7f3f2ab5c76c4472d5c578df892e857323e452d9f392e1b5cf74b74db66e6294a1e1b8b390b519fa1b96b5b613f2a37db6cffef52c3f1f8f3c5ea64eb2d54c0 + languageName: node + linkType: hard + +"sisteransi@npm:^1.0.5": + version: 1.0.5 + resolution: "sisteransi@npm:1.0.5" + checksum: aba6438f46d2bfcef94cf112c835ab395172c75f67453fe05c340c770d3c402363018ae1ab4172a1026a90c47eaccf3af7b6ff6fa749a680c2929bd7fa2b37a4 + languageName: node + linkType: hard + +"slash@npm:^3.0.0": + version: 3.0.0 + resolution: "slash@npm:3.0.0" + checksum: 94a93fff615f25a999ad4b83c9d5e257a7280c90a32a7cb8b4a87996e4babf322e469c42b7f649fd5796edd8687652f3fb452a86dc97a816f01113183393f11c + languageName: node + linkType: hard + +"smart-buffer@npm:^4.2.0": + version: 4.2.0 + resolution: "smart-buffer@npm:4.2.0" + checksum: b5167a7142c1da704c0e3af85c402002b597081dd9575031a90b4f229ca5678e9a36e8a374f1814c8156a725d17008ae3bde63b92f9cfd132526379e580bec8b + languageName: node + linkType: hard + +"socks-proxy-agent@npm:^8.0.2, socks-proxy-agent@npm:^8.0.3": + version: 8.0.3 + resolution: "socks-proxy-agent@npm:8.0.3" + dependencies: + agent-base: ^7.1.1 + debug: ^4.3.4 + socks: ^2.7.1 + checksum: 8fab38821c327c190c28f1658087bc520eb065d55bc07b4a0fdf8d1e0e7ad5d115abbb22a95f94f944723ea969dd771ad6416b1e3cde9060c4c71f705c8b85c5 + languageName: node + linkType: hard + +"socks@npm:^2.7.1": + version: 2.8.3 + resolution: "socks@npm:2.8.3" + dependencies: + ip-address: ^9.0.5 + smart-buffer: ^4.2.0 + checksum: 7a6b7f6eedf7482b9e4597d9a20e09505824208006ea8f2c49b71657427f3c137ca2ae662089baa73e1971c62322d535d9d0cf1c9235cf6f55e315c18203eadd + languageName: node + linkType: hard + +"solc@npm:^0.8.25": + version: 0.8.25 + resolution: "solc@npm:0.8.25" + dependencies: + command-exists: ^1.2.8 + commander: ^8.1.0 + follow-redirects: ^1.12.1 + js-sha3: 0.8.0 + memorystream: ^0.3.1 + semver: ^5.5.0 + tmp: 0.0.33 + bin: + solcjs: solc.js + checksum: dce5d31c24be940c2486949dd1eb6ee12f3ebcaa11e60fb51a07b3bfaf74818d503f4eb1aef83e72302b3203a00edf42b91609364d5daa94c35dde20953326ae + languageName: node + linkType: hard + +"solc@npm:^0.8.26": + version: 0.8.26 + resolution: "solc@npm:0.8.26" + dependencies: + command-exists: ^1.2.8 + commander: ^8.1.0 + follow-redirects: ^1.12.1 + js-sha3: 0.8.0 + memorystream: ^0.3.1 + semver: ^5.5.0 + tmp: 0.0.33 + bin: + solcjs: solc.js + checksum: e3eaeac76e60676377b357af8f3919d4c8c6a74b74112b49279fe8c74a3dfa1de8afe4788689fc307453bde336edc8572988d2cf9e909f84d870420eb640400c + languageName: node + linkType: hard + +"sonic-forest@npm:^1.0.0": + version: 1.0.3 + resolution: "sonic-forest@npm:1.0.3" + dependencies: + tree-dump: ^1.0.0 + peerDependencies: + tslib: 2 + checksum: d328735d527ad9e27b3ed9a1599abf33a1e2df139b3689c6515c3c1fa09f19d0a9ddccdc1a43759fa43462259a962308cb18214bed761c1b7ea75a7611e31b11 + languageName: node + linkType: hard + +"source-map-js@npm:^1.2.0": + version: 1.2.0 + resolution: "source-map-js@npm:1.2.0" + checksum: 791a43306d9223792e84293b00458bf102a8946e7188f3db0e4e22d8d530b5f80a4ce468eb5ec0bf585443ad55ebbd630bf379c98db0b1f317fd902500217f97 + languageName: node + linkType: hard + +"source-map-support@npm:0.5.13": + version: 0.5.13 + resolution: "source-map-support@npm:0.5.13" + dependencies: + buffer-from: ^1.0.0 + source-map: ^0.6.0 + checksum: 933550047b6c1a2328599a21d8b7666507427c0f5ef5eaadd56b5da0fd9505e239053c66fe181bf1df469a3b7af9d775778eee283cbb7ae16b902ddc09e93a97 + languageName: node + linkType: hard + +"source-map-support@npm:^0.5.21, source-map-support@npm:~0.5.20": + version: 0.5.21 + resolution: "source-map-support@npm:0.5.21" + dependencies: + buffer-from: ^1.0.0 + source-map: ^0.6.0 + checksum: 43e98d700d79af1d36f859bdb7318e601dfc918c7ba2e98456118ebc4c4872b327773e5a1df09b0524e9e5063bb18f0934538eace60cca2710d1fa687645d137 + languageName: node + linkType: hard + +"source-map@npm:^0.5.0": + version: 0.5.7 + resolution: "source-map@npm:0.5.7" + checksum: 5dc2043b93d2f194142c7f38f74a24670cd7a0063acdaf4bf01d2964b402257ae843c2a8fa822ad5b71013b5fcafa55af7421383da919752f22ff488bc553f4d + languageName: node + linkType: hard + +"source-map@npm:^0.6.0, source-map@npm:^0.6.1, source-map@npm:~0.6.1": + version: 0.6.1 + resolution: "source-map@npm:0.6.1" + checksum: 59ce8640cf3f3124f64ac289012c2b8bd377c238e316fb323ea22fbfe83da07d81e000071d7242cad7a23cd91c7de98e4df8830ec3f133cb6133a5f6e9f67bc2 + languageName: node + linkType: hard + +"source-map@npm:^0.7.4": + version: 0.7.4 + resolution: "source-map@npm:0.7.4" + checksum: 01cc5a74b1f0e1d626a58d36ad6898ea820567e87f18dfc9d24a9843a351aaa2ec09b87422589906d6ff1deed29693e176194dc88bcae7c9a852dc74b311dbf5 + languageName: node + linkType: hard + +"spawn-command@npm:0.0.2, spawn-command@npm:^0.0.2-1": + version: 0.0.2 + resolution: "spawn-command@npm:0.0.2" + checksum: e35c5d28177b4d461d33c88cc11f6f3a5079e2b132c11e1746453bbb7a0c0b8a634f07541a2a234fa4758239d88203b758def509161b651e81958894c0b4b64b + languageName: node + linkType: hard + +"spdx-correct@npm:^3.0.0": + version: 3.2.0 + resolution: "spdx-correct@npm:3.2.0" + dependencies: + spdx-expression-parse: ^3.0.0 + spdx-license-ids: ^3.0.0 + checksum: e9ae98d22f69c88e7aff5b8778dc01c361ef635580e82d29e5c60a6533cc8f4d820803e67d7432581af0cc4fb49973125076ee3b90df191d153e223c004193b2 + languageName: node + linkType: hard + +"spdx-exceptions@npm:^2.1.0": + version: 2.5.0 + resolution: "spdx-exceptions@npm:2.5.0" + checksum: bb127d6e2532de65b912f7c99fc66097cdea7d64c10d3ec9b5e96524dbbd7d20e01cba818a6ddb2ae75e62bb0c63d5e277a7e555a85cbc8ab40044984fa4ae15 + languageName: node + linkType: hard + +"spdx-expression-parse@npm:^3.0.0, spdx-expression-parse@npm:^3.0.1": + version: 3.0.1 + resolution: "spdx-expression-parse@npm:3.0.1" + dependencies: + spdx-exceptions: ^2.1.0 + spdx-license-ids: ^3.0.0 + checksum: a1c6e104a2cbada7a593eaa9f430bd5e148ef5290d4c0409899855ce8b1c39652bcc88a725259491a82601159d6dc790bedefc9016c7472f7de8de7361f8ccde + languageName: node + linkType: hard + +"spdx-license-ids@npm:^3.0.0": + version: 3.0.17 + resolution: "spdx-license-ids@npm:3.0.17" + checksum: 0aba5d16292ff604dd20982200e23b4d425f6ba364765039bdbde2f6c956b9909fce1ad040a897916a5f87388e85e001f90cb64bf706b6e319f3908cfc445a59 + languageName: node + linkType: hard + +"split@npm:0.3": + version: 0.3.3 + resolution: "split@npm:0.3.3" + dependencies: + through: 2 + checksum: 2e076634c9637cfdc54ab4387b6a243b8c33b360874a25adf6f327a5647f07cb3bf1c755d515248eb3afee4e382278d01f62c62d87263c118f28065b86f74f02 + languageName: node + linkType: hard + +"sprintf-js@npm:^1.1.3": + version: 1.1.3 + resolution: "sprintf-js@npm:1.1.3" + checksum: a3fdac7b49643875b70864a9d9b469d87a40dfeaf5d34d9d0c5b1cda5fd7d065531fcb43c76357d62254c57184a7b151954156563a4d6a747015cfb41021cad0 + languageName: node + linkType: hard + +"sprintf-js@npm:~1.0.2": + version: 1.0.3 + resolution: "sprintf-js@npm:1.0.3" + checksum: 19d79aec211f09b99ec3099b5b2ae2f6e9cdefe50bc91ac4c69144b6d3928a640bb6ae5b3def70c2e85a2c3d9f5ec2719921e3a59d3ca3ef4b2fd1a4656a0df3 + languageName: node + linkType: hard + +"ssri@npm:^10.0.0": + version: 10.0.6 + resolution: "ssri@npm:10.0.6" + dependencies: + minipass: ^7.0.3 + checksum: 4603d53a05bcd44188747d38f1cc43833b9951b5a1ee43ba50535bdfc5fe4a0897472dbe69837570a5417c3c073377ef4f8c1a272683b401857f72738ee57299 + languageName: node + linkType: hard + +"stack-trace@npm:0.0.x": + version: 0.0.10 + resolution: "stack-trace@npm:0.0.10" + checksum: 473036ad32f8c00e889613153d6454f9be0536d430eb2358ca51cad6b95cea08a3cc33cc0e34de66b0dad221582b08ed2e61ef8e13f4087ab690f388362d6610 + languageName: node + linkType: hard + +"stack-utils@npm:^2.0.3": + version: 2.0.6 + resolution: "stack-utils@npm:2.0.6" + dependencies: + escape-string-regexp: ^2.0.0 + checksum: 052bf4d25bbf5f78e06c1d5e67de2e088b06871fa04107ca8d3f0e9d9263326e2942c8bedee3545795fc77d787d443a538345eef74db2f8e35db3558c6f91ff7 + languageName: node + linkType: hard + +"statuses@npm:2.0.1": + version: 2.0.1 + resolution: "statuses@npm:2.0.1" + checksum: 18c7623fdb8f646fb213ca4051be4df7efb3484d4ab662937ca6fbef7ced9b9e12842709872eb3020cc3504b93bde88935c9f6417489627a7786f24f8031cbcb + languageName: node + linkType: hard + +"statuses@npm:>= 1.4.0 < 2, statuses@npm:>= 1.5.0 < 2, statuses@npm:^1.5.0": + version: 1.5.0 + resolution: "statuses@npm:1.5.0" + checksum: c469b9519de16a4bb19600205cffb39ee471a5f17b82589757ca7bd40a8d92ebb6ed9f98b5a540c5d302ccbc78f15dc03cc0280dd6e00df1335568a5d5758a5c + languageName: node + linkType: hard + +"stream-browserify@npm:^3.0.0": + version: 3.0.0 + resolution: "stream-browserify@npm:3.0.0" + dependencies: + inherits: ~2.0.4 + readable-stream: ^3.5.0 + checksum: 4c47ef64d6f03815a9ca3874e2319805e8e8a85f3550776c47ce523b6f4c6cd57f40e46ec6a9ab8ad260fde61863c2718f250d3bedb3fe9052444eb9abfd9921 + languageName: node + linkType: hard + +"stream-combiner@npm:~0.0.4": + version: 0.0.4 + resolution: "stream-combiner@npm:0.0.4" + dependencies: + duplexer: ~0.1.1 + checksum: 844b622cfe8b9de45a6007404f613b60aaf85200ab9862299066204242f89a7c8033b1c356c998aa6cfc630f6cd9eba119ec1c6dc1f93e245982be4a847aee7d + languageName: node + linkType: hard + +"stream-to-array@npm:^2.3.0": + version: 2.3.0 + resolution: "stream-to-array@npm:2.3.0" + dependencies: + any-promise: ^1.1.0 + checksum: 7feaf63b38399b850615e6ffcaa951e96e4c8f46745dbce4b553a94c5dc43966933813747014935a3ff97793e7f30a65270bde19f82b2932871a1879229a77cf + languageName: node + linkType: hard + +"stream-to-it@npm:^1.0.0": + version: 1.0.1 + resolution: "stream-to-it@npm:1.0.1" + dependencies: + it-stream-types: ^2.0.1 + checksum: ef62b9a850b374d2bf426e96f2782fabe0ad9d513cb65f37bdd386b5669704c8d58aa7194c88d890c8fa4d000eebf3be331fcf79da9f40288cc5d5ea6d7fe47f + languageName: node + linkType: hard + +"streamx@npm:^2.15.0, streamx@npm:^2.16.1": + version: 2.16.1 + resolution: "streamx@npm:2.16.1" + dependencies: + bare-events: ^2.2.0 + fast-fifo: ^1.1.0 + queue-tick: ^1.0.1 + dependenciesMeta: + bare-events: + optional: true + checksum: 6bbb4c38c0ab6ddbe0857d55e72f71288f308f2a9f4413b7b07391cdf9f94232ffc2bbe40a1212d2e09634ecdbd5052b444c73cc8d67ae1c97e2b7e553dad559 + languageName: node + linkType: hard + +"strict-event-emitter-types@npm:^2.0.0": + version: 2.0.0 + resolution: "strict-event-emitter-types@npm:2.0.0" + checksum: 91ef62364cad9ece9ab9984e806b1c6d947d0617437a25605fff0cbfae59ac6a8d641257a168c1d5f2909809a467c714f027fdccb70b6155d68eac0dc1535299 + languageName: node + linkType: hard + +"string-argv@npm:^0.3.1, string-argv@npm:^0.3.2": + version: 0.3.2 + resolution: "string-argv@npm:0.3.2" + checksum: 8703ad3f3db0b2641ed2adbb15cf24d3945070d9a751f9e74a924966db9f325ac755169007233e8985a39a6a292f14d4fee20482989b89b96e473c4221508a0f + languageName: node + linkType: hard + +"string-format@npm:^2.0.0": + version: 2.0.0 + resolution: "string-format@npm:2.0.0" + checksum: dada2ef95f6d36c66562c673d95315f80457fa7dce2f3609a2e75d1190b98c88319028cf0a5b6c043d01c18d581b2641579f79480584ba030d6ac6fceb30bc55 + languageName: node + linkType: hard + +"string-length@npm:^4.0.1": + version: 4.0.2 + resolution: "string-length@npm:4.0.2" + dependencies: + char-regex: ^1.0.2 + strip-ansi: ^6.0.0 + checksum: ce85533ef5113fcb7e522bcf9e62cb33871aa99b3729cec5595f4447f660b0cefd542ca6df4150c97a677d58b0cb727a3fe09ac1de94071d05526c73579bf505 + languageName: node + linkType: hard + +"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.3": + version: 4.2.3 + resolution: "string-width@npm:4.2.3" + dependencies: + emoji-regex: ^8.0.0 + is-fullwidth-code-point: ^3.0.0 + strip-ansi: ^6.0.1 + checksum: e52c10dc3fbfcd6c3a15f159f54a90024241d0f149cf8aed2982a2d801d2e64df0bf1dc351cf8e95c3319323f9f220c16e740b06faecd53e2462df1d2b5443fb + languageName: node + linkType: hard + +"string-width@npm:^5.0.1, string-width@npm:^5.1.2": + version: 5.1.2 + resolution: "string-width@npm:5.1.2" + dependencies: + eastasianwidth: ^0.2.0 + emoji-regex: ^9.2.2 + strip-ansi: ^7.0.1 + checksum: 7369deaa29f21dda9a438686154b62c2c5f661f8dda60449088f9f980196f7908fc39fdd1803e3e01541970287cf5deae336798337e9319a7055af89dafa7193 + languageName: node + linkType: hard + +"string.prototype.trim@npm:^1.2.9": + version: 1.2.9 + resolution: "string.prototype.trim@npm:1.2.9" + dependencies: + call-bind: ^1.0.7 + define-properties: ^1.2.1 + es-abstract: ^1.23.0 + es-object-atoms: ^1.0.0 + checksum: ea2df6ec1e914c9d4e2dc856fa08228e8b1be59b59e50b17578c94a66a176888f417264bb763d4aac638ad3b3dad56e7a03d9317086a178078d131aa293ba193 + languageName: node + linkType: hard + +"string.prototype.trimend@npm:^1.0.8": + version: 1.0.8 + resolution: "string.prototype.trimend@npm:1.0.8" + dependencies: + call-bind: ^1.0.7 + define-properties: ^1.2.1 + es-object-atoms: ^1.0.0 + checksum: cc3bd2de08d8968a28787deba9a3cb3f17ca5f9f770c91e7e8fa3e7d47f079bad70fadce16f05dda9f261788be2c6e84a942f618c3bed31e42abc5c1084f8dfd + languageName: node + linkType: hard + +"string.prototype.trimstart@npm:^1.0.8": + version: 1.0.8 + resolution: "string.prototype.trimstart@npm:1.0.8" + dependencies: + call-bind: ^1.0.7 + define-properties: ^1.2.1 + es-object-atoms: ^1.0.0 + checksum: df1007a7f580a49d692375d996521dc14fd103acda7f3034b3c558a60b82beeed3a64fa91e494e164581793a8ab0ae2f59578a49896a7af6583c1f20472bce96 + languageName: node + linkType: hard + +"string_decoder@npm:^1.1.1": + version: 1.3.0 + resolution: "string_decoder@npm:1.3.0" + dependencies: + safe-buffer: ~5.2.0 + checksum: 8417646695a66e73aefc4420eb3b84cc9ffd89572861fe004e6aeb13c7bc00e2f616247505d2dbbef24247c372f70268f594af7126f43548565c68c117bdeb56 + languageName: node + linkType: hard + +"string_decoder@npm:~1.1.1": + version: 1.1.1 + resolution: "string_decoder@npm:1.1.1" + dependencies: + safe-buffer: ~5.1.0 + checksum: 9ab7e56f9d60a28f2be697419917c50cac19f3e8e6c28ef26ed5f4852289fe0de5d6997d29becf59028556f2c62983790c1d9ba1e2a3cc401768ca12d5183a5b + languageName: node + linkType: hard + +"stringify-object@npm:^3.2.1": + version: 3.3.0 + resolution: "stringify-object@npm:3.3.0" + dependencies: + get-own-enumerable-property-symbols: ^3.0.0 + is-obj: ^1.0.1 + is-regexp: ^1.0.0 + checksum: 6827a3f35975cfa8572e8cd3ed4f7b262def260af18655c6fde549334acdac49ddba69f3c861ea5a6e9c5a4990fe4ae870b9c0e6c31019430504c94a83b7a154 + languageName: node + linkType: hard + +"strip-ansi-cjs@npm:strip-ansi@^6.0.1, strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": + version: 6.0.1 + resolution: "strip-ansi@npm:6.0.1" + dependencies: + ansi-regex: ^5.0.1 + checksum: f3cd25890aef3ba6e1a74e20896c21a46f482e93df4a06567cebf2b57edabb15133f1f94e57434e0a958d61186087b1008e89c94875d019910a213181a14fc8c + languageName: node + linkType: hard + +"strip-ansi@npm:^7.0.1": + version: 7.1.0 + resolution: "strip-ansi@npm:7.1.0" + dependencies: + ansi-regex: ^6.0.1 + checksum: 859c73fcf27869c22a4e4d8c6acfe690064659e84bef9458aa6d13719d09ca88dcfd40cbf31fd0be63518ea1a643fe070b4827d353e09533a5b0b9fd4553d64d + languageName: node + linkType: hard + +"strip-bom@npm:^3.0.0": + version: 3.0.0 + resolution: "strip-bom@npm:3.0.0" + checksum: 8d50ff27b7ebe5ecc78f1fe1e00fcdff7af014e73cf724b46fb81ef889eeb1015fc5184b64e81a2efe002180f3ba431bdd77e300da5c6685d702780fbf0c8d5b + languageName: node + linkType: hard + +"strip-bom@npm:^4.0.0": + version: 4.0.0 + resolution: "strip-bom@npm:4.0.0" + checksum: 9dbcfbaf503c57c06af15fe2c8176fb1bf3af5ff65003851a102749f875a6dbe0ab3b30115eccf6e805e9d756830d3e40ec508b62b3f1ddf3761a20ebe29d3f3 + languageName: node + linkType: hard + +"strip-final-newline@npm:^2.0.0": + version: 2.0.0 + resolution: "strip-final-newline@npm:2.0.0" + checksum: 69412b5e25731e1938184b5d489c32e340605bb611d6140344abc3421b7f3c6f9984b21dff296dfcf056681b82caa3bb4cc996a965ce37bcfad663e92eae9c64 + languageName: node + linkType: hard + +"strip-final-newline@npm:^3.0.0": + version: 3.0.0 + resolution: "strip-final-newline@npm:3.0.0" + checksum: 23ee263adfa2070cd0f23d1ac14e2ed2f000c9b44229aec9c799f1367ec001478469560abefd00c5c99ee6f0b31c137d53ec6029c53e9f32a93804e18c201050 + languageName: node + linkType: hard + +"strip-indent@npm:^3.0.0": + version: 3.0.0 + resolution: "strip-indent@npm:3.0.0" + dependencies: + min-indent: ^1.0.0 + checksum: 18f045d57d9d0d90cd16f72b2313d6364fd2cb4bf85b9f593523ad431c8720011a4d5f08b6591c9d580f446e78855c5334a30fb91aa1560f5d9f95ed1b4a0530 + languageName: node + linkType: hard + +"strip-json-comments@npm:^3.1.1": + version: 3.1.1 + resolution: "strip-json-comments@npm:3.1.1" + checksum: 492f73e27268f9b1c122733f28ecb0e7e8d8a531a6662efbd08e22cccb3f9475e90a1b82cab06a392f6afae6d2de636f977e231296400d0ec5304ba70f166443 + languageName: node + linkType: hard + +"strip-json-comments@npm:~2.0.1": + version: 2.0.1 + resolution: "strip-json-comments@npm:2.0.1" + checksum: 1074ccb63270d32ca28edfb0a281c96b94dc679077828135141f27d52a5a398ef5e78bcf22809d23cadc2b81dfbe345eb5fd8699b385c8b1128907dec4a7d1e1 + languageName: node + linkType: hard + +"stylus-lookup@npm:^3.0.1": + version: 3.0.2 + resolution: "stylus-lookup@npm:3.0.2" + dependencies: + commander: ^2.8.1 + debug: ^4.1.0 + bin: + stylus-lookup: bin/cli.js + checksum: 460e9b6e7e662e2cf98d41ee670cb5da9ec8b8dbc1d4574de29ac422c632d5c7933772822fc12792f2ee9f9c2f62b3f60ed5850690e7c780ab7b6f07010199e4 + languageName: node + linkType: hard + +"superagent@npm:^8.1.2": + version: 8.1.2 + resolution: "superagent@npm:8.1.2" + dependencies: + component-emitter: ^1.3.0 + cookiejar: ^2.1.4 + debug: ^4.3.4 + fast-safe-stringify: ^2.1.1 + form-data: ^4.0.0 + formidable: ^2.1.2 + methods: ^1.1.2 + mime: 2.6.0 + qs: ^6.11.0 + semver: ^7.3.8 + checksum: f3601c5ccae34d5ba684a03703394b5d25931f4ae2e1e31a1de809f88a9400e997ece037f9accf148a21c408f950dc829db1e4e23576a7f9fe0efa79fd5c9d2f + languageName: node + linkType: hard + +"supertest@npm:^6.3.3": + version: 6.3.4 + resolution: "supertest@npm:6.3.4" + dependencies: + methods: ^1.1.2 + superagent: ^8.1.2 + checksum: 875c6fa7940f21e5be9bb646579cdb030d4057bf2da643e125e1f0480add1200395d2b17e10b8e54e1009efc63e047422501e9eb30e12828668498c0910f295f + languageName: node + linkType: hard + +"supports-color@npm:^5.3.0": + version: 5.5.0 + resolution: "supports-color@npm:5.5.0" + dependencies: + has-flag: ^3.0.0 + checksum: 95f6f4ba5afdf92f495b5a912d4abee8dcba766ae719b975c56c084f5004845f6f5a5f7769f52d53f40e21952a6d87411bafe34af4a01e65f9926002e38e1dac + languageName: node + linkType: hard + +"supports-color@npm:^7.1.0": + version: 7.2.0 + resolution: "supports-color@npm:7.2.0" + dependencies: + has-flag: ^4.0.0 + checksum: 3dda818de06ebbe5b9653e07842d9479f3555ebc77e9a0280caf5a14fb877ffee9ed57007c3b78f5a6324b8dbeec648d9e97a24e2ed9fdb81ddc69ea07100f4a + languageName: node + linkType: hard + +"supports-color@npm:^8.0.0, supports-color@npm:^8.1.0, supports-color@npm:^8.1.1": + version: 8.1.1 + resolution: "supports-color@npm:8.1.1" + dependencies: + has-flag: ^4.0.0 + checksum: c052193a7e43c6cdc741eb7f378df605636e01ad434badf7324f17fb60c69a880d8d8fcdcb562cf94c2350e57b937d7425ab5b8326c67c2adc48f7c87c1db406 + languageName: node + linkType: hard + +"supports-preserve-symlinks-flag@npm:^1.0.0": + version: 1.0.0 + resolution: "supports-preserve-symlinks-flag@npm:1.0.0" + checksum: 53b1e247e68e05db7b3808b99b892bd36fb096e6fba213a06da7fab22045e97597db425c724f2bbd6c99a3c295e1e73f3e4de78592289f38431049e1277ca0ae + languageName: node + linkType: hard + +"table-layout@npm:^1.0.2": + version: 1.0.2 + resolution: "table-layout@npm:1.0.2" + dependencies: + array-back: ^4.0.1 + deep-extend: ~0.6.0 + typical: ^5.2.0 + wordwrapjs: ^4.0.0 + checksum: 8f41b5671f101a5195747ec1727b1d35ea2cd5bf85addda11cc2f4b36892db9696ce3c2c7334b5b8a122505b34d19135fede50e25678df71b0439e0704fd953f + languageName: node + linkType: hard + +"tapable@npm:^2.1.1, tapable@npm:^2.2.0": + version: 2.2.1 + resolution: "tapable@npm:2.2.1" + checksum: 3b7a1b4d86fa940aad46d9e73d1e8739335efd4c48322cb37d073eb6f80f5281889bf0320c6d8ffcfa1a0dd5bfdbd0f9d037e252ef972aca595330538aac4d51 + languageName: node + linkType: hard + +"tar-fs@npm:3.0.5": + version: 3.0.5 + resolution: "tar-fs@npm:3.0.5" + dependencies: + bare-fs: ^2.1.1 + bare-path: ^2.1.0 + pump: ^3.0.0 + tar-stream: ^3.1.5 + dependenciesMeta: + bare-fs: + optional: true + bare-path: + optional: true + checksum: e31c7e3e525fec0afecdec1cac58071809e396187725f2eba442f08a4c5649c8cd6b7ce25982f9a91bb0f055628df47c08177dd2ea4f5dafd3c22f42f8da8f00 + languageName: node + linkType: hard + +"tar-stream@npm:^3.1.5": + version: 3.1.7 + resolution: "tar-stream@npm:3.1.7" + dependencies: + b4a: ^1.6.4 + fast-fifo: ^1.2.0 + streamx: ^2.15.0 + checksum: 6393a6c19082b17b8dcc8e7fd349352bb29b4b8bfe1075912b91b01743ba6bb4298f5ff0b499a3bbaf82121830e96a1a59d4f21a43c0df339e54b01789cb8cc6 + languageName: node + linkType: hard + +"tar@npm:^6.1.11, tar@npm:^6.1.2": + version: 6.2.1 + resolution: "tar@npm:6.2.1" + dependencies: + chownr: ^2.0.0 + fs-minipass: ^2.0.0 + minipass: ^5.0.0 + minizlib: ^2.1.1 + mkdirp: ^1.0.3 + yallist: ^4.0.0 + checksum: f1322768c9741a25356c11373bce918483f40fa9a25c69c59410c8a1247632487edef5fe76c5f12ac51a6356d2f1829e96d2bc34098668a2fc34d76050ac2b6c + languageName: node + linkType: hard + +"terser-webpack-plugin@npm:^5.3.10": + version: 5.3.10 + resolution: "terser-webpack-plugin@npm:5.3.10" + dependencies: + "@jridgewell/trace-mapping": ^0.3.20 + jest-worker: ^27.4.5 + schema-utils: ^3.1.1 + serialize-javascript: ^6.0.1 + terser: ^5.26.0 + peerDependencies: + webpack: ^5.1.0 + peerDependenciesMeta: + "@swc/core": + optional: true + esbuild: + optional: true + uglify-js: + optional: true + checksum: bd6e7596cf815f3353e2a53e79cbdec959a1b0276f5e5d4e63e9d7c3c5bb5306df567729da287d1c7b39d79093e56863c569c42c6c24cc34c76aa313bd2cbcea + languageName: node + linkType: hard + +"terser@npm:^5.26.0": + version: 5.31.0 + resolution: "terser@npm:5.31.0" + dependencies: + "@jridgewell/source-map": ^0.3.3 + acorn: ^8.8.2 + commander: ^2.20.0 + source-map-support: ~0.5.20 + bin: + terser: bin/terser + checksum: 48f14229618866bba8a9464e9d0e7fdcb6b6488b3a6c4690fcf4d48df65bf45959d5ae8c02f1a0b3f3dd035a9ae340b715e1e547645b112dc3963daa3564699a + languageName: node + linkType: hard + +"test-exclude@npm:^6.0.0": + version: 6.0.0 + resolution: "test-exclude@npm:6.0.0" + dependencies: + "@istanbuljs/schema": ^0.1.2 + glob: ^7.1.4 + minimatch: ^3.0.4 + checksum: 3b34a3d77165a2cb82b34014b3aba93b1c4637a5011807557dc2f3da826c59975a5ccad765721c4648b39817e3472789f9b0fa98fc854c5c1c7a1e632aacdc28 + languageName: node + linkType: hard + +"text-hex@npm:1.0.x": + version: 1.0.0 + resolution: "text-hex@npm:1.0.0" + checksum: 1138f68adc97bf4381a302a24e2352f04992b7b1316c5003767e9b0d3367ffd0dc73d65001ea02b07cd0ecc2a9d186de0cf02f3c2d880b8a522d4ccb9342244a + languageName: node + linkType: hard + +"text-table@npm:^0.2.0": + version: 0.2.0 + resolution: "text-table@npm:0.2.0" + checksum: b6937a38c80c7f84d9c11dd75e49d5c44f71d95e810a3250bd1f1797fc7117c57698204adf676b71497acc205d769d65c16ae8fa10afad832ae1322630aef10a + languageName: node + linkType: hard + +"thingies@npm:^1.20.0": + version: 1.21.0 + resolution: "thingies@npm:1.21.0" + peerDependencies: + tslib: ^2 + checksum: 283a2785e513dc892822dd0bbadaa79e873a7fc90b84798164717bf7cf837553e0b4518d8027b2307d8f6fc6caab088fa717112cd9196c6222763cc3cc1b7e79 + languageName: node + linkType: hard + +"through@npm:2, through@npm:^2.3.8, through@npm:~2.3, through@npm:~2.3.1": + version: 2.3.8 + resolution: "through@npm:2.3.8" + checksum: a38c3e059853c494af95d50c072b83f8b676a9ba2818dcc5b108ef252230735c54e0185437618596c790bbba8fcdaef5b290405981ffa09dce67b1f1bf190cbd + languageName: node + linkType: hard + +"tmp@npm:0.0.33": + version: 0.0.33 + resolution: "tmp@npm:0.0.33" + dependencies: + os-tmpdir: ~1.0.2 + checksum: 902d7aceb74453ea02abbf58c203f4a8fc1cead89b60b31e354f74ed5b3fb09ea817f94fb310f884a5d16987dd9fa5a735412a7c2dd088dd3d415aa819ae3a28 + languageName: node + linkType: hard + +"tmpl@npm:1.0.5": + version: 1.0.5 + resolution: "tmpl@npm:1.0.5" + checksum: cd922d9b853c00fe414c5a774817be65b058d54a2d01ebb415840960406c669a0fc632f66df885e24cb022ec812739199ccbdb8d1164c3e513f85bfca5ab2873 + languageName: node + linkType: hard + +"to-fast-properties@npm:^2.0.0": + version: 2.0.0 + resolution: "to-fast-properties@npm:2.0.0" + checksum: be2de62fe58ead94e3e592680052683b1ec986c72d589e7b21e5697f8744cdbf48c266fa72f6c15932894c10187b5f54573a3bcf7da0bfd964d5caf23d436168 + languageName: node + linkType: hard + +"to-regex-range@npm:^5.0.1": + version: 5.0.1 + resolution: "to-regex-range@npm:5.0.1" + dependencies: + is-number: ^7.0.0 + checksum: f76fa01b3d5be85db6a2a143e24df9f60dd047d151062d0ba3df62953f2f697b16fe5dad9b0ac6191c7efc7b1d9dcaa4b768174b7b29da89d4428e64bc0a20ed + languageName: node + linkType: hard + +"toidentifier@npm:1.0.1": + version: 1.0.1 + resolution: "toidentifier@npm:1.0.1" + checksum: 952c29e2a85d7123239b5cfdd889a0dde47ab0497f0913d70588f19c53f7e0b5327c95f4651e413c74b785147f9637b17410ac8c846d5d4a20a5a33eb6dc3a45 + languageName: node + linkType: hard + +"tree-dump@npm:^1.0.0": + version: 1.0.1 + resolution: "tree-dump@npm:1.0.1" + peerDependencies: + tslib: 2 + checksum: 256f2e066ab8743672795822731410d9b9036ef449499f528df1a638ad99af45f345bfbddeaf1cc46b7b9279db3b5f83e1a4cb21bc086ef25ce6add975a3c490 + languageName: node + linkType: hard + +"tree-kill@npm:^1.2.2": + version: 1.2.2 + resolution: "tree-kill@npm:1.2.2" + bin: + tree-kill: cli.js + checksum: 49117f5f410d19c84b0464d29afb9642c863bc5ba40fcb9a245d474c6d5cc64d1b177a6e6713129eb346b40aebb9d4631d967517f9fbe8251c35b21b13cd96c7 + languageName: node + linkType: hard + +"trim-newlines@npm:^3.0.0": + version: 3.0.1 + resolution: "trim-newlines@npm:3.0.1" + checksum: b530f3fadf78e570cf3c761fb74fef655beff6b0f84b29209bac6c9622db75ad1417f4a7b5d54c96605dcd72734ad44526fef9f396807b90839449eb543c6206 + languageName: node + linkType: hard + +"triple-beam@npm:^1.3.0": + version: 1.4.1 + resolution: "triple-beam@npm:1.4.1" + checksum: 2e881a3e8e076b6f2b85b9ec9dd4a900d3f5016e6d21183ed98e78f9abcc0149e7d54d79a3f432b23afde46b0885bdcdcbff789f39bc75de796316961ec07f61 + languageName: node + linkType: hard + +"ts-api-utils@npm:^1.0.1": + version: 1.3.0 + resolution: "ts-api-utils@npm:1.3.0" + peerDependencies: + typescript: ">=4.2.0" + checksum: c746ddabfdffbf16cb0b0db32bb287236a19e583057f8649ee7c49995bb776e1d3ef384685181c11a1a480369e022ca97512cb08c517b2d2bd82c83754c97012 + languageName: node + linkType: hard + +"ts-command-line-args@npm:^2.5.1": + version: 2.5.1 + resolution: "ts-command-line-args@npm:2.5.1" + dependencies: + chalk: ^4.1.0 + command-line-args: ^5.1.1 + command-line-usage: ^6.1.0 + string-format: ^2.0.0 + bin: + write-markdown: dist/write-markdown.js + checksum: 7c0a7582e94f1d2160e3dd379851ec4f1758bc673ccd71bae07f839f83051b6b83e0ae14325c2d04ea728e5bde7b7eacfd2ab060b8fd4b8ab29e0bbf77f6c51e + languageName: node + linkType: hard + +"ts-essentials@npm:^10.0.0": + version: 10.0.0 + resolution: "ts-essentials@npm:10.0.0" + peerDependencies: + typescript: ">=4.5.0" + peerDependenciesMeta: + typescript: + optional: true + checksum: 29c789b32b1885211bc7429410529810fabc0d6a6f3b13e05f15e2ca6540581c019a66296864ddc5d4510c4eec4dfee0627631857bedae12b48b368d9f62b230 + languageName: node + linkType: hard + +"ts-graphviz@npm:^1.5.0": + version: 1.8.2 + resolution: "ts-graphviz@npm:1.8.2" + checksum: 73723d6d9b9b29073ff659b38e8a8443a024d515a30fd77dfb00a9df0e835739f2522c303a353e63bbd39115e23b34c9d92dd66f72590cf5f92d3a447255f9b9 + languageName: node + linkType: hard + +"ts-jest@npm:^29.1.0": + version: 29.1.3 + resolution: "ts-jest@npm:29.1.3" + dependencies: + bs-logger: 0.x + fast-json-stable-stringify: 2.x + jest-util: ^29.0.0 + json5: ^2.2.3 + lodash.memoize: 4.x + make-error: 1.x + semver: ^7.5.3 + yargs-parser: ^21.0.1 + peerDependencies: + "@babel/core": ">=7.0.0-beta.0 <8" + "@jest/transform": ^29.0.0 + "@jest/types": ^29.0.0 + babel-jest: ^29.0.0 + jest: ^29.0.0 + typescript: ">=4.3 <6" + peerDependenciesMeta: + "@babel/core": + optional: true + "@jest/transform": + optional: true + "@jest/types": + optional: true + babel-jest: + optional: true + esbuild: + optional: true + bin: + ts-jest: cli.js + checksum: c5b2c0501680a9056c50541a3315de7b3b85a611056b978062b4defc96fb0066d12bf1e15715021799a3779723343fb98a9a4ba01dc01709f274899b6c28453d + languageName: node + linkType: hard + +"ts-loader@npm:^9.4.4": + version: 9.5.1 + resolution: "ts-loader@npm:9.5.1" + dependencies: + chalk: ^4.1.0 + enhanced-resolve: ^5.0.0 + micromatch: ^4.0.0 + semver: ^7.3.4 + source-map: ^0.7.4 + peerDependencies: + typescript: "*" + webpack: ^5.0.0 + checksum: 7cf396e656d905388ea2a9b5e82f16d3c955fda8d3df2fbf219f4bee16ff50a3c995c44ae3e584634e9443f056cec70bb3151add3917ffb4588ecd7394bac0ec + languageName: node + linkType: hard + +"ts-node@npm:^10.9.1": + version: 10.9.2 + resolution: "ts-node@npm:10.9.2" + dependencies: + "@cspotcode/source-map-support": ^0.8.0 + "@tsconfig/node10": ^1.0.7 + "@tsconfig/node12": ^1.0.7 + "@tsconfig/node14": ^1.0.0 + "@tsconfig/node16": ^1.0.2 + acorn: ^8.4.1 + acorn-walk: ^8.1.1 + arg: ^4.1.0 + create-require: ^1.1.0 + diff: ^4.0.1 + make-error: ^1.1.1 + v8-compile-cache-lib: ^3.0.1 + yn: 3.1.1 + peerDependencies: + "@swc/core": ">=1.2.50" + "@swc/wasm": ">=1.2.50" + "@types/node": "*" + typescript: ">=2.7" + peerDependenciesMeta: + "@swc/core": + optional: true + "@swc/wasm": + optional: true + bin: + ts-node: dist/bin.js + ts-node-cwd: dist/bin-cwd.js + ts-node-esm: dist/bin-esm.js + ts-node-script: dist/bin-script.js + ts-node-transpile-only: dist/bin-transpile.js + ts-script: dist/bin-script-deprecated.js + checksum: fde256c9073969e234526e2cfead42591b9a2aec5222bac154b0de2fa9e4ceb30efcd717ee8bc785a56f3a119bdd5aa27b333d9dbec94ed254bd26f8944c67ac + languageName: node + linkType: hard + +"tsc-watch@npm:^6.0.0": + version: 6.2.0 + resolution: "tsc-watch@npm:6.2.0" + dependencies: + cross-spawn: ^7.0.3 + node-cleanup: ^2.1.2 + ps-tree: ^1.2.0 + string-argv: ^0.3.1 + peerDependencies: + typescript: "*" + bin: + tsc-watch: dist/lib/tsc-watch.js + checksum: e1028c45a4e47ae28e0ad68370f95d7410de2e0feaa8cf0ed4a701488a538eccef99b3d6bb2d11b995fbdc4f5a9e938c78037e345c6b3ee46b58d7cef781efb9 + languageName: node + linkType: hard + +"tsconfig-paths@npm:^3.10.1, tsconfig-paths@npm:^3.15.0": + version: 3.15.0 + resolution: "tsconfig-paths@npm:3.15.0" + dependencies: + "@types/json5": ^0.0.29 + json5: ^1.0.2 + minimist: ^1.2.6 + strip-bom: ^3.0.0 + checksum: 59f35407a390d9482b320451f52a411a256a130ff0e7543d18c6f20afab29ac19fbe55c360a93d6476213cc335a4d76ce90f67df54c4e9037f7d240920832201 + languageName: node + linkType: hard + +"tslib@npm:2.5.0": + version: 2.5.0 + resolution: "tslib@npm:2.5.0" + checksum: ae3ed5f9ce29932d049908ebfdf21b3a003a85653a9a140d614da6b767a93ef94f460e52c3d787f0e4f383546981713f165037dc2274df212ea9f8a4541004e1 + languageName: node + linkType: hard + +"tslib@npm:^1.8.1": + version: 1.14.1 + resolution: "tslib@npm:1.14.1" + checksum: dbe628ef87f66691d5d2959b3e41b9ca0045c3ee3c7c7b906cc1e328b39f199bb1ad9e671c39025bd56122ac57dfbf7385a94843b1cc07c60a4db74795829acd + languageName: node + linkType: hard + +"tslib@npm:^2.0.0, tslib@npm:^2.0.1, tslib@npm:^2.1.0, tslib@npm:^2.4.0, tslib@npm:^2.5.0, tslib@npm:^2.6.1": + version: 2.6.2 + resolution: "tslib@npm:2.6.2" + checksum: 329ea56123005922f39642318e3d1f0f8265d1e7fcb92c633e0809521da75eeaca28d2cf96d7248229deb40e5c19adf408259f4b9640afd20d13aecc1430f3ad + languageName: node + linkType: hard + +"tsscmp@npm:1.0.6": + version: 1.0.6 + resolution: "tsscmp@npm:1.0.6" + checksum: 1512384def36bccc9125cabbd4c3b0e68608d7ee08127ceaa0b84a71797263f1a01c7f82fa69be8a3bd3c1396e2965d2f7b52d581d3a5eeaf3967fbc52e3b3bf + languageName: node + linkType: hard + +"tsutils@npm:^3.21.0": + version: 3.21.0 + resolution: "tsutils@npm:3.21.0" + dependencies: + tslib: ^1.8.1 + peerDependencies: + typescript: ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + checksum: 1843f4c1b2e0f975e08c4c21caa4af4f7f65a12ac1b81b3b8489366826259323feb3fc7a243123453d2d1a02314205a7634e048d4a8009921da19f99755cdc48 + languageName: node + linkType: hard + +"tty-browserify@npm:^0.0.1": + version: 0.0.1 + resolution: "tty-browserify@npm:0.0.1" + checksum: 93b745d43fa5a7d2b948fa23be8d313576d1d884b48acd957c07710bac1c0d8ac34c0556ad4c57c73d36e11741763ef66b3fb4fb97b06b7e4d525315a3cd45f5 + languageName: node + linkType: hard + +"type-check@npm:^0.4.0, type-check@npm:~0.4.0": + version: 0.4.0 + resolution: "type-check@npm:0.4.0" + dependencies: + prelude-ls: ^1.2.1 + checksum: ec688ebfc9c45d0c30412e41ca9c0cdbd704580eb3a9ccf07b9b576094d7b86a012baebc95681999dd38f4f444afd28504cb3a89f2ef16b31d4ab61a0739025a + languageName: node + linkType: hard + +"type-detect@npm:4.0.8": + version: 4.0.8 + resolution: "type-detect@npm:4.0.8" + checksum: 62b5628bff67c0eb0b66afa371bd73e230399a8d2ad30d852716efcc4656a7516904570cd8631a49a3ce57c10225adf5d0cbdcb47f6b0255fe6557c453925a15 + languageName: node + linkType: hard + +"type-fest@npm:^0.13.1": + version: 0.13.1 + resolution: "type-fest@npm:0.13.1" + checksum: e6bf2e3c449f27d4ef5d56faf8b86feafbc3aec3025fc9a5fbe2db0a2587c44714521f9c30d8516a833c8c506d6263f5cc11267522b10c6ccdb6cc55b0a9d1c4 + languageName: node + linkType: hard + +"type-fest@npm:^0.20.2": + version: 0.20.2 + resolution: "type-fest@npm:0.20.2" + checksum: 4fb3272df21ad1c552486f8a2f8e115c09a521ad7a8db3d56d53718d0c907b62c6e9141ba5f584af3f6830d0872c521357e512381f24f7c44acae583ad517d73 + languageName: node + linkType: hard + +"type-fest@npm:^0.21.3": + version: 0.21.3 + resolution: "type-fest@npm:0.21.3" + checksum: e6b32a3b3877f04339bae01c193b273c62ba7bfc9e325b8703c4ee1b32dc8fe4ef5dfa54bf78265e069f7667d058e360ae0f37be5af9f153b22382cd55a9afe0 + languageName: node + linkType: hard + +"type-fest@npm:^0.6.0": + version: 0.6.0 + resolution: "type-fest@npm:0.6.0" + checksum: b2188e6e4b21557f6e92960ec496d28a51d68658018cba8b597bd3ef757721d1db309f120ae987abeeda874511d14b776157ff809f23c6d1ce8f83b9b2b7d60f + languageName: node + linkType: hard + +"type-fest@npm:^0.8.1": + version: 0.8.1 + resolution: "type-fest@npm:0.8.1" + checksum: d61c4b2eba24009033ae4500d7d818a94fd6d1b481a8111612ee141400d5f1db46f199c014766b9fa9b31a6a7374d96fc748c6d688a78a3ce5a33123839becb7 + languageName: node + linkType: hard + +"type-is@npm:^1.6.16, type-is@npm:^1.6.18": + version: 1.6.18 + resolution: "type-is@npm:1.6.18" + dependencies: + media-typer: 0.3.0 + mime-types: ~2.1.24 + checksum: 2c8e47675d55f8b4e404bcf529abdf5036c537a04c2b20177bcf78c9e3c1da69da3942b1346e6edb09e823228c0ee656ef0e033765ec39a70d496ef601a0c657 + languageName: node + linkType: hard + +"typed-array-buffer@npm:^1.0.2": + version: 1.0.2 + resolution: "typed-array-buffer@npm:1.0.2" + dependencies: + call-bind: ^1.0.7 + es-errors: ^1.3.0 + is-typed-array: ^1.1.13 + checksum: 02ffc185d29c6df07968272b15d5319a1610817916ec8d4cd670ded5d1efe72901541ff2202fcc622730d8a549c76e198a2f74e312eabbfb712ed907d45cbb0b + languageName: node + linkType: hard + +"typed-array-byte-length@npm:^1.0.1": + version: 1.0.1 + resolution: "typed-array-byte-length@npm:1.0.1" + dependencies: + call-bind: ^1.0.7 + for-each: ^0.3.3 + gopd: ^1.0.1 + has-proto: ^1.0.3 + is-typed-array: ^1.1.13 + checksum: f65e5ecd1cf76b1a2d0d6f631f3ea3cdb5e08da106c6703ffe687d583e49954d570cc80434816d3746e18be889ffe53c58bf3e538081ea4077c26a41055b216d + languageName: node + linkType: hard + +"typed-array-byte-offset@npm:^1.0.2": + version: 1.0.2 + resolution: "typed-array-byte-offset@npm:1.0.2" + dependencies: + available-typed-arrays: ^1.0.7 + call-bind: ^1.0.7 + for-each: ^0.3.3 + gopd: ^1.0.1 + has-proto: ^1.0.3 + is-typed-array: ^1.1.13 + checksum: c8645c8794a621a0adcc142e0e2c57b1823bbfa4d590ad2c76b266aa3823895cf7afb9a893bf6685e18454ab1b0241e1a8d885a2d1340948efa4b56add4b5f67 + languageName: node + linkType: hard + +"typed-array-length@npm:^1.0.6": + version: 1.0.6 + resolution: "typed-array-length@npm:1.0.6" + dependencies: + call-bind: ^1.0.7 + for-each: ^0.3.3 + gopd: ^1.0.1 + has-proto: ^1.0.3 + is-typed-array: ^1.1.13 + possible-typed-array-names: ^1.0.0 + checksum: f0315e5b8f0168c29d390ff410ad13e4d511c78e6006df4a104576844812ee447fcc32daab1f3a76c9ef4f64eff808e134528b5b2439de335586b392e9750e5c + languageName: node + linkType: hard + +"typedoc@npm:^0.24.8": + version: 0.24.8 + resolution: "typedoc@npm:0.24.8" + dependencies: + lunr: ^2.3.9 + marked: ^4.3.0 + minimatch: ^9.0.0 + shiki: ^0.14.1 + peerDependencies: + typescript: 4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x + bin: + typedoc: bin/typedoc + checksum: a46a14497f789fb3594e6c3af2e45276934ac46df40b7ed15a504ee51dc7a8013a2ffb3a54fd73abca6a2b71f97d3ec9ad356fa9aa81d29743e4645a965a2ae0 + languageName: node + linkType: hard + +"typescript@npm:^3.9.10, typescript@npm:^3.9.7": + version: 3.9.10 + resolution: "typescript@npm:3.9.10" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 46c842e2cd4797b88b66ef06c9c41dd21da48b95787072ccf39d5f2aa3124361bc4c966aa1c7f709fae0509614d76751455b5231b12dbb72eb97a31369e1ff92 + languageName: node + linkType: hard + +"typescript@npm:^4.0.0, typescript@npm:^4.9.5": + version: 4.9.5 + resolution: "typescript@npm:4.9.5" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: ee000bc26848147ad423b581bd250075662a354d84f0e06eb76d3b892328d8d4440b7487b5a83e851b12b255f55d71835b008a66cbf8f255a11e4400159237db + languageName: node + linkType: hard + +"typescript@npm:^5.0.4": + version: 5.4.5 + resolution: "typescript@npm:5.4.5" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 53c879c6fa1e3bcb194b274d4501ba1985894b2c2692fa079db03c5a5a7140587a1e04e1ba03184605d35f439b40192d9e138eb3279ca8eee313c081c8bcd9b0 + languageName: node + linkType: hard + +"typescript@patch:typescript@^3.9.10#~builtin, typescript@patch:typescript@^3.9.7#~builtin": + version: 3.9.10 + resolution: "typescript@patch:typescript@npm%3A3.9.10#~builtin::version=3.9.10&hash=3bd3d3" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: dc7141ab555b23a8650a6787f98845fc11692063d02b75ff49433091b3af2fe3d773650dea18389d7c21f47d620fb3b110ea363dab4ab039417a6ccbbaf96fc2 + languageName: node + linkType: hard + +"typescript@patch:typescript@^4.0.0#~builtin, typescript@patch:typescript@^4.9.5#~builtin": + version: 4.9.5 + resolution: "typescript@patch:typescript@npm%3A4.9.5#~builtin::version=4.9.5&hash=289587" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 1f8f3b6aaea19f0f67cba79057674ba580438a7db55057eb89cc06950483c5d632115c14077f6663ea76fd09fce3c190e6414bb98582ec80aa5a4eaf345d5b68 + languageName: node + linkType: hard + +"typescript@patch:typescript@^5.0.4#~builtin": + version: 5.4.5 + resolution: "typescript@patch:typescript@npm%3A5.4.5#~builtin::version=5.4.5&hash=f3b441" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 2373c693f3b328f3b2387c3efafe6d257b057a142f9a79291854b14ff4d5367d3d730810aee981726b677ae0fd8329b23309da3b6aaab8263dbdccf1da07a3ba + languageName: node + linkType: hard + +"typical@npm:^4.0.0": + version: 4.0.0 + resolution: "typical@npm:4.0.0" + checksum: a242081956825328f535e6195a924240b34daf6e7fdb573a1809a42b9f37fb8114fa99c7ab89a695e0cdb419d4149d067f6723e4b95855ffd39c6c4ca378efb3 + languageName: node + linkType: hard + +"typical@npm:^5.2.0": + version: 5.2.0 + resolution: "typical@npm:5.2.0" + checksum: ccaeb151a9a556291b495571ca44c4660f736fb49c29314bbf773c90fad92e9485d3cc2b074c933866c1595abbbc962f2b8bfc6e0f52a8c6b0cdd205442036ac + languageName: node + linkType: hard + +"uint8-varint@npm:^2.0.0, uint8-varint@npm:^2.0.1, uint8-varint@npm:^2.0.2, uint8-varint@npm:^2.0.4": + version: 2.0.4 + resolution: "uint8-varint@npm:2.0.4" + dependencies: + uint8arraylist: ^2.0.0 + uint8arrays: ^5.0.0 + checksum: fef8205bec41fdbc5166a7a106e34d54ac4e574512e497783951d60983a7b0c27a740b287522c6ad9e1a9ed27c5481cddd92caaa93ac7aac96b57364a7e1d20e + languageName: node + linkType: hard + +"uint8arraylist@npm:^2.0.0, uint8arraylist@npm:^2.4.3, uint8arraylist@npm:^2.4.8": + version: 2.4.8 + resolution: "uint8arraylist@npm:2.4.8" + dependencies: + uint8arrays: ^5.0.1 + checksum: 8259124cf5c7acd29edeed346489d898f3eb12f129dadedb1c263ad8d637e1a2f689968934a94c16804e39f6e8765178507be6d7b3c3c6b67147ad7546d34186 + languageName: node + linkType: hard + +"uint8arrays@npm:^4.0.6": + version: 4.0.10 + resolution: "uint8arrays@npm:4.0.10" + dependencies: + multiformats: ^12.0.1 + checksum: 784677a00f67d18d3aaaf441422b4055576e1ab76dbf276e474b86c91ddb95945ac1cc95a97979ab1f3b3c9a0ebeea74dd803ec6056adbd1ee6ef2f231f00f97 + languageName: node + linkType: hard + +"uint8arrays@npm:^5.0.0, uint8arrays@npm:^5.0.1, uint8arrays@npm:^5.0.2, uint8arrays@npm:^5.0.3": + version: 5.0.3 + resolution: "uint8arrays@npm:5.0.3" + dependencies: + multiformats: ^13.0.0 + checksum: e3c8afa183f2bac2e271891c00de18100168cddf01310297f9dd56d6356d865e5cc96c4ad567d9435ddaa080b3e31ca068997f1a5a7ae8998d4fc0326343475a + languageName: node + linkType: hard + +"unbox-primitive@npm:^1.0.2": + version: 1.0.2 + resolution: "unbox-primitive@npm:1.0.2" + dependencies: + call-bind: ^1.0.2 + has-bigints: ^1.0.2 + has-symbols: ^1.0.3 + which-boxed-primitive: ^1.0.2 + checksum: b7a1cf5862b5e4b5deb091672ffa579aa274f648410009c81cca63fed3b62b610c4f3b773f912ce545bb4e31edc3138975b5bc777fc6e4817dca51affb6380e9 + languageName: node + linkType: hard + +"unbzip2-stream@npm:1.4.3": + version: 1.4.3 + resolution: "unbzip2-stream@npm:1.4.3" + dependencies: + buffer: ^5.2.1 + through: ^2.3.8 + checksum: 0e67c4a91f4fa0fc7b4045f8b914d3498c2fc2e8c39c359977708ec85ac6d6029840e97f508675fdbdf21fcb8d276ca502043406f3682b70f075e69aae626d1d + languageName: node + linkType: hard + +"undici-types@npm:~5.26.4": + version: 5.26.5 + resolution: "undici-types@npm:5.26.5" + checksum: 3192ef6f3fd5df652f2dc1cd782b49d6ff14dc98e5dced492aa8a8c65425227da5da6aafe22523c67f035a272c599bb89cfe803c1db6311e44bed3042fc25487 + languageName: node + linkType: hard + +"uniq@npm:^1.0.1": + version: 1.0.1 + resolution: "uniq@npm:1.0.1" + checksum: 8206535f83745ea83f9da7035f3b983fd6ed5e35b8ed7745441944e4065b616bc67cf0d0a23a86b40ee0074426f0607f0a138f9b78e124eb6a7a6a6966055709 + languageName: node + linkType: hard + +"unique-filename@npm:^3.0.0": + version: 3.0.0 + resolution: "unique-filename@npm:3.0.0" + dependencies: + unique-slug: ^4.0.0 + checksum: 8e2f59b356cb2e54aab14ff98a51ac6c45781d15ceaab6d4f1c2228b780193dc70fae4463ce9e1df4479cb9d3304d7c2043a3fb905bdeca71cc7e8ce27e063df + languageName: node + linkType: hard + +"unique-slug@npm:^4.0.0": + version: 4.0.0 + resolution: "unique-slug@npm:4.0.0" + dependencies: + imurmurhash: ^0.1.4 + checksum: 0884b58365af59f89739e6f71e3feacb5b1b41f2df2d842d0757933620e6de08eff347d27e9d499b43c40476cbaf7988638d3acb2ffbcb9d35fd035591adfd15 + languageName: node + linkType: hard + +"universalify@npm:^2.0.0": + version: 2.0.1 + resolution: "universalify@npm:2.0.1" + checksum: ecd8469fe0db28e7de9e5289d32bd1b6ba8f7183db34f3bfc4ca53c49891c2d6aa05f3fb3936a81285a905cc509fb641a0c3fc131ec786167eff41236ae32e60 + languageName: node + linkType: hard + +"unpipe@npm:1.0.0": + version: 1.0.0 + resolution: "unpipe@npm:1.0.0" + checksum: 4fa18d8d8d977c55cb09715385c203197105e10a6d220087ec819f50cb68870f02942244f1017565484237f1f8c5d3cd413631b1ae104d3096f24fdfde1b4aa2 + languageName: node + linkType: hard + +"unzipit@npm:^1.4.3": + version: 1.4.3 + resolution: "unzipit@npm:1.4.3" + dependencies: + uzip-module: ^1.0.2 + checksum: ce29348edab7b5fb5b7b4d43437f48e35812ac8b3cc2d76efd1acfcad6dd1b96b4f96bfd03250a724b87ba99dd531d7727ad24b590acf727dde79f54f5e779ed + languageName: node + linkType: hard + +"upath@npm:^2.0.1": + version: 2.0.1 + resolution: "upath@npm:2.0.1" + checksum: 2db04f24a03ef72204c7b969d6991abec9e2cb06fb4c13a1fd1c59bc33b46526b16c3325e55930a11ff86a77a8cbbcda8f6399bf914087028c5beae21ecdb33c + languageName: node + linkType: hard + +"update-browserslist-db@npm:^1.0.13": + version: 1.0.15 + resolution: "update-browserslist-db@npm:1.0.15" + dependencies: + escalade: ^3.1.2 + picocolors: ^1.0.0 + peerDependencies: + browserslist: ">= 4.21.0" + bin: + update-browserslist-db: cli.js + checksum: 15f244dc83918c9a1779b86311d1be39d8f990e0a439db559fd2f54150b789fca774cdb4cc1886d5f18b06c767ed97f84d47356a5fda42da3bcc4e0f9b9d22e4 + languageName: node + linkType: hard + +"uri-js@npm:^4.2.2": + version: 4.4.1 + resolution: "uri-js@npm:4.4.1" + dependencies: + punycode: ^2.1.0 + checksum: 7167432de6817fe8e9e0c9684f1d2de2bb688c94388f7569f7dbdb1587c9f4ca2a77962f134ec90be0cc4d004c939ff0d05acc9f34a0db39a3c797dada262633 + languageName: node + linkType: hard + +"urlpattern-polyfill@npm:10.0.0": + version: 10.0.0 + resolution: "urlpattern-polyfill@npm:10.0.0" + checksum: 61d890f151ea4ecf34a3dcab32c65ad1f3cda857c9d154af198260c6e5b2ad96d024593409baaa6d4428dd1ab206c14799bf37fe011117ac93a6a44913ac5aa4 + languageName: node + linkType: hard + +"util-deprecate@npm:^1.0.1, util-deprecate@npm:~1.0.1": + version: 1.0.2 + resolution: "util-deprecate@npm:1.0.2" + checksum: 474acf1146cb2701fe3b074892217553dfcf9a031280919ba1b8d651a068c9b15d863b7303cb15bd00a862b498e6cf4ad7b4a08fb134edd5a6f7641681cb54a2 + languageName: node + linkType: hard + +"util@npm:^0.12.5": + version: 0.12.5 + resolution: "util@npm:0.12.5" + dependencies: + inherits: ^2.0.3 + is-arguments: ^1.0.4 + is-generator-function: ^1.0.7 + is-typed-array: ^1.1.3 + which-typed-array: ^1.1.2 + checksum: 705e51f0de5b446f4edec10739752ac25856541e0254ea1e7e45e5b9f9b0cb105bc4bd415736a6210edc68245a7f903bf085ffb08dd7deb8a0e847f60538a38a + languageName: node + linkType: hard + +"uzip-module@npm:^1.0.2": + version: 1.0.3 + resolution: "uzip-module@npm:1.0.3" + checksum: fc286c44a04d75055577fae8293d3fee499d1e850f87e88c158b1e3657f4794a3a40ca2d34f73474ff82917176dd5ca9d1c0d1e375a083714e11afabd3afa423 + languageName: node + linkType: hard + +"v8-compile-cache-lib@npm:^3.0.1": + version: 3.0.1 + resolution: "v8-compile-cache-lib@npm:3.0.1" + checksum: 78089ad549e21bcdbfca10c08850022b22024cdcc2da9b168bcf5a73a6ed7bf01a9cebb9eac28e03cd23a684d81e0502797e88f3ccd27a32aeab1cfc44c39da0 + languageName: node + linkType: hard + +"v8-to-istanbul@npm:^9.0.1": + version: 9.2.0 + resolution: "v8-to-istanbul@npm:9.2.0" + dependencies: + "@jridgewell/trace-mapping": ^0.3.12 + "@types/istanbul-lib-coverage": ^2.0.1 + convert-source-map: ^2.0.0 + checksum: 31ef98c6a31b1dab6be024cf914f235408cd4c0dc56a5c744a5eea1a9e019ba279e1b6f90d695b78c3186feed391ed492380ccf095009e2eb91f3d058f0b4491 + languageName: node + linkType: hard + +"validate-npm-package-license@npm:^3.0.1": + version: 3.0.4 + resolution: "validate-npm-package-license@npm:3.0.4" + dependencies: + spdx-correct: ^3.0.0 + spdx-expression-parse: ^3.0.0 + checksum: 35703ac889d419cf2aceef63daeadbe4e77227c39ab6287eeb6c1b36a746b364f50ba22e88591f5d017bc54685d8137bc2d328d0a896e4d3fd22093c0f32a9ad + languageName: node + linkType: hard + +"vary@npm:^1.1.2": + version: 1.1.2 + resolution: "vary@npm:1.1.2" + checksum: ae0123222c6df65b437669d63dfa8c36cee20a504101b2fcd97b8bf76f91259c17f9f2b4d70a1e3c6bbcee7f51b28392833adb6b2770b23b01abec84e369660b + languageName: node + linkType: hard + +"viem@npm:^2.7.15": + version: 2.10.2 + resolution: "viem@npm:2.10.2" + dependencies: + "@adraffy/ens-normalize": 1.10.0 + "@noble/curves": 1.2.0 + "@noble/hashes": 1.3.2 + "@scure/bip32": 1.3.2 + "@scure/bip39": 1.2.1 + abitype: 1.0.0 + isows: 1.0.3 + ws: 8.13.0 + peerDependencies: + typescript: ">=5.0.4" + peerDependenciesMeta: + typescript: + optional: true + checksum: 45e7e29908659c60e0a8881f28dcee51a8686004874b425785af18641f19a94489cd694406d4377f7e3db18c3a22764c3518af372c6857753aad877d8f251395 + languageName: node + linkType: hard + +"vite@npm:^4.2.3": + version: 4.5.3 + resolution: "vite@npm:4.5.3" + dependencies: + esbuild: ^0.18.10 + fsevents: ~2.3.2 + postcss: ^8.4.27 + rollup: ^3.27.1 + peerDependencies: + "@types/node": ">= 14" + less: "*" + lightningcss: ^1.21.0 + sass: "*" + stylus: "*" + sugarss: "*" + terser: ^5.4.0 + dependenciesMeta: + fsevents: + optional: true + peerDependenciesMeta: + "@types/node": + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + bin: + vite: bin/vite.js + checksum: fd3f512ce48ca2a1fe60ad0376283b832de9272725fdbc65064ae9248f792de87b0f27a89573115e23e26784800daca329f8a9234d298ba6f60e808a9c63883c + languageName: node + linkType: hard + +"vscode-oniguruma@npm:^1.7.0": + version: 1.7.0 + resolution: "vscode-oniguruma@npm:1.7.0" + checksum: 53519d91d90593e6fb080260892e87d447e9b200c4964d766772b5053f5699066539d92100f77f1302c91e8fc5d9c772fbe40fe4c90f3d411a96d5a9b1e63f42 + languageName: node + linkType: hard + +"vscode-textmate@npm:^8.0.0": + version: 8.0.0 + resolution: "vscode-textmate@npm:8.0.0" + checksum: 127780dfea89559d70b8326df6ec344cfd701312dd7f3f591a718693812b7852c30b6715e3cfc8b3200a4e2515b4c96f0843c0eacc0a3020969b5de262c2a4bb + languageName: node + linkType: hard + +"walkdir@npm:^0.4.1": + version: 0.4.1 + resolution: "walkdir@npm:0.4.1" + checksum: 71045c21dc19aae3321f897b6e9e507cf8039202665c35a0b908eecccaf25636aab769b31cbd61ef8267237fe22fc316923a691ecc2d9d38840a15c59c0f2594 + languageName: node + linkType: hard + +"walker@npm:^1.0.8": + version: 1.0.8 + resolution: "walker@npm:1.0.8" + dependencies: + makeerror: 1.0.12 + checksum: ad7a257ea1e662e57ef2e018f97b3c02a7240ad5093c392186ce0bcf1f1a60bbadd520d073b9beb921ed99f64f065efb63dfc8eec689a80e569f93c1c5d5e16c + languageName: node + linkType: hard + +"watchpack@npm:^2.4.1": + version: 2.4.1 + resolution: "watchpack@npm:2.4.1" + dependencies: + glob-to-regexp: ^0.4.1 + graceful-fs: ^4.1.2 + checksum: 5b0179348655dcdf19cac7cb4ff923fdc024d630650c0bf6bec8899cf47c60e19d4f810a88dba692ed0e7f684cf0fcffea86efdbf6c35d81f031e328043b7fab + languageName: node + linkType: hard + +"wcwidth@npm:^1.0.1": + version: 1.0.1 + resolution: "wcwidth@npm:1.0.1" + dependencies: + defaults: ^1.0.3 + checksum: 814e9d1ddcc9798f7377ffa448a5a3892232b9275ebb30a41b529607691c0491de47cba426e917a4d08ded3ee7e9ba2f3fe32e62ee3cd9c7d3bafb7754bd553c + languageName: node + linkType: hard + +"weak-lru-cache@npm:^1.2.2": + version: 1.2.2 + resolution: "weak-lru-cache@npm:1.2.2" + checksum: 0fbe16839d193ed82ddb4fe331ca8cfaee2ecbd42596aa02366c708956cf41f7258f2d5411c3bc9aa099c26058dc47afbd2593d449718a18e4ef4d870c5ace18 + languageName: node + linkType: hard + +"web-streams-polyfill@npm:^3.0.3": + version: 3.3.3 + resolution: "web-streams-polyfill@npm:3.3.3" + checksum: 21ab5ea08a730a2ef8023736afe16713b4f2023ec1c7085c16c8e293ee17ed085dff63a0ad8722da30c99c4ccbd4ccd1b2e79c861829f7ef2963d7de7004c2cb + languageName: node + linkType: hard + +"webpack-cli@npm:^5.1.4": + version: 5.1.4 + resolution: "webpack-cli@npm:5.1.4" + dependencies: + "@discoveryjs/json-ext": ^0.5.0 + "@webpack-cli/configtest": ^2.1.1 + "@webpack-cli/info": ^2.0.2 + "@webpack-cli/serve": ^2.0.5 + colorette: ^2.0.14 + commander: ^10.0.1 + cross-spawn: ^7.0.3 + envinfo: ^7.7.3 + fastest-levenshtein: ^1.0.12 + import-local: ^3.0.2 + interpret: ^3.1.1 + rechoir: ^0.8.0 + webpack-merge: ^5.7.3 + peerDependencies: + webpack: 5.x.x + peerDependenciesMeta: + "@webpack-cli/generators": + optional: true + webpack-bundle-analyzer: + optional: true + webpack-dev-server: + optional: true + bin: + webpack-cli: bin/cli.js + checksum: 3a4ad0d0342a6815c850ee4633cc2a8a5dae04f918e7847f180bf24ab400803cf8a8943707ffbed03eb20fe6ce647f996f60a2aade87b0b4a9954da3da172ce0 + languageName: node + linkType: hard + +"webpack-merge@npm:^5.7.3": + version: 5.10.0 + resolution: "webpack-merge@npm:5.10.0" + dependencies: + clone-deep: ^4.0.1 + flat: ^5.0.2 + wildcard: ^2.0.0 + checksum: 1fe8bf5309add7298e1ac72fb3f2090e1dfa80c48c7e79fa48aa60b5961332c7d0d61efa8851acb805e6b91a4584537a347bc106e05e9aec87fa4f7088c62f2f + languageName: node + linkType: hard + +"webpack-sources@npm:^3.2.3": + version: 3.2.3 + resolution: "webpack-sources@npm:3.2.3" + checksum: 989e401b9fe3536529e2a99dac8c1bdc50e3a0a2c8669cbafad31271eadd994bc9405f88a3039cd2e29db5e6d9d0926ceb7a1a4e7409ece021fe79c37d9c4607 + languageName: node + linkType: hard + +"webpack@npm:^5.88.2": + version: 5.91.0 + resolution: "webpack@npm:5.91.0" + dependencies: + "@types/eslint-scope": ^3.7.3 + "@types/estree": ^1.0.5 + "@webassemblyjs/ast": ^1.12.1 + "@webassemblyjs/wasm-edit": ^1.12.1 + "@webassemblyjs/wasm-parser": ^1.12.1 + acorn: ^8.7.1 + acorn-import-assertions: ^1.9.0 + browserslist: ^4.21.10 + chrome-trace-event: ^1.0.2 + enhanced-resolve: ^5.16.0 + es-module-lexer: ^1.2.1 + eslint-scope: 5.1.1 + events: ^3.2.0 + glob-to-regexp: ^0.4.1 + graceful-fs: ^4.2.11 + json-parse-even-better-errors: ^2.3.1 + loader-runner: ^4.2.0 + mime-types: ^2.1.27 + neo-async: ^2.6.2 + schema-utils: ^3.2.0 + tapable: ^2.1.1 + terser-webpack-plugin: ^5.3.10 + watchpack: ^2.4.1 + webpack-sources: ^3.2.3 + peerDependenciesMeta: + webpack-cli: + optional: true + bin: + webpack: bin/webpack.js + checksum: f1073715dbb1ed5c070affef293d800a867708bcbc5aba4d8baee87660e0cf53c55966a6f36fab078d1d6c9567cdcd0a9086bdfb607cab87ea68c6449791b9a3 + languageName: node + linkType: hard + +"wherearewe@npm:^2.0.1": + version: 2.0.1 + resolution: "wherearewe@npm:2.0.1" + dependencies: + is-electron: ^2.2.0 + checksum: 811475dba3bc4ce32ba3275cb5615840c67ab6874b0d5a191ed317bd09bfedf76a677f0469520ea3304878e66e5251c7fd3bb87729621bc460c0adab508590a8 + languageName: node + linkType: hard + +"which-boxed-primitive@npm:^1.0.2": + version: 1.0.2 + resolution: "which-boxed-primitive@npm:1.0.2" + dependencies: + is-bigint: ^1.0.1 + is-boolean-object: ^1.1.0 + is-number-object: ^1.0.4 + is-string: ^1.0.5 + is-symbol: ^1.0.3 + checksum: 53ce774c7379071729533922adcca47220228405e1895f26673bbd71bdf7fb09bee38c1d6399395927c6289476b5ae0629863427fd151491b71c4b6cb04f3a5e + languageName: node + linkType: hard + +"which-typed-array@npm:^1.1.14, which-typed-array@npm:^1.1.15, which-typed-array@npm:^1.1.2": + version: 1.1.15 + resolution: "which-typed-array@npm:1.1.15" + dependencies: + available-typed-arrays: ^1.0.7 + call-bind: ^1.0.7 + for-each: ^0.3.3 + gopd: ^1.0.1 + has-tostringtag: ^1.0.2 + checksum: 65227dcbfadf5677aacc43ec84356d17b5500cb8b8753059bb4397de5cd0c2de681d24e1a7bd575633f976a95f88233abfd6549c2105ef4ebd58af8aa1807c75 + languageName: node + linkType: hard + +"which@npm:^2.0.1": + version: 2.0.2 + resolution: "which@npm:2.0.2" + dependencies: + isexe: ^2.0.0 + bin: + node-which: ./bin/node-which + checksum: 1a5c563d3c1b52d5f893c8b61afe11abc3bab4afac492e8da5bde69d550de701cf9806235f20a47b5c8fa8a1d6a9135841de2596535e998027a54589000e66d1 + languageName: node + linkType: hard + +"which@npm:^4.0.0": + version: 4.0.0 + resolution: "which@npm:4.0.0" + dependencies: + isexe: ^3.1.1 + bin: + node-which: bin/which.js + checksum: f17e84c042592c21e23c8195108cff18c64050b9efb8459589116999ea9da6dd1509e6a1bac3aeebefd137be00fabbb61b5c2bc0aa0f8526f32b58ee2f545651 + languageName: node + linkType: hard + +"wildcard@npm:^2.0.0": + version: 2.0.1 + resolution: "wildcard@npm:2.0.1" + checksum: e0c60a12a219e4b12065d1199802d81c27b841ed6ad6d9d28240980c73ceec6f856771d575af367cbec2982d9ae7838759168b551776577f155044f5a5ba843c + languageName: node + linkType: hard + +"winston-daily-rotate-file@npm:^4.7.1": + version: 4.7.1 + resolution: "winston-daily-rotate-file@npm:4.7.1" + dependencies: + file-stream-rotator: ^0.6.1 + object-hash: ^2.0.1 + triple-beam: ^1.3.0 + winston-transport: ^4.4.0 + peerDependencies: + winston: ^3 + checksum: 227daea41f722caa017fc7d6f1f80d0e6c428491e57693e6bebc8312b85bcf3aace53cb3a925bda72fab59a6898fa127411d29348ec4b295e2263a7544cda611 + languageName: node + linkType: hard + +"winston-transport@npm:^4.4.0, winston-transport@npm:^4.7.0": + version: 4.7.0 + resolution: "winston-transport@npm:4.7.0" + dependencies: + logform: ^2.3.2 + readable-stream: ^3.6.0 + triple-beam: ^1.3.0 + checksum: ce074b5c76a99bee5236cf2b4d30fadfaf1e551d566f654f1eba303dc5b5f77169c21545ff5c5e4fdad9f8e815fc6d91b989f1db34161ecca6e860e62fd3a862 + languageName: node + linkType: hard + +"winston@npm:^3.10.0": + version: 3.13.0 + resolution: "winston@npm:3.13.0" + dependencies: + "@colors/colors": ^1.6.0 + "@dabh/diagnostics": ^2.0.2 + async: ^3.2.3 + is-stream: ^2.0.0 + logform: ^2.4.0 + one-time: ^1.0.0 + readable-stream: ^3.4.0 + safe-stable-stringify: ^2.3.1 + stack-trace: 0.0.x + triple-beam: ^1.3.0 + winston-transport: ^4.7.0 + checksum: 66f9fbbadb58e1632701e9c89391f217310c9455462148e163e060dcd25aed21351b0413bdbbf90e5c5fe9bc945fc5de6f53875ac7c7ef3061133a354fc678c0 + languageName: node + linkType: hard + +"word-wrap@npm:^1.2.5": + version: 1.2.5 + resolution: "word-wrap@npm:1.2.5" + checksum: f93ba3586fc181f94afdaff3a6fef27920b4b6d9eaefed0f428f8e07adea2a7f54a5f2830ce59406c8416f033f86902b91eb824072354645eea687dff3691ccb + languageName: node + linkType: hard + +"wordwrapjs@npm:^4.0.0": + version: 4.0.1 + resolution: "wordwrapjs@npm:4.0.1" + dependencies: + reduce-flatten: ^2.0.0 + typical: ^5.2.0 + checksum: 3d927f3c95d0ad990968da54c0ad8cde2801d8e91006cd7474c26e6b742cc8557250ce495c9732b2f9db1f903601cb74ec282e0f122ee0d02d7abe81e150eea8 + languageName: node + linkType: hard + +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0, wrap-ansi@npm:^7.0.0": + version: 7.0.0 + resolution: "wrap-ansi@npm:7.0.0" + dependencies: + ansi-styles: ^4.0.0 + string-width: ^4.1.0 + strip-ansi: ^6.0.0 + checksum: a790b846fd4505de962ba728a21aaeda189b8ee1c7568ca5e817d85930e06ef8d1689d49dbf0e881e8ef84436af3a88bc49115c2e2788d841ff1b8b5b51a608b + languageName: node + linkType: hard + +"wrap-ansi@npm:^8.1.0": + version: 8.1.0 + resolution: "wrap-ansi@npm:8.1.0" + dependencies: + ansi-styles: ^6.1.0 + string-width: ^5.0.1 + strip-ansi: ^7.0.1 + checksum: 371733296dc2d616900ce15a0049dca0ef67597d6394c57347ba334393599e800bab03c41d4d45221b6bc967b8c453ec3ae4749eff3894202d16800fdfe0e238 + languageName: node + linkType: hard + +"wrappy@npm:1": + version: 1.0.2 + resolution: "wrappy@npm:1.0.2" + checksum: 159da4805f7e84a3d003d8841557196034155008f817172d4e986bd591f74aa82aa7db55929a54222309e01079a65a92a9e6414da5a6aa4b01ee44a511ac3ee5 + languageName: node + linkType: hard + +"write-file-atomic@npm:^4.0.2": + version: 4.0.2 + resolution: "write-file-atomic@npm:4.0.2" + dependencies: + imurmurhash: ^0.1.4 + signal-exit: ^3.0.7 + checksum: 5da60bd4eeeb935eec97ead3df6e28e5917a6bd317478e4a85a5285e8480b8ed96032bbcc6ecd07b236142a24f3ca871c924ec4a6575e623ec1b11bf8c1c253c + languageName: node + linkType: hard + +"ws@npm:8.13.0": + version: 8.13.0 + resolution: "ws@npm:8.13.0" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ">=5.0.2" + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: 53e991bbf928faf5dc6efac9b8eb9ab6497c69feeb94f963d648b7a3530a720b19ec2e0ec037344257e05a4f35bd9ad04d9de6f289615ffb133282031b18c61c + languageName: node + linkType: hard + +"ws@npm:8.17.0, ws@npm:^8.13.0": + version: 8.17.0 + resolution: "ws@npm:8.17.0" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ">=5.0.2" + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: 147ef9eab0251364e1d2c55338ad0efb15e6913923ccbfdf20f7a8a6cb8f88432bcd7f4d8f66977135bfad35575644f9983201c1a361019594a4e53977bf6d4e + languageName: node + linkType: hard + +"y18n@npm:^5.0.5": + version: 5.0.8 + resolution: "y18n@npm:5.0.8" + checksum: 54f0fb95621ee60898a38c572c515659e51cc9d9f787fb109cef6fde4befbe1c4602dc999d30110feee37456ad0f1660fa2edcfde6a9a740f86a290999550d30 + languageName: node + linkType: hard + +"yallist@npm:^3.0.2": + version: 3.1.1 + resolution: "yallist@npm:3.1.1" + checksum: 48f7bb00dc19fc635a13a39fe547f527b10c9290e7b3e836b9a8f1ca04d4d342e85714416b3c2ab74949c9c66f9cebb0473e6bc353b79035356103b47641285d + languageName: node + linkType: hard + +"yallist@npm:^4.0.0": + version: 4.0.0 + resolution: "yallist@npm:4.0.0" + checksum: 343617202af32df2a15a3be36a5a8c0c8545208f3d3dfbc6bb7c3e3b7e8c6f8e7485432e4f3b88da3031a6e20afa7c711eded32ddfb122896ac5d914e75848d5 + languageName: node + linkType: hard + +"yaml@npm:^2.1.3": + version: 2.4.2 + resolution: "yaml@npm:2.4.2" + bin: + yaml: bin.mjs + checksum: 90dda4485de04367251face9abb5c36927c94e44078f4e958e6468a07e74e7e92f89be20fc49860b6268c51ee5a5fc79ef89197d3f874bf24ef8921cc4ba9013 + languageName: node + linkType: hard + +"yargs-parser@npm:^18.1.3": + version: 18.1.3 + resolution: "yargs-parser@npm:18.1.3" + dependencies: + camelcase: ^5.0.0 + decamelize: ^1.2.0 + checksum: 60e8c7d1b85814594d3719300ecad4e6ae3796748b0926137bfec1f3042581b8646d67e83c6fc80a692ef08b8390f21ddcacb9464476c39bbdf52e34961dd4d9 + languageName: node + linkType: hard + +"yargs-parser@npm:^21.0.1, yargs-parser@npm:^21.1.1": + version: 21.1.1 + resolution: "yargs-parser@npm:21.1.1" + checksum: ed2d96a616a9e3e1cc7d204c62ecc61f7aaab633dcbfab2c6df50f7f87b393993fe6640d017759fe112d0cb1e0119f2b4150a87305cc873fd90831c6a58ccf1c + languageName: node + linkType: hard + +"yargs@npm:17.7.2, yargs@npm:^17.3.1, yargs@npm:^17.7.2": + version: 17.7.2 + resolution: "yargs@npm:17.7.2" + dependencies: + cliui: ^8.0.1 + escalade: ^3.1.1 + get-caller-file: ^2.0.5 + require-directory: ^2.1.1 + string-width: ^4.2.3 + y18n: ^5.0.5 + yargs-parser: ^21.1.1 + checksum: 73b572e863aa4a8cbef323dd911d79d193b772defd5a51aab0aca2d446655216f5002c42c5306033968193bdbf892a7a4c110b0d77954a7fdf563e653967b56a + languageName: node + linkType: hard + +"yauzl@npm:^2.10.0": + version: 2.10.0 + resolution: "yauzl@npm:2.10.0" + dependencies: + buffer-crc32: ~0.2.3 + fd-slicer: ~1.1.0 + checksum: 7f21fe0bbad6e2cb130044a5d1d0d5a0e5bf3d8d4f8c4e6ee12163ce798fee3de7388d22a7a0907f563ac5f9d40f8699a223d3d5c1718da90b0156da6904022b + languageName: node + linkType: hard + +"ylru@npm:^1.2.0": + version: 1.4.0 + resolution: "ylru@npm:1.4.0" + checksum: e0bf797476487e3d57a6e8790cbb749cff2089e2afc87e46bc84ce7605c329d578ff422c8e8c2ddf167681ddd218af0f58e099733ae1044cba9e9472ebedc01d + languageName: node + linkType: hard + +"yn@npm:3.1.1": + version: 3.1.1 + resolution: "yn@npm:3.1.1" + checksum: 2c487b0e149e746ef48cda9f8bad10fc83693cd69d7f9dcd8be4214e985de33a29c9e24f3c0d6bcf2288427040a8947406ab27f7af67ee9456e6b84854f02dd6 + languageName: node + linkType: hard + +"yocto-queue@npm:^0.1.0": + version: 0.1.0 + resolution: "yocto-queue@npm:0.1.0" + checksum: f77b3d8d00310def622123df93d4ee654fc6a0096182af8bd60679ddcdfb3474c56c6c7190817c84a2785648cdee9d721c0154eb45698c62176c322fb46fc700 + languageName: node + linkType: hard + +"zod@npm:3.22.4": + version: 3.22.4 + resolution: "zod@npm:3.22.4" + checksum: 80bfd7f8039b24fddeb0718a2ec7c02aa9856e4838d6aa4864335a047b6b37a3273b191ef335bf0b2002e5c514ef261ffcda5a589fb084a48c336ffc4cdbab7f + languageName: node + linkType: hard + +"zod@npm:^3.22.4": + version: 3.23.8 + resolution: "zod@npm:3.23.8" + checksum: 15949ff82118f59c893dacd9d3c766d02b6fa2e71cf474d5aa888570c469dbf5446ac5ad562bb035bf7ac9650da94f290655c194f4a6de3e766f43febd432c5c + languageName: node + linkType: hard \ No newline at end of file From dffe8cde00c2cc581a15b556434fcb0699965e90 Mon Sep 17 00:00:00 2001 From: TomAFrench Date: Mon, 3 Jun 2024 14:46:53 +0000 Subject: [PATCH 60/98] chore: update yarn.lock --- yarn-project/yarn.lock | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/yarn-project/yarn.lock b/yarn-project/yarn.lock index 2974bb2c8db..d4fed82cecf 100644 --- a/yarn-project/yarn.lock +++ b/yarn-project/yarn.lock @@ -661,7 +661,7 @@ __metadata: "@jest/globals": ^29.5.0 "@noir-lang/acvm_js": "portal:../../noir/packages/acvm_js" "@noir-lang/noir_codegen": "portal:../../noir/packages/noir_codegen" - "@noir-lang/noir_js": "file:../../noir/packages/noir_js" + "@noir-lang/noir_js": "portal:../../noir/packages/noir_js" "@noir-lang/noirc_abi": "portal:../../noir/packages/noirc_abi" "@noir-lang/types": "portal:../../noir/packages/types" "@types/jest": ^29.5.0 @@ -2949,16 +2949,15 @@ __metadata: languageName: node linkType: soft -"@noir-lang/noir_js@file:../noir/packages/noir_js::locator=%40aztec%2Faztec3-packages%40workspace%3A.": - version: 0.30.0 - resolution: "@noir-lang/noir_js@file:../noir/packages/noir_js#../noir/packages/noir_js::hash=50aa1b&locator=%40aztec%2Faztec3-packages%40workspace%3A." +"@noir-lang/noir_js@portal:../noir/packages/noir_js::locator=%40aztec%2Faztec3-packages%40workspace%3A.": + version: 0.0.0-use.local + resolution: "@noir-lang/noir_js@portal:../noir/packages/noir_js::locator=%40aztec%2Faztec3-packages%40workspace%3A." dependencies: "@noir-lang/acvm_js": 0.46.0 "@noir-lang/noirc_abi": 0.30.0 "@noir-lang/types": 0.30.0 - checksum: fc5f0f3d0aeb38275053ba98306866b9c532989b8e2abc751d9b5113b9c6914f159c186bfcee6173a89511385baeb952c88e55b8bfa9f9b8979643e927db25f6 languageName: node - linkType: hard + linkType: soft "@noir-lang/noirc_abi@portal:../noir/packages/noirc_abi::locator=%40aztec%2Faztec3-packages%40workspace%3A.": version: 0.0.0-use.local @@ -14499,4 +14498,4 @@ __metadata: resolution: "zod@npm:3.23.8" checksum: 15949ff82118f59c893dacd9d3c766d02b6fa2e71cf474d5aa888570c469dbf5446ac5ad562bb035bf7ac9650da94f290655c194f4a6de3e766f43febd432c5c languageName: node - linkType: hard \ No newline at end of file + linkType: hard From c15652232b0f70f91178f0721545c1d905a242f9 Mon Sep 17 00:00:00 2001 From: guipublic Date: Mon, 3 Jun 2024 15:46:12 +0000 Subject: [PATCH 61/98] fix merge issues #2 --- .../src/barretenberg/dsl/acir_format/block_constraint.test.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/block_constraint.test.cpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/block_constraint.test.cpp index 2310bd14cdd..57a77d6dbbf 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/block_constraint.test.cpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/block_constraint.test.cpp @@ -193,7 +193,6 @@ TEST_F(MegaHonk, Databus) .logic_constraints = {}, .range_constraints = {}, .aes128_constraints = {}, - .sha256_constraints = {}, .sha256_compression = {}, .schnorr_constraints = {}, .ecdsa_k1_constraints = {}, @@ -297,7 +296,6 @@ TEST_F(MegaHonk, DatabusReturn) .logic_constraints = {}, .range_constraints = {}, .aes128_constraints = {}, - .sha256_constraints = {}, .sha256_compression = {}, .schnorr_constraints = {}, .ecdsa_k1_constraints = {}, From 81cf85c3972cb22f08ea349dd74103dd6e174b1c Mon Sep 17 00:00:00 2001 From: guipublic Date: Mon, 3 Jun 2024 15:56:39 +0000 Subject: [PATCH 62/98] fix merge issue #3 --- .../acvm-repo/brillig_vm/src/black_box.rs | 33 +------------------ 1 file changed, 1 insertion(+), 32 deletions(-) diff --git a/noir/noir-repo/acvm-repo/brillig_vm/src/black_box.rs b/noir/noir-repo/acvm-repo/brillig_vm/src/black_box.rs index a4d983c8a46..acfbac3fc2f 100644 --- a/noir/noir-repo/acvm-repo/brillig_vm/src/black_box.rs +++ b/noir/noir-repo/acvm-repo/brillig_vm/src/black_box.rs @@ -414,35 +414,4 @@ mod test { HeapArray, HeapVector, Memory, }; - #[test] - fn sha256() { - let message: Vec = b"hello world".to_vec(); - let message_length = message.len(); - - let mut memory: Memory = Memory::default(); - let message_pointer = 3; - let result_pointer = message_pointer + message_length; - memory.write(MemoryAddress(0), message_pointer.into()); - memory.write(MemoryAddress(1), message_length.into()); - memory.write(MemoryAddress(2), result_pointer.into()); - memory.write_slice(MemoryAddress(message_pointer), to_value_vec(&message).as_slice()); - - let op = BlackBoxOp::Sha256 { - message: HeapVector { pointer: 0.into(), size: 1.into() }, - output: HeapArray { pointer: 2.into(), size: 32 }, - }; - - evaluate_black_box(&op, &StubbedBlackBoxSolver, &mut memory, &mut BigIntSolver::default()) - .unwrap(); - - let result = memory.read_slice(MemoryAddress(result_pointer), 32); - - assert_eq!( - to_u8_vec(result), - vec![ - 185, 77, 39, 185, 147, 77, 62, 8, 165, 46, 82, 215, 218, 125, 171, 250, 196, 132, - 239, 227, 122, 83, 128, 238, 144, 136, 247, 172, 226, 239, 205, 233 - ] - ); - } -} + } From a0e2d4d5f6731fc56ea029b5f7298fcedcb8f342 Mon Sep 17 00:00:00 2001 From: guipublic Date: Mon, 3 Jun 2024 16:07:14 +0000 Subject: [PATCH 63/98] format --- noir/noir-repo/acvm-repo/brillig_vm/src/black_box.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/noir/noir-repo/acvm-repo/brillig_vm/src/black_box.rs b/noir/noir-repo/acvm-repo/brillig_vm/src/black_box.rs index acfbac3fc2f..a4acbba16c9 100644 --- a/noir/noir-repo/acvm-repo/brillig_vm/src/black_box.rs +++ b/noir/noir-repo/acvm-repo/brillig_vm/src/black_box.rs @@ -413,5 +413,4 @@ mod test { black_box::{evaluate_black_box, to_u8_vec, to_value_vec}, HeapArray, HeapVector, Memory, }; - - } +} From 94b48d88e7a50a827903bf24fc9d1f48688fb546 Mon Sep 17 00:00:00 2001 From: Tom French Date: Mon, 8 Jul 2024 19:05:48 +0100 Subject: [PATCH 64/98] chore: clippy --- .../acvm-repo/acir/tests/test_program_serialization.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/noir/noir-repo/acvm-repo/acir/tests/test_program_serialization.rs b/noir/noir-repo/acvm-repo/acir/tests/test_program_serialization.rs index af49c4b2032..0dd5054e956 100644 --- a/noir/noir-repo/acvm-repo/acir/tests/test_program_serialization.rs +++ b/noir/noir-repo/acvm-repo/acir/tests/test_program_serialization.rs @@ -14,7 +14,7 @@ use std::collections::BTreeSet; use acir::{ circuit::{ brillig::{BrilligBytecode, BrilligInputs, BrilligOutputs}, - opcodes::{BlackBoxFuncCall, BlockId, ConstantOrWitnessEnum, FunctionInput, MemOp}, + opcodes::{BlackBoxFuncCall, BlockId, FunctionInput, MemOp}, Circuit, Opcode, Program, PublicInputs, }, native_types::{Expression, Witness}, From aeb06bf99c1fb2afd9f0753cd99c9213b4f5a361 Mon Sep 17 00:00:00 2001 From: Tom French <15848336+TomAFrench@users.noreply.github.com> Date: Mon, 8 Jul 2024 19:08:30 +0100 Subject: [PATCH 65/98] Update noir/noir-repo/noir_stdlib/src/hash/mod.nr --- noir/noir-repo/noir_stdlib/src/hash/mod.nr | 1 - 1 file changed, 1 deletion(-) diff --git a/noir/noir-repo/noir_stdlib/src/hash/mod.nr b/noir/noir-repo/noir_stdlib/src/hash/mod.nr index aab0502311c..3b65c43fa01 100644 --- a/noir/noir-repo/noir_stdlib/src/hash/mod.nr +++ b/noir/noir-repo/noir_stdlib/src/hash/mod.nr @@ -7,7 +7,6 @@ use crate::uint128::U128; use crate::sha256::{digest, sha256_var}; use crate::embedded_curve_ops::{EmbeddedCurvePoint, EmbeddedCurveScalar, multi_scalar_mul}; -#[no_predicates] // docs:start:sha256 pub fn sha256(input: [u8; N]) -> [u8; 32] // docs:end:sha256 From 80dae9b03a794264851c482951ea90cecce67609 Mon Sep 17 00:00:00 2001 From: Tom French Date: Mon, 8 Jul 2024 19:14:43 +0100 Subject: [PATCH 66/98] . --- .../cpp/src/barretenberg/dsl/acir_format/acir_format.test.cpp | 1 - .../barretenberg/dsl/acir_format/recursion_constraint.test.cpp | 1 - 2 files changed, 2 deletions(-) diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.test.cpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.test.cpp index 5906ff89c02..b4f93d76ba4 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.test.cpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.test.cpp @@ -157,7 +157,6 @@ TEST_F(AcirFormatTests, TestLogicGateFromNoirCircuit) // EXPR [ (1, _4, _6) (-1, _4) 0 ] // EXPR [ (-1, _6) 1 ] - AcirFormat constraint_system{ .varnum = 6, .recursive = false, diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/recursion_constraint.test.cpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/recursion_constraint.test.cpp index 750c8d9b6ee..cfadf96a8e5 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/recursion_constraint.test.cpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/recursion_constraint.test.cpp @@ -118,7 +118,6 @@ Builder create_inner_circuit() }; mock_opcode_indices(constraint_system); - uint256_t inverse_of_five = fr(5).invert(); WitnessVector witness{ 5, 10, 15, 5, inverse_of_five, 1, From 84764b18f0aa5d698519839e71f200481a2d1380 Mon Sep 17 00:00:00 2001 From: Tom French Date: Mon, 8 Jul 2024 19:18:11 +0100 Subject: [PATCH 67/98] . --- noir/noir-repo/acvm-repo/blackbox_solver/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/noir/noir-repo/acvm-repo/blackbox_solver/src/lib.rs b/noir/noir-repo/acvm-repo/blackbox_solver/src/lib.rs index 697f6e01632..87ca539f435 100644 --- a/noir/noir-repo/acvm-repo/blackbox_solver/src/lib.rs +++ b/noir/noir-repo/acvm-repo/blackbox_solver/src/lib.rs @@ -21,7 +21,7 @@ pub use aes128::aes128_encrypt; pub use bigint::BigIntSolver; pub use curve_specific_solver::{BlackBoxFunctionSolver, StubbedBlackBoxSolver}; pub use ecdsa::{ecdsa_secp256k1_verify, ecdsa_secp256r1_verify}; -pub use hash::{blake2s, blake3, keccak256, keccakf1600, sha256compression}; +pub use hash::{blake2s, blake3, keccak256, keccakf1600, sha256_compression}; pub use logic::{bit_and, bit_xor}; #[derive(Clone, PartialEq, Eq, Debug, Error)] From 2f382c7ae9bea82843d239b5f2f453174febe47a Mon Sep 17 00:00:00 2001 From: Tom French Date: Mon, 8 Jul 2024 19:18:54 +0100 Subject: [PATCH 68/98] . --- noir/noir-repo/tooling/profiler/src/opcode_formatter.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/noir/noir-repo/tooling/profiler/src/opcode_formatter.rs b/noir/noir-repo/tooling/profiler/src/opcode_formatter.rs index a33de42a0ff..d2f7258377c 100644 --- a/noir/noir-repo/tooling/profiler/src/opcode_formatter.rs +++ b/noir/noir-repo/tooling/profiler/src/opcode_formatter.rs @@ -6,7 +6,6 @@ fn format_blackbox_function(call: &BlackBoxFuncCall) -> String { BlackBoxFuncCall::AND { .. } => "and".to_string(), BlackBoxFuncCall::XOR { .. } => "xor".to_string(), BlackBoxFuncCall::RANGE { .. } => "range".to_string(), - BlackBoxFuncCall::SHA256 { .. } => "sha256".to_string(), BlackBoxFuncCall::Blake2s { .. } => "blake2s".to_string(), BlackBoxFuncCall::Blake3 { .. } => "blake3".to_string(), BlackBoxFuncCall::SchnorrVerify { .. } => "schnorr_verify".to_string(), From f0e04f740f7ce0667902f073710f2e56466af383 Mon Sep 17 00:00:00 2001 From: Tom French Date: Mon, 8 Jul 2024 19:22:54 +0100 Subject: [PATCH 69/98] . --- .../cpp/src/barretenberg/dsl/acir_format/acir_format.hpp | 1 - .../src/barretenberg/dsl/acir_format/acir_format.test.cpp | 3 +-- .../src/barretenberg/dsl/acir_format/acir_format_mocks.cpp | 6 +----- 3 files changed, 2 insertions(+), 8 deletions(-) diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.hpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.hpp index b7255e0b7b0..441388eb333 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.hpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.hpp @@ -34,7 +34,6 @@ struct AcirFormatOriginalOpcodeIndices { std::vector logic_constraints; std::vector range_constraints; std::vector aes128_constraints; - std::vector sha256_constraints; std::vector sha256_compression; std::vector schnorr_constraints; std::vector ecdsa_k1_constraints; diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.test.cpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.test.cpp index b4f93d76ba4..8c21395233f 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.test.cpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.test.cpp @@ -592,7 +592,6 @@ TEST_F(AcirFormatTests, TestCollectsGateCounts) .logic_constraints = {}, .range_constraints = {}, .aes128_constraints = {}, - .sha256_constraints = {}, .sha256_compression = {}, .schnorr_constraints = {}, .ecdsa_k1_constraints = {}, @@ -622,4 +621,4 @@ TEST_F(AcirFormatTests, TestCollectsGateCounts) create_circuit(constraint_system, /*size_hint*/ 0, witness, false, std::make_shared(), true); EXPECT_EQ(constraint_system.gates_per_opcode, std::vector({ 2, 1 })); -} \ No newline at end of file +} diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format_mocks.cpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format_mocks.cpp index f53ff85d6e7..4793bb7954a 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format_mocks.cpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format_mocks.cpp @@ -6,7 +6,6 @@ acir_format::AcirFormatOriginalOpcodeIndices create_empty_original_opcode_indice .logic_constraints = {}, .range_constraints = {}, .aes128_constraints = {}, - .sha256_constraints = {}, .sha256_compression = {}, .schnorr_constraints = {}, .ecdsa_k1_constraints = {}, @@ -43,9 +42,6 @@ void mock_opcode_indices(acir_format::AcirFormat& constraint_system) for (size_t i = 0; i < constraint_system.aes128_constraints.size(); i++) { constraint_system.original_opcode_indices.aes128_constraints.push_back(current_opcode++); } - for (size_t i = 0; i < constraint_system.sha256_constraints.size(); i++) { - constraint_system.original_opcode_indices.sha256_constraints.push_back(current_opcode++); - } for (size_t i = 0; i < constraint_system.sha256_compression.size(); i++) { constraint_system.original_opcode_indices.sha256_compression.push_back(current_opcode++); } @@ -115,4 +111,4 @@ void mock_opcode_indices(acir_format::AcirFormat& constraint_system) } constraint_system.num_acir_opcodes = static_cast(current_opcode); -} \ No newline at end of file +} From f2aa38f4022ccbb739dbf2e3f4bc7256b128d00f Mon Sep 17 00:00:00 2001 From: TomAFrench Date: Mon, 8 Jul 2024 18:59:53 +0000 Subject: [PATCH 70/98] . --- yarn-project/yarn.lock | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/yarn-project/yarn.lock b/yarn-project/yarn.lock index 97ba616f1a5..8427fa20d99 100644 --- a/yarn-project/yarn.lock +++ b/yarn-project/yarn.lock @@ -3010,14 +3010,13 @@ __metadata: languageName: node linkType: soft -"@noir-lang/noir_js@file:../noir/packages/noir_js::locator=%40aztec%2Faztec3-packages%40workspace%3A.": - version: 0.31.0 - resolution: "@noir-lang/noir_js@file:../noir/packages/noir_js#../noir/packages/noir_js::hash=1adb3c&locator=%40aztec%2Faztec3-packages%40workspace%3A." +"@noir-lang/noir_js@portal:../noir/packages/noir_js::locator=%40aztec%2Faztec3-packages%40workspace%3A.": + version: 0.0.0-use.local + resolution: "@noir-lang/noir_js@portal:../noir/packages/noir_js::locator=%40aztec%2Faztec3-packages%40workspace%3A." dependencies: "@noir-lang/acvm_js": 0.47.0 "@noir-lang/noirc_abi": 0.31.0 "@noir-lang/types": 0.31.0 - checksum: 98132370d4f4e1ac1b5f6c5b461f451d9df79d051fcc6136572030e3cb7b4472f9f9c2b93e899ddf753901108d1ec45ed4f6fee435058297cd90d5ff985b5b6d languageName: node linkType: soft From 6ffa821259c79c66c07262fc28c9f5170c4acc18 Mon Sep 17 00:00:00 2001 From: TomAFrench Date: Mon, 8 Jul 2024 19:05:53 +0000 Subject: [PATCH 71/98] . --- .../acvm_js/test/shared/schnorr_verify.ts | 26 ++++++++++--------- 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/noir/noir-repo/acvm-repo/acvm_js/test/shared/schnorr_verify.ts b/noir/noir-repo/acvm-repo/acvm_js/test/shared/schnorr_verify.ts index a207aa12b2c..830ca1026d6 100644 --- a/noir/noir-repo/acvm-repo/acvm_js/test/shared/schnorr_verify.ts +++ b/noir/noir-repo/acvm-repo/acvm_js/test/shared/schnorr_verify.ts @@ -1,17 +1,19 @@ // See `schnorr_verify_circuit` integration test in `acir/tests/test_program_serialization.rs`. export const bytecode = Uint8Array.from([ - 31, 139, 8, 0, 0, 0, 0, 0, 0, 255, 85, 210, 85, 78, 67, 81, 24, 133, 209, 226, 238, 238, 238, 238, 238, 165, 148, 82, - 102, 193, 252, 135, 64, 232, 78, 87, 147, 114, 147, 147, 5, 47, 132, 252, 251, 107, 41, 212, 191, 159, 218, 107, 241, - 115, 236, 228, 111, 237, 181, 178, 173, 246, 186, 107, 175, 157, 29, 236, 100, 23, 27, 175, 135, 189, 236, 99, 63, 7, - 56, 200, 33, 14, 115, 132, 163, 28, 227, 56, 39, 56, 201, 41, 78, 115, 134, 179, 156, 227, 60, 23, 184, 200, 37, 46, - 115, 133, 171, 92, 227, 58, 55, 184, 201, 45, 110, 115, 135, 187, 220, 227, 62, 15, 120, 200, 35, 30, 243, 132, 167, - 60, 227, 57, 47, 120, 201, 43, 94, 243, 134, 183, 188, 227, 61, 31, 248, 200, 39, 62, 243, 133, 175, 77, 59, 230, 123, - 243, 123, 145, 239, 44, 241, 131, 101, 126, 178, 194, 47, 86, 249, 237, 239, 86, 153, 238, 210, 92, 122, 75, 107, 233, - 44, 141, 53, 250, 234, 241, 191, 164, 167, 180, 148, 142, 210, 80, 250, 73, 59, 233, 38, 205, 164, 151, 180, 146, 78, - 210, 72, 250, 72, 27, 233, 34, 77, 164, 135, 180, 144, 14, 210, 64, 246, 95, 46, 212, 119, 207, 230, 217, 59, 91, 103, - 231, 108, 156, 125, 183, 237, 186, 107, 207, 125, 59, 30, 218, 239, 216, 110, 167, 246, 58, 183, 211, 165, 125, 174, - 237, 114, 107, 143, 123, 59, 60, 186, 255, 179, 187, 191, 186, 115, 209, 125, 75, 238, 90, 118, 207, 138, 59, 54, 110, - 214, 184, 91, 161, 233, 158, 255, 190, 63, 165, 188, 93, 151, 233, 3, 0, 0, + 31, 139, 8, 0, 0, 0, 0, 0, 0, 255, 85, 211, 103, 78, 2, 81, 24, 70, 225, 193, 130, 96, 239, 189, 96, 239, 189, 35, 34, + 34, 34, 34, 238, 130, 253, 47, 129, 192, 9, 223, 36, 7, 146, 201, 60, 209, 31, 144, 123, 207, 155, 73, 250, 159, 118, + 239, 201, 132, 121, 103, 227, 205, 211, 137, 247, 144, 60, 220, 123, 114, 225, 17, 121, 84, 206, 202, 99, 114, 78, + 206, 203, 227, 242, 132, 60, 41, 79, 201, 211, 242, 140, 60, 43, 207, 201, 243, 242, 130, 188, 40, 47, 201, 203, 242, + 138, 188, 42, 175, 201, 235, 242, 134, 188, 41, 111, 201, 219, 242, 142, 92, 144, 119, 229, 61, 121, 95, 62, 144, 15, + 229, 35, 249, 88, 62, 145, 79, 229, 51, 249, 92, 190, 144, 47, 229, 43, 249, 90, 190, 145, 111, 229, 59, 249, 94, 126, + 144, 31, 229, 39, 249, 89, 126, 145, 95, 229, 162, 252, 38, 151, 228, 119, 185, 44, 127, 200, 21, 249, 83, 174, 134, + 233, 52, 137, 191, 125, 233, 255, 53, 249, 91, 174, 203, 63, 114, 67, 254, 149, 155, 242, 159, 220, 10, 255, 199, 247, + 183, 244, 59, 216, 38, 155, 100, 139, 108, 144, 237, 165, 155, 203, 199, 111, 102, 83, 108, 137, 13, 177, 29, 54, 195, + 86, 216, 8, 219, 96, 19, 108, 129, 13, 208, 62, 205, 211, 58, 141, 211, 54, 77, 211, 50, 13, 211, 46, 205, 22, 146, + 126, 163, 180, 73, 147, 180, 72, 131, 180, 71, 115, 180, 70, 99, 180, 69, 83, 180, 68, 67, 180, 67, 51, 180, 66, 35, + 180, 65, 19, 180, 64, 3, 220, 61, 119, 206, 93, 115, 199, 197, 184, 211, 82, 220, 97, 57, 238, 172, 18, 119, 84, 141, + 187, 168, 197, 217, 215, 227, 172, 27, 113, 182, 205, 56, 203, 244, 204, 210, 115, 75, 116, 158, 3, 159, 46, 43, 32, + 188, 53, 25, 5, 0, 0, ]); export const initialWitnessMap = new Map([ From ca8cb87ee6299ddf6de6d7368f216a00d8d90b95 Mon Sep 17 00:00:00 2001 From: TomAFrench Date: Mon, 8 Jul 2024 19:11:45 +0000 Subject: [PATCH 72/98] . --- noir/noir-repo/acvm-repo/acir/src/circuit/mod.rs | 2 +- .../acir/src/circuit/opcodes/black_box_function_call.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/noir/noir-repo/acvm-repo/acir/src/circuit/mod.rs b/noir/noir-repo/acvm-repo/acir/src/circuit/mod.rs index 115ecbf7992..5d749e709b3 100644 --- a/noir/noir-repo/acvm-repo/acir/src/circuit/mod.rs +++ b/noir/noir-repo/acvm-repo/acir/src/circuit/mod.rs @@ -360,7 +360,7 @@ mod tests { use std::collections::BTreeSet; use super::{ - opcodes::{BlackBoxFuncCall, ConstantOrWitnessEnum, FunctionInput}, + opcodes::{BlackBoxFuncCall, FunctionInput}, Circuit, Compression, Opcode, PublicInputs, }; use crate::{ diff --git a/noir/noir-repo/acvm-repo/acir/src/circuit/opcodes/black_box_function_call.rs b/noir/noir-repo/acvm-repo/acir/src/circuit/opcodes/black_box_function_call.rs index c1c5d3220be..57639c67995 100644 --- a/noir/noir-repo/acvm-repo/acir/src/circuit/opcodes/black_box_function_call.rs +++ b/noir/noir-repo/acvm-repo/acir/src/circuit/opcodes/black_box_function_call.rs @@ -513,7 +513,7 @@ mod tests { use crate::{circuit::Opcode, native_types::Witness}; use acir_field::{AcirField, FieldElement}; - use super::{BlackBoxFuncCall, ConstantOrWitnessEnum, FunctionInput}; + use super::{BlackBoxFuncCall, FunctionInput}; fn keccakf1600_opcode() -> Opcode { let inputs: Box<[FunctionInput; 25]> = From 5126751ceb37bece9ff998ea8e30e2aaa50182d3 Mon Sep 17 00:00:00 2001 From: TomAFrench Date: Mon, 8 Jul 2024 19:12:18 +0000 Subject: [PATCH 73/98] . --- .../acvm-repo/acvm/src/compiler/optimizers/redundant_range.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/noir/noir-repo/acvm-repo/acvm/src/compiler/optimizers/redundant_range.rs b/noir/noir-repo/acvm-repo/acvm/src/compiler/optimizers/redundant_range.rs index 87a026148d7..b03b6715abe 100644 --- a/noir/noir-repo/acvm-repo/acvm/src/compiler/optimizers/redundant_range.rs +++ b/noir/noir-repo/acvm-repo/acvm/src/compiler/optimizers/redundant_range.rs @@ -150,7 +150,7 @@ mod tests { use crate::compiler::optimizers::redundant_range::RangeOptimizer; use acir::{ circuit::{ - opcodes::{BlackBoxFuncCall, ConstantOrWitnessEnum, FunctionInput}, + opcodes::{BlackBoxFuncCall, FunctionInput}, Circuit, ExpressionWidth, Opcode, PublicInputs, }, native_types::{Expression, Witness}, From af199e85b072607e82056323ba7817351726dcc8 Mon Sep 17 00:00:00 2001 From: guipublic Date: Fri, 6 Sep 2024 10:35:12 +0000 Subject: [PATCH 74/98] fix test case --- .../src/barretenberg/dsl/acir_format/multi_scalar_mul.test.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/multi_scalar_mul.test.cpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/multi_scalar_mul.test.cpp index 57db2db8c71..c14e92847a2 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/multi_scalar_mul.test.cpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/multi_scalar_mul.test.cpp @@ -68,7 +68,6 @@ TEST_F(MSMTests, TestMSM) .logic_constraints = {}, .range_constraints = {}, .aes128_constraints = {}, - .sha256_constraints = {}, .sha256_compression = {}, .schnorr_constraints = {}, .ecdsa_k1_constraints = {}, From fc1cef784c062b567abf080ef1ed2a5c1a81c074 Mon Sep 17 00:00:00 2001 From: guipublic Date: Fri, 6 Sep 2024 11:07:04 +0000 Subject: [PATCH 75/98] fix noir build --- noir/noir-repo/tooling/profiler/src/opcode_formatter.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/noir/noir-repo/tooling/profiler/src/opcode_formatter.rs b/noir/noir-repo/tooling/profiler/src/opcode_formatter.rs index 1601d810912..d0ba9951b86 100644 --- a/noir/noir-repo/tooling/profiler/src/opcode_formatter.rs +++ b/noir/noir-repo/tooling/profiler/src/opcode_formatter.rs @@ -40,7 +40,6 @@ fn format_blackbox_function(call: &BlackBoxFuncCall) -> String { fn format_blackbox_op(call: &BlackBoxOp) -> String { match call { BlackBoxOp::AES128Encrypt { .. } => "aes128_encrypt".to_string(), - BlackBoxOp::Sha256 { .. } => "sha256".to_string(), BlackBoxOp::Blake2s { .. } => "blake2s".to_string(), BlackBoxOp::Blake3 { .. } => "blake3".to_string(), BlackBoxOp::SchnorrVerify { .. } => "schnorr_verify".to_string(), From 791bf1ad18e5e31f0104bf7d92f7f03cf3cbbb57 Mon Sep 17 00:00:00 2001 From: guipublic Date: Fri, 6 Sep 2024 12:12:11 +0000 Subject: [PATCH 76/98] remove sha256 blackbox tests --- noir/noir-repo/acvm-repo/acvm/tests/solver.rs | 29 ------------------- 1 file changed, 29 deletions(-) diff --git a/noir/noir-repo/acvm-repo/acvm/tests/solver.rs b/noir/noir-repo/acvm-repo/acvm/tests/solver.rs index 2a06e07f092..61617a7d1a4 100644 --- a/noir/noir-repo/acvm-repo/acvm/tests/solver.rs +++ b/noir/noir-repo/acvm-repo/acvm/tests/solver.rs @@ -1010,17 +1010,6 @@ fn solve_blackbox_func_call( witness_map[&Witness(3)] } -// N inputs -// 32 outputs -fn sha256_op( - function_inputs_and_outputs: (Vec>, Vec), -) -> BlackBoxFuncCall { - let (function_inputs, outputs) = function_inputs_and_outputs; - BlackBoxFuncCall::SHA256 { - inputs: function_inputs, - outputs: outputs.try_into().expect("SHA256 returns 32 outputs"), - } -} // N inputs // 32 outputs @@ -1365,18 +1354,6 @@ fn poseidon2_permutation_zeroes() { assert_eq!(result, expected_result); } -#[test] -fn sha256_zeros() { - let results = solve_array_input_blackbox_call(vec![], 32, None, sha256_op); - let expected_results: Vec<_> = vec![ - 227, 176, 196, 66, 152, 252, 28, 20, 154, 251, 244, 200, 153, 111, 185, 36, 39, 174, 65, - 228, 100, 155, 147, 76, 164, 149, 153, 27, 120, 82, 184, 85, - ] - .into_iter() - .map(|x: u128| FieldElement::from(x)) - .collect(); - assert_eq!(results, expected_results); -} #[test] fn sha256_compression_zeros() { @@ -1551,12 +1528,6 @@ proptest! { prop_assert_eq!(result, expected_result) } - #[test] - fn sha256_injective(inputs_distinct_inputs in any_distinct_inputs(None, 0, 32)) { - let (inputs, distinct_inputs) = inputs_distinct_inputs; - let (result, message) = prop_assert_injective(inputs, distinct_inputs, 32, None, sha256_op); - prop_assert!(result, "{}", message); - } #[test] fn sha256_compression_injective(inputs_distinct_inputs in any_distinct_inputs(None, 24, 24)) { From 9306e627e37d5505645b0a3546534dff1ba83313 Mon Sep 17 00:00:00 2001 From: guipublic Date: Fri, 6 Sep 2024 12:14:48 +0000 Subject: [PATCH 77/98] fix merge issue --- avm-transpiler/src/opcodes.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/avm-transpiler/src/opcodes.rs b/avm-transpiler/src/opcodes.rs index 741924b6e60..dcdd3f27f27 100644 --- a/avm-transpiler/src/opcodes.rs +++ b/avm-transpiler/src/opcodes.rs @@ -69,7 +69,6 @@ pub enum AvmOpcode { // Gadgets KECCAK, POSEIDON2, - SHA256COMPRESSION, PEDERSEN, // temp - may be removed, but alot of contracts rely on it ECADD, MSM, From 31c1e12f16ed8afb2ef107f93cfef6cf503cf4ab Mon Sep 17 00:00:00 2001 From: guipublic Date: Fri, 6 Sep 2024 12:41:50 +0000 Subject: [PATCH 78/98] fix unit test --- .../noirc_evaluator/src/ssa/opt/flatten_cfg.rs | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/noir/noir-repo/compiler/noirc_evaluator/src/ssa/opt/flatten_cfg.rs b/noir/noir-repo/compiler/noirc_evaluator/src/ssa/opt/flatten_cfg.rs index d5fb98c7adc..f44b888c831 100644 --- a/noir/noir-repo/compiler/noirc_evaluator/src/ssa/opt/flatten_cfg.rs +++ b/noir/noir-repo/compiler/noirc_evaluator/src/ssa/opt/flatten_cfg.rs @@ -1449,8 +1449,7 @@ mod test { // Tests that it does not simplify a true constraint an always-false constraint // acir(inline) fn main f1 { // b0(v0: [u8; 2]): - // v4 = call sha256(v0, u8 2) - // v5 = array_get v4, index u8 0 + // v5 = array_get v0, index u8 0 // v6 = cast v5 as u32 // v8 = truncate v6 to 1 bits, max_bit_size: 32 // v9 = cast v8 as u1 @@ -1482,13 +1481,8 @@ mod test { let array = builder.add_parameter(array_type); let zero = builder.numeric_constant(0_u128, Type::unsigned(8)); - let two = builder.numeric_constant(2_u128, Type::unsigned(8)); - let keccak = - builder.import_intrinsic_id(Intrinsic::BlackBox(acvm::acir::BlackBoxFunc::SHA256)); - let v4 = - builder.insert_call(keccak, vec![array, two], vec![Type::Array(element_type, 32)])[0]; - let v5 = builder.insert_array_get(v4, zero, Type::unsigned(8)); + let v5 = builder.insert_array_get(array, zero, Type::unsigned(8)); let v6 = builder.insert_cast(v5, Type::unsigned(32)); let i_two = builder.numeric_constant(2_u128, Type::unsigned(32)); let v8 = builder.insert_binary(v6, BinaryOp::Mod, i_two); From 9028b78a324476531fba32ea7428ea74e6663f9d Mon Sep 17 00:00:00 2001 From: guipublic Date: Fri, 6 Sep 2024 12:52:51 +0000 Subject: [PATCH 79/98] update serialisation --- .../noir-repo/acvm-repo/acir/codegen/acir.cpp | 12944 +++++++--------- 1 file changed, 5486 insertions(+), 7458 deletions(-) diff --git a/noir/noir-repo/acvm-repo/acir/codegen/acir.cpp b/noir/noir-repo/acvm-repo/acir/codegen/acir.cpp index 3c689d04d0e..be9684be0b2 100644 --- a/noir/noir-repo/acvm-repo/acir/codegen/acir.cpp +++ b/noir/noir-repo/acvm-repo/acir/codegen/acir.cpp @@ -1,9770 +1,7798 @@ #pragma once -#include "bincode.hpp" #include "serde.hpp" +#include "bincode.hpp" namespace Program { -struct BinaryFieldOp { - - struct Add { - friend bool operator==(const Add &, const Add &); - std::vector bincodeSerialize() const; - static Add bincodeDeserialize(std::vector); - }; - - struct Sub { - friend bool operator==(const Sub &, const Sub &); - std::vector bincodeSerialize() const; - static Sub bincodeDeserialize(std::vector); - }; - - struct Mul { - friend bool operator==(const Mul &, const Mul &); - std::vector bincodeSerialize() const; - static Mul bincodeDeserialize(std::vector); - }; - - struct Div { - friend bool operator==(const Div &, const Div &); - std::vector bincodeSerialize() const; - static Div bincodeDeserialize(std::vector); - }; - - struct IntegerDiv { - friend bool operator==(const IntegerDiv &, const IntegerDiv &); - std::vector bincodeSerialize() const; - static IntegerDiv bincodeDeserialize(std::vector); - }; - - struct Equals { - friend bool operator==(const Equals &, const Equals &); - std::vector bincodeSerialize() const; - static Equals bincodeDeserialize(std::vector); - }; - - struct LessThan { - friend bool operator==(const LessThan &, const LessThan &); - std::vector bincodeSerialize() const; - static LessThan bincodeDeserialize(std::vector); - }; - - struct LessThanEquals { - friend bool operator==(const LessThanEquals &, const LessThanEquals &); - std::vector bincodeSerialize() const; - static LessThanEquals bincodeDeserialize(std::vector); - }; - - std::variant - value; - - friend bool operator==(const BinaryFieldOp &, const BinaryFieldOp &); - std::vector bincodeSerialize() const; - static BinaryFieldOp bincodeDeserialize(std::vector); -}; - -struct BinaryIntOp { - - struct Add { - friend bool operator==(const Add &, const Add &); - std::vector bincodeSerialize() const; - static Add bincodeDeserialize(std::vector); - }; - - struct Sub { - friend bool operator==(const Sub &, const Sub &); - std::vector bincodeSerialize() const; - static Sub bincodeDeserialize(std::vector); - }; - - struct Mul { - friend bool operator==(const Mul &, const Mul &); - std::vector bincodeSerialize() const; - static Mul bincodeDeserialize(std::vector); - }; - - struct Div { - friend bool operator==(const Div &, const Div &); - std::vector bincodeSerialize() const; - static Div bincodeDeserialize(std::vector); - }; - - struct Equals { - friend bool operator==(const Equals &, const Equals &); - std::vector bincodeSerialize() const; - static Equals bincodeDeserialize(std::vector); - }; - - struct LessThan { - friend bool operator==(const LessThan &, const LessThan &); - std::vector bincodeSerialize() const; - static LessThan bincodeDeserialize(std::vector); - }; - - struct LessThanEquals { - friend bool operator==(const LessThanEquals &, const LessThanEquals &); - std::vector bincodeSerialize() const; - static LessThanEquals bincodeDeserialize(std::vector); - }; - - struct And { - friend bool operator==(const And &, const And &); - std::vector bincodeSerialize() const; - static And bincodeDeserialize(std::vector); - }; - - struct Or { - friend bool operator==(const Or &, const Or &); - std::vector bincodeSerialize() const; - static Or bincodeDeserialize(std::vector); - }; - - struct Xor { - friend bool operator==(const Xor &, const Xor &); - std::vector bincodeSerialize() const; - static Xor bincodeDeserialize(std::vector); - }; - - struct Shl { - friend bool operator==(const Shl &, const Shl &); - std::vector bincodeSerialize() const; - static Shl bincodeDeserialize(std::vector); - }; - - struct Shr { - friend bool operator==(const Shr &, const Shr &); - std::vector bincodeSerialize() const; - static Shr bincodeDeserialize(std::vector); - }; - - std::variant - value; - - friend bool operator==(const BinaryIntOp &, const BinaryIntOp &); - std::vector bincodeSerialize() const; - static BinaryIntOp bincodeDeserialize(std::vector); -}; - -struct IntegerBitSize { - - struct U0 { - friend bool operator==(const U0 &, const U0 &); - std::vector bincodeSerialize() const; - static U0 bincodeDeserialize(std::vector); - }; - - struct U1 { - friend bool operator==(const U1 &, const U1 &); - std::vector bincodeSerialize() const; - static U1 bincodeDeserialize(std::vector); - }; - - struct U8 { - friend bool operator==(const U8 &, const U8 &); - std::vector bincodeSerialize() const; - static U8 bincodeDeserialize(std::vector); - }; - - struct U16 { - friend bool operator==(const U16 &, const U16 &); - std::vector bincodeSerialize() const; - static U16 bincodeDeserialize(std::vector); - }; - - struct U32 { - friend bool operator==(const U32 &, const U32 &); - std::vector bincodeSerialize() const; - static U32 bincodeDeserialize(std::vector); - }; - - struct U64 { - friend bool operator==(const U64 &, const U64 &); - std::vector bincodeSerialize() const; - static U64 bincodeDeserialize(std::vector); - }; - - struct U128 { - friend bool operator==(const U128 &, const U128 &); - std::vector bincodeSerialize() const; - static U128 bincodeDeserialize(std::vector); - }; - - std::variant value; - - friend bool operator==(const IntegerBitSize &, const IntegerBitSize &); - std::vector bincodeSerialize() const; - static IntegerBitSize bincodeDeserialize(std::vector); -}; - -struct BitSize { - - struct Field { - friend bool operator==(const Field &, const Field &); - std::vector bincodeSerialize() const; - static Field bincodeDeserialize(std::vector); - }; - - struct Integer { - Program::IntegerBitSize value; - - friend bool operator==(const Integer &, const Integer &); - std::vector bincodeSerialize() const; - static Integer bincodeDeserialize(std::vector); - }; - - std::variant value; - - friend bool operator==(const BitSize &, const BitSize &); - std::vector bincodeSerialize() const; - static BitSize bincodeDeserialize(std::vector); -}; - -struct MemoryAddress { - uint64_t value; - - friend bool operator==(const MemoryAddress &, const MemoryAddress &); - std::vector bincodeSerialize() const; - static MemoryAddress bincodeDeserialize(std::vector); -}; - -struct HeapArray { - Program::MemoryAddress pointer; - uint64_t size; - - friend bool operator==(const HeapArray &, const HeapArray &); - std::vector bincodeSerialize() const; - static HeapArray bincodeDeserialize(std::vector); -}; - -struct HeapVector { - Program::MemoryAddress pointer; - Program::MemoryAddress size; - - friend bool operator==(const HeapVector &, const HeapVector &); - std::vector bincodeSerialize() const; - static HeapVector bincodeDeserialize(std::vector); -}; - -struct BlackBoxOp { - - struct AES128Encrypt { - Program::HeapVector inputs; - Program::HeapArray iv; - Program::HeapArray key; - Program::HeapVector outputs; - - friend bool operator==(const AES128Encrypt &, const AES128Encrypt &); - std::vector bincodeSerialize() const; - static AES128Encrypt bincodeDeserialize(std::vector); - }; - - struct Blake2s { - Program::HeapVector message; - Program::HeapArray output; - - friend bool operator==(const Blake2s &, const Blake2s &); - std::vector bincodeSerialize() const; - static Blake2s bincodeDeserialize(std::vector); - }; - - struct Blake3 { - Program::HeapVector message; - Program::HeapArray output; - - friend bool operator==(const Blake3 &, const Blake3 &); - std::vector bincodeSerialize() const; - static Blake3 bincodeDeserialize(std::vector); - }; - - struct Keccak256 { - Program::HeapVector message; - Program::HeapArray output; - - friend bool operator==(const Keccak256 &, const Keccak256 &); - std::vector bincodeSerialize() const; - static Keccak256 bincodeDeserialize(std::vector); - }; - - struct Keccakf1600 { - Program::HeapVector message; - Program::HeapArray output; - - friend bool operator==(const Keccakf1600 &, const Keccakf1600 &); - std::vector bincodeSerialize() const; - static Keccakf1600 bincodeDeserialize(std::vector); - }; - - struct EcdsaSecp256k1 { - Program::HeapVector hashed_msg; - Program::HeapArray public_key_x; - Program::HeapArray public_key_y; - Program::HeapArray signature; - Program::MemoryAddress result; - - friend bool operator==(const EcdsaSecp256k1 &, const EcdsaSecp256k1 &); - std::vector bincodeSerialize() const; - static EcdsaSecp256k1 bincodeDeserialize(std::vector); - }; - - struct EcdsaSecp256r1 { - Program::HeapVector hashed_msg; - Program::HeapArray public_key_x; - Program::HeapArray public_key_y; - Program::HeapArray signature; - Program::MemoryAddress result; - - friend bool operator==(const EcdsaSecp256r1 &, const EcdsaSecp256r1 &); - std::vector bincodeSerialize() const; - static EcdsaSecp256r1 bincodeDeserialize(std::vector); - }; - - struct SchnorrVerify { - Program::MemoryAddress public_key_x; - Program::MemoryAddress public_key_y; - Program::HeapVector message; - Program::HeapVector signature; - Program::MemoryAddress result; - - friend bool operator==(const SchnorrVerify &, const SchnorrVerify &); - std::vector bincodeSerialize() const; - static SchnorrVerify bincodeDeserialize(std::vector); - }; - - struct PedersenCommitment { - Program::HeapVector inputs; - Program::MemoryAddress domain_separator; - Program::HeapArray output; - - friend bool operator==(const PedersenCommitment &, - const PedersenCommitment &); - std::vector bincodeSerialize() const; - static PedersenCommitment bincodeDeserialize(std::vector); - }; - - struct PedersenHash { - Program::HeapVector inputs; - Program::MemoryAddress domain_separator; - Program::MemoryAddress output; - - friend bool operator==(const PedersenHash &, const PedersenHash &); - std::vector bincodeSerialize() const; - static PedersenHash bincodeDeserialize(std::vector); - }; - - struct MultiScalarMul { - Program::HeapVector points; - Program::HeapVector scalars; - Program::HeapArray outputs; - - friend bool operator==(const MultiScalarMul &, const MultiScalarMul &); - std::vector bincodeSerialize() const; - static MultiScalarMul bincodeDeserialize(std::vector); - }; - - struct EmbeddedCurveAdd { - Program::MemoryAddress input1_x; - Program::MemoryAddress input1_y; - Program::MemoryAddress input1_infinite; - Program::MemoryAddress input2_x; - Program::MemoryAddress input2_y; - Program::MemoryAddress input2_infinite; - Program::HeapArray result; - - friend bool operator==(const EmbeddedCurveAdd &, const EmbeddedCurveAdd &); - std::vector bincodeSerialize() const; - static EmbeddedCurveAdd bincodeDeserialize(std::vector); - }; - - struct BigIntAdd { - Program::MemoryAddress lhs; - Program::MemoryAddress rhs; - Program::MemoryAddress output; - - friend bool operator==(const BigIntAdd &, const BigIntAdd &); - std::vector bincodeSerialize() const; - static BigIntAdd bincodeDeserialize(std::vector); - }; - - struct BigIntSub { - Program::MemoryAddress lhs; - Program::MemoryAddress rhs; - Program::MemoryAddress output; - - friend bool operator==(const BigIntSub &, const BigIntSub &); - std::vector bincodeSerialize() const; - static BigIntSub bincodeDeserialize(std::vector); - }; - - struct BigIntMul { - Program::MemoryAddress lhs; - Program::MemoryAddress rhs; - Program::MemoryAddress output; - - friend bool operator==(const BigIntMul &, const BigIntMul &); - std::vector bincodeSerialize() const; - static BigIntMul bincodeDeserialize(std::vector); - }; - - struct BigIntDiv { - Program::MemoryAddress lhs; - Program::MemoryAddress rhs; - Program::MemoryAddress output; - - friend bool operator==(const BigIntDiv &, const BigIntDiv &); - std::vector bincodeSerialize() const; - static BigIntDiv bincodeDeserialize(std::vector); - }; - - struct BigIntFromLeBytes { - Program::HeapVector inputs; - Program::HeapVector modulus; - Program::MemoryAddress output; - - friend bool operator==(const BigIntFromLeBytes &, - const BigIntFromLeBytes &); - std::vector bincodeSerialize() const; - static BigIntFromLeBytes bincodeDeserialize(std::vector); - }; - - struct BigIntToLeBytes { - Program::MemoryAddress input; - Program::HeapVector output; - - friend bool operator==(const BigIntToLeBytes &, const BigIntToLeBytes &); - std::vector bincodeSerialize() const; - static BigIntToLeBytes bincodeDeserialize(std::vector); - }; - - struct Poseidon2Permutation { - Program::HeapVector message; - Program::HeapArray output; - Program::MemoryAddress len; - - friend bool operator==(const Poseidon2Permutation &, - const Poseidon2Permutation &); - std::vector bincodeSerialize() const; - static Poseidon2Permutation bincodeDeserialize(std::vector); - }; - - struct Sha256Compression { - Program::HeapVector input; - Program::HeapVector hash_values; - Program::HeapArray output; - - friend bool operator==(const Sha256Compression &, - const Sha256Compression &); - std::vector bincodeSerialize() const; - static Sha256Compression bincodeDeserialize(std::vector); - }; - - struct ToRadix { - Program::MemoryAddress input; - uint32_t radix; - Program::HeapArray output; - bool output_bits; - - friend bool operator==(const ToRadix &, const ToRadix &); - std::vector bincodeSerialize() const; - static ToRadix bincodeDeserialize(std::vector); - }; - - std::variant - value; - - friend bool operator==(const BlackBoxOp &, const BlackBoxOp &); - std::vector bincodeSerialize() const; - static BlackBoxOp bincodeDeserialize(std::vector); -}; - -struct HeapValueType; - -struct HeapValueType { - - struct Simple { - Program::BitSize value; - - friend bool operator==(const Simple &, const Simple &); - std::vector bincodeSerialize() const; - static Simple bincodeDeserialize(std::vector); - }; - - struct Array { - std::vector value_types; - uint64_t size; - - friend bool operator==(const Array &, const Array &); - std::vector bincodeSerialize() const; - static Array bincodeDeserialize(std::vector); - }; - - struct Vector { - std::vector value_types; - - friend bool operator==(const Vector &, const Vector &); - std::vector bincodeSerialize() const; - static Vector bincodeDeserialize(std::vector); - }; - - std::variant value; - - friend bool operator==(const HeapValueType &, const HeapValueType &); - std::vector bincodeSerialize() const; - static HeapValueType bincodeDeserialize(std::vector); -}; - -struct ValueOrArray { - - struct MemoryAddress { - Program::MemoryAddress value; - - friend bool operator==(const MemoryAddress &, const MemoryAddress &); - std::vector bincodeSerialize() const; - static MemoryAddress bincodeDeserialize(std::vector); - }; - - struct HeapArray { - Program::HeapArray value; - - friend bool operator==(const HeapArray &, const HeapArray &); - std::vector bincodeSerialize() const; - static HeapArray bincodeDeserialize(std::vector); - }; - - struct HeapVector { - Program::HeapVector value; - - friend bool operator==(const HeapVector &, const HeapVector &); - std::vector bincodeSerialize() const; - static HeapVector bincodeDeserialize(std::vector); - }; - - std::variant value; - - friend bool operator==(const ValueOrArray &, const ValueOrArray &); - std::vector bincodeSerialize() const; - static ValueOrArray bincodeDeserialize(std::vector); -}; - -struct BrilligOpcode { - - struct BinaryFieldOp { - Program::MemoryAddress destination; - Program::BinaryFieldOp op; - Program::MemoryAddress lhs; - Program::MemoryAddress rhs; - - friend bool operator==(const BinaryFieldOp &, const BinaryFieldOp &); - std::vector bincodeSerialize() const; - static BinaryFieldOp bincodeDeserialize(std::vector); - }; - - struct BinaryIntOp { - Program::MemoryAddress destination; - Program::BinaryIntOp op; - Program::IntegerBitSize bit_size; - Program::MemoryAddress lhs; - Program::MemoryAddress rhs; - - friend bool operator==(const BinaryIntOp &, const BinaryIntOp &); - std::vector bincodeSerialize() const; - static BinaryIntOp bincodeDeserialize(std::vector); - }; - - struct Cast { - Program::MemoryAddress destination; - Program::MemoryAddress source; - Program::BitSize bit_size; - - friend bool operator==(const Cast &, const Cast &); - std::vector bincodeSerialize() const; - static Cast bincodeDeserialize(std::vector); - }; - - struct JumpIfNot { - Program::MemoryAddress condition; - uint64_t location; - - friend bool operator==(const JumpIfNot &, const JumpIfNot &); - std::vector bincodeSerialize() const; - static JumpIfNot bincodeDeserialize(std::vector); - }; - - struct JumpIf { - Program::MemoryAddress condition; - uint64_t location; - - friend bool operator==(const JumpIf &, const JumpIf &); - std::vector bincodeSerialize() const; - static JumpIf bincodeDeserialize(std::vector); - }; - - struct Jump { - uint64_t location; - - friend bool operator==(const Jump &, const Jump &); - std::vector bincodeSerialize() const; - static Jump bincodeDeserialize(std::vector); - }; - - struct CalldataCopy { - Program::MemoryAddress destination_address; - uint64_t size; - uint64_t offset; - - friend bool operator==(const CalldataCopy &, const CalldataCopy &); - std::vector bincodeSerialize() const; - static CalldataCopy bincodeDeserialize(std::vector); - }; - - struct Call { - uint64_t location; - - friend bool operator==(const Call &, const Call &); - std::vector bincodeSerialize() const; - static Call bincodeDeserialize(std::vector); - }; - - struct Const { - Program::MemoryAddress destination; - Program::BitSize bit_size; - std::string value; - - friend bool operator==(const Const &, const Const &); - std::vector bincodeSerialize() const; - static Const bincodeDeserialize(std::vector); - }; - - struct IndirectConst { - Program::MemoryAddress destination_pointer; - Program::BitSize bit_size; - std::string value; - - friend bool operator==(const IndirectConst &, const IndirectConst &); - std::vector bincodeSerialize() const; - static IndirectConst bincodeDeserialize(std::vector); - }; - - struct Return { - friend bool operator==(const Return &, const Return &); - std::vector bincodeSerialize() const; - static Return bincodeDeserialize(std::vector); - }; - - struct ForeignCall { - std::string function; - std::vector destinations; - std::vector destination_value_types; - std::vector inputs; - std::vector input_value_types; - - friend bool operator==(const ForeignCall &, const ForeignCall &); - std::vector bincodeSerialize() const; - static ForeignCall bincodeDeserialize(std::vector); - }; - - struct Mov { - Program::MemoryAddress destination; - Program::MemoryAddress source; - - friend bool operator==(const Mov &, const Mov &); - std::vector bincodeSerialize() const; - static Mov bincodeDeserialize(std::vector); - }; - - struct ConditionalMov { - Program::MemoryAddress destination; - Program::MemoryAddress source_a; - Program::MemoryAddress source_b; - Program::MemoryAddress condition; - - friend bool operator==(const ConditionalMov &, const ConditionalMov &); - std::vector bincodeSerialize() const; - static ConditionalMov bincodeDeserialize(std::vector); - }; - - struct Load { - Program::MemoryAddress destination; - Program::MemoryAddress source_pointer; - - friend bool operator==(const Load &, const Load &); - std::vector bincodeSerialize() const; - static Load bincodeDeserialize(std::vector); - }; - - struct Store { - Program::MemoryAddress destination_pointer; - Program::MemoryAddress source; - - friend bool operator==(const Store &, const Store &); - std::vector bincodeSerialize() const; - static Store bincodeDeserialize(std::vector); - }; - - struct BlackBox { - Program::BlackBoxOp value; - - friend bool operator==(const BlackBox &, const BlackBox &); - std::vector bincodeSerialize() const; - static BlackBox bincodeDeserialize(std::vector); - }; - - struct Trap { - Program::HeapArray revert_data; - - friend bool operator==(const Trap &, const Trap &); - std::vector bincodeSerialize() const; - static Trap bincodeDeserialize(std::vector); - }; - - struct Stop { - uint64_t return_data_offset; - uint64_t return_data_size; - - friend bool operator==(const Stop &, const Stop &); - std::vector bincodeSerialize() const; - static Stop bincodeDeserialize(std::vector); - }; - - std::variant - value; - - friend bool operator==(const BrilligOpcode &, const BrilligOpcode &); - std::vector bincodeSerialize() const; - static BrilligOpcode bincodeDeserialize(std::vector); -}; - -struct Witness { - uint32_t value; - - friend bool operator==(const Witness &, const Witness &); - std::vector bincodeSerialize() const; - static Witness bincodeDeserialize(std::vector); -}; - -struct ConstantOrWitnessEnum { - - struct Constant { - std::string value; - - friend bool operator==(const Constant &, const Constant &); - std::vector bincodeSerialize() const; - static Constant bincodeDeserialize(std::vector); - }; - - struct Witness { - Program::Witness value; - - friend bool operator==(const Witness &, const Witness &); - std::vector bincodeSerialize() const; - static Witness bincodeDeserialize(std::vector); - }; - - std::variant value; - - friend bool operator==(const ConstantOrWitnessEnum &, - const ConstantOrWitnessEnum &); - std::vector bincodeSerialize() const; - static ConstantOrWitnessEnum bincodeDeserialize(std::vector); -}; - -struct FunctionInput { - Program::ConstantOrWitnessEnum input; - uint32_t num_bits; - - friend bool operator==(const FunctionInput &, const FunctionInput &); - std::vector bincodeSerialize() const; - static FunctionInput bincodeDeserialize(std::vector); -}; - -struct BlackBoxFuncCall { - - struct AES128Encrypt { - std::vector inputs; - std::array iv; - std::array key; - std::vector outputs; - - friend bool operator==(const AES128Encrypt &, const AES128Encrypt &); - std::vector bincodeSerialize() const; - static AES128Encrypt bincodeDeserialize(std::vector); - }; - - struct AND { - Program::FunctionInput lhs; - Program::FunctionInput rhs; - Program::Witness output; - - friend bool operator==(const AND &, const AND &); - std::vector bincodeSerialize() const; - static AND bincodeDeserialize(std::vector); - }; - - struct XOR { - Program::FunctionInput lhs; - Program::FunctionInput rhs; - Program::Witness output; - - friend bool operator==(const XOR &, const XOR &); - std::vector bincodeSerialize() const; - static XOR bincodeDeserialize(std::vector); - }; - - struct RANGE { - Program::FunctionInput input; - - friend bool operator==(const RANGE &, const RANGE &); - std::vector bincodeSerialize() const; - static RANGE bincodeDeserialize(std::vector); - }; - - struct Blake2s { - std::vector inputs; - std::array outputs; - - friend bool operator==(const Blake2s &, const Blake2s &); - std::vector bincodeSerialize() const; - static Blake2s bincodeDeserialize(std::vector); - }; - - struct Blake3 { - std::vector inputs; - std::array outputs; - - friend bool operator==(const Blake3 &, const Blake3 &); - std::vector bincodeSerialize() const; - static Blake3 bincodeDeserialize(std::vector); - }; - - struct SchnorrVerify { - Program::FunctionInput public_key_x; - Program::FunctionInput public_key_y; - std::array signature; - std::vector message; - Program::Witness output; - - friend bool operator==(const SchnorrVerify &, const SchnorrVerify &); - std::vector bincodeSerialize() const; - static SchnorrVerify bincodeDeserialize(std::vector); - }; - - struct PedersenCommitment { - std::vector inputs; - uint32_t domain_separator; - std::array outputs; - - friend bool operator==(const PedersenCommitment &, - const PedersenCommitment &); - std::vector bincodeSerialize() const; - static PedersenCommitment bincodeDeserialize(std::vector); - }; - - struct PedersenHash { - std::vector inputs; - uint32_t domain_separator; - Program::Witness output; - - friend bool operator==(const PedersenHash &, const PedersenHash &); - std::vector bincodeSerialize() const; - static PedersenHash bincodeDeserialize(std::vector); - }; - - struct EcdsaSecp256k1 { - std::array public_key_x; - std::array public_key_y; - std::array signature; - std::array hashed_message; - Program::Witness output; - - friend bool operator==(const EcdsaSecp256k1 &, const EcdsaSecp256k1 &); - std::vector bincodeSerialize() const; - static EcdsaSecp256k1 bincodeDeserialize(std::vector); - }; - - struct EcdsaSecp256r1 { - std::array public_key_x; - std::array public_key_y; - std::array signature; - std::array hashed_message; - Program::Witness output; - - friend bool operator==(const EcdsaSecp256r1 &, const EcdsaSecp256r1 &); - std::vector bincodeSerialize() const; - static EcdsaSecp256r1 bincodeDeserialize(std::vector); - }; - - struct MultiScalarMul { - std::vector points; - std::vector scalars; - std::array outputs; - - friend bool operator==(const MultiScalarMul &, const MultiScalarMul &); - std::vector bincodeSerialize() const; - static MultiScalarMul bincodeDeserialize(std::vector); - }; - - struct EmbeddedCurveAdd { - std::array input1; - std::array input2; - std::array outputs; - - friend bool operator==(const EmbeddedCurveAdd &, const EmbeddedCurveAdd &); - std::vector bincodeSerialize() const; - static EmbeddedCurveAdd bincodeDeserialize(std::vector); - }; - - struct Keccak256 { - std::vector inputs; - Program::FunctionInput var_message_size; - std::array outputs; - - friend bool operator==(const Keccak256 &, const Keccak256 &); - std::vector bincodeSerialize() const; - static Keccak256 bincodeDeserialize(std::vector); - }; - - struct Keccakf1600 { - std::array inputs; - std::array outputs; - - friend bool operator==(const Keccakf1600 &, const Keccakf1600 &); - std::vector bincodeSerialize() const; - static Keccakf1600 bincodeDeserialize(std::vector); - }; - - struct RecursiveAggregation { - std::vector verification_key; - std::vector proof; - std::vector public_inputs; - Program::FunctionInput key_hash; - uint32_t proof_type; - - friend bool operator==(const RecursiveAggregation &, - const RecursiveAggregation &); - std::vector bincodeSerialize() const; - static RecursiveAggregation bincodeDeserialize(std::vector); - }; - - struct BigIntAdd { - uint32_t lhs; - uint32_t rhs; - uint32_t output; - - friend bool operator==(const BigIntAdd &, const BigIntAdd &); - std::vector bincodeSerialize() const; - static BigIntAdd bincodeDeserialize(std::vector); - }; - - struct BigIntSub { - uint32_t lhs; - uint32_t rhs; - uint32_t output; - - friend bool operator==(const BigIntSub &, const BigIntSub &); - std::vector bincodeSerialize() const; - static BigIntSub bincodeDeserialize(std::vector); - }; - - struct BigIntMul { - uint32_t lhs; - uint32_t rhs; - uint32_t output; - - friend bool operator==(const BigIntMul &, const BigIntMul &); - std::vector bincodeSerialize() const; - static BigIntMul bincodeDeserialize(std::vector); - }; - - struct BigIntDiv { - uint32_t lhs; - uint32_t rhs; - uint32_t output; - - friend bool operator==(const BigIntDiv &, const BigIntDiv &); - std::vector bincodeSerialize() const; - static BigIntDiv bincodeDeserialize(std::vector); - }; - - struct BigIntFromLeBytes { - std::vector inputs; - std::vector modulus; - uint32_t output; - - friend bool operator==(const BigIntFromLeBytes &, - const BigIntFromLeBytes &); - std::vector bincodeSerialize() const; - static BigIntFromLeBytes bincodeDeserialize(std::vector); - }; - - struct BigIntToLeBytes { - uint32_t input; - std::vector outputs; - - friend bool operator==(const BigIntToLeBytes &, const BigIntToLeBytes &); - std::vector bincodeSerialize() const; - static BigIntToLeBytes bincodeDeserialize(std::vector); - }; - - struct Poseidon2Permutation { - std::vector inputs; - std::vector outputs; - uint32_t len; - - friend bool operator==(const Poseidon2Permutation &, - const Poseidon2Permutation &); - std::vector bincodeSerialize() const; - static Poseidon2Permutation bincodeDeserialize(std::vector); - }; - - struct Sha256Compression { - std::array inputs; - std::array hash_values; - std::array outputs; - - friend bool operator==(const Sha256Compression &, - const Sha256Compression &); - std::vector bincodeSerialize() const; - static Sha256Compression bincodeDeserialize(std::vector); - }; - - std::variant - value; - - friend bool operator==(const BlackBoxFuncCall &, const BlackBoxFuncCall &); - std::vector bincodeSerialize() const; - static BlackBoxFuncCall bincodeDeserialize(std::vector); -}; - -struct BlockId { - uint32_t value; - - friend bool operator==(const BlockId &, const BlockId &); - std::vector bincodeSerialize() const; - static BlockId bincodeDeserialize(std::vector); -}; - -struct BlockType { - - struct Memory { - friend bool operator==(const Memory &, const Memory &); - std::vector bincodeSerialize() const; - static Memory bincodeDeserialize(std::vector); - }; - - struct CallData { - uint32_t value; - - friend bool operator==(const CallData &, const CallData &); - std::vector bincodeSerialize() const; - static CallData bincodeDeserialize(std::vector); - }; - - struct ReturnData { - friend bool operator==(const ReturnData &, const ReturnData &); - std::vector bincodeSerialize() const; - static ReturnData bincodeDeserialize(std::vector); - }; - - std::variant value; - - friend bool operator==(const BlockType &, const BlockType &); - std::vector bincodeSerialize() const; - static BlockType bincodeDeserialize(std::vector); -}; - -struct Expression { - std::vector> - mul_terms; - std::vector> linear_combinations; - std::string q_c; - - friend bool operator==(const Expression &, const Expression &); - std::vector bincodeSerialize() const; - static Expression bincodeDeserialize(std::vector); -}; - -struct BrilligInputs { - - struct Single { - Program::Expression value; - - friend bool operator==(const Single &, const Single &); - std::vector bincodeSerialize() const; - static Single bincodeDeserialize(std::vector); - }; - - struct Array { - std::vector value; - - friend bool operator==(const Array &, const Array &); - std::vector bincodeSerialize() const; - static Array bincodeDeserialize(std::vector); - }; - - struct MemoryArray { - Program::BlockId value; - - friend bool operator==(const MemoryArray &, const MemoryArray &); - std::vector bincodeSerialize() const; - static MemoryArray bincodeDeserialize(std::vector); - }; - - std::variant value; - - friend bool operator==(const BrilligInputs &, const BrilligInputs &); - std::vector bincodeSerialize() const; - static BrilligInputs bincodeDeserialize(std::vector); -}; - -struct BrilligOutputs { - - struct Simple { - Program::Witness value; - - friend bool operator==(const Simple &, const Simple &); - std::vector bincodeSerialize() const; - static Simple bincodeDeserialize(std::vector); - }; - - struct Array { - std::vector value; - - friend bool operator==(const Array &, const Array &); - std::vector bincodeSerialize() const; - static Array bincodeDeserialize(std::vector); - }; - - std::variant value; - - friend bool operator==(const BrilligOutputs &, const BrilligOutputs &); - std::vector bincodeSerialize() const; - static BrilligOutputs bincodeDeserialize(std::vector); -}; - -struct Directive { - - struct ToLeRadix { - Program::Expression a; - std::vector b; - uint32_t radix; - - friend bool operator==(const ToLeRadix &, const ToLeRadix &); - std::vector bincodeSerialize() const; - static ToLeRadix bincodeDeserialize(std::vector); - }; - - std::variant value; - - friend bool operator==(const Directive &, const Directive &); - std::vector bincodeSerialize() const; - static Directive bincodeDeserialize(std::vector); -}; - -struct MemOp { - Program::Expression operation; - Program::Expression index; - Program::Expression value; + struct BinaryFieldOp { + + struct Add { + friend bool operator==(const Add&, const Add&); + std::vector bincodeSerialize() const; + static Add bincodeDeserialize(std::vector); + }; + + struct Sub { + friend bool operator==(const Sub&, const Sub&); + std::vector bincodeSerialize() const; + static Sub bincodeDeserialize(std::vector); + }; + + struct Mul { + friend bool operator==(const Mul&, const Mul&); + std::vector bincodeSerialize() const; + static Mul bincodeDeserialize(std::vector); + }; + + struct Div { + friend bool operator==(const Div&, const Div&); + std::vector bincodeSerialize() const; + static Div bincodeDeserialize(std::vector); + }; + + struct IntegerDiv { + friend bool operator==(const IntegerDiv&, const IntegerDiv&); + std::vector bincodeSerialize() const; + static IntegerDiv bincodeDeserialize(std::vector); + }; + + struct Equals { + friend bool operator==(const Equals&, const Equals&); + std::vector bincodeSerialize() const; + static Equals bincodeDeserialize(std::vector); + }; + + struct LessThan { + friend bool operator==(const LessThan&, const LessThan&); + std::vector bincodeSerialize() const; + static LessThan bincodeDeserialize(std::vector); + }; + + struct LessThanEquals { + friend bool operator==(const LessThanEquals&, const LessThanEquals&); + std::vector bincodeSerialize() const; + static LessThanEquals bincodeDeserialize(std::vector); + }; + + std::variant value; + + friend bool operator==(const BinaryFieldOp&, const BinaryFieldOp&); + std::vector bincodeSerialize() const; + static BinaryFieldOp bincodeDeserialize(std::vector); + }; + + struct BinaryIntOp { + + struct Add { + friend bool operator==(const Add&, const Add&); + std::vector bincodeSerialize() const; + static Add bincodeDeserialize(std::vector); + }; + + struct Sub { + friend bool operator==(const Sub&, const Sub&); + std::vector bincodeSerialize() const; + static Sub bincodeDeserialize(std::vector); + }; + + struct Mul { + friend bool operator==(const Mul&, const Mul&); + std::vector bincodeSerialize() const; + static Mul bincodeDeserialize(std::vector); + }; + + struct Div { + friend bool operator==(const Div&, const Div&); + std::vector bincodeSerialize() const; + static Div bincodeDeserialize(std::vector); + }; + + struct Equals { + friend bool operator==(const Equals&, const Equals&); + std::vector bincodeSerialize() const; + static Equals bincodeDeserialize(std::vector); + }; + + struct LessThan { + friend bool operator==(const LessThan&, const LessThan&); + std::vector bincodeSerialize() const; + static LessThan bincodeDeserialize(std::vector); + }; + + struct LessThanEquals { + friend bool operator==(const LessThanEquals&, const LessThanEquals&); + std::vector bincodeSerialize() const; + static LessThanEquals bincodeDeserialize(std::vector); + }; + + struct And { + friend bool operator==(const And&, const And&); + std::vector bincodeSerialize() const; + static And bincodeDeserialize(std::vector); + }; + + struct Or { + friend bool operator==(const Or&, const Or&); + std::vector bincodeSerialize() const; + static Or bincodeDeserialize(std::vector); + }; + + struct Xor { + friend bool operator==(const Xor&, const Xor&); + std::vector bincodeSerialize() const; + static Xor bincodeDeserialize(std::vector); + }; + + struct Shl { + friend bool operator==(const Shl&, const Shl&); + std::vector bincodeSerialize() const; + static Shl bincodeDeserialize(std::vector); + }; + + struct Shr { + friend bool operator==(const Shr&, const Shr&); + std::vector bincodeSerialize() const; + static Shr bincodeDeserialize(std::vector); + }; + + std::variant value; + + friend bool operator==(const BinaryIntOp&, const BinaryIntOp&); + std::vector bincodeSerialize() const; + static BinaryIntOp bincodeDeserialize(std::vector); + }; + + struct IntegerBitSize { + + struct U0 { + friend bool operator==(const U0&, const U0&); + std::vector bincodeSerialize() const; + static U0 bincodeDeserialize(std::vector); + }; + + struct U1 { + friend bool operator==(const U1&, const U1&); + std::vector bincodeSerialize() const; + static U1 bincodeDeserialize(std::vector); + }; + + struct U8 { + friend bool operator==(const U8&, const U8&); + std::vector bincodeSerialize() const; + static U8 bincodeDeserialize(std::vector); + }; + + struct U16 { + friend bool operator==(const U16&, const U16&); + std::vector bincodeSerialize() const; + static U16 bincodeDeserialize(std::vector); + }; + + struct U32 { + friend bool operator==(const U32&, const U32&); + std::vector bincodeSerialize() const; + static U32 bincodeDeserialize(std::vector); + }; + + struct U64 { + friend bool operator==(const U64&, const U64&); + std::vector bincodeSerialize() const; + static U64 bincodeDeserialize(std::vector); + }; + + struct U128 { + friend bool operator==(const U128&, const U128&); + std::vector bincodeSerialize() const; + static U128 bincodeDeserialize(std::vector); + }; + + std::variant value; + + friend bool operator==(const IntegerBitSize&, const IntegerBitSize&); + std::vector bincodeSerialize() const; + static IntegerBitSize bincodeDeserialize(std::vector); + }; + + struct BitSize { + + struct Field { + friend bool operator==(const Field&, const Field&); + std::vector bincodeSerialize() const; + static Field bincodeDeserialize(std::vector); + }; + + struct Integer { + Program::IntegerBitSize value; + + friend bool operator==(const Integer&, const Integer&); + std::vector bincodeSerialize() const; + static Integer bincodeDeserialize(std::vector); + }; + + std::variant value; + + friend bool operator==(const BitSize&, const BitSize&); + std::vector bincodeSerialize() const; + static BitSize bincodeDeserialize(std::vector); + }; + + struct MemoryAddress { + uint64_t value; + + friend bool operator==(const MemoryAddress&, const MemoryAddress&); + std::vector bincodeSerialize() const; + static MemoryAddress bincodeDeserialize(std::vector); + }; + + struct HeapArray { + Program::MemoryAddress pointer; + uint64_t size; + + friend bool operator==(const HeapArray&, const HeapArray&); + std::vector bincodeSerialize() const; + static HeapArray bincodeDeserialize(std::vector); + }; + + struct HeapVector { + Program::MemoryAddress pointer; + Program::MemoryAddress size; + + friend bool operator==(const HeapVector&, const HeapVector&); + std::vector bincodeSerialize() const; + static HeapVector bincodeDeserialize(std::vector); + }; + + struct BlackBoxOp { + + struct AES128Encrypt { + Program::HeapVector inputs; + Program::HeapArray iv; + Program::HeapArray key; + Program::HeapVector outputs; + + friend bool operator==(const AES128Encrypt&, const AES128Encrypt&); + std::vector bincodeSerialize() const; + static AES128Encrypt bincodeDeserialize(std::vector); + }; + + struct Blake2s { + Program::HeapVector message; + Program::HeapArray output; + + friend bool operator==(const Blake2s&, const Blake2s&); + std::vector bincodeSerialize() const; + static Blake2s bincodeDeserialize(std::vector); + }; + + struct Blake3 { + Program::HeapVector message; + Program::HeapArray output; + + friend bool operator==(const Blake3&, const Blake3&); + std::vector bincodeSerialize() const; + static Blake3 bincodeDeserialize(std::vector); + }; + + struct Keccak256 { + Program::HeapVector message; + Program::HeapArray output; + + friend bool operator==(const Keccak256&, const Keccak256&); + std::vector bincodeSerialize() const; + static Keccak256 bincodeDeserialize(std::vector); + }; + + struct Keccakf1600 { + Program::HeapVector message; + Program::HeapArray output; + + friend bool operator==(const Keccakf1600&, const Keccakf1600&); + std::vector bincodeSerialize() const; + static Keccakf1600 bincodeDeserialize(std::vector); + }; + + struct EcdsaSecp256k1 { + Program::HeapVector hashed_msg; + Program::HeapArray public_key_x; + Program::HeapArray public_key_y; + Program::HeapArray signature; + Program::MemoryAddress result; + + friend bool operator==(const EcdsaSecp256k1&, const EcdsaSecp256k1&); + std::vector bincodeSerialize() const; + static EcdsaSecp256k1 bincodeDeserialize(std::vector); + }; + + struct EcdsaSecp256r1 { + Program::HeapVector hashed_msg; + Program::HeapArray public_key_x; + Program::HeapArray public_key_y; + Program::HeapArray signature; + Program::MemoryAddress result; + + friend bool operator==(const EcdsaSecp256r1&, const EcdsaSecp256r1&); + std::vector bincodeSerialize() const; + static EcdsaSecp256r1 bincodeDeserialize(std::vector); + }; + + struct SchnorrVerify { + Program::MemoryAddress public_key_x; + Program::MemoryAddress public_key_y; + Program::HeapVector message; + Program::HeapVector signature; + Program::MemoryAddress result; + + friend bool operator==(const SchnorrVerify&, const SchnorrVerify&); + std::vector bincodeSerialize() const; + static SchnorrVerify bincodeDeserialize(std::vector); + }; + + struct PedersenCommitment { + Program::HeapVector inputs; + Program::MemoryAddress domain_separator; + Program::HeapArray output; + + friend bool operator==(const PedersenCommitment&, const PedersenCommitment&); + std::vector bincodeSerialize() const; + static PedersenCommitment bincodeDeserialize(std::vector); + }; + + struct PedersenHash { + Program::HeapVector inputs; + Program::MemoryAddress domain_separator; + Program::MemoryAddress output; + + friend bool operator==(const PedersenHash&, const PedersenHash&); + std::vector bincodeSerialize() const; + static PedersenHash bincodeDeserialize(std::vector); + }; + + struct MultiScalarMul { + Program::HeapVector points; + Program::HeapVector scalars; + Program::HeapArray outputs; + + friend bool operator==(const MultiScalarMul&, const MultiScalarMul&); + std::vector bincodeSerialize() const; + static MultiScalarMul bincodeDeserialize(std::vector); + }; + + struct EmbeddedCurveAdd { + Program::MemoryAddress input1_x; + Program::MemoryAddress input1_y; + Program::MemoryAddress input1_infinite; + Program::MemoryAddress input2_x; + Program::MemoryAddress input2_y; + Program::MemoryAddress input2_infinite; + Program::HeapArray result; + + friend bool operator==(const EmbeddedCurveAdd&, const EmbeddedCurveAdd&); + std::vector bincodeSerialize() const; + static EmbeddedCurveAdd bincodeDeserialize(std::vector); + }; + + struct BigIntAdd { + Program::MemoryAddress lhs; + Program::MemoryAddress rhs; + Program::MemoryAddress output; + + friend bool operator==(const BigIntAdd&, const BigIntAdd&); + std::vector bincodeSerialize() const; + static BigIntAdd bincodeDeserialize(std::vector); + }; + + struct BigIntSub { + Program::MemoryAddress lhs; + Program::MemoryAddress rhs; + Program::MemoryAddress output; + + friend bool operator==(const BigIntSub&, const BigIntSub&); + std::vector bincodeSerialize() const; + static BigIntSub bincodeDeserialize(std::vector); + }; + + struct BigIntMul { + Program::MemoryAddress lhs; + Program::MemoryAddress rhs; + Program::MemoryAddress output; + + friend bool operator==(const BigIntMul&, const BigIntMul&); + std::vector bincodeSerialize() const; + static BigIntMul bincodeDeserialize(std::vector); + }; + + struct BigIntDiv { + Program::MemoryAddress lhs; + Program::MemoryAddress rhs; + Program::MemoryAddress output; + + friend bool operator==(const BigIntDiv&, const BigIntDiv&); + std::vector bincodeSerialize() const; + static BigIntDiv bincodeDeserialize(std::vector); + }; + + struct BigIntFromLeBytes { + Program::HeapVector inputs; + Program::HeapVector modulus; + Program::MemoryAddress output; + + friend bool operator==(const BigIntFromLeBytes&, const BigIntFromLeBytes&); + std::vector bincodeSerialize() const; + static BigIntFromLeBytes bincodeDeserialize(std::vector); + }; + + struct BigIntToLeBytes { + Program::MemoryAddress input; + Program::HeapVector output; + + friend bool operator==(const BigIntToLeBytes&, const BigIntToLeBytes&); + std::vector bincodeSerialize() const; + static BigIntToLeBytes bincodeDeserialize(std::vector); + }; + + struct Poseidon2Permutation { + Program::HeapVector message; + Program::HeapArray output; + Program::MemoryAddress len; + + friend bool operator==(const Poseidon2Permutation&, const Poseidon2Permutation&); + std::vector bincodeSerialize() const; + static Poseidon2Permutation bincodeDeserialize(std::vector); + }; + + struct Sha256Compression { + Program::HeapVector input; + Program::HeapVector hash_values; + Program::HeapArray output; + + friend bool operator==(const Sha256Compression&, const Sha256Compression&); + std::vector bincodeSerialize() const; + static Sha256Compression bincodeDeserialize(std::vector); + }; + + struct ToRadix { + Program::MemoryAddress input; + uint32_t radix; + Program::HeapArray output; + bool output_bits; + + friend bool operator==(const ToRadix&, const ToRadix&); + std::vector bincodeSerialize() const; + static ToRadix bincodeDeserialize(std::vector); + }; + + std::variant value; + + friend bool operator==(const BlackBoxOp&, const BlackBoxOp&); + std::vector bincodeSerialize() const; + static BlackBoxOp bincodeDeserialize(std::vector); + }; + + struct HeapValueType; + + struct HeapValueType { + + struct Simple { + Program::BitSize value; + + friend bool operator==(const Simple&, const Simple&); + std::vector bincodeSerialize() const; + static Simple bincodeDeserialize(std::vector); + }; + + struct Array { + std::vector value_types; + uint64_t size; + + friend bool operator==(const Array&, const Array&); + std::vector bincodeSerialize() const; + static Array bincodeDeserialize(std::vector); + }; + + struct Vector { + std::vector value_types; + + friend bool operator==(const Vector&, const Vector&); + std::vector bincodeSerialize() const; + static Vector bincodeDeserialize(std::vector); + }; + + std::variant value; + + friend bool operator==(const HeapValueType&, const HeapValueType&); + std::vector bincodeSerialize() const; + static HeapValueType bincodeDeserialize(std::vector); + }; + + struct ValueOrArray { + + struct MemoryAddress { + Program::MemoryAddress value; + + friend bool operator==(const MemoryAddress&, const MemoryAddress&); + std::vector bincodeSerialize() const; + static MemoryAddress bincodeDeserialize(std::vector); + }; + + struct HeapArray { + Program::HeapArray value; + + friend bool operator==(const HeapArray&, const HeapArray&); + std::vector bincodeSerialize() const; + static HeapArray bincodeDeserialize(std::vector); + }; + + struct HeapVector { + Program::HeapVector value; + + friend bool operator==(const HeapVector&, const HeapVector&); + std::vector bincodeSerialize() const; + static HeapVector bincodeDeserialize(std::vector); + }; + + std::variant value; + + friend bool operator==(const ValueOrArray&, const ValueOrArray&); + std::vector bincodeSerialize() const; + static ValueOrArray bincodeDeserialize(std::vector); + }; + + struct BrilligOpcode { + + struct BinaryFieldOp { + Program::MemoryAddress destination; + Program::BinaryFieldOp op; + Program::MemoryAddress lhs; + Program::MemoryAddress rhs; + + friend bool operator==(const BinaryFieldOp&, const BinaryFieldOp&); + std::vector bincodeSerialize() const; + static BinaryFieldOp bincodeDeserialize(std::vector); + }; + + struct BinaryIntOp { + Program::MemoryAddress destination; + Program::BinaryIntOp op; + Program::IntegerBitSize bit_size; + Program::MemoryAddress lhs; + Program::MemoryAddress rhs; + + friend bool operator==(const BinaryIntOp&, const BinaryIntOp&); + std::vector bincodeSerialize() const; + static BinaryIntOp bincodeDeserialize(std::vector); + }; + + struct Cast { + Program::MemoryAddress destination; + Program::MemoryAddress source; + Program::BitSize bit_size; + + friend bool operator==(const Cast&, const Cast&); + std::vector bincodeSerialize() const; + static Cast bincodeDeserialize(std::vector); + }; + + struct JumpIfNot { + Program::MemoryAddress condition; + uint64_t location; + + friend bool operator==(const JumpIfNot&, const JumpIfNot&); + std::vector bincodeSerialize() const; + static JumpIfNot bincodeDeserialize(std::vector); + }; + + struct JumpIf { + Program::MemoryAddress condition; + uint64_t location; + + friend bool operator==(const JumpIf&, const JumpIf&); + std::vector bincodeSerialize() const; + static JumpIf bincodeDeserialize(std::vector); + }; + + struct Jump { + uint64_t location; + + friend bool operator==(const Jump&, const Jump&); + std::vector bincodeSerialize() const; + static Jump bincodeDeserialize(std::vector); + }; + + struct CalldataCopy { + Program::MemoryAddress destination_address; + uint64_t size; + uint64_t offset; + + friend bool operator==(const CalldataCopy&, const CalldataCopy&); + std::vector bincodeSerialize() const; + static CalldataCopy bincodeDeserialize(std::vector); + }; + + struct Call { + uint64_t location; + + friend bool operator==(const Call&, const Call&); + std::vector bincodeSerialize() const; + static Call bincodeDeserialize(std::vector); + }; + + struct Const { + Program::MemoryAddress destination; + Program::BitSize bit_size; + std::string value; + + friend bool operator==(const Const&, const Const&); + std::vector bincodeSerialize() const; + static Const bincodeDeserialize(std::vector); + }; + + struct IndirectConst { + Program::MemoryAddress destination_pointer; + Program::BitSize bit_size; + std::string value; + + friend bool operator==(const IndirectConst&, const IndirectConst&); + std::vector bincodeSerialize() const; + static IndirectConst bincodeDeserialize(std::vector); + }; + + struct Return { + friend bool operator==(const Return&, const Return&); + std::vector bincodeSerialize() const; + static Return bincodeDeserialize(std::vector); + }; + + struct ForeignCall { + std::string function; + std::vector destinations; + std::vector destination_value_types; + std::vector inputs; + std::vector input_value_types; + + friend bool operator==(const ForeignCall&, const ForeignCall&); + std::vector bincodeSerialize() const; + static ForeignCall bincodeDeserialize(std::vector); + }; + + struct Mov { + Program::MemoryAddress destination; + Program::MemoryAddress source; + + friend bool operator==(const Mov&, const Mov&); + std::vector bincodeSerialize() const; + static Mov bincodeDeserialize(std::vector); + }; + + struct ConditionalMov { + Program::MemoryAddress destination; + Program::MemoryAddress source_a; + Program::MemoryAddress source_b; + Program::MemoryAddress condition; + + friend bool operator==(const ConditionalMov&, const ConditionalMov&); + std::vector bincodeSerialize() const; + static ConditionalMov bincodeDeserialize(std::vector); + }; + + struct Load { + Program::MemoryAddress destination; + Program::MemoryAddress source_pointer; + + friend bool operator==(const Load&, const Load&); + std::vector bincodeSerialize() const; + static Load bincodeDeserialize(std::vector); + }; + + struct Store { + Program::MemoryAddress destination_pointer; + Program::MemoryAddress source; + + friend bool operator==(const Store&, const Store&); + std::vector bincodeSerialize() const; + static Store bincodeDeserialize(std::vector); + }; + + struct BlackBox { + Program::BlackBoxOp value; + + friend bool operator==(const BlackBox&, const BlackBox&); + std::vector bincodeSerialize() const; + static BlackBox bincodeDeserialize(std::vector); + }; + + struct Trap { + Program::HeapArray revert_data; + + friend bool operator==(const Trap&, const Trap&); + std::vector bincodeSerialize() const; + static Trap bincodeDeserialize(std::vector); + }; + + struct Stop { + uint64_t return_data_offset; + uint64_t return_data_size; + + friend bool operator==(const Stop&, const Stop&); + std::vector bincodeSerialize() const; + static Stop bincodeDeserialize(std::vector); + }; + + std::variant value; + + friend bool operator==(const BrilligOpcode&, const BrilligOpcode&); + std::vector bincodeSerialize() const; + static BrilligOpcode bincodeDeserialize(std::vector); + }; + + struct Witness { + uint32_t value; + + friend bool operator==(const Witness&, const Witness&); + std::vector bincodeSerialize() const; + static Witness bincodeDeserialize(std::vector); + }; + + struct ConstantOrWitnessEnum { + + struct Constant { + std::string value; + + friend bool operator==(const Constant&, const Constant&); + std::vector bincodeSerialize() const; + static Constant bincodeDeserialize(std::vector); + }; + + struct Witness { + Program::Witness value; + + friend bool operator==(const Witness&, const Witness&); + std::vector bincodeSerialize() const; + static Witness bincodeDeserialize(std::vector); + }; + + std::variant value; + + friend bool operator==(const ConstantOrWitnessEnum&, const ConstantOrWitnessEnum&); + std::vector bincodeSerialize() const; + static ConstantOrWitnessEnum bincodeDeserialize(std::vector); + }; + + struct FunctionInput { + Program::ConstantOrWitnessEnum input; + uint32_t num_bits; + + friend bool operator==(const FunctionInput&, const FunctionInput&); + std::vector bincodeSerialize() const; + static FunctionInput bincodeDeserialize(std::vector); + }; + + struct BlackBoxFuncCall { + + struct AES128Encrypt { + std::vector inputs; + std::array iv; + std::array key; + std::vector outputs; + + friend bool operator==(const AES128Encrypt&, const AES128Encrypt&); + std::vector bincodeSerialize() const; + static AES128Encrypt bincodeDeserialize(std::vector); + }; + + struct AND { + Program::FunctionInput lhs; + Program::FunctionInput rhs; + Program::Witness output; + + friend bool operator==(const AND&, const AND&); + std::vector bincodeSerialize() const; + static AND bincodeDeserialize(std::vector); + }; + + struct XOR { + Program::FunctionInput lhs; + Program::FunctionInput rhs; + Program::Witness output; + + friend bool operator==(const XOR&, const XOR&); + std::vector bincodeSerialize() const; + static XOR bincodeDeserialize(std::vector); + }; + + struct RANGE { + Program::FunctionInput input; + + friend bool operator==(const RANGE&, const RANGE&); + std::vector bincodeSerialize() const; + static RANGE bincodeDeserialize(std::vector); + }; + + struct Blake2s { + std::vector inputs; + std::array outputs; + + friend bool operator==(const Blake2s&, const Blake2s&); + std::vector bincodeSerialize() const; + static Blake2s bincodeDeserialize(std::vector); + }; + + struct Blake3 { + std::vector inputs; + std::array outputs; + + friend bool operator==(const Blake3&, const Blake3&); + std::vector bincodeSerialize() const; + static Blake3 bincodeDeserialize(std::vector); + }; + + struct SchnorrVerify { + Program::FunctionInput public_key_x; + Program::FunctionInput public_key_y; + std::array signature; + std::vector message; + Program::Witness output; + + friend bool operator==(const SchnorrVerify&, const SchnorrVerify&); + std::vector bincodeSerialize() const; + static SchnorrVerify bincodeDeserialize(std::vector); + }; + + struct PedersenCommitment { + std::vector inputs; + uint32_t domain_separator; + std::array outputs; + + friend bool operator==(const PedersenCommitment&, const PedersenCommitment&); + std::vector bincodeSerialize() const; + static PedersenCommitment bincodeDeserialize(std::vector); + }; + + struct PedersenHash { + std::vector inputs; + uint32_t domain_separator; + Program::Witness output; + + friend bool operator==(const PedersenHash&, const PedersenHash&); + std::vector bincodeSerialize() const; + static PedersenHash bincodeDeserialize(std::vector); + }; + + struct EcdsaSecp256k1 { + std::array public_key_x; + std::array public_key_y; + std::array signature; + std::array hashed_message; + Program::Witness output; + + friend bool operator==(const EcdsaSecp256k1&, const EcdsaSecp256k1&); + std::vector bincodeSerialize() const; + static EcdsaSecp256k1 bincodeDeserialize(std::vector); + }; + + struct EcdsaSecp256r1 { + std::array public_key_x; + std::array public_key_y; + std::array signature; + std::array hashed_message; + Program::Witness output; + + friend bool operator==(const EcdsaSecp256r1&, const EcdsaSecp256r1&); + std::vector bincodeSerialize() const; + static EcdsaSecp256r1 bincodeDeserialize(std::vector); + }; + + struct MultiScalarMul { + std::vector points; + std::vector scalars; + std::array outputs; + + friend bool operator==(const MultiScalarMul&, const MultiScalarMul&); + std::vector bincodeSerialize() const; + static MultiScalarMul bincodeDeserialize(std::vector); + }; + + struct EmbeddedCurveAdd { + std::array input1; + std::array input2; + std::array outputs; + + friend bool operator==(const EmbeddedCurveAdd&, const EmbeddedCurveAdd&); + std::vector bincodeSerialize() const; + static EmbeddedCurveAdd bincodeDeserialize(std::vector); + }; + + struct Keccak256 { + std::vector inputs; + Program::FunctionInput var_message_size; + std::array outputs; + + friend bool operator==(const Keccak256&, const Keccak256&); + std::vector bincodeSerialize() const; + static Keccak256 bincodeDeserialize(std::vector); + }; + + struct Keccakf1600 { + std::array inputs; + std::array outputs; + + friend bool operator==(const Keccakf1600&, const Keccakf1600&); + std::vector bincodeSerialize() const; + static Keccakf1600 bincodeDeserialize(std::vector); + }; + + struct RecursiveAggregation { + std::vector verification_key; + std::vector proof; + std::vector public_inputs; + Program::FunctionInput key_hash; + uint32_t proof_type; + + friend bool operator==(const RecursiveAggregation&, const RecursiveAggregation&); + std::vector bincodeSerialize() const; + static RecursiveAggregation bincodeDeserialize(std::vector); + }; + + struct BigIntAdd { + uint32_t lhs; + uint32_t rhs; + uint32_t output; + + friend bool operator==(const BigIntAdd&, const BigIntAdd&); + std::vector bincodeSerialize() const; + static BigIntAdd bincodeDeserialize(std::vector); + }; + + struct BigIntSub { + uint32_t lhs; + uint32_t rhs; + uint32_t output; + + friend bool operator==(const BigIntSub&, const BigIntSub&); + std::vector bincodeSerialize() const; + static BigIntSub bincodeDeserialize(std::vector); + }; + + struct BigIntMul { + uint32_t lhs; + uint32_t rhs; + uint32_t output; + + friend bool operator==(const BigIntMul&, const BigIntMul&); + std::vector bincodeSerialize() const; + static BigIntMul bincodeDeserialize(std::vector); + }; + + struct BigIntDiv { + uint32_t lhs; + uint32_t rhs; + uint32_t output; + + friend bool operator==(const BigIntDiv&, const BigIntDiv&); + std::vector bincodeSerialize() const; + static BigIntDiv bincodeDeserialize(std::vector); + }; + + struct BigIntFromLeBytes { + std::vector inputs; + std::vector modulus; + uint32_t output; + + friend bool operator==(const BigIntFromLeBytes&, const BigIntFromLeBytes&); + std::vector bincodeSerialize() const; + static BigIntFromLeBytes bincodeDeserialize(std::vector); + }; + + struct BigIntToLeBytes { + uint32_t input; + std::vector outputs; + + friend bool operator==(const BigIntToLeBytes&, const BigIntToLeBytes&); + std::vector bincodeSerialize() const; + static BigIntToLeBytes bincodeDeserialize(std::vector); + }; + + struct Poseidon2Permutation { + std::vector inputs; + std::vector outputs; + uint32_t len; + + friend bool operator==(const Poseidon2Permutation&, const Poseidon2Permutation&); + std::vector bincodeSerialize() const; + static Poseidon2Permutation bincodeDeserialize(std::vector); + }; + + struct Sha256Compression { + std::array inputs; + std::array hash_values; + std::array outputs; + + friend bool operator==(const Sha256Compression&, const Sha256Compression&); + std::vector bincodeSerialize() const; + static Sha256Compression bincodeDeserialize(std::vector); + }; + + std::variant value; + + friend bool operator==(const BlackBoxFuncCall&, const BlackBoxFuncCall&); + std::vector bincodeSerialize() const; + static BlackBoxFuncCall bincodeDeserialize(std::vector); + }; + + struct BlockId { + uint32_t value; + + friend bool operator==(const BlockId&, const BlockId&); + std::vector bincodeSerialize() const; + static BlockId bincodeDeserialize(std::vector); + }; + + struct BlockType { + + struct Memory { + friend bool operator==(const Memory&, const Memory&); + std::vector bincodeSerialize() const; + static Memory bincodeDeserialize(std::vector); + }; + + struct CallData { + uint32_t value; + + friend bool operator==(const CallData&, const CallData&); + std::vector bincodeSerialize() const; + static CallData bincodeDeserialize(std::vector); + }; + + struct ReturnData { + friend bool operator==(const ReturnData&, const ReturnData&); + std::vector bincodeSerialize() const; + static ReturnData bincodeDeserialize(std::vector); + }; + + std::variant value; + + friend bool operator==(const BlockType&, const BlockType&); + std::vector bincodeSerialize() const; + static BlockType bincodeDeserialize(std::vector); + }; + + struct Expression { + std::vector> mul_terms; + std::vector> linear_combinations; + std::string q_c; + + friend bool operator==(const Expression&, const Expression&); + std::vector bincodeSerialize() const; + static Expression bincodeDeserialize(std::vector); + }; + + struct BrilligInputs { + + struct Single { + Program::Expression value; + + friend bool operator==(const Single&, const Single&); + std::vector bincodeSerialize() const; + static Single bincodeDeserialize(std::vector); + }; + + struct Array { + std::vector value; + + friend bool operator==(const Array&, const Array&); + std::vector bincodeSerialize() const; + static Array bincodeDeserialize(std::vector); + }; + + struct MemoryArray { + Program::BlockId value; + + friend bool operator==(const MemoryArray&, const MemoryArray&); + std::vector bincodeSerialize() const; + static MemoryArray bincodeDeserialize(std::vector); + }; + + std::variant value; + + friend bool operator==(const BrilligInputs&, const BrilligInputs&); + std::vector bincodeSerialize() const; + static BrilligInputs bincodeDeserialize(std::vector); + }; + + struct BrilligOutputs { + + struct Simple { + Program::Witness value; + + friend bool operator==(const Simple&, const Simple&); + std::vector bincodeSerialize() const; + static Simple bincodeDeserialize(std::vector); + }; + + struct Array { + std::vector value; + + friend bool operator==(const Array&, const Array&); + std::vector bincodeSerialize() const; + static Array bincodeDeserialize(std::vector); + }; + + std::variant value; + + friend bool operator==(const BrilligOutputs&, const BrilligOutputs&); + std::vector bincodeSerialize() const; + static BrilligOutputs bincodeDeserialize(std::vector); + }; + + struct Directive { + + struct ToLeRadix { + Program::Expression a; + std::vector b; + uint32_t radix; + + friend bool operator==(const ToLeRadix&, const ToLeRadix&); + std::vector bincodeSerialize() const; + static ToLeRadix bincodeDeserialize(std::vector); + }; + + std::variant value; + + friend bool operator==(const Directive&, const Directive&); + std::vector bincodeSerialize() const; + static Directive bincodeDeserialize(std::vector); + }; + + struct MemOp { + Program::Expression operation; + Program::Expression index; + Program::Expression value; + + friend bool operator==(const MemOp&, const MemOp&); + std::vector bincodeSerialize() const; + static MemOp bincodeDeserialize(std::vector); + }; + + struct Opcode { + + struct AssertZero { + Program::Expression value; - friend bool operator==(const MemOp &, const MemOp &); - std::vector bincodeSerialize() const; - static MemOp bincodeDeserialize(std::vector); -}; - -struct Opcode { - - struct AssertZero { - Program::Expression value; + friend bool operator==(const AssertZero&, const AssertZero&); + std::vector bincodeSerialize() const; + static AssertZero bincodeDeserialize(std::vector); + }; - friend bool operator==(const AssertZero &, const AssertZero &); - std::vector bincodeSerialize() const; - static AssertZero bincodeDeserialize(std::vector); - }; + struct BlackBoxFuncCall { + Program::BlackBoxFuncCall value; - struct BlackBoxFuncCall { - Program::BlackBoxFuncCall value; + friend bool operator==(const BlackBoxFuncCall&, const BlackBoxFuncCall&); + std::vector bincodeSerialize() const; + static BlackBoxFuncCall bincodeDeserialize(std::vector); + }; - friend bool operator==(const BlackBoxFuncCall &, const BlackBoxFuncCall &); - std::vector bincodeSerialize() const; - static BlackBoxFuncCall bincodeDeserialize(std::vector); - }; + struct Directive { + Program::Directive value; - struct Directive { - Program::Directive value; + friend bool operator==(const Directive&, const Directive&); + std::vector bincodeSerialize() const; + static Directive bincodeDeserialize(std::vector); + }; - friend bool operator==(const Directive &, const Directive &); - std::vector bincodeSerialize() const; - static Directive bincodeDeserialize(std::vector); - }; + struct MemoryOp { + Program::BlockId block_id; + Program::MemOp op; + std::optional predicate; - struct MemoryOp { - Program::BlockId block_id; - Program::MemOp op; - std::optional predicate; + friend bool operator==(const MemoryOp&, const MemoryOp&); + std::vector bincodeSerialize() const; + static MemoryOp bincodeDeserialize(std::vector); + }; - friend bool operator==(const MemoryOp &, const MemoryOp &); - std::vector bincodeSerialize() const; - static MemoryOp bincodeDeserialize(std::vector); - }; + struct MemoryInit { + Program::BlockId block_id; + std::vector init; + Program::BlockType block_type; - struct MemoryInit { - Program::BlockId block_id; - std::vector init; - Program::BlockType block_type; + friend bool operator==(const MemoryInit&, const MemoryInit&); + std::vector bincodeSerialize() const; + static MemoryInit bincodeDeserialize(std::vector); + }; - friend bool operator==(const MemoryInit &, const MemoryInit &); - std::vector bincodeSerialize() const; - static MemoryInit bincodeDeserialize(std::vector); - }; + struct BrilligCall { + uint32_t id; + std::vector inputs; + std::vector outputs; + std::optional predicate; - struct BrilligCall { - uint32_t id; - std::vector inputs; - std::vector outputs; - std::optional predicate; - - friend bool operator==(const BrilligCall &, const BrilligCall &); - std::vector bincodeSerialize() const; - static BrilligCall bincodeDeserialize(std::vector); - }; + friend bool operator==(const BrilligCall&, const BrilligCall&); + std::vector bincodeSerialize() const; + static BrilligCall bincodeDeserialize(std::vector); + }; - struct Call { - uint32_t id; - std::vector inputs; - std::vector outputs; - std::optional predicate; + struct Call { + uint32_t id; + std::vector inputs; + std::vector outputs; + std::optional predicate; - friend bool operator==(const Call &, const Call &); - std::vector bincodeSerialize() const; - static Call bincodeDeserialize(std::vector); - }; - - std::variant - value; + friend bool operator==(const Call&, const Call&); + std::vector bincodeSerialize() const; + static Call bincodeDeserialize(std::vector); + }; - friend bool operator==(const Opcode &, const Opcode &); - std::vector bincodeSerialize() const; - static Opcode bincodeDeserialize(std::vector); -}; + std::variant value; -struct ExpressionOrMemory { - - struct Expression { - Program::Expression value; + friend bool operator==(const Opcode&, const Opcode&); + std::vector bincodeSerialize() const; + static Opcode bincodeDeserialize(std::vector); + }; - friend bool operator==(const Expression &, const Expression &); - std::vector bincodeSerialize() const; - static Expression bincodeDeserialize(std::vector); - }; - - struct Memory { - Program::BlockId value; - - friend bool operator==(const Memory &, const Memory &); - std::vector bincodeSerialize() const; - static Memory bincodeDeserialize(std::vector); - }; - - std::variant value; - - friend bool operator==(const ExpressionOrMemory &, - const ExpressionOrMemory &); - std::vector bincodeSerialize() const; - static ExpressionOrMemory bincodeDeserialize(std::vector); -}; - -struct AssertionPayload { - - struct StaticString { - std::string value; - - friend bool operator==(const StaticString &, const StaticString &); - std::vector bincodeSerialize() const; - static StaticString bincodeDeserialize(std::vector); - }; - - struct Dynamic { - std::tuple> value; - - friend bool operator==(const Dynamic &, const Dynamic &); - std::vector bincodeSerialize() const; - static Dynamic bincodeDeserialize(std::vector); - }; + struct ExpressionOrMemory { - std::variant value; + struct Expression { + Program::Expression value; - friend bool operator==(const AssertionPayload &, const AssertionPayload &); - std::vector bincodeSerialize() const; - static AssertionPayload bincodeDeserialize(std::vector); -}; - -struct ExpressionWidth { + friend bool operator==(const Expression&, const Expression&); + std::vector bincodeSerialize() const; + static Expression bincodeDeserialize(std::vector); + }; - struct Unbounded { - friend bool operator==(const Unbounded &, const Unbounded &); - std::vector bincodeSerialize() const; - static Unbounded bincodeDeserialize(std::vector); - }; + struct Memory { + Program::BlockId value; + + friend bool operator==(const Memory&, const Memory&); + std::vector bincodeSerialize() const; + static Memory bincodeDeserialize(std::vector); + }; + + std::variant value; + + friend bool operator==(const ExpressionOrMemory&, const ExpressionOrMemory&); + std::vector bincodeSerialize() const; + static ExpressionOrMemory bincodeDeserialize(std::vector); + }; - struct Bounded { - uint64_t width; + struct AssertionPayload { + + struct StaticString { + std::string value; + + friend bool operator==(const StaticString&, const StaticString&); + std::vector bincodeSerialize() const; + static StaticString bincodeDeserialize(std::vector); + }; + + struct Dynamic { + std::tuple> value; + + friend bool operator==(const Dynamic&, const Dynamic&); + std::vector bincodeSerialize() const; + static Dynamic bincodeDeserialize(std::vector); + }; - friend bool operator==(const Bounded &, const Bounded &); - std::vector bincodeSerialize() const; - static Bounded bincodeDeserialize(std::vector); - }; + std::variant value; - std::variant value; + friend bool operator==(const AssertionPayload&, const AssertionPayload&); + std::vector bincodeSerialize() const; + static AssertionPayload bincodeDeserialize(std::vector); + }; - friend bool operator==(const ExpressionWidth &, const ExpressionWidth &); - std::vector bincodeSerialize() const; - static ExpressionWidth bincodeDeserialize(std::vector); -}; + struct ExpressionWidth { -struct OpcodeLocation { + struct Unbounded { + friend bool operator==(const Unbounded&, const Unbounded&); + std::vector bincodeSerialize() const; + static Unbounded bincodeDeserialize(std::vector); + }; - struct Acir { - uint64_t value; + struct Bounded { + uint64_t width; - friend bool operator==(const Acir &, const Acir &); - std::vector bincodeSerialize() const; - static Acir bincodeDeserialize(std::vector); - }; + friend bool operator==(const Bounded&, const Bounded&); + std::vector bincodeSerialize() const; + static Bounded bincodeDeserialize(std::vector); + }; - struct Brillig { - uint64_t acir_index; - uint64_t brillig_index; + std::variant value; - friend bool operator==(const Brillig &, const Brillig &); - std::vector bincodeSerialize() const; - static Brillig bincodeDeserialize(std::vector); - }; + friend bool operator==(const ExpressionWidth&, const ExpressionWidth&); + std::vector bincodeSerialize() const; + static ExpressionWidth bincodeDeserialize(std::vector); + }; - std::variant value; + struct OpcodeLocation { - friend bool operator==(const OpcodeLocation &, const OpcodeLocation &); - std::vector bincodeSerialize() const; - static OpcodeLocation bincodeDeserialize(std::vector); -}; + struct Acir { + uint64_t value; -struct PublicInputs { - std::vector value; + friend bool operator==(const Acir&, const Acir&); + std::vector bincodeSerialize() const; + static Acir bincodeDeserialize(std::vector); + }; - friend bool operator==(const PublicInputs &, const PublicInputs &); - std::vector bincodeSerialize() const; - static PublicInputs bincodeDeserialize(std::vector); -}; + struct Brillig { + uint64_t acir_index; + uint64_t brillig_index; -struct Circuit { - uint32_t current_witness_index; - std::vector opcodes; - Program::ExpressionWidth expression_width; - std::vector private_parameters; - Program::PublicInputs public_parameters; - Program::PublicInputs return_values; - std::vector> - assert_messages; - bool recursive; + friend bool operator==(const Brillig&, const Brillig&); + std::vector bincodeSerialize() const; + static Brillig bincodeDeserialize(std::vector); + }; - friend bool operator==(const Circuit &, const Circuit &); - std::vector bincodeSerialize() const; - static Circuit bincodeDeserialize(std::vector); -}; + std::variant value; -struct BrilligBytecode { - std::vector bytecode; + friend bool operator==(const OpcodeLocation&, const OpcodeLocation&); + std::vector bincodeSerialize() const; + static OpcodeLocation bincodeDeserialize(std::vector); + }; - friend bool operator==(const BrilligBytecode &, const BrilligBytecode &); - std::vector bincodeSerialize() const; - static BrilligBytecode bincodeDeserialize(std::vector); -}; + struct PublicInputs { + std::vector value; -struct Program { - std::vector functions; - std::vector unconstrained_functions; + friend bool operator==(const PublicInputs&, const PublicInputs&); + std::vector bincodeSerialize() const; + static PublicInputs bincodeDeserialize(std::vector); + }; - friend bool operator==(const Program &, const Program &); - std::vector bincodeSerialize() const; - static Program bincodeDeserialize(std::vector); -}; + struct Circuit { + uint32_t current_witness_index; + std::vector opcodes; + Program::ExpressionWidth expression_width; + std::vector private_parameters; + Program::PublicInputs public_parameters; + Program::PublicInputs return_values; + std::vector> assert_messages; + bool recursive; + + friend bool operator==(const Circuit&, const Circuit&); + std::vector bincodeSerialize() const; + static Circuit bincodeDeserialize(std::vector); + }; + + struct BrilligBytecode { + std::vector bytecode; + + friend bool operator==(const BrilligBytecode&, const BrilligBytecode&); + std::vector bincodeSerialize() const; + static BrilligBytecode bincodeDeserialize(std::vector); + }; + + struct Program { + std::vector functions; + std::vector unconstrained_functions; + + friend bool operator==(const Program&, const Program&); + std::vector bincodeSerialize() const; + static Program bincodeDeserialize(std::vector); + }; } // end of namespace Program + namespace Program { -inline bool operator==(const AssertionPayload &lhs, - const AssertionPayload &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const AssertionPayload &lhs, const AssertionPayload &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector AssertionPayload::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector AssertionPayload::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline AssertionPayload -AssertionPayload::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline AssertionPayload AssertionPayload::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::AssertionPayload &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.value, serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::AssertionPayload &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.value, serializer); + serializer.decrease_container_depth(); } template <> template -Program::AssertionPayload -serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::AssertionPayload obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::AssertionPayload serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::AssertionPayload obj; + obj.value = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const AssertionPayload::StaticString &lhs, - const AssertionPayload::StaticString &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const AssertionPayload::StaticString &lhs, const AssertionPayload::StaticString &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector -AssertionPayload::StaticString::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); -} + inline std::vector AssertionPayload::StaticString::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline AssertionPayload::StaticString -AssertionPayload::StaticString::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline AssertionPayload::StaticString AssertionPayload::StaticString::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::AssertionPayload::StaticString &obj, - Serializer &serializer) { - serde::Serializable::serialize(obj.value, serializer); +void serde::Serializable::serialize(const Program::AssertionPayload::StaticString &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.value, serializer); } template <> template -Program::AssertionPayload::StaticString -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::AssertionPayload::StaticString obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::AssertionPayload::StaticString serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::AssertionPayload::StaticString obj; + obj.value = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const AssertionPayload::Dynamic &lhs, - const AssertionPayload::Dynamic &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const AssertionPayload::Dynamic &lhs, const AssertionPayload::Dynamic &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector -AssertionPayload::Dynamic::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector AssertionPayload::Dynamic::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline AssertionPayload::Dynamic -AssertionPayload::Dynamic::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline AssertionPayload::Dynamic AssertionPayload::Dynamic::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::AssertionPayload::Dynamic &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.value, serializer); +void serde::Serializable::serialize(const Program::AssertionPayload::Dynamic &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.value, serializer); } template <> template -Program::AssertionPayload::Dynamic -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::AssertionPayload::Dynamic obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::AssertionPayload::Dynamic serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::AssertionPayload::Dynamic obj; + obj.value = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BinaryFieldOp &lhs, const BinaryFieldOp &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const BinaryFieldOp &lhs, const BinaryFieldOp &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector BinaryFieldOp::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BinaryFieldOp::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BinaryFieldOp -BinaryFieldOp::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BinaryFieldOp BinaryFieldOp::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BinaryFieldOp &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.value, serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::BinaryFieldOp &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.value, serializer); + serializer.decrease_container_depth(); } template <> template -Program::BinaryFieldOp -serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::BinaryFieldOp obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::BinaryFieldOp serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::BinaryFieldOp obj; + obj.value = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const BinaryFieldOp::Add &lhs, - const BinaryFieldOp::Add &rhs) { - return true; -} + inline bool operator==(const BinaryFieldOp::Add &lhs, const BinaryFieldOp::Add &rhs) { + return true; + } -inline std::vector BinaryFieldOp::Add::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BinaryFieldOp::Add::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BinaryFieldOp::Add -BinaryFieldOp::Add::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BinaryFieldOp::Add BinaryFieldOp::Add::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BinaryFieldOp::Add &obj, Serializer &serializer) {} +void serde::Serializable::serialize(const Program::BinaryFieldOp::Add &obj, Serializer &serializer) { +} template <> template -Program::BinaryFieldOp::Add -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryFieldOp::Add obj; - return obj; +Program::BinaryFieldOp::Add serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryFieldOp::Add obj; + return obj; } namespace Program { -inline bool operator==(const BinaryFieldOp::Sub &lhs, - const BinaryFieldOp::Sub &rhs) { - return true; -} + inline bool operator==(const BinaryFieldOp::Sub &lhs, const BinaryFieldOp::Sub &rhs) { + return true; + } -inline std::vector BinaryFieldOp::Sub::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BinaryFieldOp::Sub::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BinaryFieldOp::Sub -BinaryFieldOp::Sub::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BinaryFieldOp::Sub BinaryFieldOp::Sub::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BinaryFieldOp::Sub &obj, Serializer &serializer) {} +void serde::Serializable::serialize(const Program::BinaryFieldOp::Sub &obj, Serializer &serializer) { +} template <> template -Program::BinaryFieldOp::Sub -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryFieldOp::Sub obj; - return obj; +Program::BinaryFieldOp::Sub serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryFieldOp::Sub obj; + return obj; } namespace Program { -inline bool operator==(const BinaryFieldOp::Mul &lhs, - const BinaryFieldOp::Mul &rhs) { - return true; -} + inline bool operator==(const BinaryFieldOp::Mul &lhs, const BinaryFieldOp::Mul &rhs) { + return true; + } -inline std::vector BinaryFieldOp::Mul::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BinaryFieldOp::Mul::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BinaryFieldOp::Mul -BinaryFieldOp::Mul::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BinaryFieldOp::Mul BinaryFieldOp::Mul::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BinaryFieldOp::Mul &obj, Serializer &serializer) {} +void serde::Serializable::serialize(const Program::BinaryFieldOp::Mul &obj, Serializer &serializer) { +} template <> template -Program::BinaryFieldOp::Mul -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryFieldOp::Mul obj; - return obj; +Program::BinaryFieldOp::Mul serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryFieldOp::Mul obj; + return obj; } namespace Program { -inline bool operator==(const BinaryFieldOp::Div &lhs, - const BinaryFieldOp::Div &rhs) { - return true; -} + inline bool operator==(const BinaryFieldOp::Div &lhs, const BinaryFieldOp::Div &rhs) { + return true; + } -inline std::vector BinaryFieldOp::Div::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BinaryFieldOp::Div::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BinaryFieldOp::Div -BinaryFieldOp::Div::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BinaryFieldOp::Div BinaryFieldOp::Div::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BinaryFieldOp::Div &obj, Serializer &serializer) {} +void serde::Serializable::serialize(const Program::BinaryFieldOp::Div &obj, Serializer &serializer) { +} template <> template -Program::BinaryFieldOp::Div -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryFieldOp::Div obj; - return obj; +Program::BinaryFieldOp::Div serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryFieldOp::Div obj; + return obj; } namespace Program { -inline bool operator==(const BinaryFieldOp::IntegerDiv &lhs, - const BinaryFieldOp::IntegerDiv &rhs) { - return true; -} + inline bool operator==(const BinaryFieldOp::IntegerDiv &lhs, const BinaryFieldOp::IntegerDiv &rhs) { + return true; + } -inline std::vector -BinaryFieldOp::IntegerDiv::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BinaryFieldOp::IntegerDiv::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BinaryFieldOp::IntegerDiv -BinaryFieldOp::IntegerDiv::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BinaryFieldOp::IntegerDiv BinaryFieldOp::IntegerDiv::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BinaryFieldOp::IntegerDiv &obj, Serializer &serializer) {} +void serde::Serializable::serialize(const Program::BinaryFieldOp::IntegerDiv &obj, Serializer &serializer) { +} template <> template -Program::BinaryFieldOp::IntegerDiv -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryFieldOp::IntegerDiv obj; - return obj; +Program::BinaryFieldOp::IntegerDiv serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryFieldOp::IntegerDiv obj; + return obj; } namespace Program { -inline bool operator==(const BinaryFieldOp::Equals &lhs, - const BinaryFieldOp::Equals &rhs) { - return true; -} + inline bool operator==(const BinaryFieldOp::Equals &lhs, const BinaryFieldOp::Equals &rhs) { + return true; + } -inline std::vector BinaryFieldOp::Equals::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BinaryFieldOp::Equals::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BinaryFieldOp::Equals -BinaryFieldOp::Equals::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BinaryFieldOp::Equals BinaryFieldOp::Equals::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BinaryFieldOp::Equals &obj, Serializer &serializer) {} +void serde::Serializable::serialize(const Program::BinaryFieldOp::Equals &obj, Serializer &serializer) { +} template <> template -Program::BinaryFieldOp::Equals -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryFieldOp::Equals obj; - return obj; +Program::BinaryFieldOp::Equals serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryFieldOp::Equals obj; + return obj; } namespace Program { -inline bool operator==(const BinaryFieldOp::LessThan &lhs, - const BinaryFieldOp::LessThan &rhs) { - return true; -} + inline bool operator==(const BinaryFieldOp::LessThan &lhs, const BinaryFieldOp::LessThan &rhs) { + return true; + } -inline std::vector BinaryFieldOp::LessThan::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BinaryFieldOp::LessThan::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BinaryFieldOp::LessThan -BinaryFieldOp::LessThan::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BinaryFieldOp::LessThan BinaryFieldOp::LessThan::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BinaryFieldOp::LessThan &obj, Serializer &serializer) {} +void serde::Serializable::serialize(const Program::BinaryFieldOp::LessThan &obj, Serializer &serializer) { +} template <> template -Program::BinaryFieldOp::LessThan -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryFieldOp::LessThan obj; - return obj; +Program::BinaryFieldOp::LessThan serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryFieldOp::LessThan obj; + return obj; } namespace Program { -inline bool operator==(const BinaryFieldOp::LessThanEquals &lhs, - const BinaryFieldOp::LessThanEquals &rhs) { - return true; -} + inline bool operator==(const BinaryFieldOp::LessThanEquals &lhs, const BinaryFieldOp::LessThanEquals &rhs) { + return true; + } -inline std::vector -BinaryFieldOp::LessThanEquals::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); -} + inline std::vector BinaryFieldOp::LessThanEquals::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BinaryFieldOp::LessThanEquals -BinaryFieldOp::LessThanEquals::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BinaryFieldOp::LessThanEquals BinaryFieldOp::LessThanEquals::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BinaryFieldOp::LessThanEquals &obj, Serializer &serializer) { +void serde::Serializable::serialize(const Program::BinaryFieldOp::LessThanEquals &obj, Serializer &serializer) { } template <> template -Program::BinaryFieldOp::LessThanEquals -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryFieldOp::LessThanEquals obj; - return obj; +Program::BinaryFieldOp::LessThanEquals serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryFieldOp::LessThanEquals obj; + return obj; } namespace Program { -inline bool operator==(const BinaryIntOp &lhs, const BinaryIntOp &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const BinaryIntOp &lhs, const BinaryIntOp &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector BinaryIntOp::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BinaryIntOp::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BinaryIntOp BinaryIntOp::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BinaryIntOp BinaryIntOp::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BinaryIntOp &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.value, serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::BinaryIntOp &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.value, serializer); + serializer.decrease_container_depth(); } template <> template -Program::BinaryIntOp serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::BinaryIntOp obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::BinaryIntOp serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::BinaryIntOp obj; + obj.value = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const BinaryIntOp::Add &lhs, - const BinaryIntOp::Add &rhs) { - return true; -} + inline bool operator==(const BinaryIntOp::Add &lhs, const BinaryIntOp::Add &rhs) { + return true; + } -inline std::vector BinaryIntOp::Add::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BinaryIntOp::Add::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BinaryIntOp::Add -BinaryIntOp::Add::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BinaryIntOp::Add BinaryIntOp::Add::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BinaryIntOp::Add &obj, Serializer &serializer) {} +void serde::Serializable::serialize(const Program::BinaryIntOp::Add &obj, Serializer &serializer) { +} template <> template -Program::BinaryIntOp::Add -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryIntOp::Add obj; - return obj; +Program::BinaryIntOp::Add serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryIntOp::Add obj; + return obj; } namespace Program { -inline bool operator==(const BinaryIntOp::Sub &lhs, - const BinaryIntOp::Sub &rhs) { - return true; -} + inline bool operator==(const BinaryIntOp::Sub &lhs, const BinaryIntOp::Sub &rhs) { + return true; + } -inline std::vector BinaryIntOp::Sub::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BinaryIntOp::Sub::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BinaryIntOp::Sub -BinaryIntOp::Sub::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BinaryIntOp::Sub BinaryIntOp::Sub::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BinaryIntOp::Sub &obj, Serializer &serializer) {} +void serde::Serializable::serialize(const Program::BinaryIntOp::Sub &obj, Serializer &serializer) { +} template <> template -Program::BinaryIntOp::Sub -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryIntOp::Sub obj; - return obj; +Program::BinaryIntOp::Sub serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryIntOp::Sub obj; + return obj; } namespace Program { -inline bool operator==(const BinaryIntOp::Mul &lhs, - const BinaryIntOp::Mul &rhs) { - return true; -} + inline bool operator==(const BinaryIntOp::Mul &lhs, const BinaryIntOp::Mul &rhs) { + return true; + } -inline std::vector BinaryIntOp::Mul::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BinaryIntOp::Mul::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BinaryIntOp::Mul -BinaryIntOp::Mul::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BinaryIntOp::Mul BinaryIntOp::Mul::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BinaryIntOp::Mul &obj, Serializer &serializer) {} +void serde::Serializable::serialize(const Program::BinaryIntOp::Mul &obj, Serializer &serializer) { +} template <> template -Program::BinaryIntOp::Mul -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryIntOp::Mul obj; - return obj; +Program::BinaryIntOp::Mul serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryIntOp::Mul obj; + return obj; } namespace Program { -inline bool operator==(const BinaryIntOp::Div &lhs, - const BinaryIntOp::Div &rhs) { - return true; -} + inline bool operator==(const BinaryIntOp::Div &lhs, const BinaryIntOp::Div &rhs) { + return true; + } -inline std::vector BinaryIntOp::Div::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BinaryIntOp::Div::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BinaryIntOp::Div -BinaryIntOp::Div::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BinaryIntOp::Div BinaryIntOp::Div::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BinaryIntOp::Div &obj, Serializer &serializer) {} +void serde::Serializable::serialize(const Program::BinaryIntOp::Div &obj, Serializer &serializer) { +} template <> template -Program::BinaryIntOp::Div -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryIntOp::Div obj; - return obj; +Program::BinaryIntOp::Div serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryIntOp::Div obj; + return obj; } namespace Program { -inline bool operator==(const BinaryIntOp::Equals &lhs, - const BinaryIntOp::Equals &rhs) { - return true; -} + inline bool operator==(const BinaryIntOp::Equals &lhs, const BinaryIntOp::Equals &rhs) { + return true; + } -inline std::vector BinaryIntOp::Equals::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BinaryIntOp::Equals::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BinaryIntOp::Equals -BinaryIntOp::Equals::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BinaryIntOp::Equals BinaryIntOp::Equals::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BinaryIntOp::Equals &obj, Serializer &serializer) {} +void serde::Serializable::serialize(const Program::BinaryIntOp::Equals &obj, Serializer &serializer) { +} template <> template -Program::BinaryIntOp::Equals -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryIntOp::Equals obj; - return obj; +Program::BinaryIntOp::Equals serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryIntOp::Equals obj; + return obj; } namespace Program { -inline bool operator==(const BinaryIntOp::LessThan &lhs, - const BinaryIntOp::LessThan &rhs) { - return true; -} + inline bool operator==(const BinaryIntOp::LessThan &lhs, const BinaryIntOp::LessThan &rhs) { + return true; + } -inline std::vector BinaryIntOp::LessThan::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BinaryIntOp::LessThan::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BinaryIntOp::LessThan -BinaryIntOp::LessThan::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BinaryIntOp::LessThan BinaryIntOp::LessThan::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BinaryIntOp::LessThan &obj, Serializer &serializer) {} +void serde::Serializable::serialize(const Program::BinaryIntOp::LessThan &obj, Serializer &serializer) { +} template <> template -Program::BinaryIntOp::LessThan -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryIntOp::LessThan obj; - return obj; +Program::BinaryIntOp::LessThan serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryIntOp::LessThan obj; + return obj; } namespace Program { -inline bool operator==(const BinaryIntOp::LessThanEquals &lhs, - const BinaryIntOp::LessThanEquals &rhs) { - return true; -} + inline bool operator==(const BinaryIntOp::LessThanEquals &lhs, const BinaryIntOp::LessThanEquals &rhs) { + return true; + } -inline std::vector -BinaryIntOp::LessThanEquals::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); -} + inline std::vector BinaryIntOp::LessThanEquals::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BinaryIntOp::LessThanEquals -BinaryIntOp::LessThanEquals::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BinaryIntOp::LessThanEquals BinaryIntOp::LessThanEquals::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BinaryIntOp::LessThanEquals &obj, Serializer &serializer) {} +void serde::Serializable::serialize(const Program::BinaryIntOp::LessThanEquals &obj, Serializer &serializer) { +} template <> template -Program::BinaryIntOp::LessThanEquals -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryIntOp::LessThanEquals obj; - return obj; +Program::BinaryIntOp::LessThanEquals serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryIntOp::LessThanEquals obj; + return obj; } namespace Program { -inline bool operator==(const BinaryIntOp::And &lhs, - const BinaryIntOp::And &rhs) { - return true; -} + inline bool operator==(const BinaryIntOp::And &lhs, const BinaryIntOp::And &rhs) { + return true; + } -inline std::vector BinaryIntOp::And::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BinaryIntOp::And::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BinaryIntOp::And -BinaryIntOp::And::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BinaryIntOp::And BinaryIntOp::And::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BinaryIntOp::And &obj, Serializer &serializer) {} +void serde::Serializable::serialize(const Program::BinaryIntOp::And &obj, Serializer &serializer) { +} template <> template -Program::BinaryIntOp::And -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryIntOp::And obj; - return obj; +Program::BinaryIntOp::And serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryIntOp::And obj; + return obj; } namespace Program { -inline bool operator==(const BinaryIntOp::Or &lhs, const BinaryIntOp::Or &rhs) { - return true; -} + inline bool operator==(const BinaryIntOp::Or &lhs, const BinaryIntOp::Or &rhs) { + return true; + } -inline std::vector BinaryIntOp::Or::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BinaryIntOp::Or::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BinaryIntOp::Or -BinaryIntOp::Or::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BinaryIntOp::Or BinaryIntOp::Or::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BinaryIntOp::Or &obj, Serializer &serializer) {} +void serde::Serializable::serialize(const Program::BinaryIntOp::Or &obj, Serializer &serializer) { +} template <> template -Program::BinaryIntOp::Or -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryIntOp::Or obj; - return obj; +Program::BinaryIntOp::Or serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryIntOp::Or obj; + return obj; } namespace Program { -inline bool operator==(const BinaryIntOp::Xor &lhs, - const BinaryIntOp::Xor &rhs) { - return true; -} + inline bool operator==(const BinaryIntOp::Xor &lhs, const BinaryIntOp::Xor &rhs) { + return true; + } -inline std::vector BinaryIntOp::Xor::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BinaryIntOp::Xor::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BinaryIntOp::Xor -BinaryIntOp::Xor::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BinaryIntOp::Xor BinaryIntOp::Xor::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BinaryIntOp::Xor &obj, Serializer &serializer) {} +void serde::Serializable::serialize(const Program::BinaryIntOp::Xor &obj, Serializer &serializer) { +} template <> template -Program::BinaryIntOp::Xor -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryIntOp::Xor obj; - return obj; +Program::BinaryIntOp::Xor serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryIntOp::Xor obj; + return obj; } namespace Program { -inline bool operator==(const BinaryIntOp::Shl &lhs, - const BinaryIntOp::Shl &rhs) { - return true; -} + inline bool operator==(const BinaryIntOp::Shl &lhs, const BinaryIntOp::Shl &rhs) { + return true; + } -inline std::vector BinaryIntOp::Shl::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BinaryIntOp::Shl::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BinaryIntOp::Shl -BinaryIntOp::Shl::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BinaryIntOp::Shl BinaryIntOp::Shl::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BinaryIntOp::Shl &obj, Serializer &serializer) {} +void serde::Serializable::serialize(const Program::BinaryIntOp::Shl &obj, Serializer &serializer) { +} template <> template -Program::BinaryIntOp::Shl -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryIntOp::Shl obj; - return obj; +Program::BinaryIntOp::Shl serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryIntOp::Shl obj; + return obj; } namespace Program { -inline bool operator==(const BinaryIntOp::Shr &lhs, - const BinaryIntOp::Shr &rhs) { - return true; -} + inline bool operator==(const BinaryIntOp::Shr &lhs, const BinaryIntOp::Shr &rhs) { + return true; + } -inline std::vector BinaryIntOp::Shr::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BinaryIntOp::Shr::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BinaryIntOp::Shr -BinaryIntOp::Shr::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BinaryIntOp::Shr BinaryIntOp::Shr::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BinaryIntOp::Shr &obj, Serializer &serializer) {} +void serde::Serializable::serialize(const Program::BinaryIntOp::Shr &obj, Serializer &serializer) { +} template <> template -Program::BinaryIntOp::Shr -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BinaryIntOp::Shr obj; - return obj; +Program::BinaryIntOp::Shr serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BinaryIntOp::Shr obj; + return obj; } namespace Program { -inline bool operator==(const BitSize &lhs, const BitSize &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const BitSize &lhs, const BitSize &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector BitSize::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BitSize::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BitSize BitSize::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BitSize BitSize::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BitSize &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.value, serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::BitSize &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.value, serializer); + serializer.decrease_container_depth(); } template <> template -Program::BitSize serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::BitSize obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::BitSize serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::BitSize obj; + obj.value = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const BitSize::Field &lhs, const BitSize::Field &rhs) { - return true; -} + inline bool operator==(const BitSize::Field &lhs, const BitSize::Field &rhs) { + return true; + } -inline std::vector BitSize::Field::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BitSize::Field::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BitSize::Field -BitSize::Field::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BitSize::Field BitSize::Field::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BitSize::Field &obj, Serializer &serializer) {} +void serde::Serializable::serialize(const Program::BitSize::Field &obj, Serializer &serializer) { +} template <> template -Program::BitSize::Field -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BitSize::Field obj; - return obj; +Program::BitSize::Field serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BitSize::Field obj; + return obj; } namespace Program { -inline bool operator==(const BitSize::Integer &lhs, - const BitSize::Integer &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const BitSize::Integer &lhs, const BitSize::Integer &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector BitSize::Integer::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BitSize::Integer::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BitSize::Integer -BitSize::Integer::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BitSize::Integer BitSize::Integer::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BitSize::Integer &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.value, serializer); +void serde::Serializable::serialize(const Program::BitSize::Integer &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.value, serializer); } template <> template -Program::BitSize::Integer -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BitSize::Integer obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BitSize::Integer serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BitSize::Integer obj; + obj.value = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxFuncCall &lhs, - const BlackBoxFuncCall &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxFuncCall &lhs, const BlackBoxFuncCall &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector BlackBoxFuncCall::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxFuncCall::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxFuncCall -BlackBoxFuncCall::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxFuncCall BlackBoxFuncCall::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxFuncCall &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.value, serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::BlackBoxFuncCall &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.value, serializer); + serializer.decrease_container_depth(); } template <> template -Program::BlackBoxFuncCall -serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::BlackBoxFuncCall obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::BlackBoxFuncCall serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::BlackBoxFuncCall obj; + obj.value = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const BlackBoxFuncCall::AES128Encrypt &lhs, - const BlackBoxFuncCall::AES128Encrypt &rhs) { - if (!(lhs.inputs == rhs.inputs)) { - return false; - } - if (!(lhs.iv == rhs.iv)) { - return false; - } - if (!(lhs.key == rhs.key)) { - return false; - } - if (!(lhs.outputs == rhs.outputs)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxFuncCall::AES128Encrypt &lhs, const BlackBoxFuncCall::AES128Encrypt &rhs) { + if (!(lhs.inputs == rhs.inputs)) { return false; } + if (!(lhs.iv == rhs.iv)) { return false; } + if (!(lhs.key == rhs.key)) { return false; } + if (!(lhs.outputs == rhs.outputs)) { return false; } + return true; + } -inline std::vector -BlackBoxFuncCall::AES128Encrypt::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxFuncCall::AES128Encrypt::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxFuncCall::AES128Encrypt -BlackBoxFuncCall::AES128Encrypt::bincodeDeserialize( - std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxFuncCall::AES128Encrypt BlackBoxFuncCall::AES128Encrypt::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxFuncCall::AES128Encrypt &obj, - Serializer &serializer) { - serde::Serializable::serialize(obj.inputs, serializer); - serde::Serializable::serialize(obj.iv, serializer); - serde::Serializable::serialize(obj.key, serializer); - serde::Serializable::serialize(obj.outputs, - serializer); +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::AES128Encrypt &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.inputs, serializer); + serde::Serializable::serialize(obj.iv, serializer); + serde::Serializable::serialize(obj.key, serializer); + serde::Serializable::serialize(obj.outputs, serializer); } template <> template -Program::BlackBoxFuncCall::AES128Encrypt -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxFuncCall::AES128Encrypt obj; - obj.inputs = - serde::Deserializable::deserialize(deserializer); - obj.iv = serde::Deserializable::deserialize(deserializer); - obj.key = serde::Deserializable::deserialize(deserializer); - obj.outputs = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxFuncCall::AES128Encrypt serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::AES128Encrypt obj; + obj.inputs = serde::Deserializable::deserialize(deserializer); + obj.iv = serde::Deserializable::deserialize(deserializer); + obj.key = serde::Deserializable::deserialize(deserializer); + obj.outputs = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxFuncCall::AND &lhs, - const BlackBoxFuncCall::AND &rhs) { - if (!(lhs.lhs == rhs.lhs)) { - return false; - } - if (!(lhs.rhs == rhs.rhs)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxFuncCall::AND &lhs, const BlackBoxFuncCall::AND &rhs) { + if (!(lhs.lhs == rhs.lhs)) { return false; } + if (!(lhs.rhs == rhs.rhs)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } -inline std::vector BlackBoxFuncCall::AND::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxFuncCall::AND::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxFuncCall::AND -BlackBoxFuncCall::AND::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxFuncCall::AND BlackBoxFuncCall::AND::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxFuncCall::AND &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.lhs, serializer); - serde::Serializable::serialize(obj.rhs, serializer); - serde::Serializable::serialize(obj.output, serializer); +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::AND &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.lhs, serializer); + serde::Serializable::serialize(obj.rhs, serializer); + serde::Serializable::serialize(obj.output, serializer); } template <> template -Program::BlackBoxFuncCall::AND -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxFuncCall::AND obj; - obj.lhs = serde::Deserializable::deserialize(deserializer); - obj.rhs = serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxFuncCall::AND serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::AND obj; + obj.lhs = serde::Deserializable::deserialize(deserializer); + obj.rhs = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxFuncCall::XOR &lhs, - const BlackBoxFuncCall::XOR &rhs) { - if (!(lhs.lhs == rhs.lhs)) { - return false; - } - if (!(lhs.rhs == rhs.rhs)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxFuncCall::XOR &lhs, const BlackBoxFuncCall::XOR &rhs) { + if (!(lhs.lhs == rhs.lhs)) { return false; } + if (!(lhs.rhs == rhs.rhs)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } -inline std::vector BlackBoxFuncCall::XOR::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxFuncCall::XOR::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxFuncCall::XOR -BlackBoxFuncCall::XOR::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxFuncCall::XOR BlackBoxFuncCall::XOR::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxFuncCall::XOR &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.lhs, serializer); - serde::Serializable::serialize(obj.rhs, serializer); - serde::Serializable::serialize(obj.output, serializer); +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::XOR &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.lhs, serializer); + serde::Serializable::serialize(obj.rhs, serializer); + serde::Serializable::serialize(obj.output, serializer); } template <> template -Program::BlackBoxFuncCall::XOR -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxFuncCall::XOR obj; - obj.lhs = serde::Deserializable::deserialize(deserializer); - obj.rhs = serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxFuncCall::XOR serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::XOR obj; + obj.lhs = serde::Deserializable::deserialize(deserializer); + obj.rhs = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxFuncCall::RANGE &lhs, - const BlackBoxFuncCall::RANGE &rhs) { - if (!(lhs.input == rhs.input)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxFuncCall::RANGE &lhs, const BlackBoxFuncCall::RANGE &rhs) { + if (!(lhs.input == rhs.input)) { return false; } + return true; + } -inline std::vector BlackBoxFuncCall::RANGE::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxFuncCall::RANGE::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxFuncCall::RANGE -BlackBoxFuncCall::RANGE::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxFuncCall::RANGE BlackBoxFuncCall::RANGE::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxFuncCall::RANGE &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.input, serializer); +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::RANGE &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.input, serializer); } template <> template -Program::BlackBoxFuncCall::RANGE -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxFuncCall::RANGE obj; - obj.input = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxFuncCall::RANGE serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::RANGE obj; + obj.input = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxFuncCall::Blake2s &lhs, - const BlackBoxFuncCall::Blake2s &rhs) { - if (!(lhs.inputs == rhs.inputs)) { - return false; - } - if (!(lhs.outputs == rhs.outputs)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxFuncCall::Blake2s &lhs, const BlackBoxFuncCall::Blake2s &rhs) { + if (!(lhs.inputs == rhs.inputs)) { return false; } + if (!(lhs.outputs == rhs.outputs)) { return false; } + return true; + } -inline std::vector -BlackBoxFuncCall::Blake2s::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxFuncCall::Blake2s::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxFuncCall::Blake2s -BlackBoxFuncCall::Blake2s::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxFuncCall::Blake2s BlackBoxFuncCall::Blake2s::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxFuncCall::Blake2s &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.inputs, serializer); - serde::Serializable::serialize(obj.outputs, - serializer); +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::Blake2s &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.inputs, serializer); + serde::Serializable::serialize(obj.outputs, serializer); } template <> template -Program::BlackBoxFuncCall::Blake2s -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxFuncCall::Blake2s obj; - obj.inputs = - serde::Deserializable::deserialize(deserializer); - obj.outputs = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxFuncCall::Blake2s serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::Blake2s obj; + obj.inputs = serde::Deserializable::deserialize(deserializer); + obj.outputs = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxFuncCall::Blake3 &lhs, - const BlackBoxFuncCall::Blake3 &rhs) { - if (!(lhs.inputs == rhs.inputs)) { - return false; - } - if (!(lhs.outputs == rhs.outputs)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxFuncCall::Blake3 &lhs, const BlackBoxFuncCall::Blake3 &rhs) { + if (!(lhs.inputs == rhs.inputs)) { return false; } + if (!(lhs.outputs == rhs.outputs)) { return false; } + return true; + } -inline std::vector BlackBoxFuncCall::Blake3::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxFuncCall::Blake3::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxFuncCall::Blake3 -BlackBoxFuncCall::Blake3::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxFuncCall::Blake3 BlackBoxFuncCall::Blake3::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxFuncCall::Blake3 &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.inputs, serializer); - serde::Serializable::serialize(obj.outputs, - serializer); +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::Blake3 &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.inputs, serializer); + serde::Serializable::serialize(obj.outputs, serializer); } template <> template -Program::BlackBoxFuncCall::Blake3 -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxFuncCall::Blake3 obj; - obj.inputs = - serde::Deserializable::deserialize(deserializer); - obj.outputs = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxFuncCall::Blake3 serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::Blake3 obj; + obj.inputs = serde::Deserializable::deserialize(deserializer); + obj.outputs = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxFuncCall::SchnorrVerify &lhs, - const BlackBoxFuncCall::SchnorrVerify &rhs) { - if (!(lhs.public_key_x == rhs.public_key_x)) { - return false; - } - if (!(lhs.public_key_y == rhs.public_key_y)) { - return false; - } - if (!(lhs.signature == rhs.signature)) { - return false; - } - if (!(lhs.message == rhs.message)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxFuncCall::SchnorrVerify &lhs, const BlackBoxFuncCall::SchnorrVerify &rhs) { + if (!(lhs.public_key_x == rhs.public_key_x)) { return false; } + if (!(lhs.public_key_y == rhs.public_key_y)) { return false; } + if (!(lhs.signature == rhs.signature)) { return false; } + if (!(lhs.message == rhs.message)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } -inline std::vector -BlackBoxFuncCall::SchnorrVerify::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxFuncCall::SchnorrVerify::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxFuncCall::SchnorrVerify -BlackBoxFuncCall::SchnorrVerify::bincodeDeserialize( - std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxFuncCall::SchnorrVerify BlackBoxFuncCall::SchnorrVerify::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxFuncCall::SchnorrVerify &obj, - Serializer &serializer) { - serde::Serializable::serialize(obj.public_key_x, - serializer); - serde::Serializable::serialize(obj.public_key_y, - serializer); - serde::Serializable::serialize(obj.signature, - serializer); - serde::Serializable::serialize(obj.message, - serializer); - serde::Serializable::serialize(obj.output, serializer); +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::SchnorrVerify &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.public_key_x, serializer); + serde::Serializable::serialize(obj.public_key_y, serializer); + serde::Serializable::serialize(obj.signature, serializer); + serde::Serializable::serialize(obj.message, serializer); + serde::Serializable::serialize(obj.output, serializer); } template <> template -Program::BlackBoxFuncCall::SchnorrVerify -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxFuncCall::SchnorrVerify obj; - obj.public_key_x = - serde::Deserializable::deserialize( - deserializer); - obj.public_key_y = - serde::Deserializable::deserialize( - deserializer); - obj.signature = - serde::Deserializable::deserialize(deserializer); - obj.message = - serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; -} - -namespace Program { - -inline bool operator==(const BlackBoxFuncCall::PedersenCommitment &lhs, - const BlackBoxFuncCall::PedersenCommitment &rhs) { - if (!(lhs.inputs == rhs.inputs)) { - return false; - } - if (!(lhs.domain_separator == rhs.domain_separator)) { - return false; - } - if (!(lhs.outputs == rhs.outputs)) { - return false; - } - return true; +Program::BlackBoxFuncCall::SchnorrVerify serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::SchnorrVerify obj; + obj.public_key_x = serde::Deserializable::deserialize(deserializer); + obj.public_key_y = serde::Deserializable::deserialize(deserializer); + obj.signature = serde::Deserializable::deserialize(deserializer); + obj.message = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; } -inline std::vector -BlackBoxFuncCall::PedersenCommitment::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize( - *this, serializer); - return std::move(serializer).bytes(); -} +namespace Program { -inline BlackBoxFuncCall::PedersenCommitment -BlackBoxFuncCall::PedersenCommitment::bincodeDeserialize( - std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline bool operator==(const BlackBoxFuncCall::PedersenCommitment &lhs, const BlackBoxFuncCall::PedersenCommitment &rhs) { + if (!(lhs.inputs == rhs.inputs)) { return false; } + if (!(lhs.domain_separator == rhs.domain_separator)) { return false; } + if (!(lhs.outputs == rhs.outputs)) { return false; } + return true; + } + + inline std::vector BlackBoxFuncCall::PedersenCommitment::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BlackBoxFuncCall::PedersenCommitment BlackBoxFuncCall::PedersenCommitment::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable:: - serialize(const Program::BlackBoxFuncCall::PedersenCommitment &obj, - Serializer &serializer) { - serde::Serializable::serialize(obj.inputs, serializer); - serde::Serializable::serialize( - obj.domain_separator, serializer); - serde::Serializable::serialize(obj.outputs, - serializer); +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::PedersenCommitment &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.inputs, serializer); + serde::Serializable::serialize(obj.domain_separator, serializer); + serde::Serializable::serialize(obj.outputs, serializer); } template <> template -Program::BlackBoxFuncCall::PedersenCommitment -serde::Deserializable:: - deserialize(Deserializer &deserializer) { - Program::BlackBoxFuncCall::PedersenCommitment obj; - obj.inputs = - serde::Deserializable::deserialize(deserializer); - obj.domain_separator = - serde::Deserializable::deserialize( - deserializer); - obj.outputs = - serde::Deserializable::deserialize(deserializer); - return obj; -} - -namespace Program { - -inline bool operator==(const BlackBoxFuncCall::PedersenHash &lhs, - const BlackBoxFuncCall::PedersenHash &rhs) { - if (!(lhs.inputs == rhs.inputs)) { - return false; - } - if (!(lhs.domain_separator == rhs.domain_separator)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; +Program::BlackBoxFuncCall::PedersenCommitment serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::PedersenCommitment obj; + obj.inputs = serde::Deserializable::deserialize(deserializer); + obj.domain_separator = serde::Deserializable::deserialize(deserializer); + obj.outputs = serde::Deserializable::deserialize(deserializer); + return obj; } -inline std::vector -BlackBoxFuncCall::PedersenHash::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); -} +namespace Program { -inline BlackBoxFuncCall::PedersenHash -BlackBoxFuncCall::PedersenHash::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline bool operator==(const BlackBoxFuncCall::PedersenHash &lhs, const BlackBoxFuncCall::PedersenHash &rhs) { + if (!(lhs.inputs == rhs.inputs)) { return false; } + if (!(lhs.domain_separator == rhs.domain_separator)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } + + inline std::vector BlackBoxFuncCall::PedersenHash::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BlackBoxFuncCall::PedersenHash BlackBoxFuncCall::PedersenHash::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxFuncCall::PedersenHash &obj, - Serializer &serializer) { - serde::Serializable::serialize(obj.inputs, serializer); - serde::Serializable::serialize( - obj.domain_separator, serializer); - serde::Serializable::serialize(obj.output, serializer); +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::PedersenHash &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.inputs, serializer); + serde::Serializable::serialize(obj.domain_separator, serializer); + serde::Serializable::serialize(obj.output, serializer); } template <> template -Program::BlackBoxFuncCall::PedersenHash -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxFuncCall::PedersenHash obj; - obj.inputs = - serde::Deserializable::deserialize(deserializer); - obj.domain_separator = - serde::Deserializable::deserialize( - deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxFuncCall::PedersenHash serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::PedersenHash obj; + obj.inputs = serde::Deserializable::deserialize(deserializer); + obj.domain_separator = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxFuncCall::EcdsaSecp256k1 &lhs, - const BlackBoxFuncCall::EcdsaSecp256k1 &rhs) { - if (!(lhs.public_key_x == rhs.public_key_x)) { - return false; - } - if (!(lhs.public_key_y == rhs.public_key_y)) { - return false; - } - if (!(lhs.signature == rhs.signature)) { - return false; - } - if (!(lhs.hashed_message == rhs.hashed_message)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; -} - -inline std::vector -BlackBoxFuncCall::EcdsaSecp256k1::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); -} - -inline BlackBoxFuncCall::EcdsaSecp256k1 -BlackBoxFuncCall::EcdsaSecp256k1::bincodeDeserialize( - std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} - -} // end of namespace Program + inline bool operator==(const BlackBoxFuncCall::EcdsaSecp256k1 &lhs, const BlackBoxFuncCall::EcdsaSecp256k1 &rhs) { + if (!(lhs.public_key_x == rhs.public_key_x)) { return false; } + if (!(lhs.public_key_y == rhs.public_key_y)) { return false; } + if (!(lhs.signature == rhs.signature)) { return false; } + if (!(lhs.hashed_message == rhs.hashed_message)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } + + inline std::vector BlackBoxFuncCall::EcdsaSecp256k1::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BlackBoxFuncCall::EcdsaSecp256k1 BlackBoxFuncCall::EcdsaSecp256k1::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxFuncCall::EcdsaSecp256k1 &obj, - Serializer &serializer) { - serde::Serializable::serialize(obj.public_key_x, - serializer); - serde::Serializable::serialize(obj.public_key_y, - serializer); - serde::Serializable::serialize(obj.signature, - serializer); - serde::Serializable::serialize( - obj.hashed_message, serializer); - serde::Serializable::serialize(obj.output, serializer); -} - -template <> -template -Program::BlackBoxFuncCall::EcdsaSecp256k1 -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxFuncCall::EcdsaSecp256k1 obj; - obj.public_key_x = - serde::Deserializable::deserialize( - deserializer); - obj.public_key_y = - serde::Deserializable::deserialize( - deserializer); - obj.signature = - serde::Deserializable::deserialize(deserializer); - obj.hashed_message = - serde::Deserializable::deserialize( - deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; -} - -namespace Program { - -inline bool operator==(const BlackBoxFuncCall::EcdsaSecp256r1 &lhs, - const BlackBoxFuncCall::EcdsaSecp256r1 &rhs) { - if (!(lhs.public_key_x == rhs.public_key_x)) { - return false; - } - if (!(lhs.public_key_y == rhs.public_key_y)) { - return false; - } - if (!(lhs.signature == rhs.signature)) { - return false; - } - if (!(lhs.hashed_message == rhs.hashed_message)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; -} - -inline std::vector -BlackBoxFuncCall::EcdsaSecp256r1::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); -} - -inline BlackBoxFuncCall::EcdsaSecp256r1 -BlackBoxFuncCall::EcdsaSecp256r1::bincodeDeserialize( - std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} - -} // end of namespace Program - -template <> -template -void serde::Serializable::serialize( - const Program::BlackBoxFuncCall::EcdsaSecp256r1 &obj, - Serializer &serializer) { - serde::Serializable::serialize(obj.public_key_x, - serializer); - serde::Serializable::serialize(obj.public_key_y, - serializer); - serde::Serializable::serialize(obj.signature, - serializer); - serde::Serializable::serialize( - obj.hashed_message, serializer); - serde::Serializable::serialize(obj.output, serializer); -} - -template <> -template -Program::BlackBoxFuncCall::EcdsaSecp256r1 -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxFuncCall::EcdsaSecp256r1 obj; - obj.public_key_x = - serde::Deserializable::deserialize( - deserializer); - obj.public_key_y = - serde::Deserializable::deserialize( - deserializer); - obj.signature = - serde::Deserializable::deserialize(deserializer); - obj.hashed_message = - serde::Deserializable::deserialize( - deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; -} - -namespace Program { - -inline bool operator==(const BlackBoxFuncCall::MultiScalarMul &lhs, - const BlackBoxFuncCall::MultiScalarMul &rhs) { - if (!(lhs.points == rhs.points)) { - return false; - } - if (!(lhs.scalars == rhs.scalars)) { - return false; - } - if (!(lhs.outputs == rhs.outputs)) { - return false; - } - return true; +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::EcdsaSecp256k1 &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.public_key_x, serializer); + serde::Serializable::serialize(obj.public_key_y, serializer); + serde::Serializable::serialize(obj.signature, serializer); + serde::Serializable::serialize(obj.hashed_message, serializer); + serde::Serializable::serialize(obj.output, serializer); } -inline std::vector -BlackBoxFuncCall::MultiScalarMul::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); +template <> +template +Program::BlackBoxFuncCall::EcdsaSecp256k1 serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::EcdsaSecp256k1 obj; + obj.public_key_x = serde::Deserializable::deserialize(deserializer); + obj.public_key_y = serde::Deserializable::deserialize(deserializer); + obj.signature = serde::Deserializable::deserialize(deserializer); + obj.hashed_message = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; } -inline BlackBoxFuncCall::MultiScalarMul -BlackBoxFuncCall::MultiScalarMul::bincodeDeserialize( - std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} +namespace Program { + + inline bool operator==(const BlackBoxFuncCall::EcdsaSecp256r1 &lhs, const BlackBoxFuncCall::EcdsaSecp256r1 &rhs) { + if (!(lhs.public_key_x == rhs.public_key_x)) { return false; } + if (!(lhs.public_key_y == rhs.public_key_y)) { return false; } + if (!(lhs.signature == rhs.signature)) { return false; } + if (!(lhs.hashed_message == rhs.hashed_message)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } + + inline std::vector BlackBoxFuncCall::EcdsaSecp256r1::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BlackBoxFuncCall::EcdsaSecp256r1 BlackBoxFuncCall::EcdsaSecp256r1::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxFuncCall::MultiScalarMul &obj, - Serializer &serializer) { - serde::Serializable::serialize(obj.points, serializer); - serde::Serializable::serialize(obj.scalars, - serializer); - serde::Serializable::serialize(obj.outputs, - serializer); +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::EcdsaSecp256r1 &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.public_key_x, serializer); + serde::Serializable::serialize(obj.public_key_y, serializer); + serde::Serializable::serialize(obj.signature, serializer); + serde::Serializable::serialize(obj.hashed_message, serializer); + serde::Serializable::serialize(obj.output, serializer); } template <> template -Program::BlackBoxFuncCall::MultiScalarMul -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxFuncCall::MultiScalarMul obj; - obj.points = - serde::Deserializable::deserialize(deserializer); - obj.scalars = - serde::Deserializable::deserialize(deserializer); - obj.outputs = - serde::Deserializable::deserialize(deserializer); - return obj; -} +Program::BlackBoxFuncCall::EcdsaSecp256r1 serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::EcdsaSecp256r1 obj; + obj.public_key_x = serde::Deserializable::deserialize(deserializer); + obj.public_key_y = serde::Deserializable::deserialize(deserializer); + obj.signature = serde::Deserializable::deserialize(deserializer); + obj.hashed_message = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; +} namespace Program { -inline bool operator==(const BlackBoxFuncCall::EmbeddedCurveAdd &lhs, - const BlackBoxFuncCall::EmbeddedCurveAdd &rhs) { - if (!(lhs.input1 == rhs.input1)) { - return false; - } - if (!(lhs.input2 == rhs.input2)) { - return false; - } - if (!(lhs.outputs == rhs.outputs)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxFuncCall::MultiScalarMul &lhs, const BlackBoxFuncCall::MultiScalarMul &rhs) { + if (!(lhs.points == rhs.points)) { return false; } + if (!(lhs.scalars == rhs.scalars)) { return false; } + if (!(lhs.outputs == rhs.outputs)) { return false; } + return true; + } -inline std::vector -BlackBoxFuncCall::EmbeddedCurveAdd::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize( - *this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxFuncCall::MultiScalarMul::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxFuncCall::EmbeddedCurveAdd -BlackBoxFuncCall::EmbeddedCurveAdd::bincodeDeserialize( - std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxFuncCall::MultiScalarMul BlackBoxFuncCall::MultiScalarMul::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable:: - serialize(const Program::BlackBoxFuncCall::EmbeddedCurveAdd &obj, - Serializer &serializer) { - serde::Serializable::serialize(obj.input1, serializer); - serde::Serializable::serialize(obj.input2, serializer); - serde::Serializable::serialize(obj.outputs, - serializer); +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::MultiScalarMul &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.points, serializer); + serde::Serializable::serialize(obj.scalars, serializer); + serde::Serializable::serialize(obj.outputs, serializer); } template <> template -Program::BlackBoxFuncCall::EmbeddedCurveAdd -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxFuncCall::EmbeddedCurveAdd obj; - obj.input1 = - serde::Deserializable::deserialize(deserializer); - obj.input2 = - serde::Deserializable::deserialize(deserializer); - obj.outputs = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxFuncCall::MultiScalarMul serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::MultiScalarMul obj; + obj.points = serde::Deserializable::deserialize(deserializer); + obj.scalars = serde::Deserializable::deserialize(deserializer); + obj.outputs = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxFuncCall::Keccak256 &lhs, - const BlackBoxFuncCall::Keccak256 &rhs) { - if (!(lhs.inputs == rhs.inputs)) { - return false; - } - if (!(lhs.var_message_size == rhs.var_message_size)) { - return false; - } - if (!(lhs.outputs == rhs.outputs)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxFuncCall::EmbeddedCurveAdd &lhs, const BlackBoxFuncCall::EmbeddedCurveAdd &rhs) { + if (!(lhs.input1 == rhs.input1)) { return false; } + if (!(lhs.input2 == rhs.input2)) { return false; } + if (!(lhs.outputs == rhs.outputs)) { return false; } + return true; + } -inline std::vector -BlackBoxFuncCall::Keccak256::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxFuncCall::EmbeddedCurveAdd::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxFuncCall::Keccak256 -BlackBoxFuncCall::Keccak256::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxFuncCall::EmbeddedCurveAdd BlackBoxFuncCall::EmbeddedCurveAdd::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxFuncCall::Keccak256 &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.inputs, serializer); - serde::Serializable::serialize( - obj.var_message_size, serializer); - serde::Serializable::serialize(obj.outputs, - serializer); +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::EmbeddedCurveAdd &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.input1, serializer); + serde::Serializable::serialize(obj.input2, serializer); + serde::Serializable::serialize(obj.outputs, serializer); } template <> template -Program::BlackBoxFuncCall::Keccak256 -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxFuncCall::Keccak256 obj; - obj.inputs = - serde::Deserializable::deserialize(deserializer); - obj.var_message_size = - serde::Deserializable::deserialize( - deserializer); - obj.outputs = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxFuncCall::EmbeddedCurveAdd serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::EmbeddedCurveAdd obj; + obj.input1 = serde::Deserializable::deserialize(deserializer); + obj.input2 = serde::Deserializable::deserialize(deserializer); + obj.outputs = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxFuncCall::Keccakf1600 &lhs, - const BlackBoxFuncCall::Keccakf1600 &rhs) { - if (!(lhs.inputs == rhs.inputs)) { - return false; - } - if (!(lhs.outputs == rhs.outputs)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxFuncCall::Keccak256 &lhs, const BlackBoxFuncCall::Keccak256 &rhs) { + if (!(lhs.inputs == rhs.inputs)) { return false; } + if (!(lhs.var_message_size == rhs.var_message_size)) { return false; } + if (!(lhs.outputs == rhs.outputs)) { return false; } + return true; + } -inline std::vector -BlackBoxFuncCall::Keccakf1600::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxFuncCall::Keccak256::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxFuncCall::Keccakf1600 -BlackBoxFuncCall::Keccakf1600::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxFuncCall::Keccak256 BlackBoxFuncCall::Keccak256::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxFuncCall::Keccakf1600 &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.inputs, serializer); - serde::Serializable::serialize(obj.outputs, - serializer); +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::Keccak256 &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.inputs, serializer); + serde::Serializable::serialize(obj.var_message_size, serializer); + serde::Serializable::serialize(obj.outputs, serializer); } template <> template -Program::BlackBoxFuncCall::Keccakf1600 -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxFuncCall::Keccakf1600 obj; - obj.inputs = - serde::Deserializable::deserialize(deserializer); - obj.outputs = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxFuncCall::Keccak256 serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::Keccak256 obj; + obj.inputs = serde::Deserializable::deserialize(deserializer); + obj.var_message_size = serde::Deserializable::deserialize(deserializer); + obj.outputs = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxFuncCall::RecursiveAggregation &lhs, - const BlackBoxFuncCall::RecursiveAggregation &rhs) { - if (!(lhs.verification_key == rhs.verification_key)) { - return false; - } - if (!(lhs.proof == rhs.proof)) { - return false; - } - if (!(lhs.public_inputs == rhs.public_inputs)) { - return false; - } - if (!(lhs.key_hash == rhs.key_hash)) { - return false; - } - if (!(lhs.proof_type == rhs.proof_type)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxFuncCall::Keccakf1600 &lhs, const BlackBoxFuncCall::Keccakf1600 &rhs) { + if (!(lhs.inputs == rhs.inputs)) { return false; } + if (!(lhs.outputs == rhs.outputs)) { return false; } + return true; + } -inline std::vector -BlackBoxFuncCall::RecursiveAggregation::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize( - *this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxFuncCall::Keccakf1600::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxFuncCall::RecursiveAggregation -BlackBoxFuncCall::RecursiveAggregation::bincodeDeserialize( - std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable< - BlackBoxFuncCall::RecursiveAggregation>::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxFuncCall::Keccakf1600 BlackBoxFuncCall::Keccakf1600::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable:: - serialize(const Program::BlackBoxFuncCall::RecursiveAggregation &obj, - Serializer &serializer) { - serde::Serializable::serialize( - obj.verification_key, serializer); - serde::Serializable::serialize(obj.proof, serializer); - serde::Serializable::serialize(obj.public_inputs, - serializer); - serde::Serializable::serialize(obj.key_hash, - serializer); - serde::Serializable::serialize(obj.proof_type, - serializer); +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::Keccakf1600 &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.inputs, serializer); + serde::Serializable::serialize(obj.outputs, serializer); } template <> template -Program::BlackBoxFuncCall::RecursiveAggregation -serde::Deserializable:: - deserialize(Deserializer &deserializer) { - Program::BlackBoxFuncCall::RecursiveAggregation obj; - obj.verification_key = - serde::Deserializable::deserialize( - deserializer); - obj.proof = - serde::Deserializable::deserialize(deserializer); - obj.public_inputs = - serde::Deserializable::deserialize( - deserializer); - obj.key_hash = - serde::Deserializable::deserialize(deserializer); - obj.proof_type = serde::Deserializable::deserialize( - deserializer); - return obj; +Program::BlackBoxFuncCall::Keccakf1600 serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::Keccakf1600 obj; + obj.inputs = serde::Deserializable::deserialize(deserializer); + obj.outputs = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxFuncCall::BigIntAdd &lhs, - const BlackBoxFuncCall::BigIntAdd &rhs) { - if (!(lhs.lhs == rhs.lhs)) { - return false; - } - if (!(lhs.rhs == rhs.rhs)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxFuncCall::RecursiveAggregation &lhs, const BlackBoxFuncCall::RecursiveAggregation &rhs) { + if (!(lhs.verification_key == rhs.verification_key)) { return false; } + if (!(lhs.proof == rhs.proof)) { return false; } + if (!(lhs.public_inputs == rhs.public_inputs)) { return false; } + if (!(lhs.key_hash == rhs.key_hash)) { return false; } + if (!(lhs.proof_type == rhs.proof_type)) { return false; } + return true; + } -inline std::vector -BlackBoxFuncCall::BigIntAdd::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxFuncCall::RecursiveAggregation::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxFuncCall::BigIntAdd -BlackBoxFuncCall::BigIntAdd::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxFuncCall::RecursiveAggregation BlackBoxFuncCall::RecursiveAggregation::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxFuncCall::BigIntAdd &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.lhs, serializer); - serde::Serializable::serialize(obj.rhs, serializer); - serde::Serializable::serialize(obj.output, serializer); +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::RecursiveAggregation &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.verification_key, serializer); + serde::Serializable::serialize(obj.proof, serializer); + serde::Serializable::serialize(obj.public_inputs, serializer); + serde::Serializable::serialize(obj.key_hash, serializer); + serde::Serializable::serialize(obj.proof_type, serializer); } template <> template -Program::BlackBoxFuncCall::BigIntAdd -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxFuncCall::BigIntAdd obj; - obj.lhs = serde::Deserializable::deserialize(deserializer); - obj.rhs = serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxFuncCall::RecursiveAggregation serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::RecursiveAggregation obj; + obj.verification_key = serde::Deserializable::deserialize(deserializer); + obj.proof = serde::Deserializable::deserialize(deserializer); + obj.public_inputs = serde::Deserializable::deserialize(deserializer); + obj.key_hash = serde::Deserializable::deserialize(deserializer); + obj.proof_type = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxFuncCall::BigIntSub &lhs, - const BlackBoxFuncCall::BigIntSub &rhs) { - if (!(lhs.lhs == rhs.lhs)) { - return false; - } - if (!(lhs.rhs == rhs.rhs)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxFuncCall::BigIntAdd &lhs, const BlackBoxFuncCall::BigIntAdd &rhs) { + if (!(lhs.lhs == rhs.lhs)) { return false; } + if (!(lhs.rhs == rhs.rhs)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } -inline std::vector -BlackBoxFuncCall::BigIntSub::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxFuncCall::BigIntAdd::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxFuncCall::BigIntSub -BlackBoxFuncCall::BigIntSub::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxFuncCall::BigIntAdd BlackBoxFuncCall::BigIntAdd::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxFuncCall::BigIntSub &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.lhs, serializer); - serde::Serializable::serialize(obj.rhs, serializer); - serde::Serializable::serialize(obj.output, serializer); +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::BigIntAdd &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.lhs, serializer); + serde::Serializable::serialize(obj.rhs, serializer); + serde::Serializable::serialize(obj.output, serializer); } template <> template -Program::BlackBoxFuncCall::BigIntSub -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxFuncCall::BigIntSub obj; - obj.lhs = serde::Deserializable::deserialize(deserializer); - obj.rhs = serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxFuncCall::BigIntAdd serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::BigIntAdd obj; + obj.lhs = serde::Deserializable::deserialize(deserializer); + obj.rhs = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxFuncCall::BigIntMul &lhs, - const BlackBoxFuncCall::BigIntMul &rhs) { - if (!(lhs.lhs == rhs.lhs)) { - return false; - } - if (!(lhs.rhs == rhs.rhs)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxFuncCall::BigIntSub &lhs, const BlackBoxFuncCall::BigIntSub &rhs) { + if (!(lhs.lhs == rhs.lhs)) { return false; } + if (!(lhs.rhs == rhs.rhs)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } -inline std::vector -BlackBoxFuncCall::BigIntMul::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxFuncCall::BigIntSub::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxFuncCall::BigIntMul -BlackBoxFuncCall::BigIntMul::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxFuncCall::BigIntSub BlackBoxFuncCall::BigIntSub::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxFuncCall::BigIntMul &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.lhs, serializer); - serde::Serializable::serialize(obj.rhs, serializer); - serde::Serializable::serialize(obj.output, serializer); +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::BigIntSub &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.lhs, serializer); + serde::Serializable::serialize(obj.rhs, serializer); + serde::Serializable::serialize(obj.output, serializer); } template <> template -Program::BlackBoxFuncCall::BigIntMul -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxFuncCall::BigIntMul obj; - obj.lhs = serde::Deserializable::deserialize(deserializer); - obj.rhs = serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxFuncCall::BigIntSub serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::BigIntSub obj; + obj.lhs = serde::Deserializable::deserialize(deserializer); + obj.rhs = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxFuncCall::BigIntDiv &lhs, - const BlackBoxFuncCall::BigIntDiv &rhs) { - if (!(lhs.lhs == rhs.lhs)) { - return false; - } - if (!(lhs.rhs == rhs.rhs)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxFuncCall::BigIntMul &lhs, const BlackBoxFuncCall::BigIntMul &rhs) { + if (!(lhs.lhs == rhs.lhs)) { return false; } + if (!(lhs.rhs == rhs.rhs)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } -inline std::vector -BlackBoxFuncCall::BigIntDiv::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxFuncCall::BigIntMul::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxFuncCall::BigIntDiv -BlackBoxFuncCall::BigIntDiv::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxFuncCall::BigIntMul BlackBoxFuncCall::BigIntMul::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxFuncCall::BigIntDiv &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.lhs, serializer); - serde::Serializable::serialize(obj.rhs, serializer); - serde::Serializable::serialize(obj.output, serializer); +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::BigIntMul &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.lhs, serializer); + serde::Serializable::serialize(obj.rhs, serializer); + serde::Serializable::serialize(obj.output, serializer); } template <> template -Program::BlackBoxFuncCall::BigIntDiv -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxFuncCall::BigIntDiv obj; - obj.lhs = serde::Deserializable::deserialize(deserializer); - obj.rhs = serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxFuncCall::BigIntMul serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::BigIntMul obj; + obj.lhs = serde::Deserializable::deserialize(deserializer); + obj.rhs = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxFuncCall::BigIntFromLeBytes &lhs, - const BlackBoxFuncCall::BigIntFromLeBytes &rhs) { - if (!(lhs.inputs == rhs.inputs)) { - return false; - } - if (!(lhs.modulus == rhs.modulus)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxFuncCall::BigIntDiv &lhs, const BlackBoxFuncCall::BigIntDiv &rhs) { + if (!(lhs.lhs == rhs.lhs)) { return false; } + if (!(lhs.rhs == rhs.rhs)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } -inline std::vector -BlackBoxFuncCall::BigIntFromLeBytes::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize( - *this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxFuncCall::BigIntDiv::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxFuncCall::BigIntFromLeBytes -BlackBoxFuncCall::BigIntFromLeBytes::bincodeDeserialize( - std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxFuncCall::BigIntDiv BlackBoxFuncCall::BigIntDiv::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable:: - serialize(const Program::BlackBoxFuncCall::BigIntFromLeBytes &obj, - Serializer &serializer) { - serde::Serializable::serialize(obj.inputs, serializer); - serde::Serializable::serialize(obj.modulus, - serializer); - serde::Serializable::serialize(obj.output, serializer); +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::BigIntDiv &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.lhs, serializer); + serde::Serializable::serialize(obj.rhs, serializer); + serde::Serializable::serialize(obj.output, serializer); } template <> template -Program::BlackBoxFuncCall::BigIntFromLeBytes -serde::Deserializable:: - deserialize(Deserializer &deserializer) { - Program::BlackBoxFuncCall::BigIntFromLeBytes obj; - obj.inputs = - serde::Deserializable::deserialize(deserializer); - obj.modulus = - serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxFuncCall::BigIntDiv serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::BigIntDiv obj; + obj.lhs = serde::Deserializable::deserialize(deserializer); + obj.rhs = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxFuncCall::BigIntToLeBytes &lhs, - const BlackBoxFuncCall::BigIntToLeBytes &rhs) { - if (!(lhs.input == rhs.input)) { - return false; - } - if (!(lhs.outputs == rhs.outputs)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxFuncCall::BigIntFromLeBytes &lhs, const BlackBoxFuncCall::BigIntFromLeBytes &rhs) { + if (!(lhs.inputs == rhs.inputs)) { return false; } + if (!(lhs.modulus == rhs.modulus)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } -inline std::vector -BlackBoxFuncCall::BigIntToLeBytes::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxFuncCall::BigIntFromLeBytes::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxFuncCall::BigIntToLeBytes -BlackBoxFuncCall::BigIntToLeBytes::bincodeDeserialize( - std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxFuncCall::BigIntFromLeBytes BlackBoxFuncCall::BigIntFromLeBytes::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxFuncCall::BigIntToLeBytes &obj, - Serializer &serializer) { - serde::Serializable::serialize(obj.input, serializer); - serde::Serializable::serialize(obj.outputs, - serializer); +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::BigIntFromLeBytes &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.inputs, serializer); + serde::Serializable::serialize(obj.modulus, serializer); + serde::Serializable::serialize(obj.output, serializer); } template <> template -Program::BlackBoxFuncCall::BigIntToLeBytes -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxFuncCall::BigIntToLeBytes obj; - obj.input = - serde::Deserializable::deserialize(deserializer); - obj.outputs = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxFuncCall::BigIntFromLeBytes serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::BigIntFromLeBytes obj; + obj.inputs = serde::Deserializable::deserialize(deserializer); + obj.modulus = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxFuncCall::Poseidon2Permutation &lhs, - const BlackBoxFuncCall::Poseidon2Permutation &rhs) { - if (!(lhs.inputs == rhs.inputs)) { - return false; - } - if (!(lhs.outputs == rhs.outputs)) { - return false; - } - if (!(lhs.len == rhs.len)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxFuncCall::BigIntToLeBytes &lhs, const BlackBoxFuncCall::BigIntToLeBytes &rhs) { + if (!(lhs.input == rhs.input)) { return false; } + if (!(lhs.outputs == rhs.outputs)) { return false; } + return true; + } -inline std::vector -BlackBoxFuncCall::Poseidon2Permutation::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize( - *this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxFuncCall::BigIntToLeBytes::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxFuncCall::Poseidon2Permutation -BlackBoxFuncCall::Poseidon2Permutation::bincodeDeserialize( - std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable< - BlackBoxFuncCall::Poseidon2Permutation>::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxFuncCall::BigIntToLeBytes BlackBoxFuncCall::BigIntToLeBytes::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable:: - serialize(const Program::BlackBoxFuncCall::Poseidon2Permutation &obj, - Serializer &serializer) { - serde::Serializable::serialize(obj.inputs, serializer); - serde::Serializable::serialize(obj.outputs, - serializer); - serde::Serializable::serialize(obj.len, serializer); +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::BigIntToLeBytes &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.input, serializer); + serde::Serializable::serialize(obj.outputs, serializer); } template <> template -Program::BlackBoxFuncCall::Poseidon2Permutation -serde::Deserializable:: - deserialize(Deserializer &deserializer) { - Program::BlackBoxFuncCall::Poseidon2Permutation obj; - obj.inputs = - serde::Deserializable::deserialize(deserializer); - obj.outputs = - serde::Deserializable::deserialize(deserializer); - obj.len = serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxFuncCall::BigIntToLeBytes serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::BigIntToLeBytes obj; + obj.input = serde::Deserializable::deserialize(deserializer); + obj.outputs = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxFuncCall::Sha256Compression &lhs, - const BlackBoxFuncCall::Sha256Compression &rhs) { - if (!(lhs.inputs == rhs.inputs)) { - return false; - } - if (!(lhs.hash_values == rhs.hash_values)) { - return false; - } - if (!(lhs.outputs == rhs.outputs)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxFuncCall::Poseidon2Permutation &lhs, const BlackBoxFuncCall::Poseidon2Permutation &rhs) { + if (!(lhs.inputs == rhs.inputs)) { return false; } + if (!(lhs.outputs == rhs.outputs)) { return false; } + if (!(lhs.len == rhs.len)) { return false; } + return true; + } -inline std::vector -BlackBoxFuncCall::Sha256Compression::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize( - *this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxFuncCall::Poseidon2Permutation::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxFuncCall::Sha256Compression -BlackBoxFuncCall::Sha256Compression::bincodeDeserialize( - std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxFuncCall::Poseidon2Permutation BlackBoxFuncCall::Poseidon2Permutation::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable:: - serialize(const Program::BlackBoxFuncCall::Sha256Compression &obj, - Serializer &serializer) { - serde::Serializable::serialize(obj.inputs, serializer); - serde::Serializable::serialize(obj.hash_values, - serializer); - serde::Serializable::serialize(obj.outputs, - serializer); +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::Poseidon2Permutation &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.inputs, serializer); + serde::Serializable::serialize(obj.outputs, serializer); + serde::Serializable::serialize(obj.len, serializer); } template <> template -Program::BlackBoxFuncCall::Sha256Compression -serde::Deserializable:: - deserialize(Deserializer &deserializer) { - Program::BlackBoxFuncCall::Sha256Compression obj; - obj.inputs = - serde::Deserializable::deserialize(deserializer); - obj.hash_values = - serde::Deserializable::deserialize( - deserializer); - obj.outputs = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxFuncCall::Poseidon2Permutation serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::Poseidon2Permutation obj; + obj.inputs = serde::Deserializable::deserialize(deserializer); + obj.outputs = serde::Deserializable::deserialize(deserializer); + obj.len = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxOp &lhs, const BlackBoxOp &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxFuncCall::Sha256Compression &lhs, const BlackBoxFuncCall::Sha256Compression &rhs) { + if (!(lhs.inputs == rhs.inputs)) { return false; } + if (!(lhs.hash_values == rhs.hash_values)) { return false; } + if (!(lhs.outputs == rhs.outputs)) { return false; } + return true; + } -inline std::vector BlackBoxOp::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxFuncCall::Sha256Compression::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxOp BlackBoxOp::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxFuncCall::Sha256Compression BlackBoxFuncCall::Sha256Compression::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxOp &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.value, serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::BlackBoxFuncCall::Sha256Compression &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.inputs, serializer); + serde::Serializable::serialize(obj.hash_values, serializer); + serde::Serializable::serialize(obj.outputs, serializer); } template <> template -Program::BlackBoxOp serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::BlackBoxOp obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::BlackBoxFuncCall::Sha256Compression serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxFuncCall::Sha256Compression obj; + obj.inputs = serde::Deserializable::deserialize(deserializer); + obj.hash_values = serde::Deserializable::deserialize(deserializer); + obj.outputs = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxOp::AES128Encrypt &lhs, - const BlackBoxOp::AES128Encrypt &rhs) { - if (!(lhs.inputs == rhs.inputs)) { - return false; - } - if (!(lhs.iv == rhs.iv)) { - return false; - } - if (!(lhs.key == rhs.key)) { - return false; - } - if (!(lhs.outputs == rhs.outputs)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxOp &lhs, const BlackBoxOp &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector -BlackBoxOp::AES128Encrypt::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxOp::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxOp::AES128Encrypt -BlackBoxOp::AES128Encrypt::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxOp BlackBoxOp::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxOp::AES128Encrypt &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.inputs, serializer); - serde::Serializable::serialize(obj.iv, serializer); - serde::Serializable::serialize(obj.key, serializer); - serde::Serializable::serialize(obj.outputs, - serializer); +void serde::Serializable::serialize(const Program::BlackBoxOp &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.value, serializer); + serializer.decrease_container_depth(); } template <> template -Program::BlackBoxOp::AES128Encrypt -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxOp::AES128Encrypt obj; - obj.inputs = - serde::Deserializable::deserialize(deserializer); - obj.iv = serde::Deserializable::deserialize(deserializer); - obj.key = serde::Deserializable::deserialize(deserializer); - obj.outputs = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxOp serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::BlackBoxOp obj; + obj.value = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const BlackBoxOp::Blake2s &lhs, - const BlackBoxOp::Blake2s &rhs) { - if (!(lhs.message == rhs.message)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxOp::AES128Encrypt &lhs, const BlackBoxOp::AES128Encrypt &rhs) { + if (!(lhs.inputs == rhs.inputs)) { return false; } + if (!(lhs.iv == rhs.iv)) { return false; } + if (!(lhs.key == rhs.key)) { return false; } + if (!(lhs.outputs == rhs.outputs)) { return false; } + return true; + } -inline std::vector BlackBoxOp::Blake2s::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxOp::AES128Encrypt::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxOp::Blake2s -BlackBoxOp::Blake2s::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxOp::AES128Encrypt BlackBoxOp::AES128Encrypt::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxOp::Blake2s &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.message, - serializer); - serde::Serializable::serialize(obj.output, serializer); +void serde::Serializable::serialize(const Program::BlackBoxOp::AES128Encrypt &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.inputs, serializer); + serde::Serializable::serialize(obj.iv, serializer); + serde::Serializable::serialize(obj.key, serializer); + serde::Serializable::serialize(obj.outputs, serializer); } template <> template -Program::BlackBoxOp::Blake2s -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxOp::Blake2s obj; - obj.message = - serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxOp::AES128Encrypt serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxOp::AES128Encrypt obj; + obj.inputs = serde::Deserializable::deserialize(deserializer); + obj.iv = serde::Deserializable::deserialize(deserializer); + obj.key = serde::Deserializable::deserialize(deserializer); + obj.outputs = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxOp::Blake3 &lhs, - const BlackBoxOp::Blake3 &rhs) { - if (!(lhs.message == rhs.message)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxOp::Blake2s &lhs, const BlackBoxOp::Blake2s &rhs) { + if (!(lhs.message == rhs.message)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } -inline std::vector BlackBoxOp::Blake3::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxOp::Blake2s::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxOp::Blake3 -BlackBoxOp::Blake3::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxOp::Blake2s BlackBoxOp::Blake2s::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxOp::Blake3 &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.message, - serializer); - serde::Serializable::serialize(obj.output, serializer); +void serde::Serializable::serialize(const Program::BlackBoxOp::Blake2s &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.message, serializer); + serde::Serializable::serialize(obj.output, serializer); } template <> template -Program::BlackBoxOp::Blake3 -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxOp::Blake3 obj; - obj.message = - serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxOp::Blake2s serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxOp::Blake2s obj; + obj.message = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxOp::Keccak256 &lhs, - const BlackBoxOp::Keccak256 &rhs) { - if (!(lhs.message == rhs.message)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxOp::Blake3 &lhs, const BlackBoxOp::Blake3 &rhs) { + if (!(lhs.message == rhs.message)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } -inline std::vector BlackBoxOp::Keccak256::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxOp::Blake3::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxOp::Keccak256 -BlackBoxOp::Keccak256::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxOp::Blake3 BlackBoxOp::Blake3::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxOp::Keccak256 &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.message, - serializer); - serde::Serializable::serialize(obj.output, serializer); +void serde::Serializable::serialize(const Program::BlackBoxOp::Blake3 &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.message, serializer); + serde::Serializable::serialize(obj.output, serializer); } template <> template -Program::BlackBoxOp::Keccak256 -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxOp::Keccak256 obj; - obj.message = - serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxOp::Blake3 serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxOp::Blake3 obj; + obj.message = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxOp::Keccakf1600 &lhs, - const BlackBoxOp::Keccakf1600 &rhs) { - if (!(lhs.message == rhs.message)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxOp::Keccak256 &lhs, const BlackBoxOp::Keccak256 &rhs) { + if (!(lhs.message == rhs.message)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } -inline std::vector BlackBoxOp::Keccakf1600::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxOp::Keccak256::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxOp::Keccakf1600 -BlackBoxOp::Keccakf1600::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxOp::Keccak256 BlackBoxOp::Keccak256::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxOp::Keccakf1600 &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.message, - serializer); - serde::Serializable::serialize(obj.output, serializer); +void serde::Serializable::serialize(const Program::BlackBoxOp::Keccak256 &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.message, serializer); + serde::Serializable::serialize(obj.output, serializer); } template <> template -Program::BlackBoxOp::Keccakf1600 -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxOp::Keccakf1600 obj; - obj.message = - serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxOp::Keccak256 serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxOp::Keccak256 obj; + obj.message = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxOp::EcdsaSecp256k1 &lhs, - const BlackBoxOp::EcdsaSecp256k1 &rhs) { - if (!(lhs.hashed_msg == rhs.hashed_msg)) { - return false; - } - if (!(lhs.public_key_x == rhs.public_key_x)) { - return false; - } - if (!(lhs.public_key_y == rhs.public_key_y)) { - return false; - } - if (!(lhs.signature == rhs.signature)) { - return false; - } - if (!(lhs.result == rhs.result)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxOp::Keccakf1600 &lhs, const BlackBoxOp::Keccakf1600 &rhs) { + if (!(lhs.message == rhs.message)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } -inline std::vector -BlackBoxOp::EcdsaSecp256k1::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxOp::Keccakf1600::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxOp::EcdsaSecp256k1 -BlackBoxOp::EcdsaSecp256k1::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxOp::Keccakf1600 BlackBoxOp::Keccakf1600::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxOp::EcdsaSecp256k1 &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.hashed_msg, - serializer); - serde::Serializable::serialize(obj.public_key_x, - serializer); - serde::Serializable::serialize(obj.public_key_y, - serializer); - serde::Serializable::serialize(obj.signature, - serializer); - serde::Serializable::serialize(obj.result, serializer); +void serde::Serializable::serialize(const Program::BlackBoxOp::Keccakf1600 &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.message, serializer); + serde::Serializable::serialize(obj.output, serializer); } template <> template -Program::BlackBoxOp::EcdsaSecp256k1 -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxOp::EcdsaSecp256k1 obj; - obj.hashed_msg = serde::Deserializable::deserialize( - deserializer); - obj.public_key_x = - serde::Deserializable::deserialize( - deserializer); - obj.public_key_y = - serde::Deserializable::deserialize( - deserializer); - obj.signature = - serde::Deserializable::deserialize(deserializer); - obj.result = - serde::Deserializable::deserialize(deserializer); - return obj; -} - -namespace Program { - -inline bool operator==(const BlackBoxOp::EcdsaSecp256r1 &lhs, - const BlackBoxOp::EcdsaSecp256r1 &rhs) { - if (!(lhs.hashed_msg == rhs.hashed_msg)) { - return false; - } - if (!(lhs.public_key_x == rhs.public_key_x)) { - return false; - } - if (!(lhs.public_key_y == rhs.public_key_y)) { - return false; - } - if (!(lhs.signature == rhs.signature)) { - return false; - } - if (!(lhs.result == rhs.result)) { - return false; - } - return true; -} - -inline std::vector -BlackBoxOp::EcdsaSecp256r1::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} - -inline BlackBoxOp::EcdsaSecp256r1 -BlackBoxOp::EcdsaSecp256r1::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; +Program::BlackBoxOp::Keccakf1600 serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxOp::Keccakf1600 obj; + obj.message = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; } +namespace Program { + + inline bool operator==(const BlackBoxOp::EcdsaSecp256k1 &lhs, const BlackBoxOp::EcdsaSecp256k1 &rhs) { + if (!(lhs.hashed_msg == rhs.hashed_msg)) { return false; } + if (!(lhs.public_key_x == rhs.public_key_x)) { return false; } + if (!(lhs.public_key_y == rhs.public_key_y)) { return false; } + if (!(lhs.signature == rhs.signature)) { return false; } + if (!(lhs.result == rhs.result)) { return false; } + return true; + } + + inline std::vector BlackBoxOp::EcdsaSecp256k1::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BlackBoxOp::EcdsaSecp256k1 BlackBoxOp::EcdsaSecp256k1::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + } // end of namespace Program template <> -template -void serde::Serializable::serialize( - const Program::BlackBoxOp::EcdsaSecp256r1 &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.hashed_msg, - serializer); - serde::Serializable::serialize(obj.public_key_x, - serializer); - serde::Serializable::serialize(obj.public_key_y, - serializer); - serde::Serializable::serialize(obj.signature, - serializer); - serde::Serializable::serialize(obj.result, serializer); -} - +template +void serde::Serializable::serialize(const Program::BlackBoxOp::EcdsaSecp256k1 &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.hashed_msg, serializer); + serde::Serializable::serialize(obj.public_key_x, serializer); + serde::Serializable::serialize(obj.public_key_y, serializer); + serde::Serializable::serialize(obj.signature, serializer); + serde::Serializable::serialize(obj.result, serializer); +} + template <> template -Program::BlackBoxOp::EcdsaSecp256r1 -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxOp::EcdsaSecp256r1 obj; - obj.hashed_msg = serde::Deserializable::deserialize( - deserializer); - obj.public_key_x = - serde::Deserializable::deserialize( - deserializer); - obj.public_key_y = - serde::Deserializable::deserialize( - deserializer); - obj.signature = - serde::Deserializable::deserialize(deserializer); - obj.result = - serde::Deserializable::deserialize(deserializer); - return obj; -} - -namespace Program { - -inline bool operator==(const BlackBoxOp::SchnorrVerify &lhs, - const BlackBoxOp::SchnorrVerify &rhs) { - if (!(lhs.public_key_x == rhs.public_key_x)) { - return false; - } - if (!(lhs.public_key_y == rhs.public_key_y)) { - return false; - } - if (!(lhs.message == rhs.message)) { - return false; - } - if (!(lhs.signature == rhs.signature)) { - return false; - } - if (!(lhs.result == rhs.result)) { - return false; - } - return true; -} - -inline std::vector -BlackBoxOp::SchnorrVerify::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); +Program::BlackBoxOp::EcdsaSecp256k1 serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxOp::EcdsaSecp256k1 obj; + obj.hashed_msg = serde::Deserializable::deserialize(deserializer); + obj.public_key_x = serde::Deserializable::deserialize(deserializer); + obj.public_key_y = serde::Deserializable::deserialize(deserializer); + obj.signature = serde::Deserializable::deserialize(deserializer); + obj.result = serde::Deserializable::deserialize(deserializer); + return obj; } -inline BlackBoxOp::SchnorrVerify -BlackBoxOp::SchnorrVerify::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} +namespace Program { + + inline bool operator==(const BlackBoxOp::EcdsaSecp256r1 &lhs, const BlackBoxOp::EcdsaSecp256r1 &rhs) { + if (!(lhs.hashed_msg == rhs.hashed_msg)) { return false; } + if (!(lhs.public_key_x == rhs.public_key_x)) { return false; } + if (!(lhs.public_key_y == rhs.public_key_y)) { return false; } + if (!(lhs.signature == rhs.signature)) { return false; } + if (!(lhs.result == rhs.result)) { return false; } + return true; + } + + inline std::vector BlackBoxOp::EcdsaSecp256r1::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BlackBoxOp::EcdsaSecp256r1 BlackBoxOp::EcdsaSecp256r1::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxOp::SchnorrVerify &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.public_key_x, - serializer); - serde::Serializable::serialize(obj.public_key_y, - serializer); - serde::Serializable::serialize(obj.message, - serializer); - serde::Serializable::serialize(obj.signature, - serializer); - serde::Serializable::serialize(obj.result, serializer); +void serde::Serializable::serialize(const Program::BlackBoxOp::EcdsaSecp256r1 &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.hashed_msg, serializer); + serde::Serializable::serialize(obj.public_key_x, serializer); + serde::Serializable::serialize(obj.public_key_y, serializer); + serde::Serializable::serialize(obj.signature, serializer); + serde::Serializable::serialize(obj.result, serializer); } template <> template -Program::BlackBoxOp::SchnorrVerify -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxOp::SchnorrVerify obj; - obj.public_key_x = - serde::Deserializable::deserialize( - deserializer); - obj.public_key_y = - serde::Deserializable::deserialize( - deserializer); - obj.message = - serde::Deserializable::deserialize(deserializer); - obj.signature = - serde::Deserializable::deserialize(deserializer); - obj.result = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxOp::EcdsaSecp256r1 serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxOp::EcdsaSecp256r1 obj; + obj.hashed_msg = serde::Deserializable::deserialize(deserializer); + obj.public_key_x = serde::Deserializable::deserialize(deserializer); + obj.public_key_y = serde::Deserializable::deserialize(deserializer); + obj.signature = serde::Deserializable::deserialize(deserializer); + obj.result = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxOp::PedersenCommitment &lhs, - const BlackBoxOp::PedersenCommitment &rhs) { - if (!(lhs.inputs == rhs.inputs)) { - return false; - } - if (!(lhs.domain_separator == rhs.domain_separator)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxOp::SchnorrVerify &lhs, const BlackBoxOp::SchnorrVerify &rhs) { + if (!(lhs.public_key_x == rhs.public_key_x)) { return false; } + if (!(lhs.public_key_y == rhs.public_key_y)) { return false; } + if (!(lhs.message == rhs.message)) { return false; } + if (!(lhs.signature == rhs.signature)) { return false; } + if (!(lhs.result == rhs.result)) { return false; } + return true; + } -inline std::vector -BlackBoxOp::PedersenCommitment::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxOp::SchnorrVerify::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxOp::PedersenCommitment -BlackBoxOp::PedersenCommitment::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxOp::SchnorrVerify BlackBoxOp::SchnorrVerify::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxOp::PedersenCommitment &obj, - Serializer &serializer) { - serde::Serializable::serialize(obj.inputs, serializer); - serde::Serializable::serialize( - obj.domain_separator, serializer); - serde::Serializable::serialize(obj.output, serializer); +void serde::Serializable::serialize(const Program::BlackBoxOp::SchnorrVerify &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.public_key_x, serializer); + serde::Serializable::serialize(obj.public_key_y, serializer); + serde::Serializable::serialize(obj.message, serializer); + serde::Serializable::serialize(obj.signature, serializer); + serde::Serializable::serialize(obj.result, serializer); } template <> template -Program::BlackBoxOp::PedersenCommitment -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxOp::PedersenCommitment obj; - obj.inputs = - serde::Deserializable::deserialize(deserializer); - obj.domain_separator = - serde::Deserializable::deserialize( - deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxOp::SchnorrVerify serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxOp::SchnorrVerify obj; + obj.public_key_x = serde::Deserializable::deserialize(deserializer); + obj.public_key_y = serde::Deserializable::deserialize(deserializer); + obj.message = serde::Deserializable::deserialize(deserializer); + obj.signature = serde::Deserializable::deserialize(deserializer); + obj.result = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxOp::PedersenHash &lhs, - const BlackBoxOp::PedersenHash &rhs) { - if (!(lhs.inputs == rhs.inputs)) { - return false; - } - if (!(lhs.domain_separator == rhs.domain_separator)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxOp::PedersenCommitment &lhs, const BlackBoxOp::PedersenCommitment &rhs) { + if (!(lhs.inputs == rhs.inputs)) { return false; } + if (!(lhs.domain_separator == rhs.domain_separator)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } -inline std::vector BlackBoxOp::PedersenHash::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxOp::PedersenCommitment::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxOp::PedersenHash -BlackBoxOp::PedersenHash::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxOp::PedersenCommitment BlackBoxOp::PedersenCommitment::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxOp::PedersenHash &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.inputs, serializer); - serde::Serializable::serialize( - obj.domain_separator, serializer); - serde::Serializable::serialize(obj.output, serializer); +void serde::Serializable::serialize(const Program::BlackBoxOp::PedersenCommitment &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.inputs, serializer); + serde::Serializable::serialize(obj.domain_separator, serializer); + serde::Serializable::serialize(obj.output, serializer); } template <> template -Program::BlackBoxOp::PedersenHash -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxOp::PedersenHash obj; - obj.inputs = - serde::Deserializable::deserialize(deserializer); - obj.domain_separator = - serde::Deserializable::deserialize( - deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxOp::PedersenCommitment serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxOp::PedersenCommitment obj; + obj.inputs = serde::Deserializable::deserialize(deserializer); + obj.domain_separator = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxOp::MultiScalarMul &lhs, - const BlackBoxOp::MultiScalarMul &rhs) { - if (!(lhs.points == rhs.points)) { - return false; - } - if (!(lhs.scalars == rhs.scalars)) { - return false; - } - if (!(lhs.outputs == rhs.outputs)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxOp::PedersenHash &lhs, const BlackBoxOp::PedersenHash &rhs) { + if (!(lhs.inputs == rhs.inputs)) { return false; } + if (!(lhs.domain_separator == rhs.domain_separator)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } -inline std::vector -BlackBoxOp::MultiScalarMul::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxOp::PedersenHash::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxOp::MultiScalarMul -BlackBoxOp::MultiScalarMul::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxOp::PedersenHash BlackBoxOp::PedersenHash::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxOp::MultiScalarMul &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.points, serializer); - serde::Serializable::serialize(obj.scalars, - serializer); - serde::Serializable::serialize(obj.outputs, - serializer); +void serde::Serializable::serialize(const Program::BlackBoxOp::PedersenHash &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.inputs, serializer); + serde::Serializable::serialize(obj.domain_separator, serializer); + serde::Serializable::serialize(obj.output, serializer); } template <> template -Program::BlackBoxOp::MultiScalarMul -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxOp::MultiScalarMul obj; - obj.points = - serde::Deserializable::deserialize(deserializer); - obj.scalars = - serde::Deserializable::deserialize(deserializer); - obj.outputs = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxOp::PedersenHash serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxOp::PedersenHash obj; + obj.inputs = serde::Deserializable::deserialize(deserializer); + obj.domain_separator = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxOp::EmbeddedCurveAdd &lhs, - const BlackBoxOp::EmbeddedCurveAdd &rhs) { - if (!(lhs.input1_x == rhs.input1_x)) { - return false; - } - if (!(lhs.input1_y == rhs.input1_y)) { - return false; - } - if (!(lhs.input1_infinite == rhs.input1_infinite)) { - return false; - } - if (!(lhs.input2_x == rhs.input2_x)) { - return false; - } - if (!(lhs.input2_y == rhs.input2_y)) { - return false; - } - if (!(lhs.input2_infinite == rhs.input2_infinite)) { - return false; - } - if (!(lhs.result == rhs.result)) { - return false; - } - return true; -} - -inline std::vector -BlackBoxOp::EmbeddedCurveAdd::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); -} + inline bool operator==(const BlackBoxOp::MultiScalarMul &lhs, const BlackBoxOp::MultiScalarMul &rhs) { + if (!(lhs.points == rhs.points)) { return false; } + if (!(lhs.scalars == rhs.scalars)) { return false; } + if (!(lhs.outputs == rhs.outputs)) { return false; } + return true; + } -inline BlackBoxOp::EmbeddedCurveAdd -BlackBoxOp::EmbeddedCurveAdd::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline std::vector BlackBoxOp::MultiScalarMul::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BlackBoxOp::MultiScalarMul BlackBoxOp::MultiScalarMul::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxOp::EmbeddedCurveAdd &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.input1_x, - serializer); - serde::Serializable::serialize(obj.input1_y, - serializer); - serde::Serializable::serialize( - obj.input1_infinite, serializer); - serde::Serializable::serialize(obj.input2_x, - serializer); - serde::Serializable::serialize(obj.input2_y, - serializer); - serde::Serializable::serialize( - obj.input2_infinite, serializer); - serde::Serializable::serialize(obj.result, serializer); +void serde::Serializable::serialize(const Program::BlackBoxOp::MultiScalarMul &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.points, serializer); + serde::Serializable::serialize(obj.scalars, serializer); + serde::Serializable::serialize(obj.outputs, serializer); } template <> template -Program::BlackBoxOp::EmbeddedCurveAdd -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxOp::EmbeddedCurveAdd obj; - obj.input1_x = - serde::Deserializable::deserialize(deserializer); - obj.input1_y = - serde::Deserializable::deserialize(deserializer); - obj.input1_infinite = - serde::Deserializable::deserialize( - deserializer); - obj.input2_x = - serde::Deserializable::deserialize(deserializer); - obj.input2_y = - serde::Deserializable::deserialize(deserializer); - obj.input2_infinite = - serde::Deserializable::deserialize( - deserializer); - obj.result = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxOp::MultiScalarMul serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxOp::MultiScalarMul obj; + obj.points = serde::Deserializable::deserialize(deserializer); + obj.scalars = serde::Deserializable::deserialize(deserializer); + obj.outputs = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxOp::BigIntAdd &lhs, - const BlackBoxOp::BigIntAdd &rhs) { - if (!(lhs.lhs == rhs.lhs)) { - return false; - } - if (!(lhs.rhs == rhs.rhs)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxOp::EmbeddedCurveAdd &lhs, const BlackBoxOp::EmbeddedCurveAdd &rhs) { + if (!(lhs.input1_x == rhs.input1_x)) { return false; } + if (!(lhs.input1_y == rhs.input1_y)) { return false; } + if (!(lhs.input1_infinite == rhs.input1_infinite)) { return false; } + if (!(lhs.input2_x == rhs.input2_x)) { return false; } + if (!(lhs.input2_y == rhs.input2_y)) { return false; } + if (!(lhs.input2_infinite == rhs.input2_infinite)) { return false; } + if (!(lhs.result == rhs.result)) { return false; } + return true; + } -inline std::vector BlackBoxOp::BigIntAdd::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxOp::EmbeddedCurveAdd::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxOp::BigIntAdd -BlackBoxOp::BigIntAdd::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxOp::EmbeddedCurveAdd BlackBoxOp::EmbeddedCurveAdd::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxOp::BigIntAdd &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.lhs, serializer); - serde::Serializable::serialize(obj.rhs, serializer); - serde::Serializable::serialize(obj.output, serializer); +void serde::Serializable::serialize(const Program::BlackBoxOp::EmbeddedCurveAdd &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.input1_x, serializer); + serde::Serializable::serialize(obj.input1_y, serializer); + serde::Serializable::serialize(obj.input1_infinite, serializer); + serde::Serializable::serialize(obj.input2_x, serializer); + serde::Serializable::serialize(obj.input2_y, serializer); + serde::Serializable::serialize(obj.input2_infinite, serializer); + serde::Serializable::serialize(obj.result, serializer); } template <> template -Program::BlackBoxOp::BigIntAdd -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxOp::BigIntAdd obj; - obj.lhs = serde::Deserializable::deserialize(deserializer); - obj.rhs = serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxOp::EmbeddedCurveAdd serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxOp::EmbeddedCurveAdd obj; + obj.input1_x = serde::Deserializable::deserialize(deserializer); + obj.input1_y = serde::Deserializable::deserialize(deserializer); + obj.input1_infinite = serde::Deserializable::deserialize(deserializer); + obj.input2_x = serde::Deserializable::deserialize(deserializer); + obj.input2_y = serde::Deserializable::deserialize(deserializer); + obj.input2_infinite = serde::Deserializable::deserialize(deserializer); + obj.result = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxOp::BigIntSub &lhs, - const BlackBoxOp::BigIntSub &rhs) { - if (!(lhs.lhs == rhs.lhs)) { - return false; - } - if (!(lhs.rhs == rhs.rhs)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxOp::BigIntAdd &lhs, const BlackBoxOp::BigIntAdd &rhs) { + if (!(lhs.lhs == rhs.lhs)) { return false; } + if (!(lhs.rhs == rhs.rhs)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } -inline std::vector BlackBoxOp::BigIntSub::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxOp::BigIntAdd::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxOp::BigIntSub -BlackBoxOp::BigIntSub::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxOp::BigIntAdd BlackBoxOp::BigIntAdd::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxOp::BigIntSub &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.lhs, serializer); - serde::Serializable::serialize(obj.rhs, serializer); - serde::Serializable::serialize(obj.output, serializer); +void serde::Serializable::serialize(const Program::BlackBoxOp::BigIntAdd &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.lhs, serializer); + serde::Serializable::serialize(obj.rhs, serializer); + serde::Serializable::serialize(obj.output, serializer); } template <> template -Program::BlackBoxOp::BigIntSub -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxOp::BigIntSub obj; - obj.lhs = serde::Deserializable::deserialize(deserializer); - obj.rhs = serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxOp::BigIntAdd serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxOp::BigIntAdd obj; + obj.lhs = serde::Deserializable::deserialize(deserializer); + obj.rhs = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxOp::BigIntMul &lhs, - const BlackBoxOp::BigIntMul &rhs) { - if (!(lhs.lhs == rhs.lhs)) { - return false; - } - if (!(lhs.rhs == rhs.rhs)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxOp::BigIntSub &lhs, const BlackBoxOp::BigIntSub &rhs) { + if (!(lhs.lhs == rhs.lhs)) { return false; } + if (!(lhs.rhs == rhs.rhs)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } -inline std::vector BlackBoxOp::BigIntMul::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxOp::BigIntSub::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxOp::BigIntMul -BlackBoxOp::BigIntMul::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxOp::BigIntSub BlackBoxOp::BigIntSub::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxOp::BigIntMul &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.lhs, serializer); - serde::Serializable::serialize(obj.rhs, serializer); - serde::Serializable::serialize(obj.output, serializer); +void serde::Serializable::serialize(const Program::BlackBoxOp::BigIntSub &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.lhs, serializer); + serde::Serializable::serialize(obj.rhs, serializer); + serde::Serializable::serialize(obj.output, serializer); } template <> template -Program::BlackBoxOp::BigIntMul -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxOp::BigIntMul obj; - obj.lhs = serde::Deserializable::deserialize(deserializer); - obj.rhs = serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxOp::BigIntSub serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxOp::BigIntSub obj; + obj.lhs = serde::Deserializable::deserialize(deserializer); + obj.rhs = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxOp::BigIntDiv &lhs, - const BlackBoxOp::BigIntDiv &rhs) { - if (!(lhs.lhs == rhs.lhs)) { - return false; - } - if (!(lhs.rhs == rhs.rhs)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxOp::BigIntMul &lhs, const BlackBoxOp::BigIntMul &rhs) { + if (!(lhs.lhs == rhs.lhs)) { return false; } + if (!(lhs.rhs == rhs.rhs)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } -inline std::vector BlackBoxOp::BigIntDiv::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxOp::BigIntMul::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxOp::BigIntDiv -BlackBoxOp::BigIntDiv::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxOp::BigIntMul BlackBoxOp::BigIntMul::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxOp::BigIntDiv &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.lhs, serializer); - serde::Serializable::serialize(obj.rhs, serializer); - serde::Serializable::serialize(obj.output, serializer); +void serde::Serializable::serialize(const Program::BlackBoxOp::BigIntMul &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.lhs, serializer); + serde::Serializable::serialize(obj.rhs, serializer); + serde::Serializable::serialize(obj.output, serializer); } template <> template -Program::BlackBoxOp::BigIntDiv -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxOp::BigIntDiv obj; - obj.lhs = serde::Deserializable::deserialize(deserializer); - obj.rhs = serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxOp::BigIntMul serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxOp::BigIntMul obj; + obj.lhs = serde::Deserializable::deserialize(deserializer); + obj.rhs = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxOp::BigIntFromLeBytes &lhs, - const BlackBoxOp::BigIntFromLeBytes &rhs) { - if (!(lhs.inputs == rhs.inputs)) { - return false; - } - if (!(lhs.modulus == rhs.modulus)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxOp::BigIntDiv &lhs, const BlackBoxOp::BigIntDiv &rhs) { + if (!(lhs.lhs == rhs.lhs)) { return false; } + if (!(lhs.rhs == rhs.rhs)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } -inline std::vector -BlackBoxOp::BigIntFromLeBytes::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxOp::BigIntDiv::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxOp::BigIntFromLeBytes -BlackBoxOp::BigIntFromLeBytes::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxOp::BigIntDiv BlackBoxOp::BigIntDiv::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxOp::BigIntFromLeBytes &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.inputs, serializer); - serde::Serializable::serialize(obj.modulus, - serializer); - serde::Serializable::serialize(obj.output, serializer); +void serde::Serializable::serialize(const Program::BlackBoxOp::BigIntDiv &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.lhs, serializer); + serde::Serializable::serialize(obj.rhs, serializer); + serde::Serializable::serialize(obj.output, serializer); } template <> template -Program::BlackBoxOp::BigIntFromLeBytes -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxOp::BigIntFromLeBytes obj; - obj.inputs = - serde::Deserializable::deserialize(deserializer); - obj.modulus = - serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxOp::BigIntDiv serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxOp::BigIntDiv obj; + obj.lhs = serde::Deserializable::deserialize(deserializer); + obj.rhs = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxOp::BigIntToLeBytes &lhs, - const BlackBoxOp::BigIntToLeBytes &rhs) { - if (!(lhs.input == rhs.input)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxOp::BigIntFromLeBytes &lhs, const BlackBoxOp::BigIntFromLeBytes &rhs) { + if (!(lhs.inputs == rhs.inputs)) { return false; } + if (!(lhs.modulus == rhs.modulus)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } -inline std::vector -BlackBoxOp::BigIntToLeBytes::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxOp::BigIntFromLeBytes::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxOp::BigIntToLeBytes -BlackBoxOp::BigIntToLeBytes::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxOp::BigIntFromLeBytes BlackBoxOp::BigIntFromLeBytes::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxOp::BigIntToLeBytes &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.input, serializer); - serde::Serializable::serialize(obj.output, serializer); +void serde::Serializable::serialize(const Program::BlackBoxOp::BigIntFromLeBytes &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.inputs, serializer); + serde::Serializable::serialize(obj.modulus, serializer); + serde::Serializable::serialize(obj.output, serializer); } template <> template -Program::BlackBoxOp::BigIntToLeBytes -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxOp::BigIntToLeBytes obj; - obj.input = - serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxOp::BigIntFromLeBytes serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxOp::BigIntFromLeBytes obj; + obj.inputs = serde::Deserializable::deserialize(deserializer); + obj.modulus = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxOp::Poseidon2Permutation &lhs, - const BlackBoxOp::Poseidon2Permutation &rhs) { - if (!(lhs.message == rhs.message)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - if (!(lhs.len == rhs.len)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxOp::BigIntToLeBytes &lhs, const BlackBoxOp::BigIntToLeBytes &rhs) { + if (!(lhs.input == rhs.input)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } -inline std::vector -BlackBoxOp::Poseidon2Permutation::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxOp::BigIntToLeBytes::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxOp::Poseidon2Permutation -BlackBoxOp::Poseidon2Permutation::bincodeDeserialize( - std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxOp::BigIntToLeBytes BlackBoxOp::BigIntToLeBytes::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxOp::Poseidon2Permutation &obj, - Serializer &serializer) { - serde::Serializable::serialize(obj.message, - serializer); - serde::Serializable::serialize(obj.output, serializer); - serde::Serializable::serialize(obj.len, serializer); +void serde::Serializable::serialize(const Program::BlackBoxOp::BigIntToLeBytes &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.input, serializer); + serde::Serializable::serialize(obj.output, serializer); } template <> template -Program::BlackBoxOp::Poseidon2Permutation -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxOp::Poseidon2Permutation obj; - obj.message = - serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - obj.len = serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxOp::BigIntToLeBytes serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxOp::BigIntToLeBytes obj; + obj.input = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxOp::Sha256Compression &lhs, - const BlackBoxOp::Sha256Compression &rhs) { - if (!(lhs.input == rhs.input)) { - return false; - } - if (!(lhs.hash_values == rhs.hash_values)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxOp::Poseidon2Permutation &lhs, const BlackBoxOp::Poseidon2Permutation &rhs) { + if (!(lhs.message == rhs.message)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + if (!(lhs.len == rhs.len)) { return false; } + return true; + } + + inline std::vector BlackBoxOp::Poseidon2Permutation::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline std::vector -BlackBoxOp::Sha256Compression::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); + inline BlackBoxOp::Poseidon2Permutation BlackBoxOp::Poseidon2Permutation::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + +} // end of namespace Program + +template <> +template +void serde::Serializable::serialize(const Program::BlackBoxOp::Poseidon2Permutation &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.message, serializer); + serde::Serializable::serialize(obj.output, serializer); + serde::Serializable::serialize(obj.len, serializer); } -inline BlackBoxOp::Sha256Compression -BlackBoxOp::Sha256Compression::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; +template <> +template +Program::BlackBoxOp::Poseidon2Permutation serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxOp::Poseidon2Permutation obj; + obj.message = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + obj.len = serde::Deserializable::deserialize(deserializer); + return obj; } +namespace Program { + + inline bool operator==(const BlackBoxOp::Sha256Compression &lhs, const BlackBoxOp::Sha256Compression &rhs) { + if (!(lhs.input == rhs.input)) { return false; } + if (!(lhs.hash_values == rhs.hash_values)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + return true; + } + + inline std::vector BlackBoxOp::Sha256Compression::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } + + inline BlackBoxOp::Sha256Compression BlackBoxOp::Sha256Compression::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } + } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxOp::Sha256Compression &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.input, serializer); - serde::Serializable::serialize(obj.hash_values, - serializer); - serde::Serializable::serialize(obj.output, serializer); +void serde::Serializable::serialize(const Program::BlackBoxOp::Sha256Compression &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.input, serializer); + serde::Serializable::serialize(obj.hash_values, serializer); + serde::Serializable::serialize(obj.output, serializer); } template <> template -Program::BlackBoxOp::Sha256Compression -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxOp::Sha256Compression obj; - obj.input = - serde::Deserializable::deserialize(deserializer); - obj.hash_values = - serde::Deserializable::deserialize( - deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlackBoxOp::Sha256Compression serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxOp::Sha256Compression obj; + obj.input = serde::Deserializable::deserialize(deserializer); + obj.hash_values = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlackBoxOp::ToRadix &lhs, - const BlackBoxOp::ToRadix &rhs) { - if (!(lhs.input == rhs.input)) { - return false; - } - if (!(lhs.radix == rhs.radix)) { - return false; - } - if (!(lhs.output == rhs.output)) { - return false; - } - if (!(lhs.output_bits == rhs.output_bits)) { - return false; - } - return true; -} + inline bool operator==(const BlackBoxOp::ToRadix &lhs, const BlackBoxOp::ToRadix &rhs) { + if (!(lhs.input == rhs.input)) { return false; } + if (!(lhs.radix == rhs.radix)) { return false; } + if (!(lhs.output == rhs.output)) { return false; } + if (!(lhs.output_bits == rhs.output_bits)) { return false; } + return true; + } -inline std::vector BlackBoxOp::ToRadix::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlackBoxOp::ToRadix::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlackBoxOp::ToRadix -BlackBoxOp::ToRadix::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlackBoxOp::ToRadix BlackBoxOp::ToRadix::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlackBoxOp::ToRadix &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.input, serializer); - serde::Serializable::serialize(obj.radix, serializer); - serde::Serializable::serialize(obj.output, serializer); - serde::Serializable::serialize(obj.output_bits, - serializer); +void serde::Serializable::serialize(const Program::BlackBoxOp::ToRadix &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.input, serializer); + serde::Serializable::serialize(obj.radix, serializer); + serde::Serializable::serialize(obj.output, serializer); + serde::Serializable::serialize(obj.output_bits, serializer); } template <> template -Program::BlackBoxOp::ToRadix -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlackBoxOp::ToRadix obj; - obj.input = - serde::Deserializable::deserialize(deserializer); - obj.radix = - serde::Deserializable::deserialize(deserializer); - obj.output = - serde::Deserializable::deserialize(deserializer); - obj.output_bits = - serde::Deserializable::deserialize( - deserializer); - return obj; +Program::BlackBoxOp::ToRadix serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlackBoxOp::ToRadix obj; + obj.input = serde::Deserializable::deserialize(deserializer); + obj.radix = serde::Deserializable::deserialize(deserializer); + obj.output = serde::Deserializable::deserialize(deserializer); + obj.output_bits = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlockId &lhs, const BlockId &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const BlockId &lhs, const BlockId &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector BlockId::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlockId::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlockId BlockId::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlockId BlockId::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlockId &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.value, serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::BlockId &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.value, serializer); + serializer.decrease_container_depth(); } template <> template -Program::BlockId serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::BlockId obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::BlockId serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::BlockId obj; + obj.value = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const BlockType &lhs, const BlockType &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const BlockType &lhs, const BlockType &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector BlockType::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlockType::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlockType BlockType::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlockType BlockType::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlockType &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.value, serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::BlockType &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.value, serializer); + serializer.decrease_container_depth(); } template <> template -Program::BlockType serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::BlockType obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::BlockType serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::BlockType obj; + obj.value = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const BlockType::Memory &lhs, - const BlockType::Memory &rhs) { - return true; -} + inline bool operator==(const BlockType::Memory &lhs, const BlockType::Memory &rhs) { + return true; + } -inline std::vector BlockType::Memory::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlockType::Memory::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlockType::Memory -BlockType::Memory::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlockType::Memory BlockType::Memory::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlockType::Memory &obj, Serializer &serializer) {} +void serde::Serializable::serialize(const Program::BlockType::Memory &obj, Serializer &serializer) { +} template <> template -Program::BlockType::Memory -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlockType::Memory obj; - return obj; +Program::BlockType::Memory serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlockType::Memory obj; + return obj; } namespace Program { -inline bool operator==(const BlockType::CallData &lhs, - const BlockType::CallData &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const BlockType::CallData &lhs, const BlockType::CallData &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector BlockType::CallData::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlockType::CallData::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlockType::CallData -BlockType::CallData::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlockType::CallData BlockType::CallData::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlockType::CallData &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.value, serializer); +void serde::Serializable::serialize(const Program::BlockType::CallData &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.value, serializer); } template <> template -Program::BlockType::CallData -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlockType::CallData obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BlockType::CallData serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlockType::CallData obj; + obj.value = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BlockType::ReturnData &lhs, - const BlockType::ReturnData &rhs) { - return true; -} + inline bool operator==(const BlockType::ReturnData &lhs, const BlockType::ReturnData &rhs) { + return true; + } -inline std::vector BlockType::ReturnData::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BlockType::ReturnData::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BlockType::ReturnData -BlockType::ReturnData::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BlockType::ReturnData BlockType::ReturnData::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BlockType::ReturnData &obj, Serializer &serializer) {} +void serde::Serializable::serialize(const Program::BlockType::ReturnData &obj, Serializer &serializer) { +} template <> template -Program::BlockType::ReturnData -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BlockType::ReturnData obj; - return obj; +Program::BlockType::ReturnData serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BlockType::ReturnData obj; + return obj; } namespace Program { -inline bool operator==(const BrilligBytecode &lhs, const BrilligBytecode &rhs) { - if (!(lhs.bytecode == rhs.bytecode)) { - return false; - } - return true; -} + inline bool operator==(const BrilligBytecode &lhs, const BrilligBytecode &rhs) { + if (!(lhs.bytecode == rhs.bytecode)) { return false; } + return true; + } -inline std::vector BrilligBytecode::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BrilligBytecode::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BrilligBytecode -BrilligBytecode::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BrilligBytecode BrilligBytecode::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BrilligBytecode &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.bytecode, - serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::BrilligBytecode &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.bytecode, serializer); + serializer.decrease_container_depth(); } template <> template -Program::BrilligBytecode -serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::BrilligBytecode obj; - obj.bytecode = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::BrilligBytecode serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::BrilligBytecode obj; + obj.bytecode = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const BrilligInputs &lhs, const BrilligInputs &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const BrilligInputs &lhs, const BrilligInputs &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector BrilligInputs::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BrilligInputs::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BrilligInputs -BrilligInputs::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BrilligInputs BrilligInputs::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BrilligInputs &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.value, serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::BrilligInputs &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.value, serializer); + serializer.decrease_container_depth(); } template <> template -Program::BrilligInputs -serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::BrilligInputs obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::BrilligInputs serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::BrilligInputs obj; + obj.value = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const BrilligInputs::Single &lhs, - const BrilligInputs::Single &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const BrilligInputs::Single &lhs, const BrilligInputs::Single &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector BrilligInputs::Single::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BrilligInputs::Single::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BrilligInputs::Single -BrilligInputs::Single::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BrilligInputs::Single BrilligInputs::Single::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BrilligInputs::Single &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.value, serializer); +void serde::Serializable::serialize(const Program::BrilligInputs::Single &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.value, serializer); } template <> template -Program::BrilligInputs::Single -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligInputs::Single obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BrilligInputs::Single serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligInputs::Single obj; + obj.value = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BrilligInputs::Array &lhs, - const BrilligInputs::Array &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const BrilligInputs::Array &lhs, const BrilligInputs::Array &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector BrilligInputs::Array::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BrilligInputs::Array::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BrilligInputs::Array -BrilligInputs::Array::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BrilligInputs::Array BrilligInputs::Array::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BrilligInputs::Array &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.value, serializer); +void serde::Serializable::serialize(const Program::BrilligInputs::Array &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.value, serializer); } template <> template -Program::BrilligInputs::Array -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligInputs::Array obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BrilligInputs::Array serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligInputs::Array obj; + obj.value = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BrilligInputs::MemoryArray &lhs, - const BrilligInputs::MemoryArray &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const BrilligInputs::MemoryArray &lhs, const BrilligInputs::MemoryArray &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector -BrilligInputs::MemoryArray::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BrilligInputs::MemoryArray::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BrilligInputs::MemoryArray -BrilligInputs::MemoryArray::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BrilligInputs::MemoryArray BrilligInputs::MemoryArray::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BrilligInputs::MemoryArray &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.value, serializer); +void serde::Serializable::serialize(const Program::BrilligInputs::MemoryArray &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.value, serializer); } template <> template -Program::BrilligInputs::MemoryArray -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligInputs::MemoryArray obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BrilligInputs::MemoryArray serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligInputs::MemoryArray obj; + obj.value = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BrilligOpcode &lhs, const BrilligOpcode &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const BrilligOpcode &lhs, const BrilligOpcode &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector BrilligOpcode::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BrilligOpcode::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BrilligOpcode -BrilligOpcode::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BrilligOpcode BrilligOpcode::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BrilligOpcode &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.value, serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::BrilligOpcode &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.value, serializer); + serializer.decrease_container_depth(); } template <> template -Program::BrilligOpcode -serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::BrilligOpcode obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::BrilligOpcode serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::BrilligOpcode obj; + obj.value = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const BrilligOpcode::BinaryFieldOp &lhs, - const BrilligOpcode::BinaryFieldOp &rhs) { - if (!(lhs.destination == rhs.destination)) { - return false; - } - if (!(lhs.op == rhs.op)) { - return false; - } - if (!(lhs.lhs == rhs.lhs)) { - return false; - } - if (!(lhs.rhs == rhs.rhs)) { - return false; - } - return true; -} + inline bool operator==(const BrilligOpcode::BinaryFieldOp &lhs, const BrilligOpcode::BinaryFieldOp &rhs) { + if (!(lhs.destination == rhs.destination)) { return false; } + if (!(lhs.op == rhs.op)) { return false; } + if (!(lhs.lhs == rhs.lhs)) { return false; } + if (!(lhs.rhs == rhs.rhs)) { return false; } + return true; + } -inline std::vector -BrilligOpcode::BinaryFieldOp::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); -} + inline std::vector BrilligOpcode::BinaryFieldOp::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BrilligOpcode::BinaryFieldOp -BrilligOpcode::BinaryFieldOp::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BrilligOpcode::BinaryFieldOp BrilligOpcode::BinaryFieldOp::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BrilligOpcode::BinaryFieldOp &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.destination, - serializer); - serde::Serializable::serialize(obj.op, serializer); - serde::Serializable::serialize(obj.lhs, serializer); - serde::Serializable::serialize(obj.rhs, serializer); +void serde::Serializable::serialize(const Program::BrilligOpcode::BinaryFieldOp &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.destination, serializer); + serde::Serializable::serialize(obj.op, serializer); + serde::Serializable::serialize(obj.lhs, serializer); + serde::Serializable::serialize(obj.rhs, serializer); } template <> template -Program::BrilligOpcode::BinaryFieldOp -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOpcode::BinaryFieldOp obj; - obj.destination = - serde::Deserializable::deserialize( - deserializer); - obj.op = serde::Deserializable::deserialize(deserializer); - obj.lhs = serde::Deserializable::deserialize(deserializer); - obj.rhs = serde::Deserializable::deserialize(deserializer); - return obj; +Program::BrilligOpcode::BinaryFieldOp serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOpcode::BinaryFieldOp obj; + obj.destination = serde::Deserializable::deserialize(deserializer); + obj.op = serde::Deserializable::deserialize(deserializer); + obj.lhs = serde::Deserializable::deserialize(deserializer); + obj.rhs = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BrilligOpcode::BinaryIntOp &lhs, - const BrilligOpcode::BinaryIntOp &rhs) { - if (!(lhs.destination == rhs.destination)) { - return false; - } - if (!(lhs.op == rhs.op)) { - return false; - } - if (!(lhs.bit_size == rhs.bit_size)) { - return false; - } - if (!(lhs.lhs == rhs.lhs)) { - return false; - } - if (!(lhs.rhs == rhs.rhs)) { - return false; - } - return true; -} + inline bool operator==(const BrilligOpcode::BinaryIntOp &lhs, const BrilligOpcode::BinaryIntOp &rhs) { + if (!(lhs.destination == rhs.destination)) { return false; } + if (!(lhs.op == rhs.op)) { return false; } + if (!(lhs.bit_size == rhs.bit_size)) { return false; } + if (!(lhs.lhs == rhs.lhs)) { return false; } + if (!(lhs.rhs == rhs.rhs)) { return false; } + return true; + } -inline std::vector -BrilligOpcode::BinaryIntOp::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BrilligOpcode::BinaryIntOp::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BrilligOpcode::BinaryIntOp -BrilligOpcode::BinaryIntOp::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BrilligOpcode::BinaryIntOp BrilligOpcode::BinaryIntOp::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BrilligOpcode::BinaryIntOp &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.destination, - serializer); - serde::Serializable::serialize(obj.op, serializer); - serde::Serializable::serialize(obj.bit_size, - serializer); - serde::Serializable::serialize(obj.lhs, serializer); - serde::Serializable::serialize(obj.rhs, serializer); +void serde::Serializable::serialize(const Program::BrilligOpcode::BinaryIntOp &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.destination, serializer); + serde::Serializable::serialize(obj.op, serializer); + serde::Serializable::serialize(obj.bit_size, serializer); + serde::Serializable::serialize(obj.lhs, serializer); + serde::Serializable::serialize(obj.rhs, serializer); } template <> template -Program::BrilligOpcode::BinaryIntOp -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOpcode::BinaryIntOp obj; - obj.destination = - serde::Deserializable::deserialize( - deserializer); - obj.op = serde::Deserializable::deserialize(deserializer); - obj.bit_size = - serde::Deserializable::deserialize(deserializer); - obj.lhs = serde::Deserializable::deserialize(deserializer); - obj.rhs = serde::Deserializable::deserialize(deserializer); - return obj; +Program::BrilligOpcode::BinaryIntOp serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOpcode::BinaryIntOp obj; + obj.destination = serde::Deserializable::deserialize(deserializer); + obj.op = serde::Deserializable::deserialize(deserializer); + obj.bit_size = serde::Deserializable::deserialize(deserializer); + obj.lhs = serde::Deserializable::deserialize(deserializer); + obj.rhs = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BrilligOpcode::Cast &lhs, - const BrilligOpcode::Cast &rhs) { - if (!(lhs.destination == rhs.destination)) { - return false; - } - if (!(lhs.source == rhs.source)) { - return false; - } - if (!(lhs.bit_size == rhs.bit_size)) { - return false; - } - return true; -} + inline bool operator==(const BrilligOpcode::Cast &lhs, const BrilligOpcode::Cast &rhs) { + if (!(lhs.destination == rhs.destination)) { return false; } + if (!(lhs.source == rhs.source)) { return false; } + if (!(lhs.bit_size == rhs.bit_size)) { return false; } + return true; + } -inline std::vector BrilligOpcode::Cast::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BrilligOpcode::Cast::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BrilligOpcode::Cast -BrilligOpcode::Cast::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BrilligOpcode::Cast BrilligOpcode::Cast::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BrilligOpcode::Cast &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.destination, - serializer); - serde::Serializable::serialize(obj.source, serializer); - serde::Serializable::serialize(obj.bit_size, - serializer); +void serde::Serializable::serialize(const Program::BrilligOpcode::Cast &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.destination, serializer); + serde::Serializable::serialize(obj.source, serializer); + serde::Serializable::serialize(obj.bit_size, serializer); } template <> template -Program::BrilligOpcode::Cast -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOpcode::Cast obj; - obj.destination = - serde::Deserializable::deserialize( - deserializer); - obj.source = - serde::Deserializable::deserialize(deserializer); - obj.bit_size = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BrilligOpcode::Cast serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOpcode::Cast obj; + obj.destination = serde::Deserializable::deserialize(deserializer); + obj.source = serde::Deserializable::deserialize(deserializer); + obj.bit_size = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BrilligOpcode::JumpIfNot &lhs, - const BrilligOpcode::JumpIfNot &rhs) { - if (!(lhs.condition == rhs.condition)) { - return false; - } - if (!(lhs.location == rhs.location)) { - return false; - } - return true; -} + inline bool operator==(const BrilligOpcode::JumpIfNot &lhs, const BrilligOpcode::JumpIfNot &rhs) { + if (!(lhs.condition == rhs.condition)) { return false; } + if (!(lhs.location == rhs.location)) { return false; } + return true; + } -inline std::vector BrilligOpcode::JumpIfNot::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BrilligOpcode::JumpIfNot::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BrilligOpcode::JumpIfNot -BrilligOpcode::JumpIfNot::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BrilligOpcode::JumpIfNot BrilligOpcode::JumpIfNot::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BrilligOpcode::JumpIfNot &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.condition, - serializer); - serde::Serializable::serialize(obj.location, - serializer); +void serde::Serializable::serialize(const Program::BrilligOpcode::JumpIfNot &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.condition, serializer); + serde::Serializable::serialize(obj.location, serializer); } template <> template -Program::BrilligOpcode::JumpIfNot -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOpcode::JumpIfNot obj; - obj.condition = - serde::Deserializable::deserialize(deserializer); - obj.location = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BrilligOpcode::JumpIfNot serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOpcode::JumpIfNot obj; + obj.condition = serde::Deserializable::deserialize(deserializer); + obj.location = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BrilligOpcode::JumpIf &lhs, - const BrilligOpcode::JumpIf &rhs) { - if (!(lhs.condition == rhs.condition)) { - return false; - } - if (!(lhs.location == rhs.location)) { - return false; - } - return true; -} + inline bool operator==(const BrilligOpcode::JumpIf &lhs, const BrilligOpcode::JumpIf &rhs) { + if (!(lhs.condition == rhs.condition)) { return false; } + if (!(lhs.location == rhs.location)) { return false; } + return true; + } -inline std::vector BrilligOpcode::JumpIf::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BrilligOpcode::JumpIf::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BrilligOpcode::JumpIf -BrilligOpcode::JumpIf::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BrilligOpcode::JumpIf BrilligOpcode::JumpIf::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BrilligOpcode::JumpIf &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.condition, - serializer); - serde::Serializable::serialize(obj.location, - serializer); +void serde::Serializable::serialize(const Program::BrilligOpcode::JumpIf &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.condition, serializer); + serde::Serializable::serialize(obj.location, serializer); } template <> template -Program::BrilligOpcode::JumpIf -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOpcode::JumpIf obj; - obj.condition = - serde::Deserializable::deserialize(deserializer); - obj.location = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BrilligOpcode::JumpIf serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOpcode::JumpIf obj; + obj.condition = serde::Deserializable::deserialize(deserializer); + obj.location = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BrilligOpcode::Jump &lhs, - const BrilligOpcode::Jump &rhs) { - if (!(lhs.location == rhs.location)) { - return false; - } - return true; -} + inline bool operator==(const BrilligOpcode::Jump &lhs, const BrilligOpcode::Jump &rhs) { + if (!(lhs.location == rhs.location)) { return false; } + return true; + } -inline std::vector BrilligOpcode::Jump::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BrilligOpcode::Jump::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BrilligOpcode::Jump -BrilligOpcode::Jump::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BrilligOpcode::Jump BrilligOpcode::Jump::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BrilligOpcode::Jump &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.location, - serializer); +void serde::Serializable::serialize(const Program::BrilligOpcode::Jump &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.location, serializer); } template <> template -Program::BrilligOpcode::Jump -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOpcode::Jump obj; - obj.location = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BrilligOpcode::Jump serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOpcode::Jump obj; + obj.location = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BrilligOpcode::CalldataCopy &lhs, - const BrilligOpcode::CalldataCopy &rhs) { - if (!(lhs.destination_address == rhs.destination_address)) { - return false; - } - if (!(lhs.size == rhs.size)) { - return false; - } - if (!(lhs.offset == rhs.offset)) { - return false; - } - return true; -} + inline bool operator==(const BrilligOpcode::CalldataCopy &lhs, const BrilligOpcode::CalldataCopy &rhs) { + if (!(lhs.destination_address == rhs.destination_address)) { return false; } + if (!(lhs.size == rhs.size)) { return false; } + if (!(lhs.offset == rhs.offset)) { return false; } + return true; + } -inline std::vector -BrilligOpcode::CalldataCopy::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); -} + inline std::vector BrilligOpcode::CalldataCopy::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BrilligOpcode::CalldataCopy -BrilligOpcode::CalldataCopy::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BrilligOpcode::CalldataCopy BrilligOpcode::CalldataCopy::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BrilligOpcode::CalldataCopy &obj, Serializer &serializer) { - serde::Serializable::serialize( - obj.destination_address, serializer); - serde::Serializable::serialize(obj.size, serializer); - serde::Serializable::serialize(obj.offset, serializer); +void serde::Serializable::serialize(const Program::BrilligOpcode::CalldataCopy &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.destination_address, serializer); + serde::Serializable::serialize(obj.size, serializer); + serde::Serializable::serialize(obj.offset, serializer); } template <> template -Program::BrilligOpcode::CalldataCopy -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOpcode::CalldataCopy obj; - obj.destination_address = - serde::Deserializable::deserialize( - deserializer); - obj.size = - serde::Deserializable::deserialize(deserializer); - obj.offset = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BrilligOpcode::CalldataCopy serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOpcode::CalldataCopy obj; + obj.destination_address = serde::Deserializable::deserialize(deserializer); + obj.size = serde::Deserializable::deserialize(deserializer); + obj.offset = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BrilligOpcode::Call &lhs, - const BrilligOpcode::Call &rhs) { - if (!(lhs.location == rhs.location)) { - return false; - } - return true; -} + inline bool operator==(const BrilligOpcode::Call &lhs, const BrilligOpcode::Call &rhs) { + if (!(lhs.location == rhs.location)) { return false; } + return true; + } -inline std::vector BrilligOpcode::Call::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BrilligOpcode::Call::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BrilligOpcode::Call -BrilligOpcode::Call::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BrilligOpcode::Call BrilligOpcode::Call::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BrilligOpcode::Call &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.location, - serializer); +void serde::Serializable::serialize(const Program::BrilligOpcode::Call &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.location, serializer); } template <> template -Program::BrilligOpcode::Call -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOpcode::Call obj; - obj.location = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BrilligOpcode::Call serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOpcode::Call obj; + obj.location = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BrilligOpcode::Const &lhs, - const BrilligOpcode::Const &rhs) { - if (!(lhs.destination == rhs.destination)) { - return false; - } - if (!(lhs.bit_size == rhs.bit_size)) { - return false; - } - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const BrilligOpcode::Const &lhs, const BrilligOpcode::Const &rhs) { + if (!(lhs.destination == rhs.destination)) { return false; } + if (!(lhs.bit_size == rhs.bit_size)) { return false; } + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector BrilligOpcode::Const::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BrilligOpcode::Const::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BrilligOpcode::Const -BrilligOpcode::Const::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BrilligOpcode::Const BrilligOpcode::Const::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BrilligOpcode::Const &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.destination, - serializer); - serde::Serializable::serialize(obj.bit_size, - serializer); - serde::Serializable::serialize(obj.value, serializer); +void serde::Serializable::serialize(const Program::BrilligOpcode::Const &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.destination, serializer); + serde::Serializable::serialize(obj.bit_size, serializer); + serde::Serializable::serialize(obj.value, serializer); } template <> template -Program::BrilligOpcode::Const -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOpcode::Const obj; - obj.destination = - serde::Deserializable::deserialize( - deserializer); - obj.bit_size = - serde::Deserializable::deserialize(deserializer); - obj.value = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BrilligOpcode::Const serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOpcode::Const obj; + obj.destination = serde::Deserializable::deserialize(deserializer); + obj.bit_size = serde::Deserializable::deserialize(deserializer); + obj.value = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BrilligOpcode::IndirectConst &lhs, - const BrilligOpcode::IndirectConst &rhs) { - if (!(lhs.destination_pointer == rhs.destination_pointer)) { - return false; - } - if (!(lhs.bit_size == rhs.bit_size)) { - return false; - } - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const BrilligOpcode::IndirectConst &lhs, const BrilligOpcode::IndirectConst &rhs) { + if (!(lhs.destination_pointer == rhs.destination_pointer)) { return false; } + if (!(lhs.bit_size == rhs.bit_size)) { return false; } + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector -BrilligOpcode::IndirectConst::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); -} + inline std::vector BrilligOpcode::IndirectConst::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BrilligOpcode::IndirectConst -BrilligOpcode::IndirectConst::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BrilligOpcode::IndirectConst BrilligOpcode::IndirectConst::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BrilligOpcode::IndirectConst &obj, Serializer &serializer) { - serde::Serializable::serialize( - obj.destination_pointer, serializer); - serde::Serializable::serialize(obj.bit_size, - serializer); - serde::Serializable::serialize(obj.value, serializer); +void serde::Serializable::serialize(const Program::BrilligOpcode::IndirectConst &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.destination_pointer, serializer); + serde::Serializable::serialize(obj.bit_size, serializer); + serde::Serializable::serialize(obj.value, serializer); } template <> template -Program::BrilligOpcode::IndirectConst -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOpcode::IndirectConst obj; - obj.destination_pointer = - serde::Deserializable::deserialize( - deserializer); - obj.bit_size = - serde::Deserializable::deserialize(deserializer); - obj.value = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BrilligOpcode::IndirectConst serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOpcode::IndirectConst obj; + obj.destination_pointer = serde::Deserializable::deserialize(deserializer); + obj.bit_size = serde::Deserializable::deserialize(deserializer); + obj.value = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BrilligOpcode::Return &lhs, - const BrilligOpcode::Return &rhs) { - return true; -} + inline bool operator==(const BrilligOpcode::Return &lhs, const BrilligOpcode::Return &rhs) { + return true; + } -inline std::vector BrilligOpcode::Return::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BrilligOpcode::Return::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BrilligOpcode::Return -BrilligOpcode::Return::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BrilligOpcode::Return BrilligOpcode::Return::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BrilligOpcode::Return &obj, Serializer &serializer) {} +void serde::Serializable::serialize(const Program::BrilligOpcode::Return &obj, Serializer &serializer) { +} template <> template -Program::BrilligOpcode::Return -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOpcode::Return obj; - return obj; +Program::BrilligOpcode::Return serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOpcode::Return obj; + return obj; } namespace Program { -inline bool operator==(const BrilligOpcode::ForeignCall &lhs, - const BrilligOpcode::ForeignCall &rhs) { - if (!(lhs.function == rhs.function)) { - return false; - } - if (!(lhs.destinations == rhs.destinations)) { - return false; - } - if (!(lhs.destination_value_types == rhs.destination_value_types)) { - return false; - } - if (!(lhs.inputs == rhs.inputs)) { - return false; - } - if (!(lhs.input_value_types == rhs.input_value_types)) { - return false; - } - return true; -} + inline bool operator==(const BrilligOpcode::ForeignCall &lhs, const BrilligOpcode::ForeignCall &rhs) { + if (!(lhs.function == rhs.function)) { return false; } + if (!(lhs.destinations == rhs.destinations)) { return false; } + if (!(lhs.destination_value_types == rhs.destination_value_types)) { return false; } + if (!(lhs.inputs == rhs.inputs)) { return false; } + if (!(lhs.input_value_types == rhs.input_value_types)) { return false; } + return true; + } -inline std::vector -BrilligOpcode::ForeignCall::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BrilligOpcode::ForeignCall::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BrilligOpcode::ForeignCall -BrilligOpcode::ForeignCall::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BrilligOpcode::ForeignCall BrilligOpcode::ForeignCall::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BrilligOpcode::ForeignCall &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.function, - serializer); - serde::Serializable::serialize(obj.destinations, - serializer); - serde::Serializable::serialize( - obj.destination_value_types, serializer); - serde::Serializable::serialize(obj.inputs, serializer); - serde::Serializable::serialize( - obj.input_value_types, serializer); +void serde::Serializable::serialize(const Program::BrilligOpcode::ForeignCall &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.function, serializer); + serde::Serializable::serialize(obj.destinations, serializer); + serde::Serializable::serialize(obj.destination_value_types, serializer); + serde::Serializable::serialize(obj.inputs, serializer); + serde::Serializable::serialize(obj.input_value_types, serializer); } template <> template -Program::BrilligOpcode::ForeignCall -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOpcode::ForeignCall obj; - obj.function = - serde::Deserializable::deserialize(deserializer); - obj.destinations = - serde::Deserializable::deserialize( - deserializer); - obj.destination_value_types = - serde::Deserializable::deserialize( - deserializer); - obj.inputs = - serde::Deserializable::deserialize(deserializer); - obj.input_value_types = - serde::Deserializable::deserialize( - deserializer); - return obj; +Program::BrilligOpcode::ForeignCall serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOpcode::ForeignCall obj; + obj.function = serde::Deserializable::deserialize(deserializer); + obj.destinations = serde::Deserializable::deserialize(deserializer); + obj.destination_value_types = serde::Deserializable::deserialize(deserializer); + obj.inputs = serde::Deserializable::deserialize(deserializer); + obj.input_value_types = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BrilligOpcode::Mov &lhs, - const BrilligOpcode::Mov &rhs) { - if (!(lhs.destination == rhs.destination)) { - return false; - } - if (!(lhs.source == rhs.source)) { - return false; - } - return true; -} + inline bool operator==(const BrilligOpcode::Mov &lhs, const BrilligOpcode::Mov &rhs) { + if (!(lhs.destination == rhs.destination)) { return false; } + if (!(lhs.source == rhs.source)) { return false; } + return true; + } -inline std::vector BrilligOpcode::Mov::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BrilligOpcode::Mov::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BrilligOpcode::Mov -BrilligOpcode::Mov::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BrilligOpcode::Mov BrilligOpcode::Mov::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BrilligOpcode::Mov &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.destination, - serializer); - serde::Serializable::serialize(obj.source, serializer); +void serde::Serializable::serialize(const Program::BrilligOpcode::Mov &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.destination, serializer); + serde::Serializable::serialize(obj.source, serializer); } template <> template -Program::BrilligOpcode::Mov -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOpcode::Mov obj; - obj.destination = - serde::Deserializable::deserialize( - deserializer); - obj.source = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BrilligOpcode::Mov serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOpcode::Mov obj; + obj.destination = serde::Deserializable::deserialize(deserializer); + obj.source = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BrilligOpcode::ConditionalMov &lhs, - const BrilligOpcode::ConditionalMov &rhs) { - if (!(lhs.destination == rhs.destination)) { - return false; - } - if (!(lhs.source_a == rhs.source_a)) { - return false; - } - if (!(lhs.source_b == rhs.source_b)) { - return false; - } - if (!(lhs.condition == rhs.condition)) { - return false; - } - return true; -} + inline bool operator==(const BrilligOpcode::ConditionalMov &lhs, const BrilligOpcode::ConditionalMov &rhs) { + if (!(lhs.destination == rhs.destination)) { return false; } + if (!(lhs.source_a == rhs.source_a)) { return false; } + if (!(lhs.source_b == rhs.source_b)) { return false; } + if (!(lhs.condition == rhs.condition)) { return false; } + return true; + } -inline std::vector -BrilligOpcode::ConditionalMov::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); -} + inline std::vector BrilligOpcode::ConditionalMov::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BrilligOpcode::ConditionalMov -BrilligOpcode::ConditionalMov::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BrilligOpcode::ConditionalMov BrilligOpcode::ConditionalMov::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BrilligOpcode::ConditionalMov &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.destination, - serializer); - serde::Serializable::serialize(obj.source_a, - serializer); - serde::Serializable::serialize(obj.source_b, - serializer); - serde::Serializable::serialize(obj.condition, - serializer); +void serde::Serializable::serialize(const Program::BrilligOpcode::ConditionalMov &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.destination, serializer); + serde::Serializable::serialize(obj.source_a, serializer); + serde::Serializable::serialize(obj.source_b, serializer); + serde::Serializable::serialize(obj.condition, serializer); } template <> template -Program::BrilligOpcode::ConditionalMov -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOpcode::ConditionalMov obj; - obj.destination = - serde::Deserializable::deserialize( - deserializer); - obj.source_a = - serde::Deserializable::deserialize(deserializer); - obj.source_b = - serde::Deserializable::deserialize(deserializer); - obj.condition = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BrilligOpcode::ConditionalMov serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOpcode::ConditionalMov obj; + obj.destination = serde::Deserializable::deserialize(deserializer); + obj.source_a = serde::Deserializable::deserialize(deserializer); + obj.source_b = serde::Deserializable::deserialize(deserializer); + obj.condition = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BrilligOpcode::Load &lhs, - const BrilligOpcode::Load &rhs) { - if (!(lhs.destination == rhs.destination)) { - return false; - } - if (!(lhs.source_pointer == rhs.source_pointer)) { - return false; - } - return true; -} + inline bool operator==(const BrilligOpcode::Load &lhs, const BrilligOpcode::Load &rhs) { + if (!(lhs.destination == rhs.destination)) { return false; } + if (!(lhs.source_pointer == rhs.source_pointer)) { return false; } + return true; + } -inline std::vector BrilligOpcode::Load::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BrilligOpcode::Load::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BrilligOpcode::Load -BrilligOpcode::Load::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BrilligOpcode::Load BrilligOpcode::Load::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BrilligOpcode::Load &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.destination, - serializer); - serde::Serializable::serialize( - obj.source_pointer, serializer); +void serde::Serializable::serialize(const Program::BrilligOpcode::Load &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.destination, serializer); + serde::Serializable::serialize(obj.source_pointer, serializer); } template <> template -Program::BrilligOpcode::Load -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOpcode::Load obj; - obj.destination = - serde::Deserializable::deserialize( - deserializer); - obj.source_pointer = - serde::Deserializable::deserialize( - deserializer); - return obj; +Program::BrilligOpcode::Load serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOpcode::Load obj; + obj.destination = serde::Deserializable::deserialize(deserializer); + obj.source_pointer = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BrilligOpcode::Store &lhs, - const BrilligOpcode::Store &rhs) { - if (!(lhs.destination_pointer == rhs.destination_pointer)) { - return false; - } - if (!(lhs.source == rhs.source)) { - return false; - } - return true; -} + inline bool operator==(const BrilligOpcode::Store &lhs, const BrilligOpcode::Store &rhs) { + if (!(lhs.destination_pointer == rhs.destination_pointer)) { return false; } + if (!(lhs.source == rhs.source)) { return false; } + return true; + } -inline std::vector BrilligOpcode::Store::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BrilligOpcode::Store::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BrilligOpcode::Store -BrilligOpcode::Store::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BrilligOpcode::Store BrilligOpcode::Store::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BrilligOpcode::Store &obj, Serializer &serializer) { - serde::Serializable::serialize( - obj.destination_pointer, serializer); - serde::Serializable::serialize(obj.source, serializer); +void serde::Serializable::serialize(const Program::BrilligOpcode::Store &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.destination_pointer, serializer); + serde::Serializable::serialize(obj.source, serializer); } template <> template -Program::BrilligOpcode::Store -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOpcode::Store obj; - obj.destination_pointer = - serde::Deserializable::deserialize( - deserializer); - obj.source = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BrilligOpcode::Store serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOpcode::Store obj; + obj.destination_pointer = serde::Deserializable::deserialize(deserializer); + obj.source = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BrilligOpcode::BlackBox &lhs, - const BrilligOpcode::BlackBox &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const BrilligOpcode::BlackBox &lhs, const BrilligOpcode::BlackBox &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector BrilligOpcode::BlackBox::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BrilligOpcode::BlackBox::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BrilligOpcode::BlackBox -BrilligOpcode::BlackBox::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BrilligOpcode::BlackBox BrilligOpcode::BlackBox::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BrilligOpcode::BlackBox &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.value, serializer); +void serde::Serializable::serialize(const Program::BrilligOpcode::BlackBox &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.value, serializer); } template <> template -Program::BrilligOpcode::BlackBox -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOpcode::BlackBox obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BrilligOpcode::BlackBox serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOpcode::BlackBox obj; + obj.value = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BrilligOpcode::Trap &lhs, - const BrilligOpcode::Trap &rhs) { - if (!(lhs.revert_data == rhs.revert_data)) { - return false; - } - return true; -} + inline bool operator==(const BrilligOpcode::Trap &lhs, const BrilligOpcode::Trap &rhs) { + if (!(lhs.revert_data == rhs.revert_data)) { return false; } + return true; + } -inline std::vector BrilligOpcode::Trap::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BrilligOpcode::Trap::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BrilligOpcode::Trap -BrilligOpcode::Trap::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BrilligOpcode::Trap BrilligOpcode::Trap::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BrilligOpcode::Trap &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.revert_data, - serializer); +void serde::Serializable::serialize(const Program::BrilligOpcode::Trap &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.revert_data, serializer); } template <> template -Program::BrilligOpcode::Trap -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOpcode::Trap obj; - obj.revert_data = - serde::Deserializable::deserialize( - deserializer); - return obj; +Program::BrilligOpcode::Trap serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOpcode::Trap obj; + obj.revert_data = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BrilligOpcode::Stop &lhs, - const BrilligOpcode::Stop &rhs) { - if (!(lhs.return_data_offset == rhs.return_data_offset)) { - return false; - } - if (!(lhs.return_data_size == rhs.return_data_size)) { - return false; - } - return true; -} + inline bool operator==(const BrilligOpcode::Stop &lhs, const BrilligOpcode::Stop &rhs) { + if (!(lhs.return_data_offset == rhs.return_data_offset)) { return false; } + if (!(lhs.return_data_size == rhs.return_data_size)) { return false; } + return true; + } -inline std::vector BrilligOpcode::Stop::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BrilligOpcode::Stop::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BrilligOpcode::Stop -BrilligOpcode::Stop::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BrilligOpcode::Stop BrilligOpcode::Stop::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BrilligOpcode::Stop &obj, Serializer &serializer) { - serde::Serializable::serialize( - obj.return_data_offset, serializer); - serde::Serializable::serialize( - obj.return_data_size, serializer); +void serde::Serializable::serialize(const Program::BrilligOpcode::Stop &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.return_data_offset, serializer); + serde::Serializable::serialize(obj.return_data_size, serializer); } template <> template -Program::BrilligOpcode::Stop -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOpcode::Stop obj; - obj.return_data_offset = - serde::Deserializable::deserialize( - deserializer); - obj.return_data_size = - serde::Deserializable::deserialize( - deserializer); - return obj; +Program::BrilligOpcode::Stop serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOpcode::Stop obj; + obj.return_data_offset = serde::Deserializable::deserialize(deserializer); + obj.return_data_size = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BrilligOutputs &lhs, const BrilligOutputs &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const BrilligOutputs &lhs, const BrilligOutputs &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector BrilligOutputs::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BrilligOutputs::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BrilligOutputs -BrilligOutputs::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BrilligOutputs BrilligOutputs::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BrilligOutputs &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.value, serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::BrilligOutputs &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.value, serializer); + serializer.decrease_container_depth(); } template <> template -Program::BrilligOutputs -serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::BrilligOutputs obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::BrilligOutputs serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::BrilligOutputs obj; + obj.value = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const BrilligOutputs::Simple &lhs, - const BrilligOutputs::Simple &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const BrilligOutputs::Simple &lhs, const BrilligOutputs::Simple &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector BrilligOutputs::Simple::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BrilligOutputs::Simple::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BrilligOutputs::Simple -BrilligOutputs::Simple::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BrilligOutputs::Simple BrilligOutputs::Simple::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BrilligOutputs::Simple &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.value, serializer); +void serde::Serializable::serialize(const Program::BrilligOutputs::Simple &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.value, serializer); } template <> template -Program::BrilligOutputs::Simple -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOutputs::Simple obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BrilligOutputs::Simple serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOutputs::Simple obj; + obj.value = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const BrilligOutputs::Array &lhs, - const BrilligOutputs::Array &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const BrilligOutputs::Array &lhs, const BrilligOutputs::Array &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector BrilligOutputs::Array::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector BrilligOutputs::Array::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline BrilligOutputs::Array -BrilligOutputs::Array::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline BrilligOutputs::Array BrilligOutputs::Array::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::BrilligOutputs::Array &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.value, serializer); +void serde::Serializable::serialize(const Program::BrilligOutputs::Array &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.value, serializer); } template <> template -Program::BrilligOutputs::Array -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::BrilligOutputs::Array obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::BrilligOutputs::Array serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::BrilligOutputs::Array obj; + obj.value = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const Circuit &lhs, const Circuit &rhs) { - if (!(lhs.current_witness_index == rhs.current_witness_index)) { - return false; - } - if (!(lhs.opcodes == rhs.opcodes)) { - return false; - } - if (!(lhs.expression_width == rhs.expression_width)) { - return false; - } - if (!(lhs.private_parameters == rhs.private_parameters)) { - return false; - } - if (!(lhs.public_parameters == rhs.public_parameters)) { - return false; - } - if (!(lhs.return_values == rhs.return_values)) { - return false; - } - if (!(lhs.assert_messages == rhs.assert_messages)) { - return false; - } - if (!(lhs.recursive == rhs.recursive)) { - return false; - } - return true; -} + inline bool operator==(const Circuit &lhs, const Circuit &rhs) { + if (!(lhs.current_witness_index == rhs.current_witness_index)) { return false; } + if (!(lhs.opcodes == rhs.opcodes)) { return false; } + if (!(lhs.expression_width == rhs.expression_width)) { return false; } + if (!(lhs.private_parameters == rhs.private_parameters)) { return false; } + if (!(lhs.public_parameters == rhs.public_parameters)) { return false; } + if (!(lhs.return_values == rhs.return_values)) { return false; } + if (!(lhs.assert_messages == rhs.assert_messages)) { return false; } + if (!(lhs.recursive == rhs.recursive)) { return false; } + return true; + } -inline std::vector Circuit::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector Circuit::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline Circuit Circuit::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline Circuit Circuit::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::Circuit &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize( - obj.current_witness_index, serializer); - serde::Serializable::serialize(obj.opcodes, - serializer); - serde::Serializable::serialize( - obj.expression_width, serializer); - serde::Serializable::serialize( - obj.private_parameters, serializer); - serde::Serializable::serialize( - obj.public_parameters, serializer); - serde::Serializable::serialize(obj.return_values, - serializer); - serde::Serializable::serialize( - obj.assert_messages, serializer); - serde::Serializable::serialize(obj.recursive, - serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::Circuit &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.current_witness_index, serializer); + serde::Serializable::serialize(obj.opcodes, serializer); + serde::Serializable::serialize(obj.expression_width, serializer); + serde::Serializable::serialize(obj.private_parameters, serializer); + serde::Serializable::serialize(obj.public_parameters, serializer); + serde::Serializable::serialize(obj.return_values, serializer); + serde::Serializable::serialize(obj.assert_messages, serializer); + serde::Serializable::serialize(obj.recursive, serializer); + serializer.decrease_container_depth(); } template <> template -Program::Circuit serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::Circuit obj; - obj.current_witness_index = - serde::Deserializable::deserialize( - deserializer); - obj.opcodes = - serde::Deserializable::deserialize(deserializer); - obj.expression_width = - serde::Deserializable::deserialize( - deserializer); - obj.private_parameters = - serde::Deserializable::deserialize( - deserializer); - obj.public_parameters = - serde::Deserializable::deserialize( - deserializer); - obj.return_values = - serde::Deserializable::deserialize( - deserializer); - obj.assert_messages = - serde::Deserializable::deserialize( - deserializer); - obj.recursive = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::Circuit serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::Circuit obj; + obj.current_witness_index = serde::Deserializable::deserialize(deserializer); + obj.opcodes = serde::Deserializable::deserialize(deserializer); + obj.expression_width = serde::Deserializable::deserialize(deserializer); + obj.private_parameters = serde::Deserializable::deserialize(deserializer); + obj.public_parameters = serde::Deserializable::deserialize(deserializer); + obj.return_values = serde::Deserializable::deserialize(deserializer); + obj.assert_messages = serde::Deserializable::deserialize(deserializer); + obj.recursive = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const ConstantOrWitnessEnum &lhs, - const ConstantOrWitnessEnum &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const ConstantOrWitnessEnum &lhs, const ConstantOrWitnessEnum &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector ConstantOrWitnessEnum::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector ConstantOrWitnessEnum::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline ConstantOrWitnessEnum -ConstantOrWitnessEnum::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline ConstantOrWitnessEnum ConstantOrWitnessEnum::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::ConstantOrWitnessEnum &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.value, serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::ConstantOrWitnessEnum &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.value, serializer); + serializer.decrease_container_depth(); } template <> template -Program::ConstantOrWitnessEnum -serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::ConstantOrWitnessEnum obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::ConstantOrWitnessEnum serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::ConstantOrWitnessEnum obj; + obj.value = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const ConstantOrWitnessEnum::Constant &lhs, - const ConstantOrWitnessEnum::Constant &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const ConstantOrWitnessEnum::Constant &lhs, const ConstantOrWitnessEnum::Constant &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector -ConstantOrWitnessEnum::Constant::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); -} + inline std::vector ConstantOrWitnessEnum::Constant::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline ConstantOrWitnessEnum::Constant -ConstantOrWitnessEnum::Constant::bincodeDeserialize( - std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline ConstantOrWitnessEnum::Constant ConstantOrWitnessEnum::Constant::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::ConstantOrWitnessEnum::Constant &obj, - Serializer &serializer) { - serde::Serializable::serialize(obj.value, serializer); +void serde::Serializable::serialize(const Program::ConstantOrWitnessEnum::Constant &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.value, serializer); } template <> template -Program::ConstantOrWitnessEnum::Constant -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::ConstantOrWitnessEnum::Constant obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::ConstantOrWitnessEnum::Constant serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::ConstantOrWitnessEnum::Constant obj; + obj.value = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const ConstantOrWitnessEnum::Witness &lhs, - const ConstantOrWitnessEnum::Witness &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const ConstantOrWitnessEnum::Witness &lhs, const ConstantOrWitnessEnum::Witness &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector -ConstantOrWitnessEnum::Witness::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); -} + inline std::vector ConstantOrWitnessEnum::Witness::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline ConstantOrWitnessEnum::Witness -ConstantOrWitnessEnum::Witness::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline ConstantOrWitnessEnum::Witness ConstantOrWitnessEnum::Witness::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::ConstantOrWitnessEnum::Witness &obj, - Serializer &serializer) { - serde::Serializable::serialize(obj.value, serializer); +void serde::Serializable::serialize(const Program::ConstantOrWitnessEnum::Witness &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.value, serializer); } template <> template -Program::ConstantOrWitnessEnum::Witness -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::ConstantOrWitnessEnum::Witness obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::ConstantOrWitnessEnum::Witness serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::ConstantOrWitnessEnum::Witness obj; + obj.value = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const Directive &lhs, const Directive &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const Directive &lhs, const Directive &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector Directive::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector Directive::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline Directive Directive::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline Directive Directive::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::Directive &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.value, serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::Directive &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.value, serializer); + serializer.decrease_container_depth(); } template <> template -Program::Directive serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::Directive obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::Directive serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::Directive obj; + obj.value = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const Directive::ToLeRadix &lhs, - const Directive::ToLeRadix &rhs) { - if (!(lhs.a == rhs.a)) { - return false; - } - if (!(lhs.b == rhs.b)) { - return false; - } - if (!(lhs.radix == rhs.radix)) { - return false; - } - return true; -} + inline bool operator==(const Directive::ToLeRadix &lhs, const Directive::ToLeRadix &rhs) { + if (!(lhs.a == rhs.a)) { return false; } + if (!(lhs.b == rhs.b)) { return false; } + if (!(lhs.radix == rhs.radix)) { return false; } + return true; + } -inline std::vector Directive::ToLeRadix::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector Directive::ToLeRadix::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline Directive::ToLeRadix -Directive::ToLeRadix::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline Directive::ToLeRadix Directive::ToLeRadix::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::Directive::ToLeRadix &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.a, serializer); - serde::Serializable::serialize(obj.b, serializer); - serde::Serializable::serialize(obj.radix, serializer); +void serde::Serializable::serialize(const Program::Directive::ToLeRadix &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.a, serializer); + serde::Serializable::serialize(obj.b, serializer); + serde::Serializable::serialize(obj.radix, serializer); } template <> template -Program::Directive::ToLeRadix -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::Directive::ToLeRadix obj; - obj.a = serde::Deserializable::deserialize(deserializer); - obj.b = serde::Deserializable::deserialize(deserializer); - obj.radix = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::Directive::ToLeRadix serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::Directive::ToLeRadix obj; + obj.a = serde::Deserializable::deserialize(deserializer); + obj.b = serde::Deserializable::deserialize(deserializer); + obj.radix = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const Expression &lhs, const Expression &rhs) { - if (!(lhs.mul_terms == rhs.mul_terms)) { - return false; - } - if (!(lhs.linear_combinations == rhs.linear_combinations)) { - return false; - } - if (!(lhs.q_c == rhs.q_c)) { - return false; - } - return true; -} + inline bool operator==(const Expression &lhs, const Expression &rhs) { + if (!(lhs.mul_terms == rhs.mul_terms)) { return false; } + if (!(lhs.linear_combinations == rhs.linear_combinations)) { return false; } + if (!(lhs.q_c == rhs.q_c)) { return false; } + return true; + } -inline std::vector Expression::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector Expression::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline Expression Expression::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline Expression Expression::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::Expression &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.mul_terms, - serializer); - serde::Serializable::serialize( - obj.linear_combinations, serializer); - serde::Serializable::serialize(obj.q_c, serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::Expression &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.mul_terms, serializer); + serde::Serializable::serialize(obj.linear_combinations, serializer); + serde::Serializable::serialize(obj.q_c, serializer); + serializer.decrease_container_depth(); } template <> template -Program::Expression serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::Expression obj; - obj.mul_terms = - serde::Deserializable::deserialize(deserializer); - obj.linear_combinations = - serde::Deserializable::deserialize( - deserializer); - obj.q_c = serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::Expression serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::Expression obj; + obj.mul_terms = serde::Deserializable::deserialize(deserializer); + obj.linear_combinations = serde::Deserializable::deserialize(deserializer); + obj.q_c = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const ExpressionOrMemory &lhs, - const ExpressionOrMemory &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const ExpressionOrMemory &lhs, const ExpressionOrMemory &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector ExpressionOrMemory::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector ExpressionOrMemory::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline ExpressionOrMemory -ExpressionOrMemory::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline ExpressionOrMemory ExpressionOrMemory::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::ExpressionOrMemory &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.value, serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::ExpressionOrMemory &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.value, serializer); + serializer.decrease_container_depth(); } template <> template -Program::ExpressionOrMemory -serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::ExpressionOrMemory obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::ExpressionOrMemory serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::ExpressionOrMemory obj; + obj.value = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const ExpressionOrMemory::Expression &lhs, - const ExpressionOrMemory::Expression &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const ExpressionOrMemory::Expression &lhs, const ExpressionOrMemory::Expression &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector -ExpressionOrMemory::Expression::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); -} + inline std::vector ExpressionOrMemory::Expression::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline ExpressionOrMemory::Expression -ExpressionOrMemory::Expression::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline ExpressionOrMemory::Expression ExpressionOrMemory::Expression::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::ExpressionOrMemory::Expression &obj, - Serializer &serializer) { - serde::Serializable::serialize(obj.value, serializer); +void serde::Serializable::serialize(const Program::ExpressionOrMemory::Expression &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.value, serializer); } template <> template -Program::ExpressionOrMemory::Expression -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::ExpressionOrMemory::Expression obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::ExpressionOrMemory::Expression serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::ExpressionOrMemory::Expression obj; + obj.value = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const ExpressionOrMemory::Memory &lhs, - const ExpressionOrMemory::Memory &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const ExpressionOrMemory::Memory &lhs, const ExpressionOrMemory::Memory &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector -ExpressionOrMemory::Memory::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector ExpressionOrMemory::Memory::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline ExpressionOrMemory::Memory -ExpressionOrMemory::Memory::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline ExpressionOrMemory::Memory ExpressionOrMemory::Memory::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::ExpressionOrMemory::Memory &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.value, serializer); +void serde::Serializable::serialize(const Program::ExpressionOrMemory::Memory &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.value, serializer); } template <> template -Program::ExpressionOrMemory::Memory -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::ExpressionOrMemory::Memory obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::ExpressionOrMemory::Memory serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::ExpressionOrMemory::Memory obj; + obj.value = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const ExpressionWidth &lhs, const ExpressionWidth &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const ExpressionWidth &lhs, const ExpressionWidth &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector ExpressionWidth::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector ExpressionWidth::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline ExpressionWidth -ExpressionWidth::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline ExpressionWidth ExpressionWidth::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::ExpressionWidth &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.value, serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::ExpressionWidth &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.value, serializer); + serializer.decrease_container_depth(); } template <> template -Program::ExpressionWidth -serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::ExpressionWidth obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::ExpressionWidth serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::ExpressionWidth obj; + obj.value = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const ExpressionWidth::Unbounded &lhs, - const ExpressionWidth::Unbounded &rhs) { - return true; -} + inline bool operator==(const ExpressionWidth::Unbounded &lhs, const ExpressionWidth::Unbounded &rhs) { + return true; + } -inline std::vector -ExpressionWidth::Unbounded::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector ExpressionWidth::Unbounded::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline ExpressionWidth::Unbounded -ExpressionWidth::Unbounded::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline ExpressionWidth::Unbounded ExpressionWidth::Unbounded::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::ExpressionWidth::Unbounded &obj, Serializer &serializer) {} +void serde::Serializable::serialize(const Program::ExpressionWidth::Unbounded &obj, Serializer &serializer) { +} template <> template -Program::ExpressionWidth::Unbounded -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::ExpressionWidth::Unbounded obj; - return obj; +Program::ExpressionWidth::Unbounded serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::ExpressionWidth::Unbounded obj; + return obj; } namespace Program { -inline bool operator==(const ExpressionWidth::Bounded &lhs, - const ExpressionWidth::Bounded &rhs) { - if (!(lhs.width == rhs.width)) { - return false; - } - return true; -} + inline bool operator==(const ExpressionWidth::Bounded &lhs, const ExpressionWidth::Bounded &rhs) { + if (!(lhs.width == rhs.width)) { return false; } + return true; + } -inline std::vector ExpressionWidth::Bounded::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector ExpressionWidth::Bounded::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline ExpressionWidth::Bounded -ExpressionWidth::Bounded::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline ExpressionWidth::Bounded ExpressionWidth::Bounded::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::ExpressionWidth::Bounded &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.width, serializer); +void serde::Serializable::serialize(const Program::ExpressionWidth::Bounded &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.width, serializer); } template <> template -Program::ExpressionWidth::Bounded -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::ExpressionWidth::Bounded obj; - obj.width = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::ExpressionWidth::Bounded serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::ExpressionWidth::Bounded obj; + obj.width = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const FunctionInput &lhs, const FunctionInput &rhs) { - if (!(lhs.input == rhs.input)) { - return false; - } - if (!(lhs.num_bits == rhs.num_bits)) { - return false; - } - return true; -} + inline bool operator==(const FunctionInput &lhs, const FunctionInput &rhs) { + if (!(lhs.input == rhs.input)) { return false; } + if (!(lhs.num_bits == rhs.num_bits)) { return false; } + return true; + } -inline std::vector FunctionInput::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector FunctionInput::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline FunctionInput -FunctionInput::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline FunctionInput FunctionInput::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::FunctionInput &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.input, serializer); - serde::Serializable::serialize(obj.num_bits, - serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::FunctionInput &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.input, serializer); + serde::Serializable::serialize(obj.num_bits, serializer); + serializer.decrease_container_depth(); } template <> template -Program::FunctionInput -serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::FunctionInput obj; - obj.input = - serde::Deserializable::deserialize(deserializer); - obj.num_bits = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::FunctionInput serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::FunctionInput obj; + obj.input = serde::Deserializable::deserialize(deserializer); + obj.num_bits = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const HeapArray &lhs, const HeapArray &rhs) { - if (!(lhs.pointer == rhs.pointer)) { - return false; - } - if (!(lhs.size == rhs.size)) { - return false; - } - return true; -} + inline bool operator==(const HeapArray &lhs, const HeapArray &rhs) { + if (!(lhs.pointer == rhs.pointer)) { return false; } + if (!(lhs.size == rhs.size)) { return false; } + return true; + } -inline std::vector HeapArray::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector HeapArray::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline HeapArray HeapArray::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline HeapArray HeapArray::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::HeapArray &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.pointer, - serializer); - serde::Serializable::serialize(obj.size, serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::HeapArray &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.pointer, serializer); + serde::Serializable::serialize(obj.size, serializer); + serializer.decrease_container_depth(); } template <> template -Program::HeapArray serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::HeapArray obj; - obj.pointer = - serde::Deserializable::deserialize(deserializer); - obj.size = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::HeapArray serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::HeapArray obj; + obj.pointer = serde::Deserializable::deserialize(deserializer); + obj.size = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const HeapValueType &lhs, const HeapValueType &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const HeapValueType &lhs, const HeapValueType &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector HeapValueType::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector HeapValueType::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline HeapValueType -HeapValueType::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline HeapValueType HeapValueType::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::HeapValueType &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.value, serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::HeapValueType &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.value, serializer); + serializer.decrease_container_depth(); } template <> template -Program::HeapValueType -serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::HeapValueType obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::HeapValueType serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::HeapValueType obj; + obj.value = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const HeapValueType::Simple &lhs, - const HeapValueType::Simple &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const HeapValueType::Simple &lhs, const HeapValueType::Simple &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector HeapValueType::Simple::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector HeapValueType::Simple::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline HeapValueType::Simple -HeapValueType::Simple::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline HeapValueType::Simple HeapValueType::Simple::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::HeapValueType::Simple &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.value, serializer); +void serde::Serializable::serialize(const Program::HeapValueType::Simple &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.value, serializer); } template <> template -Program::HeapValueType::Simple -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::HeapValueType::Simple obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::HeapValueType::Simple serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::HeapValueType::Simple obj; + obj.value = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const HeapValueType::Array &lhs, - const HeapValueType::Array &rhs) { - if (!(lhs.value_types == rhs.value_types)) { - return false; - } - if (!(lhs.size == rhs.size)) { - return false; - } - return true; -} + inline bool operator==(const HeapValueType::Array &lhs, const HeapValueType::Array &rhs) { + if (!(lhs.value_types == rhs.value_types)) { return false; } + if (!(lhs.size == rhs.size)) { return false; } + return true; + } -inline std::vector HeapValueType::Array::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector HeapValueType::Array::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline HeapValueType::Array -HeapValueType::Array::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline HeapValueType::Array HeapValueType::Array::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::HeapValueType::Array &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.value_types, - serializer); - serde::Serializable::serialize(obj.size, serializer); +void serde::Serializable::serialize(const Program::HeapValueType::Array &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.value_types, serializer); + serde::Serializable::serialize(obj.size, serializer); } template <> template -Program::HeapValueType::Array -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::HeapValueType::Array obj; - obj.value_types = - serde::Deserializable::deserialize( - deserializer); - obj.size = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::HeapValueType::Array serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::HeapValueType::Array obj; + obj.value_types = serde::Deserializable::deserialize(deserializer); + obj.size = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const HeapValueType::Vector &lhs, - const HeapValueType::Vector &rhs) { - if (!(lhs.value_types == rhs.value_types)) { - return false; - } - return true; -} + inline bool operator==(const HeapValueType::Vector &lhs, const HeapValueType::Vector &rhs) { + if (!(lhs.value_types == rhs.value_types)) { return false; } + return true; + } -inline std::vector HeapValueType::Vector::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector HeapValueType::Vector::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline HeapValueType::Vector -HeapValueType::Vector::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline HeapValueType::Vector HeapValueType::Vector::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::HeapValueType::Vector &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.value_types, - serializer); +void serde::Serializable::serialize(const Program::HeapValueType::Vector &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.value_types, serializer); } template <> template -Program::HeapValueType::Vector -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::HeapValueType::Vector obj; - obj.value_types = - serde::Deserializable::deserialize( - deserializer); - return obj; +Program::HeapValueType::Vector serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::HeapValueType::Vector obj; + obj.value_types = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const HeapVector &lhs, const HeapVector &rhs) { - if (!(lhs.pointer == rhs.pointer)) { - return false; - } - if (!(lhs.size == rhs.size)) { - return false; - } - return true; -} + inline bool operator==(const HeapVector &lhs, const HeapVector &rhs) { + if (!(lhs.pointer == rhs.pointer)) { return false; } + if (!(lhs.size == rhs.size)) { return false; } + return true; + } -inline std::vector HeapVector::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector HeapVector::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline HeapVector HeapVector::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline HeapVector HeapVector::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::HeapVector &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.pointer, - serializer); - serde::Serializable::serialize(obj.size, serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::HeapVector &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.pointer, serializer); + serde::Serializable::serialize(obj.size, serializer); + serializer.decrease_container_depth(); } template <> template -Program::HeapVector serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::HeapVector obj; - obj.pointer = - serde::Deserializable::deserialize(deserializer); - obj.size = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::HeapVector serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::HeapVector obj; + obj.pointer = serde::Deserializable::deserialize(deserializer); + obj.size = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const IntegerBitSize &lhs, const IntegerBitSize &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const IntegerBitSize &lhs, const IntegerBitSize &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector IntegerBitSize::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector IntegerBitSize::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline IntegerBitSize -IntegerBitSize::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline IntegerBitSize IntegerBitSize::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::IntegerBitSize &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.value, serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::IntegerBitSize &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.value, serializer); + serializer.decrease_container_depth(); } template <> template -Program::IntegerBitSize -serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::IntegerBitSize obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::IntegerBitSize serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::IntegerBitSize obj; + obj.value = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const IntegerBitSize::U0 &lhs, - const IntegerBitSize::U0 &rhs) { - return true; -} + inline bool operator==(const IntegerBitSize::U0 &lhs, const IntegerBitSize::U0 &rhs) { + return true; + } -inline std::vector IntegerBitSize::U0::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector IntegerBitSize::U0::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline IntegerBitSize::U0 -IntegerBitSize::U0::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline IntegerBitSize::U0 IntegerBitSize::U0::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::IntegerBitSize::U0 &obj, Serializer &serializer) {} +void serde::Serializable::serialize(const Program::IntegerBitSize::U0 &obj, Serializer &serializer) { +} template <> template -Program::IntegerBitSize::U0 -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::IntegerBitSize::U0 obj; - return obj; +Program::IntegerBitSize::U0 serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::IntegerBitSize::U0 obj; + return obj; } namespace Program { -inline bool operator==(const IntegerBitSize::U1 &lhs, - const IntegerBitSize::U1 &rhs) { - return true; -} + inline bool operator==(const IntegerBitSize::U1 &lhs, const IntegerBitSize::U1 &rhs) { + return true; + } -inline std::vector IntegerBitSize::U1::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector IntegerBitSize::U1::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline IntegerBitSize::U1 -IntegerBitSize::U1::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline IntegerBitSize::U1 IntegerBitSize::U1::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::IntegerBitSize::U1 &obj, Serializer &serializer) {} +void serde::Serializable::serialize(const Program::IntegerBitSize::U1 &obj, Serializer &serializer) { +} template <> template -Program::IntegerBitSize::U1 -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::IntegerBitSize::U1 obj; - return obj; +Program::IntegerBitSize::U1 serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::IntegerBitSize::U1 obj; + return obj; } namespace Program { -inline bool operator==(const IntegerBitSize::U8 &lhs, - const IntegerBitSize::U8 &rhs) { - return true; -} + inline bool operator==(const IntegerBitSize::U8 &lhs, const IntegerBitSize::U8 &rhs) { + return true; + } -inline std::vector IntegerBitSize::U8::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector IntegerBitSize::U8::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline IntegerBitSize::U8 -IntegerBitSize::U8::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline IntegerBitSize::U8 IntegerBitSize::U8::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::IntegerBitSize::U8 &obj, Serializer &serializer) {} +void serde::Serializable::serialize(const Program::IntegerBitSize::U8 &obj, Serializer &serializer) { +} template <> template -Program::IntegerBitSize::U8 -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::IntegerBitSize::U8 obj; - return obj; +Program::IntegerBitSize::U8 serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::IntegerBitSize::U8 obj; + return obj; } namespace Program { -inline bool operator==(const IntegerBitSize::U16 &lhs, - const IntegerBitSize::U16 &rhs) { - return true; -} + inline bool operator==(const IntegerBitSize::U16 &lhs, const IntegerBitSize::U16 &rhs) { + return true; + } -inline std::vector IntegerBitSize::U16::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector IntegerBitSize::U16::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline IntegerBitSize::U16 -IntegerBitSize::U16::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline IntegerBitSize::U16 IntegerBitSize::U16::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::IntegerBitSize::U16 &obj, Serializer &serializer) {} +void serde::Serializable::serialize(const Program::IntegerBitSize::U16 &obj, Serializer &serializer) { +} template <> template -Program::IntegerBitSize::U16 -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::IntegerBitSize::U16 obj; - return obj; +Program::IntegerBitSize::U16 serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::IntegerBitSize::U16 obj; + return obj; } namespace Program { -inline bool operator==(const IntegerBitSize::U32 &lhs, - const IntegerBitSize::U32 &rhs) { - return true; -} + inline bool operator==(const IntegerBitSize::U32 &lhs, const IntegerBitSize::U32 &rhs) { + return true; + } -inline std::vector IntegerBitSize::U32::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector IntegerBitSize::U32::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline IntegerBitSize::U32 -IntegerBitSize::U32::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline IntegerBitSize::U32 IntegerBitSize::U32::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::IntegerBitSize::U32 &obj, Serializer &serializer) {} +void serde::Serializable::serialize(const Program::IntegerBitSize::U32 &obj, Serializer &serializer) { +} template <> template -Program::IntegerBitSize::U32 -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::IntegerBitSize::U32 obj; - return obj; +Program::IntegerBitSize::U32 serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::IntegerBitSize::U32 obj; + return obj; } namespace Program { -inline bool operator==(const IntegerBitSize::U64 &lhs, - const IntegerBitSize::U64 &rhs) { - return true; -} + inline bool operator==(const IntegerBitSize::U64 &lhs, const IntegerBitSize::U64 &rhs) { + return true; + } -inline std::vector IntegerBitSize::U64::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector IntegerBitSize::U64::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline IntegerBitSize::U64 -IntegerBitSize::U64::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline IntegerBitSize::U64 IntegerBitSize::U64::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::IntegerBitSize::U64 &obj, Serializer &serializer) {} +void serde::Serializable::serialize(const Program::IntegerBitSize::U64 &obj, Serializer &serializer) { +} template <> template -Program::IntegerBitSize::U64 -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::IntegerBitSize::U64 obj; - return obj; +Program::IntegerBitSize::U64 serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::IntegerBitSize::U64 obj; + return obj; } namespace Program { -inline bool operator==(const IntegerBitSize::U128 &lhs, - const IntegerBitSize::U128 &rhs) { - return true; -} + inline bool operator==(const IntegerBitSize::U128 &lhs, const IntegerBitSize::U128 &rhs) { + return true; + } -inline std::vector IntegerBitSize::U128::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector IntegerBitSize::U128::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline IntegerBitSize::U128 -IntegerBitSize::U128::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline IntegerBitSize::U128 IntegerBitSize::U128::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::IntegerBitSize::U128 &obj, Serializer &serializer) {} +void serde::Serializable::serialize(const Program::IntegerBitSize::U128 &obj, Serializer &serializer) { +} template <> template -Program::IntegerBitSize::U128 -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::IntegerBitSize::U128 obj; - return obj; +Program::IntegerBitSize::U128 serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::IntegerBitSize::U128 obj; + return obj; } namespace Program { -inline bool operator==(const MemOp &lhs, const MemOp &rhs) { - if (!(lhs.operation == rhs.operation)) { - return false; - } - if (!(lhs.index == rhs.index)) { - return false; - } - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const MemOp &lhs, const MemOp &rhs) { + if (!(lhs.operation == rhs.operation)) { return false; } + if (!(lhs.index == rhs.index)) { return false; } + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector MemOp::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector MemOp::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline MemOp MemOp::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline MemOp MemOp::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize(const Program::MemOp &obj, - Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.operation, - serializer); - serde::Serializable::serialize(obj.index, serializer); - serde::Serializable::serialize(obj.value, serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::MemOp &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.operation, serializer); + serde::Serializable::serialize(obj.index, serializer); + serde::Serializable::serialize(obj.value, serializer); + serializer.decrease_container_depth(); } template <> template -Program::MemOp -serde::Deserializable::deserialize(Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::MemOp obj; - obj.operation = - serde::Deserializable::deserialize(deserializer); - obj.index = - serde::Deserializable::deserialize(deserializer); - obj.value = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::MemOp serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::MemOp obj; + obj.operation = serde::Deserializable::deserialize(deserializer); + obj.index = serde::Deserializable::deserialize(deserializer); + obj.value = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const MemoryAddress &lhs, const MemoryAddress &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const MemoryAddress &lhs, const MemoryAddress &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector MemoryAddress::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector MemoryAddress::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline MemoryAddress -MemoryAddress::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline MemoryAddress MemoryAddress::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::MemoryAddress &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.value, serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::MemoryAddress &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.value, serializer); + serializer.decrease_container_depth(); } template <> template -Program::MemoryAddress -serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::MemoryAddress obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::MemoryAddress serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::MemoryAddress obj; + obj.value = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const Opcode &lhs, const Opcode &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const Opcode &lhs, const Opcode &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector Opcode::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector Opcode::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline Opcode Opcode::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline Opcode Opcode::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize(const Program::Opcode &obj, - Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.value, serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::Opcode &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.value, serializer); + serializer.decrease_container_depth(); } template <> template -Program::Opcode serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::Opcode obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::Opcode serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::Opcode obj; + obj.value = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const Opcode::AssertZero &lhs, - const Opcode::AssertZero &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const Opcode::AssertZero &lhs, const Opcode::AssertZero &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector Opcode::AssertZero::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector Opcode::AssertZero::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline Opcode::AssertZero -Opcode::AssertZero::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline Opcode::AssertZero Opcode::AssertZero::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::Opcode::AssertZero &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.value, serializer); +void serde::Serializable::serialize(const Program::Opcode::AssertZero &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.value, serializer); } template <> template -Program::Opcode::AssertZero -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::Opcode::AssertZero obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::Opcode::AssertZero serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::Opcode::AssertZero obj; + obj.value = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const Opcode::BlackBoxFuncCall &lhs, - const Opcode::BlackBoxFuncCall &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const Opcode::BlackBoxFuncCall &lhs, const Opcode::BlackBoxFuncCall &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector Opcode::BlackBoxFuncCall::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector Opcode::BlackBoxFuncCall::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline Opcode::BlackBoxFuncCall -Opcode::BlackBoxFuncCall::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline Opcode::BlackBoxFuncCall Opcode::BlackBoxFuncCall::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::Opcode::BlackBoxFuncCall &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.value, serializer); +void serde::Serializable::serialize(const Program::Opcode::BlackBoxFuncCall &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.value, serializer); } template <> template -Program::Opcode::BlackBoxFuncCall -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::Opcode::BlackBoxFuncCall obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::Opcode::BlackBoxFuncCall serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::Opcode::BlackBoxFuncCall obj; + obj.value = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const Opcode::Directive &lhs, - const Opcode::Directive &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const Opcode::Directive &lhs, const Opcode::Directive &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector Opcode::Directive::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector Opcode::Directive::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline Opcode::Directive -Opcode::Directive::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline Opcode::Directive Opcode::Directive::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::Opcode::Directive &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.value, serializer); +void serde::Serializable::serialize(const Program::Opcode::Directive &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.value, serializer); } template <> template -Program::Opcode::Directive -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::Opcode::Directive obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::Opcode::Directive serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::Opcode::Directive obj; + obj.value = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const Opcode::MemoryOp &lhs, - const Opcode::MemoryOp &rhs) { - if (!(lhs.block_id == rhs.block_id)) { - return false; - } - if (!(lhs.op == rhs.op)) { - return false; - } - if (!(lhs.predicate == rhs.predicate)) { - return false; - } - return true; -} + inline bool operator==(const Opcode::MemoryOp &lhs, const Opcode::MemoryOp &rhs) { + if (!(lhs.block_id == rhs.block_id)) { return false; } + if (!(lhs.op == rhs.op)) { return false; } + if (!(lhs.predicate == rhs.predicate)) { return false; } + return true; + } -inline std::vector Opcode::MemoryOp::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector Opcode::MemoryOp::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline Opcode::MemoryOp -Opcode::MemoryOp::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline Opcode::MemoryOp Opcode::MemoryOp::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::Opcode::MemoryOp &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.block_id, - serializer); - serde::Serializable::serialize(obj.op, serializer); - serde::Serializable::serialize(obj.predicate, - serializer); +void serde::Serializable::serialize(const Program::Opcode::MemoryOp &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.block_id, serializer); + serde::Serializable::serialize(obj.op, serializer); + serde::Serializable::serialize(obj.predicate, serializer); } template <> template -Program::Opcode::MemoryOp -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::Opcode::MemoryOp obj; - obj.block_id = - serde::Deserializable::deserialize(deserializer); - obj.op = serde::Deserializable::deserialize(deserializer); - obj.predicate = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::Opcode::MemoryOp serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::Opcode::MemoryOp obj; + obj.block_id = serde::Deserializable::deserialize(deserializer); + obj.op = serde::Deserializable::deserialize(deserializer); + obj.predicate = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const Opcode::MemoryInit &lhs, - const Opcode::MemoryInit &rhs) { - if (!(lhs.block_id == rhs.block_id)) { - return false; - } - if (!(lhs.init == rhs.init)) { - return false; - } - if (!(lhs.block_type == rhs.block_type)) { - return false; - } - return true; -} + inline bool operator==(const Opcode::MemoryInit &lhs, const Opcode::MemoryInit &rhs) { + if (!(lhs.block_id == rhs.block_id)) { return false; } + if (!(lhs.init == rhs.init)) { return false; } + if (!(lhs.block_type == rhs.block_type)) { return false; } + return true; + } -inline std::vector Opcode::MemoryInit::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector Opcode::MemoryInit::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline Opcode::MemoryInit -Opcode::MemoryInit::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline Opcode::MemoryInit Opcode::MemoryInit::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::Opcode::MemoryInit &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.block_id, - serializer); - serde::Serializable::serialize(obj.init, serializer); - serde::Serializable::serialize(obj.block_type, - serializer); +void serde::Serializable::serialize(const Program::Opcode::MemoryInit &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.block_id, serializer); + serde::Serializable::serialize(obj.init, serializer); + serde::Serializable::serialize(obj.block_type, serializer); } template <> template -Program::Opcode::MemoryInit -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::Opcode::MemoryInit obj; - obj.block_id = - serde::Deserializable::deserialize(deserializer); - obj.init = - serde::Deserializable::deserialize(deserializer); - obj.block_type = serde::Deserializable::deserialize( - deserializer); - return obj; +Program::Opcode::MemoryInit serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::Opcode::MemoryInit obj; + obj.block_id = serde::Deserializable::deserialize(deserializer); + obj.init = serde::Deserializable::deserialize(deserializer); + obj.block_type = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const Opcode::BrilligCall &lhs, - const Opcode::BrilligCall &rhs) { - if (!(lhs.id == rhs.id)) { - return false; - } - if (!(lhs.inputs == rhs.inputs)) { - return false; - } - if (!(lhs.outputs == rhs.outputs)) { - return false; - } - if (!(lhs.predicate == rhs.predicate)) { - return false; - } - return true; -} + inline bool operator==(const Opcode::BrilligCall &lhs, const Opcode::BrilligCall &rhs) { + if (!(lhs.id == rhs.id)) { return false; } + if (!(lhs.inputs == rhs.inputs)) { return false; } + if (!(lhs.outputs == rhs.outputs)) { return false; } + if (!(lhs.predicate == rhs.predicate)) { return false; } + return true; + } -inline std::vector Opcode::BrilligCall::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector Opcode::BrilligCall::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline Opcode::BrilligCall -Opcode::BrilligCall::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline Opcode::BrilligCall Opcode::BrilligCall::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::Opcode::BrilligCall &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.id, serializer); - serde::Serializable::serialize(obj.inputs, serializer); - serde::Serializable::serialize(obj.outputs, - serializer); - serde::Serializable::serialize(obj.predicate, - serializer); +void serde::Serializable::serialize(const Program::Opcode::BrilligCall &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.id, serializer); + serde::Serializable::serialize(obj.inputs, serializer); + serde::Serializable::serialize(obj.outputs, serializer); + serde::Serializable::serialize(obj.predicate, serializer); } template <> template -Program::Opcode::BrilligCall -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::Opcode::BrilligCall obj; - obj.id = serde::Deserializable::deserialize(deserializer); - obj.inputs = - serde::Deserializable::deserialize(deserializer); - obj.outputs = - serde::Deserializable::deserialize(deserializer); - obj.predicate = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::Opcode::BrilligCall serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::Opcode::BrilligCall obj; + obj.id = serde::Deserializable::deserialize(deserializer); + obj.inputs = serde::Deserializable::deserialize(deserializer); + obj.outputs = serde::Deserializable::deserialize(deserializer); + obj.predicate = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const Opcode::Call &lhs, const Opcode::Call &rhs) { - if (!(lhs.id == rhs.id)) { - return false; - } - if (!(lhs.inputs == rhs.inputs)) { - return false; - } - if (!(lhs.outputs == rhs.outputs)) { - return false; - } - if (!(lhs.predicate == rhs.predicate)) { - return false; - } - return true; -} + inline bool operator==(const Opcode::Call &lhs, const Opcode::Call &rhs) { + if (!(lhs.id == rhs.id)) { return false; } + if (!(lhs.inputs == rhs.inputs)) { return false; } + if (!(lhs.outputs == rhs.outputs)) { return false; } + if (!(lhs.predicate == rhs.predicate)) { return false; } + return true; + } -inline std::vector Opcode::Call::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector Opcode::Call::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline Opcode::Call -Opcode::Call::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline Opcode::Call Opcode::Call::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::Opcode::Call &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.id, serializer); - serde::Serializable::serialize(obj.inputs, serializer); - serde::Serializable::serialize(obj.outputs, - serializer); - serde::Serializable::serialize(obj.predicate, - serializer); +void serde::Serializable::serialize(const Program::Opcode::Call &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.id, serializer); + serde::Serializable::serialize(obj.inputs, serializer); + serde::Serializable::serialize(obj.outputs, serializer); + serde::Serializable::serialize(obj.predicate, serializer); } template <> template -Program::Opcode::Call serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::Opcode::Call obj; - obj.id = serde::Deserializable::deserialize(deserializer); - obj.inputs = - serde::Deserializable::deserialize(deserializer); - obj.outputs = - serde::Deserializable::deserialize(deserializer); - obj.predicate = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::Opcode::Call serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::Opcode::Call obj; + obj.id = serde::Deserializable::deserialize(deserializer); + obj.inputs = serde::Deserializable::deserialize(deserializer); + obj.outputs = serde::Deserializable::deserialize(deserializer); + obj.predicate = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const OpcodeLocation &lhs, const OpcodeLocation &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const OpcodeLocation &lhs, const OpcodeLocation &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector OpcodeLocation::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector OpcodeLocation::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline OpcodeLocation -OpcodeLocation::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline OpcodeLocation OpcodeLocation::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::OpcodeLocation &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.value, serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::OpcodeLocation &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.value, serializer); + serializer.decrease_container_depth(); } template <> template -Program::OpcodeLocation -serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::OpcodeLocation obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::OpcodeLocation serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::OpcodeLocation obj; + obj.value = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const OpcodeLocation::Acir &lhs, - const OpcodeLocation::Acir &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const OpcodeLocation::Acir &lhs, const OpcodeLocation::Acir &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector OpcodeLocation::Acir::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector OpcodeLocation::Acir::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline OpcodeLocation::Acir -OpcodeLocation::Acir::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline OpcodeLocation::Acir OpcodeLocation::Acir::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::OpcodeLocation::Acir &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.value, serializer); +void serde::Serializable::serialize(const Program::OpcodeLocation::Acir &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.value, serializer); } template <> template -Program::OpcodeLocation::Acir -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::OpcodeLocation::Acir obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::OpcodeLocation::Acir serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::OpcodeLocation::Acir obj; + obj.value = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const OpcodeLocation::Brillig &lhs, - const OpcodeLocation::Brillig &rhs) { - if (!(lhs.acir_index == rhs.acir_index)) { - return false; - } - if (!(lhs.brillig_index == rhs.brillig_index)) { - return false; - } - return true; -} + inline bool operator==(const OpcodeLocation::Brillig &lhs, const OpcodeLocation::Brillig &rhs) { + if (!(lhs.acir_index == rhs.acir_index)) { return false; } + if (!(lhs.brillig_index == rhs.brillig_index)) { return false; } + return true; + } -inline std::vector OpcodeLocation::Brillig::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector OpcodeLocation::Brillig::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline OpcodeLocation::Brillig -OpcodeLocation::Brillig::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline OpcodeLocation::Brillig OpcodeLocation::Brillig::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::OpcodeLocation::Brillig &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.acir_index, - serializer); - serde::Serializable::serialize(obj.brillig_index, - serializer); +void serde::Serializable::serialize(const Program::OpcodeLocation::Brillig &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.acir_index, serializer); + serde::Serializable::serialize(obj.brillig_index, serializer); } template <> template -Program::OpcodeLocation::Brillig -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::OpcodeLocation::Brillig obj; - obj.acir_index = serde::Deserializable::deserialize( - deserializer); - obj.brillig_index = - serde::Deserializable::deserialize( - deserializer); - return obj; +Program::OpcodeLocation::Brillig serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::OpcodeLocation::Brillig obj; + obj.acir_index = serde::Deserializable::deserialize(deserializer); + obj.brillig_index = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const Program &lhs, const Program &rhs) { - if (!(lhs.functions == rhs.functions)) { - return false; - } - if (!(lhs.unconstrained_functions == rhs.unconstrained_functions)) { - return false; - } - return true; -} + inline bool operator==(const Program &lhs, const Program &rhs) { + if (!(lhs.functions == rhs.functions)) { return false; } + if (!(lhs.unconstrained_functions == rhs.unconstrained_functions)) { return false; } + return true; + } -inline std::vector Program::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector Program::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline Program Program::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline Program Program::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::Program &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.functions, - serializer); - serde::Serializable::serialize( - obj.unconstrained_functions, serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::Program &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.functions, serializer); + serde::Serializable::serialize(obj.unconstrained_functions, serializer); + serializer.decrease_container_depth(); } template <> template -Program::Program serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::Program obj; - obj.functions = - serde::Deserializable::deserialize(deserializer); - obj.unconstrained_functions = - serde::Deserializable::deserialize( - deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::Program serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::Program obj; + obj.functions = serde::Deserializable::deserialize(deserializer); + obj.unconstrained_functions = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const PublicInputs &lhs, const PublicInputs &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const PublicInputs &lhs, const PublicInputs &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector PublicInputs::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector PublicInputs::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline PublicInputs -PublicInputs::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline PublicInputs PublicInputs::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::PublicInputs &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.value, serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::PublicInputs &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.value, serializer); + serializer.decrease_container_depth(); } template <> template -Program::PublicInputs serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::PublicInputs obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::PublicInputs serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::PublicInputs obj; + obj.value = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const ValueOrArray &lhs, const ValueOrArray &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const ValueOrArray &lhs, const ValueOrArray &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector ValueOrArray::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector ValueOrArray::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline ValueOrArray -ValueOrArray::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline ValueOrArray ValueOrArray::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::ValueOrArray &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.value, serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::ValueOrArray &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.value, serializer); + serializer.decrease_container_depth(); } template <> template -Program::ValueOrArray serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::ValueOrArray obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::ValueOrArray serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::ValueOrArray obj; + obj.value = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } namespace Program { -inline bool operator==(const ValueOrArray::MemoryAddress &lhs, - const ValueOrArray::MemoryAddress &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const ValueOrArray::MemoryAddress &lhs, const ValueOrArray::MemoryAddress &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector -ValueOrArray::MemoryAddress::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, - serializer); - return std::move(serializer).bytes(); -} + inline std::vector ValueOrArray::MemoryAddress::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline ValueOrArray::MemoryAddress -ValueOrArray::MemoryAddress::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline ValueOrArray::MemoryAddress ValueOrArray::MemoryAddress::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::ValueOrArray::MemoryAddress &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.value, serializer); +void serde::Serializable::serialize(const Program::ValueOrArray::MemoryAddress &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.value, serializer); } template <> template -Program::ValueOrArray::MemoryAddress -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::ValueOrArray::MemoryAddress obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::ValueOrArray::MemoryAddress serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::ValueOrArray::MemoryAddress obj; + obj.value = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const ValueOrArray::HeapArray &lhs, - const ValueOrArray::HeapArray &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const ValueOrArray::HeapArray &lhs, const ValueOrArray::HeapArray &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector ValueOrArray::HeapArray::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector ValueOrArray::HeapArray::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline ValueOrArray::HeapArray -ValueOrArray::HeapArray::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = - serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline ValueOrArray::HeapArray ValueOrArray::HeapArray::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::ValueOrArray::HeapArray &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.value, serializer); +void serde::Serializable::serialize(const Program::ValueOrArray::HeapArray &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.value, serializer); } template <> template -Program::ValueOrArray::HeapArray -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::ValueOrArray::HeapArray obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::ValueOrArray::HeapArray serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::ValueOrArray::HeapArray obj; + obj.value = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const ValueOrArray::HeapVector &lhs, - const ValueOrArray::HeapVector &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const ValueOrArray::HeapVector &lhs, const ValueOrArray::HeapVector &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector ValueOrArray::HeapVector::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector ValueOrArray::HeapVector::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline ValueOrArray::HeapVector -ValueOrArray::HeapVector::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize( - deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline ValueOrArray::HeapVector ValueOrArray::HeapVector::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::ValueOrArray::HeapVector &obj, Serializer &serializer) { - serde::Serializable::serialize(obj.value, serializer); +void serde::Serializable::serialize(const Program::ValueOrArray::HeapVector &obj, Serializer &serializer) { + serde::Serializable::serialize(obj.value, serializer); } template <> template -Program::ValueOrArray::HeapVector -serde::Deserializable::deserialize( - Deserializer &deserializer) { - Program::ValueOrArray::HeapVector obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - return obj; +Program::ValueOrArray::HeapVector serde::Deserializable::deserialize(Deserializer &deserializer) { + Program::ValueOrArray::HeapVector obj; + obj.value = serde::Deserializable::deserialize(deserializer); + return obj; } namespace Program { -inline bool operator==(const Witness &lhs, const Witness &rhs) { - if (!(lhs.value == rhs.value)) { - return false; - } - return true; -} + inline bool operator==(const Witness &lhs, const Witness &rhs) { + if (!(lhs.value == rhs.value)) { return false; } + return true; + } -inline std::vector Witness::bincodeSerialize() const { - auto serializer = serde::BincodeSerializer(); - serde::Serializable::serialize(*this, serializer); - return std::move(serializer).bytes(); -} + inline std::vector Witness::bincodeSerialize() const { + auto serializer = serde::BincodeSerializer(); + serde::Serializable::serialize(*this, serializer); + return std::move(serializer).bytes(); + } -inline Witness Witness::bincodeDeserialize(std::vector input) { - auto deserializer = serde::BincodeDeserializer(input); - auto value = serde::Deserializable::deserialize(deserializer); - if (deserializer.get_buffer_offset() < input.size()) { - throw serde::deserialization_error("Some input bytes were not read"); - } - return value; -} + inline Witness Witness::bincodeDeserialize(std::vector input) { + auto deserializer = serde::BincodeDeserializer(input); + auto value = serde::Deserializable::deserialize(deserializer); + if (deserializer.get_buffer_offset() < input.size()) { + throw serde::deserialization_error("Some input bytes were not read"); + } + return value; + } } // end of namespace Program template <> template -void serde::Serializable::serialize( - const Program::Witness &obj, Serializer &serializer) { - serializer.increase_container_depth(); - serde::Serializable::serialize(obj.value, serializer); - serializer.decrease_container_depth(); +void serde::Serializable::serialize(const Program::Witness &obj, Serializer &serializer) { + serializer.increase_container_depth(); + serde::Serializable::serialize(obj.value, serializer); + serializer.decrease_container_depth(); } template <> template -Program::Witness serde::Deserializable::deserialize( - Deserializer &deserializer) { - deserializer.increase_container_depth(); - Program::Witness obj; - obj.value = - serde::Deserializable::deserialize(deserializer); - deserializer.decrease_container_depth(); - return obj; +Program::Witness serde::Deserializable::deserialize(Deserializer &deserializer) { + deserializer.increase_container_depth(); + Program::Witness obj; + obj.value = serde::Deserializable::deserialize(deserializer); + deserializer.decrease_container_depth(); + return obj; } From b1428e2d1fa104114775eacbb1bb3f91d2702d0a Mon Sep 17 00:00:00 2001 From: guipublic Date: Fri, 6 Sep 2024 12:57:31 +0000 Subject: [PATCH 80/98] fix warning --- .../compiler/noirc_evaluator/src/ssa/opt/flatten_cfg.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/noir/noir-repo/compiler/noirc_evaluator/src/ssa/opt/flatten_cfg.rs b/noir/noir-repo/compiler/noirc_evaluator/src/ssa/opt/flatten_cfg.rs index f44b888c831..3a246cf4806 100644 --- a/noir/noir-repo/compiler/noirc_evaluator/src/ssa/opt/flatten_cfg.rs +++ b/noir/noir-repo/compiler/noirc_evaluator/src/ssa/opt/flatten_cfg.rs @@ -887,7 +887,7 @@ mod test { ir::{ dfg::DataFlowGraph, function::Function, - instruction::{BinaryOp, Instruction, Intrinsic, TerminatorInstruction}, + instruction::{BinaryOp, Instruction, TerminatorInstruction}, map::Id, types::Type, value::{Value, ValueId}, From c384eca0ec14da794eb7b49fc42d321409d23259 Mon Sep 17 00:00:00 2001 From: guipublic Date: Fri, 6 Sep 2024 13:20:41 +0000 Subject: [PATCH 81/98] format fix --- noir/noir-repo/acvm-repo/acvm/tests/solver.rs | 2 -- 1 file changed, 2 deletions(-) diff --git a/noir/noir-repo/acvm-repo/acvm/tests/solver.rs b/noir/noir-repo/acvm-repo/acvm/tests/solver.rs index 61617a7d1a4..55abd052565 100644 --- a/noir/noir-repo/acvm-repo/acvm/tests/solver.rs +++ b/noir/noir-repo/acvm-repo/acvm/tests/solver.rs @@ -1010,7 +1010,6 @@ fn solve_blackbox_func_call( witness_map[&Witness(3)] } - // N inputs // 32 outputs fn blake2s_op( @@ -1354,7 +1353,6 @@ fn poseidon2_permutation_zeroes() { assert_eq!(result, expected_result); } - #[test] fn sha256_compression_zeros() { let results = solve_array_input_blackbox_call( From 5d9a4ef34cd444be8d30aacc47e51b4ea000e285 Mon Sep 17 00:00:00 2001 From: guipublic Date: Fri, 6 Sep 2024 13:38:53 +0000 Subject: [PATCH 82/98] restore sha256 in stdlib --- noir/noir-repo/noir_stdlib/src/hash/sha256.nr | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/noir/noir-repo/noir_stdlib/src/hash/sha256.nr b/noir/noir-repo/noir_stdlib/src/hash/sha256.nr index 7f255fe5586..e99c7678176 100644 --- a/noir/noir-repo/noir_stdlib/src/hash/sha256.nr +++ b/noir/noir-repo/noir_stdlib/src/hash/sha256.nr @@ -4,11 +4,12 @@ use crate::runtime::is_unconstrained; // 32 bytes. // Deprecated in favour of `sha256_var` -#[foreign(sha256)] // docs:start:sha256 pub fn sha256(input: [u8; N]) -> [u8; 32] // docs:end:sha256 -{} +{ + crate::sha256::digest(input) +} #[foreign(sha256_compression)] pub fn sha256_compression(_input: [u32; 16], _state: [u32; 8]) -> [u32; 8] {} @@ -104,7 +105,7 @@ pub fn sha256_var(msg: [u8; N], message_size: u64) -> [u8; 32] { msg_byte_ptr = new_msg_byte_ptr; } - // If the block is filled, compress it. + // If the block is filled, compress it. // An un-filled block is handled after this loop. if msg_byte_ptr == 64 { h = sha256_compression(msg_u8_to_u32(msg_block), h); @@ -113,8 +114,8 @@ pub fn sha256_var(msg: [u8; N], message_size: u64) -> [u8; 32] { let modulo = N % BLOCK_SIZE; // Handle setup of the final msg block. - // This case is only hit if the msg is less than the block size, - // or our message cannot be evenly split into blocks. + // This case is only hit if the msg is less than the block size, + // or our message cannot be evenly split into blocks. if modulo != 0 { let msg_start = BLOCK_SIZE * num_blocks; let (new_msg_block, new_msg_byte_ptr) = unsafe { @@ -145,7 +146,7 @@ pub fn sha256_var(msg: [u8; N], message_size: u64) -> [u8; 32] { let zero = msg_block[0] - msg_block[0]; // Pad the rest such that we have a [u32; 2] block at the end representing the length - // of the message, and a block of 1 0 ... 0 following the message (i.e. [1 << 7, 0, ..., 0]). + // of the message, and a block of 1 0 ... 0 following the message (i.e. [1 << 7, 0, ..., 0]). msg_block[msg_byte_ptr] = 1 << 7; let last_block = msg_block; msg_byte_ptr = msg_byte_ptr + 1; From 84a983024388c07d636bb2351e9c604cac5bebbf Mon Sep 17 00:00:00 2001 From: guipublic Date: Fri, 6 Sep 2024 14:51:51 +0000 Subject: [PATCH 83/98] fix merge issue --- yarn-project/noir-protocol-circuits-types/package.json | 2 +- yarn-project/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/yarn-project/noir-protocol-circuits-types/package.json b/yarn-project/noir-protocol-circuits-types/package.json index 2af3d4b54fe..cc7814ca80e 100644 --- a/yarn-project/noir-protocol-circuits-types/package.json +++ b/yarn-project/noir-protocol-circuits-types/package.json @@ -59,7 +59,7 @@ "@aztec/types": "workspace:^", "@noir-lang/acvm_js": "portal:../../noir/packages/acvm_js", "@noir-lang/noir_codegen": "portal:../../noir/packages/noir_codegen", - "@noir-lang/noir_js": "portal:../../noir/packages/noir_js", + "@noir-lang/noir_js": "file:../noir/packages/noir_js", "@noir-lang/noirc_abi": "portal:../../noir/packages/noirc_abi", "@noir-lang/types": "portal:../../noir/packages/types", "change-case": "^5.4.4", diff --git a/yarn-project/package.json b/yarn-project/package.json index 1e115faf7ea..316150e46fd 100644 --- a/yarn-project/package.json +++ b/yarn-project/package.json @@ -81,7 +81,7 @@ "@noir-lang/types": "portal:../noir/packages/types", "@noir-lang/noirc_abi": "portal:../noir/packages/noirc_abi", "@noir-lang/noir_codegen": "portal:../noir/packages/noir_codegen", - "@noir-lang/noir_js": "portal:../noir/packages/noir_js", + "@noir-lang/noir_js": "file:../noir/packages/noir_js", "jest-runner@^29.7.0": "patch:jest-runner@npm%3A29.7.0#./.yarn/patches/jest-runner-npm-29.7.0-3bc9f82b58.patch" } } From 97050fa7c2cdf79618186750cc381377681cf406 Mon Sep 17 00:00:00 2001 From: guipublic Date: Fri, 6 Sep 2024 16:28:51 +0000 Subject: [PATCH 84/98] fix merge issue --- yarn-project/noir-protocol-circuits-types/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/yarn-project/noir-protocol-circuits-types/package.json b/yarn-project/noir-protocol-circuits-types/package.json index cc7814ca80e..c33e8ba46eb 100644 --- a/yarn-project/noir-protocol-circuits-types/package.json +++ b/yarn-project/noir-protocol-circuits-types/package.json @@ -59,7 +59,7 @@ "@aztec/types": "workspace:^", "@noir-lang/acvm_js": "portal:../../noir/packages/acvm_js", "@noir-lang/noir_codegen": "portal:../../noir/packages/noir_codegen", - "@noir-lang/noir_js": "file:../noir/packages/noir_js", + "@noir-lang/noir_js": "file:../../noir/packages/noir_js", "@noir-lang/noirc_abi": "portal:../../noir/packages/noirc_abi", "@noir-lang/types": "portal:../../noir/packages/types", "change-case": "^5.4.4", From 302217cded903b70d8cb0341fbcd98e9cf87e875 Mon Sep 17 00:00:00 2001 From: guipublic Date: Fri, 6 Sep 2024 16:42:32 +0000 Subject: [PATCH 85/98] update yarn.lock --- yarn-project/yarn.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/yarn-project/yarn.lock b/yarn-project/yarn.lock index 5db6ad50024..2e9e1b1ad4b 100644 --- a/yarn-project/yarn.lock +++ b/yarn-project/yarn.lock @@ -798,7 +798,7 @@ __metadata: "@jest/globals": ^29.5.0 "@noir-lang/acvm_js": "portal:../../noir/packages/acvm_js" "@noir-lang/noir_codegen": "portal:../../noir/packages/noir_codegen" - "@noir-lang/noir_js": "portal:../../noir/packages/noir_js" + "@noir-lang/noir_js": "file:../../noir/packages/noir_js" "@noir-lang/noirc_abi": "portal:../../noir/packages/noirc_abi" "@noir-lang/types": "portal:../../noir/packages/types" "@types/jest": ^29.5.0 @@ -3369,14 +3369,14 @@ __metadata: "@noir-lang/noir_js@file:../noir/packages/noir_js::locator=%40aztec%2Faztec3-packages%40workspace%3A.": version: 0.33.0 - resolution: "@noir-lang/noir_js@file:../noir/packages/noir_js#../noir/packages/noir_js::hash=e4c9c2&locator=%40aztec%2Faztec3-packages%40workspace%3A." + resolution: "@noir-lang/noir_js@file:../noir/packages/noir_js#../noir/packages/noir_js::hash=24ed6f&locator=%40aztec%2Faztec3-packages%40workspace%3A." dependencies: "@noir-lang/acvm_js": 0.49.0 "@noir-lang/noirc_abi": 0.33.0 "@noir-lang/types": 0.33.0 - checksum: 82d759db2487b4c2fd298ec989cb0f4547f5dfef4cc70bf37531e1d92e04bfecf425576497b8f63769a3249a584a1a31c2751615a2633a51b2dd815e296044b1 + checksum: 9a6c0ad4d89b1534d24ddd3529ba0b0e553947cc9f8a331421947039d01397ad819254a3a6b4954915c449041b57851f199e61a1649ad335102e8340f09ad816 languageName: node - linkType: soft + linkType: hard "@noir-lang/noirc_abi@portal:../noir/packages/noirc_abi::locator=%40aztec%2Faztec3-packages%40workspace%3A.": version: 0.0.0-use.local From 6e33aff7a3659561a3985738c033cd47da7e3061 Mon Sep 17 00:00:00 2001 From: guipublic Date: Mon, 9 Sep 2024 09:23:32 +0000 Subject: [PATCH 86/98] remove sha256 avm tests --- .../simulator/src/avm/opcodes/hashing.test.ts | 109 +----------------- 1 file changed, 3 insertions(+), 106 deletions(-) diff --git a/yarn-project/simulator/src/avm/opcodes/hashing.test.ts b/yarn-project/simulator/src/avm/opcodes/hashing.test.ts index 3ef93d96e3c..dcf05755867 100644 --- a/yarn-project/simulator/src/avm/opcodes/hashing.test.ts +++ b/yarn-project/simulator/src/avm/opcodes/hashing.test.ts @@ -1,10 +1,10 @@ -import { keccak256, keccakf1600, pedersenHash, sha256Compression } from '@aztec/foundation/crypto'; +import { keccak256, keccakf1600, pedersenHash } from '@aztec/foundation/crypto'; import { type AvmContext } from '../avm_context.js'; import { Field, type Uint8, Uint32, Uint64 } from '../avm_memory_types.js'; import { initContext, randomMemoryBytes, randomMemoryFields } from '../fixtures/index.js'; import { Addressing, AddressingMode } from './addressing_mode.js'; -import { Keccak, KeccakF1600, Pedersen, Poseidon2, sha256Compression } from './hashing.js'; +import { Keccak, KeccakF1600, Pedersen, Poseidon2 } from './hashing.js'; describe('Hashing Opcodes', () => { let context: AvmContext; @@ -173,110 +173,7 @@ describe('Hashing Opcodes', () => { }); }); - describe('Sha256Compression', () => { - it('Should (de)serialize correctly', () => { - const buf = Buffer.from([ - Sha256Compression.opcode, // opcode - 1, // indirect - ...Buffer.from('12345678', 'hex'), // dstOffset - ...Buffer.from('23456789', 'hex'), // stateOffset - ...Buffer.from('3456789a', 'hex'), // stateSizeOffset - ...Buffer.from('456789ab', 'hex'), // inputsOffset - ...Buffer.from('56789abc', 'hex'), // inputsSizeOffset - ]); - const inst = new Sha256Compression( - /*indirect=*/ 1, - /*dstOffset=*/ 0x12345678, - /*stateOffset=*/ 0x23456789, - /*stateSizeOffset=*/ 0x3456789a, - /*inputsOffset=*/ 0x456789ab, - /*inputsSizeOffset=*/ 0x56789abc, - ); - - expect(Sha256Compression.deserialize(buf)).toEqual(inst); - expect(inst.serialize()).toEqual(buf); - }); - - it('Should hash correctly - direct', async () => { - const state = randomMemoryUint32s(8); - const stateArray = Uint32Array.from(state.map(byte => byte.toNumber())); - const inputs = randomMemoryUint32s(16); - const inputsArray = Uint32Array.from(inputs.map(byte => byte.toNumber())); - const indirect = 0; - const stateOffset = 0; - const stateSizeOffset = 100; - const inputsOffset = 200; - const inputsSizeOffset = 300; - const outputOffset = 300; - context.machineState.memory.set(stateSizeOffset, new Uint32(state.length)); - context.machineState.memory.setSlice(stateOffset, state); - context.machineState.memory.set(inputsSizeOffset, new Uint32(inputs.length)); - context.machineState.memory.setSlice(inputsOffset, inputs); - - await new Sha256Compression( - indirect, - outputOffset, - stateOffset, - stateSizeOffset, - inputsOffset, - inputsSizeOffset, - ).execute(context); - - const output = context.machineState.memory.getSliceAs(outputOffset, 8); - const outputArray = Uint32Array.from(output.map(word => word.toNumber())); - - const expectedOutput = sha256Compression(stateArray, inputsArray); - expect(outputArray).toEqual(expectedOutput); - }); - - it('Should hash correctly - indirect', async () => { - const state = randomMemoryUint32s(8); - const stateArray = Uint32Array.from(state.map(byte => byte.toNumber())); - const inputs = randomMemoryUint32s(16); - const inputsArray = Uint32Array.from(inputs.map(byte => byte.toNumber())); - const indirect = new Addressing([ - /*dstOffset=*/ AddressingMode.INDIRECT, - /*stateOffset*/ AddressingMode.INDIRECT, - /*stateSizeOffset*/ AddressingMode.INDIRECT, - /*inputsOffset*/ AddressingMode.INDIRECT, - /*inputsSizeOffset*/ AddressingMode.INDIRECT, - ]).toWire(); - const stateOffset = 0; - const stateOffsetReal = 10; - const stateSizeOffset = 1; - const stateSizeOffsetReal = 100; - const inputsOffset = 2; - const inputsOffsetReal = 200; - const inputsSizeOffset = 3; - const inputsSizeOffsetReal = 300; - const outputOffset = 4; - const outputOffsetReal = 400; - context.machineState.memory.set(stateSizeOffset, new Uint32(stateSizeOffsetReal)); - context.machineState.memory.set(stateSizeOffsetReal, new Uint32(state.length)); - context.machineState.memory.set(stateOffset, new Uint32(stateOffsetReal)); - context.machineState.memory.setSlice(stateOffsetReal, state); - context.machineState.memory.set(inputsSizeOffset, new Uint32(inputsSizeOffsetReal)); - context.machineState.memory.set(inputsSizeOffsetReal, new Uint32(inputs.length)); - context.machineState.memory.set(inputsOffset, new Uint32(inputsOffsetReal)); - context.machineState.memory.setSlice(inputsOffsetReal, inputs); - context.machineState.memory.set(outputOffset, new Uint32(outputOffsetReal)); - - await new Sha256Compression( - indirect, - outputOffset, - stateOffset, - stateSizeOffset, - inputsOffset, - inputsSizeOffset, - ).execute(context); - - const output = context.machineState.memory.getSliceAs(outputOffsetReal, 8); - const outputArray = Uint32Array.from(output.map(word => word.toNumber())); - - const expectedOutput = sha256Compression(stateArray, inputsArray); - expect(outputArray).toEqual(expectedOutput); - }); - }); +// TODO: add Sha256Compression tests describe('Pedersen', () => { it('Should (de)serialize correctly', () => { From 859b61f23602820ecb61121b808a4d407998a074 Mon Sep 17 00:00:00 2001 From: guipublic Date: Mon, 9 Sep 2024 10:11:02 +0000 Subject: [PATCH 87/98] comment sha256compression in hashing.ts --- .../simulator/src/avm/opcodes/hashing.ts | 121 +++++++++--------- 1 file changed, 61 insertions(+), 60 deletions(-) diff --git a/yarn-project/simulator/src/avm/opcodes/hashing.ts b/yarn-project/simulator/src/avm/opcodes/hashing.ts index 8a4ddac07f2..230d25f20e4 100644 --- a/yarn-project/simulator/src/avm/opcodes/hashing.ts +++ b/yarn-project/simulator/src/avm/opcodes/hashing.ts @@ -145,66 +145,67 @@ export class KeccakF1600 extends Instruction { } } -export class Sha256Compression extends Instruction { - static type: string = 'SHA256COMPRESSION'; - static readonly opcode: Opcode = Opcode.SHA256COMPRESSION; - - // Informs (de)serialization. See Instruction.deserialize. - static readonly wireFormat: OperandType[] = [ - OperandType.UINT8, - OperandType.UINT8, - OperandType.UINT32, - OperandType.UINT32, - OperandType.UINT32, - OperandType.UINT32, - OperandType.UINT32, - ]; - - constructor( - private indirect: number, - private outputOffset: number, - private stateOffset: number, - private stateSizeOffset: number, - private inputsOffset: number, - private inputsSizeOffset: number, - ) { - super(); - } - - public async execute(context: AvmContext): Promise { - const memory = context.machineState.memory.track(this.type); - const [outputOffset, stateOffset, stateSizeOffset, inputsOffset, inputsSizeOffset] = Addressing.fromWire( - this.indirect, - ).resolve( - [this.outputOffset, this.stateOffset, this.stateSizeOffset, this.inputsOffset, this.inputsSizeOffset], - memory, - ); - const stateSize = memory.get(stateSizeOffset).toNumber(); - const inputsSize = memory.get(inputsSizeOffset).toNumber(); - if (stateSize !== 8) { - throw new InstructionExecutionError('`state` argument to SHA256 compression must be of length 8'); - } - if (inputsSize !== 16) { - throw new InstructionExecutionError('`inputs` argument to SHA256 compression must be of length 16'); - } - // +2 to account for both size offsets (stateSizeOffset and inputsSizeOffset) - // Note: size of output is same as size of state - const memoryOperations = { reads: stateSize + inputsSize + 2, writes: stateSize, indirect: this.indirect }; - context.machineState.consumeGas(this.gasCost(memoryOperations)); - memory.checkTagsRange(TypeTag.UINT8, messageOffset, messageSize); - - const state = Uint32Array.from(memory.getSlice(stateOffset, stateSize).map(word => word.toNumber())); - const inputs = Uint32Array.from(memory.getSlice(inputsOffset, inputsSize).map(word => word.toNumber())); - const output = sha256Compression(state, inputs); - - // Conversion required from Uint32Array to Uint32[] (can't map directly, need `...`) - const res = [...output].map(word => new Uint32(word)); - memory.setSlice(outputOffset, res); - - memory.assert(memoryOperations); - context.machineState.incrementPc(); - } -} +// TODO: add it back +// export class Sha256Compression extends Instruction { +// static type: string = 'SHA256COMPRESSION'; +// static readonly opcode: Opcode = Opcode.SHA256COMPRESSION; + +// // Informs (de)serialization. See Instruction.deserialize. +// static readonly wireFormat: OperandType[] = [ +// OperandType.UINT8, +// OperandType.UINT8, +// OperandType.UINT32, +// OperandType.UINT32, +// OperandType.UINT32, +// OperandType.UINT32, +// OperandType.UINT32, +// ]; + +// constructor( +// private indirect: number, +// private outputOffset: number, +// private stateOffset: number, +// private stateSizeOffset: number, +// private inputsOffset: number, +// private inputsSizeOffset: number, +// ) { +// super(); +// } + +// public async execute(context: AvmContext): Promise { +// const memory = context.machineState.memory.track(this.type); +// const [outputOffset, stateOffset, stateSizeOffset, inputsOffset, inputsSizeOffset] = Addressing.fromWire( +// this.indirect, +// ).resolve( +// [this.outputOffset, this.stateOffset, this.stateSizeOffset, this.inputsOffset, this.inputsSizeOffset], +// memory, +// ); +// const stateSize = memory.get(stateSizeOffset).toNumber(); +// const inputsSize = memory.get(inputsSizeOffset).toNumber(); +// if (stateSize !== 8) { +// throw new InstructionExecutionError('`state` argument to SHA256 compression must be of length 8'); +// } +// if (inputsSize !== 16) { +// throw new InstructionExecutionError('`inputs` argument to SHA256 compression must be of length 16'); +// } +// // +2 to account for both size offsets (stateSizeOffset and inputsSizeOffset) +// // Note: size of output is same as size of state +// const memoryOperations = { reads: stateSize + inputsSize + 2, writes: stateSize, indirect: this.indirect }; +// context.machineState.consumeGas(this.gasCost(memoryOperations)); +// memory.checkTagsRange(TypeTag.UINT8, messageOffset, messageSize); + +// const state = Uint32Array.from(memory.getSlice(stateOffset, stateSize).map(word => word.toNumber())); +// const inputs = Uint32Array.from(memory.getSlice(inputsOffset, inputsSize).map(word => word.toNumber())); +// const output = sha256Compression(state, inputs); + +// // Conversion required from Uint32Array to Uint32[] (can't map directly, need `...`) +// const res = [...output].map(word => new Uint32(word)); +// memory.setSlice(outputOffset, res); + +// memory.assert(memoryOperations); +// context.machineState.incrementPc(); +// } +// } export class Pedersen extends Instruction { static type: string = 'PEDERSEN'; From a55094efa5167e6d590cf93e4158ef3eeea58af1 Mon Sep 17 00:00:00 2001 From: fcarreiro Date: Mon, 9 Sep 2024 15:26:52 +0000 Subject: [PATCH 88/98] fix hashing.ts and other cpp things --- avm-transpiler/src/opcodes.rs | 9 +- .../vm/avm/tests/execution.test.cpp | 68 --------- .../vm/avm/trace/deserialization.cpp | 8 +- .../barretenberg/vm/avm/trace/execution.cpp | 6 - .../barretenberg/vm/avm/trace/fixed_gas.cpp | 5 +- .../src/barretenberg/vm/avm/trace/opcode.cpp | 11 +- .../src/barretenberg/vm/avm/trace/opcode.hpp | 6 +- .../src/barretenberg/vm/avm/trace/trace.cpp | 55 ------- .../src/barretenberg/vm/avm/trace/trace.hpp | 1 - .../simulator/src/avm/fixtures/index.ts | 6 +- .../simulator/src/avm/opcodes/hashing.test.ts | 111 +++++++++++++- .../simulator/src/avm/opcodes/hashing.ts | 136 ++++++++++-------- .../instruction_serialization.ts | 4 +- 13 files changed, 200 insertions(+), 226 deletions(-) diff --git a/avm-transpiler/src/opcodes.rs b/avm-transpiler/src/opcodes.rs index 76265e87064..5e3d3ef52b4 100644 --- a/avm-transpiler/src/opcodes.rs +++ b/avm-transpiler/src/opcodes.rs @@ -66,15 +66,14 @@ pub enum AvmOpcode { // Gadgets KECCAK, POSEIDON2, + SHA256COMPRESSION, + KECCAKF1600, PEDERSEN, // temp - may be removed, but alot of contracts rely on it ECADD, MSM, PEDERSENCOMMITMENT, // temp // Conversions TORADIXLE, - // Other - SHA256COMPRESSION, - KECCAKF1600, } impl AvmOpcode { @@ -157,6 +156,7 @@ impl AvmOpcode { // Gadgets AvmOpcode::KECCAK => "KECCAK", + AvmOpcode::KECCAKF1600 => "KECCAKF1600", AvmOpcode::POSEIDON2 => "POSEIDON2", AvmOpcode::SHA256COMPRESSION => "SHA256COMPRESSION", AvmOpcode::PEDERSEN => "PEDERSEN", @@ -165,9 +165,6 @@ impl AvmOpcode { AvmOpcode::PEDERSENCOMMITMENT => "PEDERSENCOMMITMENT", // Conversions AvmOpcode::TORADIXLE => "TORADIXLE", - // Other - AvmOpcode::SHA256COMPRESSION => "SHA256COMPRESSION", - AvmOpcode::KECCAKF1600 => "KECCAKF1600", } } } diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/tests/execution.test.cpp b/barretenberg/cpp/src/barretenberg/vm/avm/tests/execution.test.cpp index 6093a547760..dc67f77be15 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/tests/execution.test.cpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/tests/execution.test.cpp @@ -877,74 +877,6 @@ TEST_F(AvmExecutionTests, sha256CompressionOpcode) validate_trace(std::move(trace), public_inputs, calldata, returndata); } -// Positive test with SHA256 -TEST_F(AvmExecutionTests, sha256Opcode) -{ - - // Test vectors taken from noir black_box_solver - // Uint8Array.from([0x61, 0x62, 0x63]), - // Uint8Array.from([ - // 0xba, 0x78, 0x16, 0xbf, 0x8f, 0x01, 0xcf, 0xea, 0x41, 0x41, 0x40, 0xde, 0x5d, 0xae, 0x22, 0x23, 0xb0, 0x03, - // 0x61, 0xa3, 0x96, 0x17, 0x7a, 0x9c, 0xb4, 0x10, 0xff, 0x61, 0xf2, 0x00, 0x15, 0xad, - // ]), - std::vector expected_output = { - FF(0xba), FF(0x78), FF(0x16), FF(0xbf), FF(0x8f), FF(0x01), FF(0xcf), FF(0xea), FF(0x41), FF(0x41), FF(0x40), - FF(0xde), FF(0x5d), FF(0xae), FF(0x22), FF(0x23), FF(0xb0), FF(0x03), FF(0x61), FF(0xa3), FF(0x96), FF(0x17), - FF(0x7a), FF(0x9c), FF(0xb4), FF(0x10), FF(0xff), FF(0x61), FF(0xf2), FF(0x00), FF(0x15), FF(0xad), - }; - std::string bytecode_hex = to_hex(OpCode::SET) + // Initial SET operations to store state and input - "00" // Indirect Flag - "01" // U8 - "61" // val 97 - "00000001" // dst_offset 1 - + to_hex(OpCode::SET) + // opcode SET for indirect src (input) - "00" // Indirect flag - "01" // U8 - "62" // value 98 (i.e. where the src will be read from)A - "00000002" // input_offset 2 - + to_hex(OpCode::SET) + // opcode SET for indirect src (input) - "00" // Indirect flag - "01" // U32 - "63" // value 99 (i.e. where the src will be read from) - "00000003" // input_offset 36 - + to_hex(OpCode::SET) + // opcode SET for indirect src (input) - "00" // Indirect flag - "03" // U32 - "00000001" // value 1 (i.e. where the src will be read from) - "00000024" // input_offset 36 - + to_hex(OpCode::SET) + // - "00" // Indirect flag - "03" // U8 - "00000003" // value 3 (i.e. where the length parameter is stored) - "00000025" // input_offset 37 - + to_hex(OpCode::SET) + // opcode SET for indirect dst (output) - "00" // Indirect flag - "03" // U32 - "00000100" // value 256 (i.e. where the ouput will be written to) - "00000023" // dst_offset 35 - + to_hex(OpCode::SHA256) + // opcode SHA256 - "03" // Indirect flag (first 2 operands indirect) - "00000023" // output offset (indirect 35) - "00000024" // input offset (indirect 36) - "00000025" // length offset 37 - + to_hex(OpCode::RETURN) + // opcode RETURN - "00" // Indirect flag - "00000100" // ret offset 256 - "00000020"; // ret size 32 - - auto bytecode = hex_to_bytes(bytecode_hex); - auto instructions = Deserialization::parse(bytecode); - - // Assign a vector that we will mutate internally in gen_trace to store the return values; - std::vector returndata = std::vector(); - std::vector calldata = std::vector(); - auto trace = Execution::gen_trace(instructions, returndata, calldata, public_inputs_vec); - - EXPECT_EQ(returndata, expected_output); - - validate_trace(std::move(trace), public_inputs, calldata, returndata); -} - // Positive test with POSEIDON2_PERM. TEST_F(AvmExecutionTests, poseidon2PermutationOpCode) { diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/trace/deserialization.cpp b/barretenberg/cpp/src/barretenberg/vm/avm/trace/deserialization.cpp index 189409b2409..62f04134d5f 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/trace/deserialization.cpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/trace/deserialization.cpp @@ -148,7 +148,9 @@ const std::unordered_map> OPCODE_WIRE_FORMAT = // Gadgets - Hashing { OpCode::KECCAK, { OperandType::INDIRECT, OperandType::UINT32, OperandType::UINT32, OperandType::UINT32 } }, { OpCode::POSEIDON2, { OperandType::INDIRECT, OperandType::UINT32, OperandType::UINT32 } }, - { OpCode::SHA256, { OperandType::INDIRECT, OperandType::UINT32, OperandType::UINT32, OperandType::UINT32 } }, + { OpCode::SHA256COMPRESSION, + { OperandType::INDIRECT, OperandType::UINT32, OperandType::UINT32, OperandType::UINT32 } }, + { OpCode::KECCAKF1600, { OperandType::INDIRECT, OperandType::UINT32, OperandType::UINT32, OperandType::UINT32 } }, { OpCode::PEDERSEN, { OperandType::INDIRECT, OperandType::UINT32, OperandType::UINT32, OperandType::UINT32, OperandType::UINT32 } }, // TEMP ECADD without relative memory @@ -168,10 +170,6 @@ const std::unordered_map> OPCODE_WIRE_FORMAT = // Gadget - Conversion { OpCode::TORADIXLE, { OperandType::INDIRECT, OperandType::UINT32, OperandType::UINT32, OperandType::UINT32, OperandType::UINT32 } }, - // Gadgets - Unused for now - { OpCode::SHA256COMPRESSION, - { OperandType::INDIRECT, OperandType::UINT32, OperandType::UINT32, OperandType::UINT32 } }, - { OpCode::KECCAKF1600, { OperandType::INDIRECT, OperandType::UINT32, OperandType::UINT32, OperandType::UINT32 } }, }; const std::unordered_map OPERAND_TYPE_SIZE = { diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/trace/execution.cpp b/barretenberg/cpp/src/barretenberg/vm/avm/trace/execution.cpp index e7759e5d7fb..f69a9192831 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/trace/execution.cpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/trace/execution.cpp @@ -739,12 +739,6 @@ std::vector Execution::gen_trace(std::vector const& instructio std::get(inst.operands.at(2))); break; - case OpCode::SHA256: - trace_builder.op_sha256(std::get(inst.operands.at(0)), - std::get(inst.operands.at(1)), - std::get(inst.operands.at(2)), - std::get(inst.operands.at(3))); - break; case OpCode::PEDERSEN: trace_builder.op_pedersen_hash(std::get(inst.operands.at(0)), std::get(inst.operands.at(1)), diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/trace/fixed_gas.cpp b/barretenberg/cpp/src/barretenberg/vm/avm/trace/fixed_gas.cpp index 749a913feb6..c123b3ba2a8 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/trace/fixed_gas.cpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/trace/fixed_gas.cpp @@ -74,15 +74,14 @@ const std::unordered_map GAS_COST_TABLE = { { OpCode::DEBUGLOG, make_cost(AVM_DEBUGLOG_BASE_L2_GAS, 0, AVM_DEBUGLOG_DYN_L2_GAS, 0) }, { OpCode::KECCAK, make_cost(AVM_KECCAK_BASE_L2_GAS, 0, AVM_KECCAK_DYN_L2_GAS, 0) }, { OpCode::POSEIDON2, make_cost(AVM_POSEIDON2_BASE_L2_GAS, 0, AVM_POSEIDON2_DYN_L2_GAS, 0) }, - { OpCode::SHA256, make_cost(AVM_SHA256_BASE_L2_GAS, 0, AVM_SHA256_DYN_L2_GAS, 0) }, + { OpCode::SHA256COMPRESSION, make_cost(AVM_SHA256COMPRESSION_BASE_L2_GAS, 0, AVM_SHA256COMPRESSION_DYN_L2_GAS, 0) }, + { OpCode::KECCAKF1600, make_cost(AVM_KECCAKF1600_BASE_L2_GAS, 0, AVM_KECCAKF1600_DYN_L2_GAS, 0) }, { OpCode::PEDERSEN, make_cost(AVM_PEDERSEN_BASE_L2_GAS, 0, AVM_PEDERSEN_DYN_L2_GAS, 0) }, { OpCode::ECADD, make_cost(AVM_ECADD_BASE_L2_GAS, 0, AVM_ECADD_DYN_L2_GAS, 0) }, { OpCode::MSM, make_cost(AVM_MSM_BASE_L2_GAS, 0, AVM_MSM_DYN_L2_GAS, 0) }, { OpCode::PEDERSENCOMMITMENT, make_cost(AVM_PEDERSENCOMMITMENT_BASE_L2_GAS, 0, AVM_PEDERSENCOMMITMENT_DYN_L2_GAS, 0) }, { OpCode::TORADIXLE, make_cost(AVM_TORADIXLE_BASE_L2_GAS, 0, AVM_TORADIXLE_DYN_L2_GAS, 0) }, - { OpCode::SHA256COMPRESSION, make_cost(AVM_SHA256COMPRESSION_BASE_L2_GAS, 0, AVM_SHA256COMPRESSION_DYN_L2_GAS, 0) }, - { OpCode::KECCAKF1600, make_cost(AVM_KECCAKF1600_BASE_L2_GAS, 0, AVM_KECCAKF1600_DYN_L2_GAS, 0) }, }; } // namespace diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/trace/opcode.cpp b/barretenberg/cpp/src/barretenberg/vm/avm/trace/opcode.cpp index 5a80d3ec678..0f4a3819ede 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/trace/opcode.cpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/trace/opcode.cpp @@ -149,8 +149,10 @@ std::string to_string(OpCode opcode) return "KECCAK"; case OpCode::POSEIDON2: return "POSEIDON2"; - case OpCode::SHA256: - return "SHA256"; + case OpCode::SHA256COMPRESSION: + return "SHA256COMPRESSION"; + case OpCode::KECCAKF1600: + return "KECCAKF1600"; case OpCode::PEDERSEN: return "PEDERSEN"; case OpCode::ECADD: @@ -160,11 +162,6 @@ std::string to_string(OpCode opcode) // Conversions case OpCode::TORADIXLE: return "TORADIXLE"; - // Future Gadgets -- pending changes in noir - case OpCode::SHA256COMPRESSION: - return "SHA256COMPRESSION"; - case OpCode::KECCAKF1600: - return "KECCAKF1600"; // Sentinel case OpCode::LAST_OPCODE_SENTINEL: return "LAST_OPCODE_SENTINEL"; diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/trace/opcode.hpp b/barretenberg/cpp/src/barretenberg/vm/avm/trace/opcode.hpp index bb880e22a41..bc6dc74ed17 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/trace/opcode.hpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/trace/opcode.hpp @@ -98,16 +98,14 @@ enum class OpCode : uint8_t { // Gadgets KECCAK, POSEIDON2, - SHA256, + SHA256COMPRESSION, + KECCAKF1600, PEDERSEN, ECADD, MSM, PEDERSENCOMMITMENT, // Conversions TORADIXLE, - // Future Gadgets -- pending changes in noir - SHA256COMPRESSION, - KECCAKF1600, // Here for when we eventually support this // Sentinel LAST_OPCODE_SENTINEL, diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/trace/trace.cpp b/barretenberg/cpp/src/barretenberg/vm/avm/trace/trace.cpp index 4bf4688ff6d..3fc4ec91dc2 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/trace/trace.cpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/trace/trace.cpp @@ -2897,61 +2897,6 @@ void AvmTraceBuilder::op_poseidon2_permutation(uint8_t indirect, uint32_t input_ AvmMemTraceBuilder::POSEIDON2); } -/** - * @brief SHA256 Hash with direct or indirect memory access. - * This function is temporary until we have transitioned to sha256Compression - * @param indirect byte encoding information about indirect/direct memory access. - * @param output_offset An index in memory pointing to where the first U32 value of the output array should be - * stored. - * @param input_offset An index in memory pointing to the first U8 value of the state array to be used in the next - * instance of sha256. - * @param input_size_offset An index in memory pointing to the U32 value of the input size. - */ -void AvmTraceBuilder::op_sha256(uint8_t indirect, - uint32_t output_offset, - uint32_t input_offset, - uint32_t input_size_offset) -{ - auto clk = static_cast(main_trace.size()) + 1; - auto [resolved_output_offset, resolved_input_offset, resolved_input_size_offset] = - unpack_indirects<3>(indirect, { output_offset, input_offset, input_size_offset }); - - gas_trace_builder.constrain_gas(clk, OpCode::SHA256); - - auto input_length_read = constrained_read_from_memory( - call_ptr, clk, resolved_input_size_offset, AvmMemoryTag::U32, AvmMemoryTag::U0, IntermRegister::IB); - - // Store the clock time that we will use to line up the gadget later - auto sha256_op_clk = clk; - main_trace.push_back(Row{ - .main_clk = clk, - .main_ib = input_length_read.val, // Message Length - .main_ind_addr_b = FF(input_length_read.indirect_address), - .main_internal_return_ptr = FF(internal_return_ptr), - .main_mem_addr_b = FF(input_length_read.direct_address), - .main_pc = FF(pc++), - .main_r_in_tag = FF(static_cast(AvmMemoryTag::U32)), - .main_sel_mem_op_b = FF(1), - .main_sel_op_sha256 = FF(1), - .main_sel_resolve_ind_addr_b = FF(static_cast(input_length_read.is_indirect)), - .main_tag_err = FF(static_cast(!input_length_read.tag_match)), - }); - clk++; - - std::vector input; - input.reserve(uint32_t(input_length_read.val)); - read_slice_from_memory(resolved_input_offset, uint32_t(input_length_read.val), input); - - std::array result = sha256_trace_builder.sha256(input, sha256_op_clk); - - std::vector ff_result; - for (uint32_t i = 0; i < 32; i++) { - ff_result.emplace_back(result[i]); - } - // Write the result to memory after - write_slice_to_memory(resolved_output_offset, AvmMemoryTag::U8, ff_result); -} - /** * @brief Pedersen Hash with direct or indirect memory access. * @param indirect byte encoding information about indirect/direct memory access. diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/trace/trace.hpp b/barretenberg/cpp/src/barretenberg/vm/avm/trace/trace.hpp index 996ee4e1d46..7302760ee9d 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/trace/trace.hpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/trace/trace.hpp @@ -155,7 +155,6 @@ class AvmTraceBuilder { // Gadgets void op_keccak(uint8_t indirect, uint32_t output_offset, uint32_t input_offset, uint32_t input_size_offset); void op_poseidon2_permutation(uint8_t indirect, uint32_t input_offset, uint32_t output_offset); - void op_sha256(uint8_t indirect, uint32_t output_offset, uint32_t input_offset, uint32_t input_size_offset); void op_pedersen_hash(uint8_t indirect, uint32_t gen_ctx_offset, uint32_t output_offset, diff --git a/yarn-project/simulator/src/avm/fixtures/index.ts b/yarn-project/simulator/src/avm/fixtures/index.ts index 72bc6d66a7f..83e3848fc4c 100644 --- a/yarn-project/simulator/src/avm/fixtures/index.ts +++ b/yarn-project/simulator/src/avm/fixtures/index.ts @@ -21,7 +21,7 @@ import { type PublicSideEffectTraceInterface } from '../../public/side_effect_tr import { AvmContext } from '../avm_context.js'; import { AvmContextInputs, AvmExecutionEnvironment } from '../avm_execution_environment.js'; import { AvmMachineState } from '../avm_machine_state.js'; -import { Field, Uint8, Uint64 } from '../avm_memory_types.js'; +import { Field, Uint8, Uint32, Uint64 } from '../avm_memory_types.js'; import { type AvmRevertReason } from '../errors.js'; import { HostStorage } from '../journal/host_storage.js'; import { AvmPersistableStateManager } from '../journal/journal.js'; @@ -144,6 +144,10 @@ export function randomMemoryBytes(length: number): Uint8[] { return [...Array(length)].map(_ => new Uint8(Math.floor(Math.random() * 255))); } +export function randomMemoryUint32s(length: number): Uint32[] { + return [...Array(length)].map(_ => new Uint32(Math.floor(Math.random() * 255))); +} + export function randomMemoryUint64s(length: number): Uint64[] { return [...Array(length)].map(_ => new Uint64(Math.floor(Math.random() * 255))); } diff --git a/yarn-project/simulator/src/avm/opcodes/hashing.test.ts b/yarn-project/simulator/src/avm/opcodes/hashing.test.ts index dcf05755867..3d17a0d9d2a 100644 --- a/yarn-project/simulator/src/avm/opcodes/hashing.test.ts +++ b/yarn-project/simulator/src/avm/opcodes/hashing.test.ts @@ -1,10 +1,10 @@ -import { keccak256, keccakf1600, pedersenHash } from '@aztec/foundation/crypto'; +import { keccak256, keccakf1600, pedersenHash, sha256Compression } from '@aztec/foundation/crypto'; import { type AvmContext } from '../avm_context.js'; import { Field, type Uint8, Uint32, Uint64 } from '../avm_memory_types.js'; -import { initContext, randomMemoryBytes, randomMemoryFields } from '../fixtures/index.js'; +import { initContext, randomMemoryBytes, randomMemoryFields, randomMemoryUint32s } from '../fixtures/index.js'; import { Addressing, AddressingMode } from './addressing_mode.js'; -import { Keccak, KeccakF1600, Pedersen, Poseidon2 } from './hashing.js'; +import { Keccak, KeccakF1600, Pedersen, Poseidon2, Sha256Compression } from './hashing.js'; describe('Hashing Opcodes', () => { let context: AvmContext; @@ -173,7 +173,110 @@ describe('Hashing Opcodes', () => { }); }); -// TODO: add Sha256Compression tests + describe('Sha256Compression', () => { + it('Should (de)serialize correctly', () => { + const buf = Buffer.from([ + Sha256Compression.opcode, // opcode + 1, // indirect + ...Buffer.from('12345678', 'hex'), // dstOffset + ...Buffer.from('23456789', 'hex'), // stateOffset + ...Buffer.from('3456789a', 'hex'), // stateSizeOffset + ...Buffer.from('456789ab', 'hex'), // inputsOffset + ...Buffer.from('56789abc', 'hex'), // inputsSizeOffset + ]); + const inst = new Sha256Compression( + /*indirect=*/ 1, + /*dstOffset=*/ 0x12345678, + /*stateOffset=*/ 0x23456789, + /*stateSizeOffset=*/ 0x3456789a, + /*inputsOffset=*/ 0x456789ab, + /*inputsSizeOffset=*/ 0x56789abc, + ); + + expect(Sha256Compression.deserialize(buf)).toEqual(inst); + expect(inst.serialize()).toEqual(buf); + }); + + it('Should hash correctly - direct', async () => { + const state = randomMemoryUint32s(8); + const stateArray = Uint32Array.from(state.map(byte => byte.toNumber())); + const inputs = randomMemoryUint32s(16); + const inputsArray = Uint32Array.from(inputs.map(byte => byte.toNumber())); + const indirect = 0; + const stateOffset = 0; + const stateSizeOffset = 100; + const inputsOffset = 200; + const inputsSizeOffset = 300; + const outputOffset = 300; + context.machineState.memory.set(stateSizeOffset, new Uint32(state.length)); + context.machineState.memory.setSlice(stateOffset, state); + context.machineState.memory.set(inputsSizeOffset, new Uint32(inputs.length)); + context.machineState.memory.setSlice(inputsOffset, inputs); + + await new Sha256Compression( + indirect, + outputOffset, + stateOffset, + stateSizeOffset, + inputsOffset, + inputsSizeOffset, + ).execute(context); + + const output = context.machineState.memory.getSliceAs(outputOffset, 8); + const outputArray = Uint32Array.from(output.map(word => word.toNumber())); + + const expectedOutput = sha256Compression(stateArray, inputsArray); + expect(outputArray).toEqual(expectedOutput); + }); + + it('Should hash correctly - indirect', async () => { + const state = randomMemoryUint32s(8); + const stateArray = Uint32Array.from(state.map(byte => byte.toNumber())); + const inputs = randomMemoryUint32s(16); + const inputsArray = Uint32Array.from(inputs.map(byte => byte.toNumber())); + const indirect = new Addressing([ + /*dstOffset=*/ AddressingMode.INDIRECT, + /*stateOffset*/ AddressingMode.INDIRECT, + /*stateSizeOffset*/ AddressingMode.INDIRECT, + /*inputsOffset*/ AddressingMode.INDIRECT, + /*inputsSizeOffset*/ AddressingMode.INDIRECT, + ]).toWire(); + const stateOffset = 0; + const stateOffsetReal = 10; + const stateSizeOffset = 1; + const stateSizeOffsetReal = 100; + const inputsOffset = 2; + const inputsOffsetReal = 200; + const inputsSizeOffset = 3; + const inputsSizeOffsetReal = 300; + const outputOffset = 4; + const outputOffsetReal = 400; + context.machineState.memory.set(stateSizeOffset, new Uint32(stateSizeOffsetReal)); + context.machineState.memory.set(stateSizeOffsetReal, new Uint32(state.length)); + context.machineState.memory.set(stateOffset, new Uint32(stateOffsetReal)); + context.machineState.memory.setSlice(stateOffsetReal, state); + context.machineState.memory.set(inputsSizeOffset, new Uint32(inputsSizeOffsetReal)); + context.machineState.memory.set(inputsSizeOffsetReal, new Uint32(inputs.length)); + context.machineState.memory.set(inputsOffset, new Uint32(inputsOffsetReal)); + context.machineState.memory.setSlice(inputsOffsetReal, inputs); + context.machineState.memory.set(outputOffset, new Uint32(outputOffsetReal)); + + await new Sha256Compression( + indirect, + outputOffset, + stateOffset, + stateSizeOffset, + inputsOffset, + inputsSizeOffset, + ).execute(context); + + const output = context.machineState.memory.getSliceAs(outputOffsetReal, 8); + const outputArray = Uint32Array.from(output.map(word => word.toNumber())); + + const expectedOutput = sha256Compression(stateArray, inputsArray); + expect(outputArray).toEqual(expectedOutput); + }); + }); describe('Pedersen', () => { it('Should (de)serialize correctly', () => { diff --git a/yarn-project/simulator/src/avm/opcodes/hashing.ts b/yarn-project/simulator/src/avm/opcodes/hashing.ts index 230d25f20e4..6b8dd16f774 100644 --- a/yarn-project/simulator/src/avm/opcodes/hashing.ts +++ b/yarn-project/simulator/src/avm/opcodes/hashing.ts @@ -1,9 +1,16 @@ -import { keccak256, keccakf1600, pedersenHash, poseidon2Permutation, sha256Compression } from '@aztec/foundation/crypto'; +import { + keccak256, + keccakf1600, + pedersenHash, + poseidon2Permutation, + sha256Compression, +} from '@aztec/foundation/crypto'; import { strict as assert } from 'assert'; import { type AvmContext } from '../avm_context.js'; -import { Field, TypeTag, Uint8, Uint64 } from '../avm_memory_types.js'; +import { Field, TypeTag, Uint8, Uint32, Uint64 } from '../avm_memory_types.js'; +import { InstructionExecutionError } from '../errors.js'; import { Opcode, OperandType } from '../serialization/instruction_serialization.js'; import { Addressing } from './addressing_mode.js'; import { Instruction } from './instruction.js'; @@ -145,67 +152,70 @@ export class KeccakF1600 extends Instruction { } } -// TODO: add it back -// export class Sha256Compression extends Instruction { -// static type: string = 'SHA256COMPRESSION'; -// static readonly opcode: Opcode = Opcode.SHA256COMPRESSION; - -// // Informs (de)serialization. See Instruction.deserialize. -// static readonly wireFormat: OperandType[] = [ -// OperandType.UINT8, -// OperandType.UINT8, -// OperandType.UINT32, -// OperandType.UINT32, -// OperandType.UINT32, -// OperandType.UINT32, -// OperandType.UINT32, -// ]; - -// constructor( -// private indirect: number, -// private outputOffset: number, -// private stateOffset: number, -// private stateSizeOffset: number, -// private inputsOffset: number, -// private inputsSizeOffset: number, -// ) { -// super(); -// } - -// public async execute(context: AvmContext): Promise { -// const memory = context.machineState.memory.track(this.type); -// const [outputOffset, stateOffset, stateSizeOffset, inputsOffset, inputsSizeOffset] = Addressing.fromWire( -// this.indirect, -// ).resolve( -// [this.outputOffset, this.stateOffset, this.stateSizeOffset, this.inputsOffset, this.inputsSizeOffset], -// memory, -// ); -// const stateSize = memory.get(stateSizeOffset).toNumber(); -// const inputsSize = memory.get(inputsSizeOffset).toNumber(); -// if (stateSize !== 8) { -// throw new InstructionExecutionError('`state` argument to SHA256 compression must be of length 8'); -// } -// if (inputsSize !== 16) { -// throw new InstructionExecutionError('`inputs` argument to SHA256 compression must be of length 16'); -// } -// // +2 to account for both size offsets (stateSizeOffset and inputsSizeOffset) -// // Note: size of output is same as size of state -// const memoryOperations = { reads: stateSize + inputsSize + 2, writes: stateSize, indirect: this.indirect }; -// context.machineState.consumeGas(this.gasCost(memoryOperations)); -// memory.checkTagsRange(TypeTag.UINT8, messageOffset, messageSize); - -// const state = Uint32Array.from(memory.getSlice(stateOffset, stateSize).map(word => word.toNumber())); -// const inputs = Uint32Array.from(memory.getSlice(inputsOffset, inputsSize).map(word => word.toNumber())); -// const output = sha256Compression(state, inputs); - -// // Conversion required from Uint32Array to Uint32[] (can't map directly, need `...`) -// const res = [...output].map(word => new Uint32(word)); -// memory.setSlice(outputOffset, res); - -// memory.assert(memoryOperations); -// context.machineState.incrementPc(); -// } -// } +export class Sha256Compression extends Instruction { + static type: string = 'SHA256COMPRESSION'; + static readonly opcode: Opcode = Opcode.SHA256COMPRESSION; + + // Informs (de)serialization. See Instruction.deserialize. + static readonly wireFormat: OperandType[] = [ + OperandType.UINT8, + OperandType.UINT8, + OperandType.UINT32, + OperandType.UINT32, + OperandType.UINT32, + OperandType.UINT32, + OperandType.UINT32, + ]; + + constructor( + private indirect: number, + private outputOffset: number, + private stateOffset: number, + private stateSizeOffset: number, + private inputsOffset: number, + private inputsSizeOffset: number, + ) { + super(); + } + + public async execute(context: AvmContext): Promise { + const STATE_SIZE = 8; + const INPUTS_SIZE = 16; + + const memory = context.machineState.memory.track(this.type); + const [outputOffset, stateOffset, stateSizeOffset, inputsOffset, inputsSizeOffset] = Addressing.fromWire( + this.indirect, + ).resolve( + [this.outputOffset, this.stateOffset, this.stateSizeOffset, this.inputsOffset, this.inputsSizeOffset], + memory, + ); + const stateSize = memory.get(stateSizeOffset).toNumber(); + const inputsSize = memory.get(inputsSizeOffset).toNumber(); + if (stateSize !== STATE_SIZE) { + throw new InstructionExecutionError('`state` argument to SHA256 compression must be of length 8'); + } + if (inputsSize !== INPUTS_SIZE) { + throw new InstructionExecutionError('`inputs` argument to SHA256 compression must be of length 16'); + } + // +2 to account for both size offsets (stateSizeOffset and inputsSizeOffset) + // Note: size of output is same as size of state + const memoryOperations = { reads: stateSize + inputsSize + 2, writes: stateSize, indirect: this.indirect }; + context.machineState.consumeGas(this.gasCost(memoryOperations)); + memory.checkTagsRange(TypeTag.UINT32, inputsOffset, inputsSize); + memory.checkTagsRange(TypeTag.UINT32, stateOffset, stateSize); + + const state = Uint32Array.from(memory.getSlice(stateOffset, stateSize).map(word => word.toNumber())); + const inputs = Uint32Array.from(memory.getSlice(inputsOffset, inputsSize).map(word => word.toNumber())); + const output = sha256Compression(state, inputs); + + // Conversion required from Uint32Array to Uint32[] (can't map directly, need `...`) + const res = [...output].map(word => new Uint32(word)); + memory.setSlice(outputOffset, res); + + memory.assert(memoryOperations); + context.machineState.incrementPc(); + } +} export class Pedersen extends Instruction { static type: string = 'PEDERSEN'; diff --git a/yarn-project/simulator/src/avm/serialization/instruction_serialization.ts b/yarn-project/simulator/src/avm/serialization/instruction_serialization.ts index ec49533509d..47b186a695f 100644 --- a/yarn-project/simulator/src/avm/serialization/instruction_serialization.ts +++ b/yarn-project/simulator/src/avm/serialization/instruction_serialization.ts @@ -71,15 +71,13 @@ export enum Opcode { KECCAK, POSEIDON2, SHA256COMPRESSION, + KECCAKF1600, PEDERSEN, // temp - may be removed, but alot of contracts rely on it ECADD, MSM, PEDERSENCOMMITMENT, // Conversion TORADIXLE, - // Future Gadgets -- pending changes in noir - SHA256COMPRESSION, - KECCAKF1600, // Here for when we eventually support this } // Possible types for an instruction's operand in its wire format. (Keep in sync with CPP code. From 4ae80aef6eceede30da35506f58794964b83a3dc Mon Sep 17 00:00:00 2001 From: fcarreiro Date: Fri, 6 Sep 2024 22:03:52 +0000 Subject: [PATCH 89/98] wip --- avm-transpiler/src/opcodes.rs | 2 +- avm-transpiler/src/transpile_contract.rs | 3 ++- avm-transpiler/src/utils.rs | 20 +++++++++++++++----- 3 files changed, 18 insertions(+), 7 deletions(-) diff --git a/avm-transpiler/src/opcodes.rs b/avm-transpiler/src/opcodes.rs index a33abd4855e..36bcd8b8268 100644 --- a/avm-transpiler/src/opcodes.rs +++ b/avm-transpiler/src/opcodes.rs @@ -1,7 +1,7 @@ /// All AVM opcodes /// Keep updated with TS, cpp, and docs protocol specs! #[allow(clippy::upper_case_acronyms, dead_code)] -#[derive(PartialEq, Copy, Clone, Debug)] +#[derive(PartialEq, Copy, Clone, Debug, Eq, Hash)] pub enum AvmOpcode { // Compute ADD, diff --git a/avm-transpiler/src/transpile_contract.rs b/avm-transpiler/src/transpile_contract.rs index e684a541d84..fff7ad27522 100644 --- a/avm-transpiler/src/transpile_contract.rs +++ b/avm-transpiler/src/transpile_contract.rs @@ -100,6 +100,7 @@ impl From for TranspiledContractArtifact { let acir_program = function.bytecode; let brillig_bytecode = extract_brillig_from_acir_program(&acir_program); let assert_messages = extract_static_assert_messages(&acir_program); + info!("Extracted Brillig program has {} instructions", brillig_bytecode.len()); // Map Brillig pcs to AVM pcs (index is Brillig PC, value is AVM PC) let brillig_pcs_to_avm_pcs = map_brillig_pcs_to_avm_pcs(brillig_bytecode); @@ -118,7 +119,7 @@ impl From for TranspiledContractArtifact { let _ = encoder.read_to_end(&mut compressed_avm_bytecode); log::info!( - "{}::{}: compressed {} to {} bytes ({}% reduction)", + "{}::{}: bytecode size of {} was compressed to {} ({}% reduction)", contract.name, function.name, avm_bytecode.len(), diff --git a/avm-transpiler/src/utils.rs b/avm-transpiler/src/utils.rs index 19f9468e15c..982a8479546 100644 --- a/avm-transpiler/src/utils.rs +++ b/avm-transpiler/src/utils.rs @@ -2,12 +2,13 @@ use fxhash::FxHashMap as HashMap; use acvm::acir::circuit::brillig::BrilligFunctionId; use acvm::FieldElement; -use log::debug; +use log::{debug, info, trace}; use acvm::acir::brillig::Opcode as BrilligOpcode; use acvm::acir::circuit::{AssertionPayload, Opcode, Program}; use crate::instructions::AvmInstruction; +use crate::opcodes::AvmOpcode; /// Extract the Brillig program from its `Program` wrapper. /// Noir entry point unconstrained functions are compiled to their own list contained @@ -67,16 +68,25 @@ pub fn extract_static_assert_messages(program: &Program) -> HashMa /// Print inputs, outputs, and instructions in a Brillig program pub fn dbg_print_brillig_program(brillig_bytecode: &[BrilligOpcode]) { - debug!("Printing Brillig program..."); + trace!("Printing Brillig program..."); for (i, instruction) in brillig_bytecode.iter().enumerate() { - debug!("\tPC:{0} {1:?}", i, instruction); + trace!("\tPC:{0} {1:?}", i, instruction); } } /// Print each instruction in an AVM program pub fn dbg_print_avm_program(avm_program: &[AvmInstruction]) { - debug!("Printing AVM program..."); + info!("Transpiled AVM program has {} instructions", avm_program.len()); + trace!("Printing AVM program..."); + let mut counts = std::collections::HashMap::::new(); for (i, instruction) in avm_program.iter().enumerate() { - debug!("\tPC:{0}: {1}", i, &instruction.to_string()); + trace!("\tPC:{0}: {1}", i, &instruction.to_string()); + *counts.entry(instruction.opcode).or_insert(0) += 1; + } + debug!("AVM opcode counts:"); + let mut sorted_counts: Vec<_> = counts.into_iter().collect(); + sorted_counts.sort_by_key(|(_, count)| -(*count as isize)); + for (opcode, count) in sorted_counts { + debug!("\t{0:?}: {1}", opcode, count); } } From 3e57bfde40acfde6af808445c7ac9c6b0f646299 Mon Sep 17 00:00:00 2001 From: fcarreiro Date: Fri, 6 Sep 2024 21:35:58 +0000 Subject: [PATCH 90/98] wip --- avm-transpiler/src/bit_traits.rs | 68 ++++++++ avm-transpiler/src/main.rs | 1 + avm-transpiler/src/opcodes.rs | 8 +- avm-transpiler/src/transpile.rs | 17 +- avm-transpiler/src/utils.rs | 13 +- .../vm/avm/tests/execution.test.cpp | 20 +-- .../vm/avm/trace/deserialization.cpp | 3 +- .../barretenberg/vm/avm/trace/execution.cpp | 11 +- .../barretenberg/vm/avm/trace/fixed_gas.cpp | 3 +- .../src/barretenberg/vm/avm/trace/opcode.cpp | 6 +- .../src/barretenberg/vm/avm/trace/opcode.hpp | 3 +- .../src/barretenberg/vm/avm/trace/trace.cpp | 3 +- yarn-project/simulator/src/avm/avm_gas.ts | 6 +- .../simulator/src/avm/bytecode_utils.ts | 4 +- .../simulator/src/avm/opcodes/instruction.ts | 60 ++++--- .../simulator/src/avm/opcodes/memory.test.ts | 12 +- .../simulator/src/avm/opcodes/memory.ts | 25 +-- .../bytecode_serialization.test.ts | 4 +- .../serialization/bytecode_serialization.ts | 148 +++++++++--------- .../instruction_serialization.test.ts | 4 +- .../instruction_serialization.ts | 9 +- 21 files changed, 283 insertions(+), 145 deletions(-) create mode 100644 avm-transpiler/src/bit_traits.rs diff --git a/avm-transpiler/src/bit_traits.rs b/avm-transpiler/src/bit_traits.rs new file mode 100644 index 00000000000..77a0b7eb2f6 --- /dev/null +++ b/avm-transpiler/src/bit_traits.rs @@ -0,0 +1,68 @@ +use acvm::{AcirField, FieldElement}; + +fn get_msb(n: u128) -> usize { + let mut n = n; + let mut msb = 0; + while n > 0 { + n >>= 1; + msb += 1; + } + msb +} + +pub trait BitsQueryable { + fn num_bits(&self) -> usize; +} + +impl BitsQueryable for FieldElement { + fn num_bits(&self) -> usize { + AcirField::num_bits(self) as usize + } +} + +impl BitsQueryable for u8 { + fn num_bits(&self) -> usize { + get_msb(*self as u128) + } +} + +impl BitsQueryable for u16 { + fn num_bits(&self) -> usize { + get_msb(*self as u128) + } +} + +impl BitsQueryable for u32 { + fn num_bits(&self) -> usize { + get_msb(*self as u128) + } +} + +impl BitsQueryable for u64 { + fn num_bits(&self) -> usize { + get_msb(*self as u128) + } +} + +impl BitsQueryable for u128 { + fn num_bits(&self) -> usize { + get_msb(*self) + } +} + +pub fn bits_needed_for(val: &T) -> usize { + let num_bits = val.num_bits(); + if num_bits < 8 { + 8 + } else if num_bits < 16 { + 16 + } else if num_bits < 32 { + 32 + } else if num_bits < 64 { + 64 + } else if num_bits < 128 { + 128 + } else { + 254 + } +} diff --git a/avm-transpiler/src/main.rs b/avm-transpiler/src/main.rs index 384348fc463..27a848ac231 100644 --- a/avm-transpiler/src/main.rs +++ b/avm-transpiler/src/main.rs @@ -6,6 +6,7 @@ use std::env; use std::fs; use std::path::Path; +mod bit_traits; mod instructions; mod opcodes; mod transpile; diff --git a/avm-transpiler/src/opcodes.rs b/avm-transpiler/src/opcodes.rs index 36bcd8b8268..88c1330b296 100644 --- a/avm-transpiler/src/opcodes.rs +++ b/avm-transpiler/src/opcodes.rs @@ -1,6 +1,6 @@ /// All AVM opcodes /// Keep updated with TS, cpp, and docs protocol specs! -#[allow(clippy::upper_case_acronyms, dead_code)] +#[allow(clippy::upper_case_acronyms, dead_code, non_camel_case_types)] #[derive(PartialEq, Copy, Clone, Debug, Eq, Hash)] pub enum AvmOpcode { // Compute @@ -42,7 +42,8 @@ pub enum AvmOpcode { INTERNALRETURN, // Memory SET, - MOV, + MOV_8, + MOV_16, CMOV, // World state SLOAD, @@ -129,7 +130,8 @@ impl AvmOpcode { AvmOpcode::INTERNALRETURN => "INTERNALRETURN", // Machine State - Memory AvmOpcode::SET => "SET", - AvmOpcode::MOV => "MOV", + AvmOpcode::MOV_8 => "MOV_8", + AvmOpcode::MOV_16 => "MOV_16", AvmOpcode::CMOV => "CMOV", // World State diff --git a/avm-transpiler/src/transpile.rs b/avm-transpiler/src/transpile.rs index 16de12d9a3a..420efbab480 100644 --- a/avm-transpiler/src/transpile.rs +++ b/avm-transpiler/src/transpile.rs @@ -9,12 +9,13 @@ use acvm::brillig_vm::brillig::{ use acvm::{AcirField, FieldElement}; use noirc_errors::debug_info::DebugInfo; +use crate::bit_traits::bits_needed_for; use crate::instructions::{ AvmInstruction, AvmOperand, AvmTypeTag, ALL_DIRECT, FIRST_OPERAND_INDIRECT, SECOND_OPERAND_INDIRECT, ZEROTH_OPERAND_INDIRECT, }; use crate::opcodes::AvmOpcode; -use crate::utils::{dbg_print_avm_program, dbg_print_brillig_program}; +use crate::utils::{dbg_print_avm_program, dbg_print_brillig_program, make_operand}; /// Transpile a Brillig program to AVM bytecode pub fn brillig_to_avm( @@ -216,7 +217,7 @@ pub fn brillig_to_avm( // We are adding a MOV instruction that moves a value to itself. // This should therefore not affect the program's execution. avm_instrs.push(AvmInstruction { - opcode: AvmOpcode::MOV, + opcode: AvmOpcode::MOV_8, indirect: Some(ALL_DIRECT), operands: vec![AvmOperand::U32 { value: 0x18ca }, AvmOperand::U32 { value: 0x18ca }], ..Default::default() @@ -741,10 +742,18 @@ fn generate_cast_instruction( /// Generates an AVM MOV instruction. fn generate_mov_instruction(indirect: Option, source: u32, dest: u32) -> AvmInstruction { + let bits_needed = [source, dest].iter().map(bits_needed_for).max().unwrap(); + + let mov_opcode = match bits_needed { + 8 => AvmOpcode::MOV_8, + 16 => AvmOpcode::MOV_16, + _ => panic!("MOV operands must fit in 16 bits but needed {}", bits_needed), + }; + AvmInstruction { - opcode: AvmOpcode::MOV, + opcode: mov_opcode, indirect, - operands: vec![AvmOperand::U32 { value: source }, AvmOperand::U32 { value: dest }], + operands: vec![make_operand(bits_needed, &source), make_operand(bits_needed, &dest)], ..Default::default() } } diff --git a/avm-transpiler/src/utils.rs b/avm-transpiler/src/utils.rs index 982a8479546..cc440feda05 100644 --- a/avm-transpiler/src/utils.rs +++ b/avm-transpiler/src/utils.rs @@ -7,7 +7,7 @@ use log::{debug, info, trace}; use acvm::acir::brillig::Opcode as BrilligOpcode; use acvm::acir::circuit::{AssertionPayload, Opcode, Program}; -use crate::instructions::AvmInstruction; +use crate::instructions::{AvmInstruction, AvmOperand}; use crate::opcodes::AvmOpcode; /// Extract the Brillig program from its `Program` wrapper. @@ -90,3 +90,14 @@ pub fn dbg_print_avm_program(avm_program: &[AvmInstruction]) { debug!("\t{0:?}: {1}", opcode, count); } } + +pub fn make_operand + Copy>(bits: usize, value: &T) -> AvmOperand { + match bits { + 8 => AvmOperand::U8 { value: Into::::into(*value) as u8 }, + 16 => AvmOperand::U16 { value: Into::::into(*value) as u16 }, + 32 => AvmOperand::U32 { value: Into::::into(*value) as u32 }, + 64 => AvmOperand::U64 { value: Into::::into(*value) as u64 }, + 128 => AvmOperand::U128 { value: Into::::into(*value) }, + _ => panic!("Invalid operand size for bits: {}", bits), + } +} diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/tests/execution.test.cpp b/barretenberg/cpp/src/barretenberg/vm/avm/tests/execution.test.cpp index 065e53c2f09..5956687061d 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/tests/execution.test.cpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/tests/execution.test.cpp @@ -587,10 +587,10 @@ TEST_F(AvmExecutionTests, movOpcode) "01" // U8 "13" // val 19 "000000AB" // dst_offset 171 - + to_hex(OpCode::MOV) + // opcode MOV + + to_hex(OpCode::MOV_8) + // opcode MOV "00" // Indirect flag - "000000AB" // src_offset 171 - "00000021" // dst_offset 33 + "AB" // src_offset 171 + "21" // dst_offset 33 + to_hex(OpCode::RETURN) + // opcode RETURN "00" // Indirect flag "00000000" // ret offset 0 @@ -613,9 +613,9 @@ TEST_F(AvmExecutionTests, movOpcode) // MOV EXPECT_THAT( instructions.at(1), - AllOf(Field(&Instruction::op_code, OpCode::MOV), + AllOf(Field(&Instruction::op_code, OpCode::MOV_8), Field(&Instruction::operands, - ElementsAre(VariantWith(0), VariantWith(171), VariantWith(33))))); + ElementsAre(VariantWith(0), VariantWith(171), VariantWith(33))))); auto trace = gen_trace_from_instr(instructions); @@ -701,10 +701,10 @@ TEST_F(AvmExecutionTests, indMovOpcode) "01" // U8 "FF" // val 255 "0000000A" // dst_offset 10 - + to_hex(OpCode::MOV) + // opcode MOV + + to_hex(OpCode::MOV_8) + // opcode MOV "01" // Indirect flag - "00000001" // src_offset 1 --> direct offset 10 - "00000002" // dst_offset 2 --> direct offset 11 + "01" // src_offset 1 --> direct offset 10 + "02" // dst_offset 2 --> direct offset 11 + to_hex(OpCode::RETURN) + // opcode RETURN "00" // Indirect flag "00000000" // ret offset 0 @@ -717,9 +717,9 @@ TEST_F(AvmExecutionTests, indMovOpcode) // MOV EXPECT_THAT(instructions.at(3), - AllOf(Field(&Instruction::op_code, OpCode::MOV), + AllOf(Field(&Instruction::op_code, OpCode::MOV_8), Field(&Instruction::operands, - ElementsAre(VariantWith(1), VariantWith(1), VariantWith(2))))); + ElementsAre(VariantWith(1), VariantWith(1), VariantWith(2))))); auto trace = gen_trace_from_instr(instructions); diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/trace/deserialization.cpp b/barretenberg/cpp/src/barretenberg/vm/avm/trace/deserialization.cpp index 189409b2409..25c92733338 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/trace/deserialization.cpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/trace/deserialization.cpp @@ -88,7 +88,8 @@ const std::unordered_map> OPCODE_WIRE_FORMAT = // Machine State - Memory // OpCode::SET is handled differently - { OpCode::MOV, { OperandType::INDIRECT, OperandType::UINT32, OperandType::UINT32 } }, + { OpCode::MOV_8, { OperandType::INDIRECT, OperandType::UINT8, OperandType::UINT8 } }, + { OpCode::MOV_16, { OperandType::INDIRECT, OperandType::UINT16, OperandType::UINT16 } }, { OpCode::CMOV, { OperandType::INDIRECT, OperandType::UINT32, OperandType::UINT32, OperandType::UINT32, OperandType::UINT32 } }, diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/trace/execution.cpp b/barretenberg/cpp/src/barretenberg/vm/avm/trace/execution.cpp index e7759e5d7fb..4cb862e4484 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/trace/execution.cpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/trace/execution.cpp @@ -617,10 +617,15 @@ std::vector Execution::gen_trace(std::vector const& instructio std::get(inst.operands.at(0)), val, std::get(inst.operands.at(3)), in_tag); break; } - case OpCode::MOV: + case OpCode::MOV_8: trace_builder.op_mov(std::get(inst.operands.at(0)), - std::get(inst.operands.at(1)), - std::get(inst.operands.at(2))); + std::get(inst.operands.at(1)), + std::get(inst.operands.at(2))); + break; + case OpCode::MOV_16: + trace_builder.op_mov(std::get(inst.operands.at(0)), + std::get(inst.operands.at(1)), + std::get(inst.operands.at(2))); break; case OpCode::CMOV: trace_builder.op_cmov(std::get(inst.operands.at(0)), diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/trace/fixed_gas.cpp b/barretenberg/cpp/src/barretenberg/vm/avm/trace/fixed_gas.cpp index 749a913feb6..fa4dd2f515e 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/trace/fixed_gas.cpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/trace/fixed_gas.cpp @@ -52,7 +52,8 @@ const std::unordered_map GAS_COST_TABLE = { { OpCode::INTERNALCALL, make_cost(AVM_INTERNALCALL_BASE_L2_GAS, 0, AVM_INTERNALCALL_DYN_L2_GAS, 0) }, { OpCode::INTERNALRETURN, make_cost(AVM_INTERNALRETURN_BASE_L2_GAS, 0, AVM_INTERNALRETURN_DYN_L2_GAS, 0) }, { OpCode::SET, make_cost(AVM_SET_BASE_L2_GAS, 0, AVM_SET_DYN_L2_GAS, 0) }, - { OpCode::MOV, make_cost(AVM_MOV_BASE_L2_GAS, 0, AVM_MOV_DYN_L2_GAS, 0) }, + { OpCode::MOV_8, make_cost(AVM_MOV_BASE_L2_GAS, 0, AVM_MOV_DYN_L2_GAS, 0) }, + { OpCode::MOV_16, make_cost(AVM_MOV_BASE_L2_GAS, 0, AVM_MOV_DYN_L2_GAS, 0) }, { OpCode::CMOV, make_cost(AVM_CMOV_BASE_L2_GAS, 0, AVM_CMOV_DYN_L2_GAS, 0) }, { OpCode::SLOAD, make_cost(AVM_SLOAD_BASE_L2_GAS, 0, AVM_SLOAD_DYN_L2_GAS, 0) }, { OpCode::SSTORE, make_cost(AVM_SSTORE_BASE_L2_GAS, 0, AVM_SSTORE_DYN_L2_GAS, 0) }, diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/trace/opcode.cpp b/barretenberg/cpp/src/barretenberg/vm/avm/trace/opcode.cpp index 5a80d3ec678..f359fdc1e05 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/trace/opcode.cpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/trace/opcode.cpp @@ -104,8 +104,10 @@ std::string to_string(OpCode opcode) // Machine State - Memory case OpCode::SET: return "SET"; - case OpCode::MOV: - return "MOV"; + case OpCode::MOV_8: + return "MOV_8"; + case OpCode::MOV_16: + return "MOV_16"; case OpCode::CMOV: return "CMOV"; // World State diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/trace/opcode.hpp b/barretenberg/cpp/src/barretenberg/vm/avm/trace/opcode.hpp index bb880e22a41..963fd23831b 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/trace/opcode.hpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/trace/opcode.hpp @@ -68,7 +68,8 @@ enum class OpCode : uint8_t { INTERNALRETURN, // Machine State - Memory SET, - MOV, + MOV_8, + MOV_16, CMOV, // World State diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/trace/trace.cpp b/barretenberg/cpp/src/barretenberg/vm/avm/trace/trace.cpp index f85b3f6656e..b08a1bec6d4 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/trace/trace.cpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/trace/trace.cpp @@ -1817,7 +1817,8 @@ void AvmTraceBuilder::op_mov(uint8_t indirect, uint32_t src_offset, uint32_t dst mem_trace_builder.write_into_memory(call_ptr, clk, IntermRegister::IC, direct_dst_offset, val, tag, tag); // Constrain gas cost - gas_trace_builder.constrain_gas(clk, OpCode::MOV); + // FIXME: not great that we are having to choose one specific opcode here! + gas_trace_builder.constrain_gas(clk, OpCode::MOV_8); main_trace.push_back(Row{ .main_clk = clk, diff --git a/yarn-project/simulator/src/avm/avm_gas.ts b/yarn-project/simulator/src/avm/avm_gas.ts index da55b3f8c8a..ef854cd1f53 100644 --- a/yarn-project/simulator/src/avm/avm_gas.ts +++ b/yarn-project/simulator/src/avm/avm_gas.ts @@ -91,7 +91,8 @@ const BaseGasCosts: Record = { [Opcode.INTERNALCALL]: makeCost(c.AVM_INTERNALCALL_BASE_L2_GAS, 0), [Opcode.INTERNALRETURN]: makeCost(c.AVM_INTERNALRETURN_BASE_L2_GAS, 0), [Opcode.SET]: makeCost(c.AVM_SET_BASE_L2_GAS, 0), - [Opcode.MOV]: makeCost(c.AVM_MOV_BASE_L2_GAS, 0), + [Opcode.MOV_8]: makeCost(c.AVM_MOV_BASE_L2_GAS, 0), + [Opcode.MOV_16]: makeCost(c.AVM_MOV_BASE_L2_GAS, 0), [Opcode.CMOV]: makeCost(c.AVM_CMOV_BASE_L2_GAS, 0), [Opcode.SLOAD]: makeCost(c.AVM_SLOAD_BASE_L2_GAS, 0), [Opcode.SSTORE]: makeCost(c.AVM_SSTORE_BASE_L2_GAS, 0), @@ -156,7 +157,8 @@ const DynamicGasCosts: Record = { [Opcode.INTERNALCALL]: makeCost(c.AVM_INTERNALCALL_DYN_L2_GAS, 0), [Opcode.INTERNALRETURN]: makeCost(c.AVM_INTERNALRETURN_DYN_L2_GAS, 0), [Opcode.SET]: makeCost(c.AVM_SET_DYN_L2_GAS, 0), - [Opcode.MOV]: makeCost(c.AVM_MOV_DYN_L2_GAS, 0), + [Opcode.MOV_8]: makeCost(c.AVM_MOV_DYN_L2_GAS, 0), + [Opcode.MOV_16]: makeCost(c.AVM_MOV_DYN_L2_GAS, 0), [Opcode.CMOV]: makeCost(c.AVM_CMOV_DYN_L2_GAS, 0), [Opcode.SLOAD]: makeCost(c.AVM_SLOAD_DYN_L2_GAS, 0), [Opcode.SSTORE]: makeCost(c.AVM_SSTORE_DYN_L2_GAS, 0), diff --git a/yarn-project/simulator/src/avm/bytecode_utils.ts b/yarn-project/simulator/src/avm/bytecode_utils.ts index 52b0f31032e..0cadac08075 100644 --- a/yarn-project/simulator/src/avm/bytecode_utils.ts +++ b/yarn-project/simulator/src/avm/bytecode_utils.ts @@ -1,10 +1,10 @@ import { promisify } from 'util'; import { gunzip } from 'zlib'; -import { Mov } from '../avm/opcodes/memory.js'; +import { Opcode } from './serialization/instruction_serialization.js'; const AVM_MAGIC_SUFFIX = Buffer.from([ - Mov.opcode, // opcode + Opcode.MOV_8, // opcode 0x00, // indirect ...Buffer.from('000018ca', 'hex'), // srcOffset ...Buffer.from('000018ca', 'hex'), // dstOffset diff --git a/yarn-project/simulator/src/avm/opcodes/instruction.ts b/yarn-project/simulator/src/avm/opcodes/instruction.ts index 3eb22810bbd..ae211a73acf 100644 --- a/yarn-project/simulator/src/avm/opcodes/instruction.ts +++ b/yarn-project/simulator/src/avm/opcodes/instruction.ts @@ -4,11 +4,11 @@ import type { AvmContext } from '../avm_context.js'; import { getBaseGasCost, getDynamicGasCost, mulGas, sumGas } from '../avm_gas.js'; import { type MemoryOperations } from '../avm_memory_types.js'; import { type BufferCursor } from '../serialization/buffer_cursor.js'; -import { Opcode, type OperandType, deserialize, serialize } from '../serialization/instruction_serialization.js'; +import { type Serializable } from '../serialization/bytecode_serialization.js'; +import { Opcode, type OperandType, deserialize, serializeAs } from '../serialization/instruction_serialization.js'; type InstructionConstructor = { new (...args: any[]): Instruction; - wireFormat?: OperandType[]; }; /** @@ -37,29 +37,51 @@ export abstract class Instruction { return instructionStr; } + // Default deserialization which uses Class.opcode and Class.wireFormat. + public static deserialize( + this: InstructionConstructor & { wireFormat: OperandType[]; as: any }, + buf: BufferCursor | Buffer, + ): Instruction { + return this.as(this.wireFormat).deserialize(buf); + } + + // Default serialization which uses Class.opcode and Class.wireFormat. + public serialize(): Buffer { + const klass = this.constructor as any; + assert(klass.opcode !== undefined && klass.opcode !== null); + assert(klass.wireFormat !== undefined && klass.wireFormat !== null); + return this.as(klass.opcode, klass.wireFormat).serialize(); + } + /** - * Serialize the instruction to a Buffer according to its wire format specified in its subclass. - * If you want to use this, your subclass should specify a {@code static wireFormat: OperandType[]}. - * @param this - The instruction to serialize. - * @returns The serialized instruction. + * Returns a new instruction instance that can be serialized with the given opcode and wire format. + * @param opcode The opcode of the instruction. + * @param wireFormat The wire format of the instruction. + * @returns The new instruction instance. */ - public serialize(this: any): Buffer { - assert(!!this.constructor.wireFormat, 'wireFormat must be defined on the class'); - return serialize(this.constructor.wireFormat, this); + public as(opcode: Opcode, wireFormat: OperandType[]): Instruction & Serializable { + return Object.defineProperty(this, 'serialize', { + value: (): Buffer => { + return serializeAs(wireFormat, opcode, this); + }, + enumerable: false, + }); } /** - * Deserializes a subclass of Instruction from a Buffer. - * If you want to use this, your subclass should specify a {@code static wireFormat: OperandType[]}. - * @param this Class object to deserialize to. - * @param buf Buffer to read from. - * @returns Constructed instance of Class. + * Returns a new instruction class that can be deserialized with the given opcode and wire format. + * @param opcode The opcode of the instruction. + * @param wireFormat The wire format of the instruction. + * @returns The new instruction class. */ - public static deserialize(this: InstructionConstructor, buf: BufferCursor | Buffer): Instruction { - assert(!!this.wireFormat, 'wireFormat must be defined on the instruction class'); - const res = deserialize(buf, this.wireFormat); - const args = res.slice(1); // Remove opcode. - return new this(...args); + public static as(this: InstructionConstructor, wireFormat: OperandType[]) { + return Object.assign(this, { + deserialize: (buf: BufferCursor | Buffer): Instruction => { + const res = deserialize(buf, wireFormat); + const args = res.slice(1); // Remove opcode. + return new this(...args); + }, + }); } /** diff --git a/yarn-project/simulator/src/avm/opcodes/memory.test.ts b/yarn-project/simulator/src/avm/opcodes/memory.test.ts index 798994b765c..80e60b4ca5d 100644 --- a/yarn-project/simulator/src/avm/opcodes/memory.test.ts +++ b/yarn-project/simulator/src/avm/opcodes/memory.test.ts @@ -4,6 +4,7 @@ import { type AvmContext } from '../avm_context.js'; import { Field, TypeTag, Uint8, Uint16, Uint32, Uint64, Uint128 } from '../avm_memory_types.js'; import { InstructionExecutionError } from '../errors.js'; import { adjustCalldataIndex, initContext, initExecutionEnvironment } from '../fixtures/index.js'; +import { Opcode } from '../serialization/instruction_serialization.js'; import { Addressing, AddressingMode } from './addressing_mode.js'; import { CMov, CalldataCopy, Cast, Mov, Set } from './memory.js'; @@ -302,12 +303,15 @@ describe('Memory instructions', () => { const buf = Buffer.from([ Mov.opcode, // opcode 0x01, // indirect - ...Buffer.from('12345678', 'hex'), // srcOffset - ...Buffer.from('3456789a', 'hex'), // dstOffset + ...Buffer.from('12', 'hex'), // srcOffset + ...Buffer.from('34', 'hex'), // dstOffset ]); - const inst = new Mov(/*indirect=*/ 0x01, /*srcOffset=*/ 0x12345678, /*dstOffset=*/ 0x3456789a); + const inst = new Mov(/*indirect=*/ 0x01, /*srcOffset=*/ 0x12, /*dstOffset=*/ 0x34).as( + Opcode.MOV_8, + Mov.wireFormat8, + ); - expect(Mov.deserialize(buf)).toEqual(inst); + expect(Mov.as(Mov.wireFormat8).deserialize(buf)).toEqual(inst); expect(inst.serialize()).toEqual(buf); }); diff --git a/yarn-project/simulator/src/avm/opcodes/memory.ts b/yarn-project/simulator/src/avm/opcodes/memory.ts index 9684d7e12a2..91d85884ed5 100644 --- a/yarn-project/simulator/src/avm/opcodes/memory.ts +++ b/yarn-project/simulator/src/avm/opcodes/memory.ts @@ -2,7 +2,7 @@ import type { AvmContext } from '../avm_context.js'; import { Field, TaggedMemory, TypeTag } from '../avm_memory_types.js'; import { InstructionExecutionError } from '../errors.js'; import { BufferCursor } from '../serialization/buffer_cursor.js'; -import { Opcode, OperandType, deserialize, serialize } from '../serialization/instruction_serialization.js'; +import { Opcode, OperandType, deserialize, serializeAs } from '../serialization/instruction_serialization.js'; import { Addressing } from './addressing_mode.js'; import { Instruction } from './instruction.js'; import { TwoOperandInstruction } from './instruction_impl.js'; @@ -51,11 +51,11 @@ export class Set extends Instruction { getOperandTypeFromInTag(this.inTag), ...Set.wireFormatAfterConst, ]; - return serialize(format, this); + return serializeAs(format, this.opcode, this); } /** We need to use a custom deserialize function because of the variable length of the value. */ - public static override deserialize(this: typeof Set, buf: BufferCursor | Buffer): Set { + public static override deserialize(buf: BufferCursor | Buffer): Set { if (buf instanceof Buffer) { buf = new BufferCursor(buf); } @@ -65,7 +65,7 @@ export class Set extends Instruction { const afterConst = deserialize(buf, Set.wireFormatAfterConst); const res = [...beforeConst, ...val, ...afterConst]; const args = res.slice(1) as ConstructorParameters; // Remove opcode. - return new this(...args); + return new Set(...args); } public async execute(context: AvmContext): Promise { @@ -161,13 +161,20 @@ export class Cast extends TwoOperandInstruction { export class Mov extends Instruction { static readonly type: string = 'MOV'; - static readonly opcode: Opcode = Opcode.MOV; - // Informs (de)serialization. See Instruction.deserialize. - static readonly wireFormat: OperandType[] = [ + // FIXME: This is needed for gas. + static readonly opcode: Opcode = Opcode.MOV_8; + + static readonly wireFormat8: OperandType[] = [ OperandType.UINT8, OperandType.UINT8, - OperandType.UINT32, - OperandType.UINT32, + OperandType.UINT8, + OperandType.UINT8, + ]; + static readonly wireFormat16: OperandType[] = [ + OperandType.UINT8, + OperandType.UINT8, + OperandType.UINT16, + OperandType.UINT16, ]; constructor(private indirect: number, private srcOffset: number, private dstOffset: number) { diff --git a/yarn-project/simulator/src/avm/serialization/bytecode_serialization.test.ts b/yarn-project/simulator/src/avm/serialization/bytecode_serialization.test.ts index 4dd26fb13dd..b5dd46cf4cc 100644 --- a/yarn-project/simulator/src/avm/serialization/bytecode_serialization.test.ts +++ b/yarn-project/simulator/src/avm/serialization/bytecode_serialization.test.ts @@ -48,8 +48,8 @@ class InstB { describe('Bytecode Serialization', () => { it('Should deserialize using instruction set', () => { const instructionSet: InstructionSet = new Map([ - [InstA.opcode, InstA], - [InstB.opcode, InstB], + [InstA.opcode, InstA.deserialize], + [InstB.opcode, InstB.deserialize], ]); const a = new InstA(0x1234); const b = new InstB(0x5678n); diff --git a/yarn-project/simulator/src/avm/serialization/bytecode_serialization.ts b/yarn-project/simulator/src/avm/serialization/bytecode_serialization.ts index 48a29f21bbc..cad761b80cc 100644 --- a/yarn-project/simulator/src/avm/serialization/bytecode_serialization.ts +++ b/yarn-project/simulator/src/avm/serialization/bytecode_serialization.ts @@ -2,7 +2,7 @@ import { PedersenCommitment } from '../opcodes/commitment.js'; import { DAGasLeft, L2GasLeft } from '../opcodes/context_getters.js'; import { EcAdd } from '../opcodes/ec_add.js'; import { Keccak, KeccakF1600, Pedersen, Poseidon2, Sha256 } from '../opcodes/hashing.js'; -import type { Instruction } from '../opcodes/index.js'; +import { Instruction } from '../opcodes/index.js'; import { Add, Address, @@ -59,102 +59,104 @@ import { MultiScalarMul } from '../opcodes/multi_scalar_mul.js'; import { BufferCursor } from './buffer_cursor.js'; import { Opcode } from './instruction_serialization.js'; -interface DeserializableInstruction { - deserialize(buf: BufferCursor | Buffer): Instruction; - opcode: Opcode; +export type InstructionDeserializer = (buf: BufferCursor | Buffer) => Instruction; + +export interface Serializable { + serialize(): Buffer; +} + +export interface Deserializable { + deserialize: InstructionDeserializer; } -export type InstructionSet = Map; +export type InstructionSet = Map; // TODO(4359): This is a function so that Call and StaticCall can be lazily resolved. // This is a temporary solution until we solve the dependency cycle. const INSTRUCTION_SET = () => - new Map([ - [Add.opcode, Add], - [Sub.opcode, Sub], - [Mul.opcode, Mul], - [Div.opcode, Div], - [FieldDiv.opcode, FieldDiv], - [Eq.opcode, Eq], - [Lt.opcode, Lt], - [Lte.opcode, Lte], - [And.opcode, And], - [Or.opcode, Or], - [Xor.opcode, Xor], - [Not.opcode, Not], - [Shl.opcode, Shl], - [Shr.opcode, Shr], - [Cast.opcode, Cast], - [Address.opcode, Address], - [StorageAddress.opcode, StorageAddress], - [Sender.opcode, Sender], - [FunctionSelector.opcode, FunctionSelector], - [TransactionFee.opcode, TransactionFee], + new Map([ + [Add.opcode, Instruction.deserialize.bind(Add)], + [Sub.opcode, Instruction.deserialize.bind(Sub)], + [Mul.opcode, Instruction.deserialize.bind(Mul)], + [Div.opcode, Instruction.deserialize.bind(Div)], + [FieldDiv.opcode, Instruction.deserialize.bind(FieldDiv)], + [Eq.opcode, Instruction.deserialize.bind(Eq)], + [Lt.opcode, Instruction.deserialize.bind(Lt)], + [Lte.opcode, Instruction.deserialize.bind(Lte)], + [And.opcode, Instruction.deserialize.bind(And)], + [Or.opcode, Instruction.deserialize.bind(Or)], + [Xor.opcode, Instruction.deserialize.bind(Xor)], + [Not.opcode, Instruction.deserialize.bind(Not)], + [Shl.opcode, Instruction.deserialize.bind(Shl)], + [Shr.opcode, Instruction.deserialize.bind(Shr)], + [Cast.opcode, Instruction.deserialize.bind(Cast)], + [Address.opcode, Instruction.deserialize.bind(Address)], + [StorageAddress.opcode, Instruction.deserialize.bind(StorageAddress)], + [Sender.opcode, Instruction.deserialize.bind(Sender)], + [FunctionSelector.opcode, Instruction.deserialize.bind(FunctionSelector)], + [TransactionFee.opcode, Instruction.deserialize.bind(TransactionFee)], // Execution Environment - Globals - [ChainId.opcode, ChainId], - [Version.opcode, Version], - [BlockNumber.opcode, BlockNumber], - [Timestamp.opcode, Timestamp], - [FeePerL2Gas.opcode, FeePerL2Gas], - [FeePerDAGas.opcode, FeePerDAGas], + [ChainId.opcode, Instruction.deserialize.bind(ChainId)], + [Version.opcode, Instruction.deserialize.bind(Version)], + [BlockNumber.opcode, Instruction.deserialize.bind(BlockNumber)], + [Timestamp.opcode, Instruction.deserialize.bind(Timestamp)], + [FeePerL2Gas.opcode, Instruction.deserialize.bind(FeePerL2Gas)], + [FeePerDAGas.opcode, Instruction.deserialize.bind(FeePerDAGas)], // Execution Environment - Calldata - [CalldataCopy.opcode, CalldataCopy], + [CalldataCopy.opcode, Instruction.deserialize.bind(CalldataCopy)], // Machine State // Machine State - Gas - [L2GasLeft.opcode, L2GasLeft], - [DAGasLeft.opcode, DAGasLeft], + [L2GasLeft.opcode, Instruction.deserialize.bind(L2GasLeft)], + [DAGasLeft.opcode, Instruction.deserialize.bind(DAGasLeft)], // Machine State - Internal Control Flow - [Jump.opcode, Jump], - [JumpI.opcode, JumpI], - [InternalCall.opcode, InternalCall], - [InternalReturn.opcode, InternalReturn], - [Set.opcode, Set], - [Mov.opcode, Mov], - [CMov.opcode, CMov], + [Jump.opcode, Instruction.deserialize.bind(Jump)], + [JumpI.opcode, Instruction.deserialize.bind(JumpI)], + [InternalCall.opcode, Instruction.deserialize.bind(InternalCall)], + [InternalReturn.opcode, Instruction.deserialize.bind(InternalReturn)], + [Set.opcode, Set.deserialize.bind(Set)], + [Opcode.MOV_8, Mov.as(Mov.wireFormat8).deserialize], + [Opcode.MOV_16, Mov.as(Mov.wireFormat16).deserialize], + [CMov.opcode, Instruction.deserialize.bind(CMov)], // World State - [SLoad.opcode, SLoad], // Public Storage - [SStore.opcode, SStore], // Public Storage - [NoteHashExists.opcode, NoteHashExists], // Notes & Nullifiers - [EmitNoteHash.opcode, EmitNoteHash], // Notes & Nullifiers - [NullifierExists.opcode, NullifierExists], // Notes & Nullifiers - [EmitNullifier.opcode, EmitNullifier], // Notes & Nullifiers - [L1ToL2MessageExists.opcode, L1ToL2MessageExists], // Messages + [SLoad.opcode, Instruction.deserialize.bind(SLoad)], // Public Storage + [SStore.opcode, Instruction.deserialize.bind(SStore)], // Public Storage + [NoteHashExists.opcode, Instruction.deserialize.bind(NoteHashExists)], // Notes & Nullifiers + [EmitNoteHash.opcode, Instruction.deserialize.bind(EmitNoteHash)], // Notes & Nullifiers + [NullifierExists.opcode, Instruction.deserialize.bind(NullifierExists)], // Notes & Nullifiers + [EmitNullifier.opcode, Instruction.deserialize.bind(EmitNullifier)], // Notes & Nullifiers + [L1ToL2MessageExists.opcode, Instruction.deserialize.bind(L1ToL2MessageExists)], // Messages // Accrued Substate - [EmitUnencryptedLog.opcode, EmitUnencryptedLog], - [SendL2ToL1Message.opcode, SendL2ToL1Message], - [GetContractInstance.opcode, GetContractInstance], + [EmitUnencryptedLog.opcode, Instruction.deserialize.bind(EmitUnencryptedLog)], + [SendL2ToL1Message.opcode, Instruction.deserialize.bind(SendL2ToL1Message)], + [GetContractInstance.opcode, Instruction.deserialize.bind(GetContractInstance)], // Control Flow - Contract Calls - [Call.opcode, Call], - [StaticCall.opcode, StaticCall], - //[DelegateCall.opcode, DelegateCall], - [Return.opcode, Return], - [Revert.opcode, Revert], + [Call.opcode, Instruction.deserialize.bind(Call)], + [StaticCall.opcode, Instruction.deserialize.bind(StaticCall)], + //[DelegateCall.opcode, Instruction.deserialize.bind(DelegateCall)], + [Return.opcode, Instruction.deserialize.bind(Return)], + [Revert.opcode, Instruction.deserialize.bind(Revert)], // Misc - [DebugLog.opcode, DebugLog], + [DebugLog.opcode, Instruction.deserialize.bind(DebugLog)], // Gadgets - [EcAdd.opcode, EcAdd], - [Keccak.opcode, Keccak], - [Poseidon2.opcode, Poseidon2], - [Sha256.opcode, Sha256], - [Pedersen.opcode, Pedersen], - [MultiScalarMul.opcode, MultiScalarMul], - [PedersenCommitment.opcode, PedersenCommitment], + [EcAdd.opcode, Instruction.deserialize.bind(EcAdd)], + [Keccak.opcode, Instruction.deserialize.bind(Keccak)], + [Poseidon2.opcode, Instruction.deserialize.bind(Poseidon2)], + [Sha256.opcode, Instruction.deserialize.bind(Sha256)], + [Pedersen.opcode, Instruction.deserialize.bind(Pedersen)], + [MultiScalarMul.opcode, Instruction.deserialize.bind(MultiScalarMul)], + [PedersenCommitment.opcode, Instruction.deserialize.bind(PedersenCommitment)], // Conversions - [ToRadixLE.opcode, ToRadixLE], + [ToRadixLE.opcode, Instruction.deserialize.bind(ToRadixLE)], // Future Gadgets -- pending changes in noir // SHA256COMPRESSION, - [KeccakF1600.opcode, KeccakF1600], + [KeccakF1600.opcode, Instruction.deserialize.bind(KeccakF1600)], ]); -interface Serializable { - serialize(): Buffer; -} - /** * Serializes an array of instructions to bytecode. */ @@ -182,8 +184,8 @@ export function decodeFromBytecode( throw new Error(`Opcode ${Opcode[opcode]} (0x${opcode.toString(16)}) not implemented`); } - const instructionDeserializer: DeserializableInstruction = instructionDeserializerOrUndef; - const i: Instruction = instructionDeserializer.deserialize(cursor); + const instructionDeserializer: InstructionDeserializer = instructionDeserializerOrUndef; + const i: Instruction = instructionDeserializer(cursor); instructions.push(i); } diff --git a/yarn-project/simulator/src/avm/serialization/instruction_serialization.test.ts b/yarn-project/simulator/src/avm/serialization/instruction_serialization.test.ts index 3f7d8905c98..8839f86f2ee 100644 --- a/yarn-project/simulator/src/avm/serialization/instruction_serialization.test.ts +++ b/yarn-project/simulator/src/avm/serialization/instruction_serialization.test.ts @@ -1,5 +1,5 @@ import { BufferCursor } from './buffer_cursor.js'; -import { OperandType, deserialize, serialize } from './instruction_serialization.js'; +import { OperandType, deserialize, serializeAs } from './instruction_serialization.js'; class InstA { constructor(private a: number, private b: number, private c: number, private d: bigint, private e: bigint) {} @@ -18,7 +18,7 @@ class InstA { describe('Instruction Serialization', () => { it('Should serialize all types from OperandType[]', () => { const instance = new InstA(0x12, 0x1234, 0x12345678, 0x1234567887654321n, 0x1234567887654321abcdef0000fedcban); - const actual: Buffer = serialize(InstA.wireFormat, instance); + const actual: Buffer = serializeAs(InstA.wireFormat, InstA.opcode, instance); expect(actual).toEqual( Buffer.from( diff --git a/yarn-project/simulator/src/avm/serialization/instruction_serialization.ts b/yarn-project/simulator/src/avm/serialization/instruction_serialization.ts index 6208161ecc7..436d4893a2a 100644 --- a/yarn-project/simulator/src/avm/serialization/instruction_serialization.ts +++ b/yarn-project/simulator/src/avm/serialization/instruction_serialization.ts @@ -46,7 +46,8 @@ export enum Opcode { INTERNALRETURN, // Memory SET, - MOV, + MOV_8, + MOV_16, CMOV, // World state SLOAD, @@ -156,12 +157,10 @@ export function deserialize(cursor: BufferCursor | Buffer, operands: OperandType * @param cls The class to be serialized. * @returns */ -export function serialize(operands: OperandType[], cls: any): Buffer { +export function serializeAs(operands: OperandType[], opcode: Opcode, cls: any): Buffer { const chunks: Buffer[] = []; - // TODO: infer opcode not in this loop - assert(cls.constructor.opcode !== undefined && cls.constructor.opcode !== null); - const rawClassValues: any[] = [cls.constructor.opcode, ...Object.values(cls)]; + const rawClassValues: any[] = [opcode, ...Object.values(cls)]; assert( rawClassValues.length === operands.length, `Got ${rawClassValues.length} values but only ${operands.length} serialization operands are specified!`, From 635cbb5c281e6998677ec6e4fda761f83a5ce9d5 Mon Sep 17 00:00:00 2001 From: fcarreiro Date: Fri, 6 Sep 2024 21:30:14 +0000 Subject: [PATCH 91/98] wip --- avm-transpiler/src/instructions.rs | 5 + avm-transpiler/src/opcodes.rs | 14 +- avm-transpiler/src/transpile.rs | 51 +- avm-transpiler/src/utils.rs | 16 +- .../vm/avm/tests/arithmetic.test.cpp | 125 +-- .../vm/avm/tests/bitwise.test.cpp | 64 +- .../barretenberg/vm/avm/tests/cast.test.cpp | 3 +- .../vm/avm/tests/comparison.test.cpp | 8 +- .../vm/avm/tests/execution.test.cpp | 716 +++++++++--------- .../vm/avm/tests/inter_table.test.cpp | 11 +- .../barretenberg/vm/avm/tests/kernel.test.cpp | 16 +- .../vm/avm/tests/mem_opcodes.test.cpp | 4 +- .../vm/avm/trace/deserialization.cpp | 70 +- .../vm/avm/trace/deserialization.hpp | 2 +- .../barretenberg/vm/avm/trace/execution.cpp | 66 +- .../barretenberg/vm/avm/trace/fixed_gas.cpp | 7 +- .../vm/avm/trace/instructions.hpp | 4 +- .../src/barretenberg/vm/avm/trace/opcode.cpp | 14 +- .../src/barretenberg/vm/avm/trace/opcode.hpp | 7 +- .../src/barretenberg/vm/avm/trace/trace.cpp | 15 +- .../src/barretenberg/vm/avm/trace/trace.hpp | 4 +- .../contracts/avm_test_contract/src/main.nr | 6 + .../src/brillig/brillig_ir/instructions.rs | 38 +- yarn-project/simulator/src/avm/avm_gas.ts | 14 +- .../simulator/src/avm/avm_memory_types.ts | 6 +- .../simulator/src/avm/avm_simulator.test.ts | 9 +- .../src/avm/opcodes/external_calls.test.ts | 8 +- .../simulator/src/avm/opcodes/memory.test.ts | 80 +- .../simulator/src/avm/opcodes/memory.ts | 109 ++- .../serialization/bytecode_serialization.ts | 7 +- .../instruction_serialization.ts | 27 +- 31 files changed, 732 insertions(+), 794 deletions(-) diff --git a/avm-transpiler/src/instructions.rs b/avm-transpiler/src/instructions.rs index f2e56b451eb..0fc44228f44 100644 --- a/avm-transpiler/src/instructions.rs +++ b/avm-transpiler/src/instructions.rs @@ -1,6 +1,8 @@ use std::fmt::{self, Display}; use std::fmt::{Debug, Formatter}; +use acvm::{AcirField, FieldElement}; + use crate::opcodes::AvmOpcode; /// Common values of the indirect instruction flag @@ -110,6 +112,7 @@ pub enum AvmOperand { U32 { value: u32 }, U64 { value: u64 }, U128 { value: u128 }, + FF { value: FieldElement }, } impl Display for AvmOperand { @@ -120,6 +123,7 @@ impl Display for AvmOperand { AvmOperand::U32 { value } => write!(f, " U32:{}", value), AvmOperand::U64 { value } => write!(f, " U64:{}", value), AvmOperand::U128 { value } => write!(f, " U128:{}", value), + AvmOperand::FF { value } => write!(f, " FF:{}", value), } } } @@ -132,6 +136,7 @@ impl AvmOperand { AvmOperand::U32 { value } => value.to_be_bytes().to_vec(), AvmOperand::U64 { value } => value.to_be_bytes().to_vec(), AvmOperand::U128 { value } => value.to_be_bytes().to_vec(), + AvmOperand::FF { value } => value.to_be_bytes(), } } } diff --git a/avm-transpiler/src/opcodes.rs b/avm-transpiler/src/opcodes.rs index 88c1330b296..86537a38c88 100644 --- a/avm-transpiler/src/opcodes.rs +++ b/avm-transpiler/src/opcodes.rs @@ -41,7 +41,12 @@ pub enum AvmOpcode { INTERNALCALL, INTERNALRETURN, // Memory - SET, + SET_8, + SET_16, + SET_32, + SET_64, + SET_128, + SET_FF, MOV_8, MOV_16, CMOV, @@ -129,7 +134,12 @@ impl AvmOpcode { AvmOpcode::INTERNALCALL => "INTERNALCALL", AvmOpcode::INTERNALRETURN => "INTERNALRETURN", // Machine State - Memory - AvmOpcode::SET => "SET", + AvmOpcode::SET_8 => "SET_8", + AvmOpcode::SET_16 => "SET_16", + AvmOpcode::SET_32 => "SET_32", + AvmOpcode::SET_64 => "SET_64", + AvmOpcode::SET_128 => "SET_128", + AvmOpcode::SET_FF => "SET_FF", AvmOpcode::MOV_8 => "MOV_8", AvmOpcode::MOV_16 => "MOV_16", AvmOpcode::CMOV => "CMOV", diff --git a/avm-transpiler/src/transpile.rs b/avm-transpiler/src/transpile.rs index 420efbab480..c4800a2c552 100644 --- a/avm-transpiler/src/transpile.rs +++ b/avm-transpiler/src/transpile.rs @@ -6,7 +6,7 @@ use acvm::acir::circuit::BrilligOpcodeLocation; use acvm::brillig_vm::brillig::{ BinaryFieldOp, BinaryIntOp, BlackBoxOp, HeapArray, HeapVector, MemoryAddress, ValueOrArray, }; -use acvm::{AcirField, FieldElement}; +use acvm::FieldElement; use noirc_errors::debug_info::DebugInfo; use crate::bit_traits::bits_needed_for; @@ -674,45 +674,38 @@ fn handle_const( ) { let tag = tag_from_bit_size(*bit_size); let dest = destination.to_usize() as u32; - - if !matches!(tag, AvmTypeTag::FIELD) { - avm_instrs.push(generate_set_instruction(tag, dest, value.to_u128(), indirect)); - } else { - // We can't fit a field in an instruction. This should've been handled in Brillig. - let field = value; - if field.num_bits() > 128 { - panic!("SET: Field value doesn't fit in 128 bits, that's not supported!"); - } - avm_instrs.extend([ - generate_set_instruction(AvmTypeTag::UINT128, dest, field.to_u128(), indirect), - generate_cast_instruction(dest, indirect, dest, indirect, AvmTypeTag::FIELD), - ]); - } + avm_instrs.push(generate_set_instruction(tag, dest, value, indirect)); } /// Generates an AVM SET instruction. fn generate_set_instruction( tag: AvmTypeTag, dest: u32, - value: u128, + value: &FieldElement, indirect: bool, ) -> AvmInstruction { + let bits_needed_val = bits_needed_for(value); + let bits_needed_mem = if bits_needed_val >= 16 { 16 } else { bits_needed_for(&dest) }; + assert!(bits_needed_mem <= 16); + let bits_needed_opcode = bits_needed_val.max(bits_needed_mem); + + let set_opcode = match bits_needed_opcode { + 8 => AvmOpcode::SET_8, + 16 => AvmOpcode::SET_16, + 32 => AvmOpcode::SET_32, + 64 => AvmOpcode::SET_64, + 128 => AvmOpcode::SET_128, + 254 => AvmOpcode::SET_FF, + _ => panic!("Invalid bits needed for opcode: {}", bits_needed_opcode), + }; + AvmInstruction { - opcode: AvmOpcode::SET, + opcode: set_opcode, indirect: if indirect { Some(ZEROTH_OPERAND_INDIRECT) } else { Some(ALL_DIRECT) }, tag: Some(tag), operands: vec![ - // const - match tag { - AvmTypeTag::UINT8 => AvmOperand::U8 { value: value as u8 }, - AvmTypeTag::UINT16 => AvmOperand::U16 { value: value as u16 }, - AvmTypeTag::UINT32 => AvmOperand::U32 { value: value as u32 }, - AvmTypeTag::UINT64 => AvmOperand::U64 { value: value as u64 }, - AvmTypeTag::UINT128 => AvmOperand::U128 { value }, - _ => panic!("Invalid type tag {:?} for set", tag), - }, - // dest offset - AvmOperand::U32 { value: dest }, + make_operand(bits_needed_opcode, value), + make_operand(bits_needed_mem, &dest), ], } } @@ -1137,8 +1130,6 @@ pub fn map_brillig_pcs_to_avm_pcs(brillig_bytecode: &[BrilligOpcode 2, - BrilligOpcode::IndirectConst { bit_size: BitSize::Field, .. } => 2, BrilligOpcode::Cast { bit_size: BitSize::Integer(IntegerBitSize::U1), .. } => 3, _ => 1, }; diff --git a/avm-transpiler/src/utils.rs b/avm-transpiler/src/utils.rs index cc440feda05..3f5269f5daa 100644 --- a/avm-transpiler/src/utils.rs +++ b/avm-transpiler/src/utils.rs @@ -1,7 +1,7 @@ use fxhash::FxHashMap as HashMap; use acvm::acir::circuit::brillig::BrilligFunctionId; -use acvm::FieldElement; +use acvm::{AcirField, FieldElement}; use log::{debug, info, trace}; use acvm::acir::brillig::Opcode as BrilligOpcode; @@ -91,13 +91,15 @@ pub fn dbg_print_avm_program(avm_program: &[AvmInstruction]) { } } -pub fn make_operand + Copy>(bits: usize, value: &T) -> AvmOperand { +pub fn make_operand + Clone>(bits: usize, value: &T) -> AvmOperand { + let field: FieldElement = value.clone().into(); match bits { - 8 => AvmOperand::U8 { value: Into::::into(*value) as u8 }, - 16 => AvmOperand::U16 { value: Into::::into(*value) as u16 }, - 32 => AvmOperand::U32 { value: Into::::into(*value) as u32 }, - 64 => AvmOperand::U64 { value: Into::::into(*value) as u64 }, - 128 => AvmOperand::U128 { value: Into::::into(*value) }, + 8 => AvmOperand::U8 { value: field.try_to_u32().unwrap() as u8 }, + 16 => AvmOperand::U16 { value: field.try_to_u32().unwrap() as u16 }, + 32 => AvmOperand::U32 { value: field.try_to_u32().unwrap() }, + 64 => AvmOperand::U64 { value: field.try_to_u64().unwrap() }, + 128 => AvmOperand::U128 { value: field.try_into_u128().unwrap() }, + 254 => AvmOperand::FF { value: field }, _ => panic!("Invalid operand size for bits: {}", bits), } } diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/tests/arithmetic.test.cpp b/barretenberg/cpp/src/barretenberg/vm/avm/tests/arithmetic.test.cpp index f61c3826042..a3be8b38028 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/tests/arithmetic.test.cpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/tests/arithmetic.test.cpp @@ -221,8 +221,8 @@ class AvmArithmeticTests : public ::testing::Test { } // Generate a trace with an EQ opcode operation. - std::vector gen_trace_eq(uint128_t const& a, - uint128_t const& b, + std::vector gen_trace_eq(uint256_t const& a, + uint256_t const& b, uint32_t const& addr_a, uint32_t const& addr_b, uint32_t const& addr_c, @@ -240,8 +240,8 @@ class AvmArithmeticTests : public ::testing::Test { // and the memory and alu trace are created consistently with the wrong value c_mutated. std::vector gen_mutated_trace_add(FF const& a, FF const& b, FF const& c_mutated, avm_trace::AvmMemoryTag tag) { - trace_builder.op_set(0, uint128_t{ a }, 0, tag); - trace_builder.op_set(0, uint128_t{ b }, 1, tag); + trace_builder.op_set(0, a, 0, tag); + trace_builder.op_set(0, b, 1, tag); trace_builder.op_add(0, 0, 1, 2, tag); trace_builder.op_return(0, 0, 0); auto trace = trace_builder.finalize(); @@ -257,8 +257,8 @@ class AvmArithmeticTests : public ::testing::Test { // and the memory and alu trace are created consistently with the wrong value c_mutated. std::vector gen_mutated_trace_sub(FF const& a, FF const& b, FF const& c_mutated, avm_trace::AvmMemoryTag tag) { - trace_builder.op_set(0, uint128_t{ a }, 0, tag); - trace_builder.op_set(0, uint128_t{ b }, 1, tag); + trace_builder.op_set(0, a, 0, tag); + trace_builder.op_set(0, b, 1, tag); trace_builder.op_sub(0, 0, 1, 2, tag); trace_builder.op_return(0, 0, 0); auto trace = trace_builder.finalize(); @@ -274,8 +274,8 @@ class AvmArithmeticTests : public ::testing::Test { // and the memory and alu trace are created consistently with the wrong value c_mutated. std::vector gen_mutated_trace_mul(FF const& a, FF const& b, FF const& c_mutated, avm_trace::AvmMemoryTag tag) { - trace_builder.op_set(0, uint128_t{ a }, 0, tag); - trace_builder.op_set(0, uint128_t{ b }, 1, tag); + trace_builder.op_set(0, a, 0, tag); + trace_builder.op_set(0, b, 1, tag); trace_builder.op_mul(0, 0, 1, 2, tag); trace_builder.op_return(0, 0, 0); auto trace = trace_builder.finalize(); @@ -294,8 +294,8 @@ class AvmArithmeticTests : public ::testing::Test { std::vector gen_mutated_trace_eq( FF const& a, FF const& b, FF const& c_mutated, FF const& mutated_inv_diff, avm_trace::AvmMemoryTag tag) { - trace_builder.op_set(0, uint128_t{ a }, 0, tag); - trace_builder.op_set(0, uint128_t{ b }, 1, tag); + trace_builder.op_set(0, a, 0, tag); + trace_builder.op_set(0, b, 1, tag); trace_builder.op_eq(0, 0, 1, 2, tag); trace_builder.op_return(0, 0, 0); auto trace = trace_builder.finalize(); @@ -671,8 +671,8 @@ TEST_P(AvmArithmeticTestsDiv, division) { const auto [operands, mem_tag] = GetParam(); const auto [a, b, output] = operands; - trace_builder.op_set(0, uint128_t(a), 0, mem_tag); - trace_builder.op_set(0, uint128_t(b), 1, mem_tag); + trace_builder.op_set(0, a, 0, mem_tag); + trace_builder.op_set(0, b, 1, mem_tag); trace_builder.op_div(0, 0, 1, 2, mem_tag); trace_builder.op_return(0, 0, 0); auto trace = trace_builder.finalize(); @@ -1077,7 +1077,7 @@ TEST_F(AvmArithmeticTestsU32, subtractionCarry) { // trace_builder trace_builder.op_set(0, UINT32_MAX - 99, 8, AvmMemoryTag::U32); - trace_builder.op_set(0, 3210987654, 9, AvmMemoryTag::U32); + trace_builder.op_set(0, uint256_t(3210987654), 9, AvmMemoryTag::U32); trace_builder.op_sub(0, 9, 8, 0, AvmMemoryTag::U32); trace_builder.op_return(0, 0, 0); @@ -1335,9 +1335,9 @@ TEST_F(AvmArithmeticTestsU64, nonEquality) // Test on basic addition over u128 type. TEST_F(AvmArithmeticTestsU128, addition) { - uint128_t const a = (uint128_t{ 0x5555222233334444LLU } << 64) + uint128_t{ 0x88889999AAAABBBBLLU }; - uint128_t const b = (uint128_t{ 0x3333222233331111LLU } << 64) + uint128_t{ 0x5555111155553333LLU }; - uint128_t const c = (uint128_t{ 0x8888444466665555LLU } << 64) + uint128_t{ 0xDDDDAAAAFFFFEEEELLU }; + const FF a = (uint256_t{ 0x5555222233334444LLU } << 64) + uint256_t{ 0x88889999AAAABBBBLLU }; + const FF b = (uint256_t{ 0x3333222233331111LLU } << 64) + uint256_t{ 0x5555111155553333LLU }; + const FF c = (uint256_t{ 0x8888444466665555LLU } << 64) + uint256_t{ 0xDDDDAAAAFFFFEEEELLU }; // trace_builder trace_builder.op_set(0, a, 8, AvmMemoryTag::U128); @@ -1347,14 +1347,7 @@ TEST_F(AvmArithmeticTestsU128, addition) trace_builder.op_return(0, 0, 0); auto trace = trace_builder.finalize(); - auto alu_row = common_validate_add(trace, - FF(uint256_t::from_uint128(a)), - FF(uint256_t::from_uint128(b)), - FF(uint256_t::from_uint128(c)), - FF(8), - FF(9), - FF(9), - AvmMemoryTag::U128); + auto alu_row = common_validate_add(trace, a, b, c, FF(8), FF(9), FF(9), AvmMemoryTag::U128); EXPECT_EQ(alu_row.alu_u128_tag, FF(1)); EXPECT_EQ(alu_row.alu_cf, FF(0)); @@ -1365,10 +1358,10 @@ TEST_F(AvmArithmeticTestsU128, addition) // Test on basic addition over u128 type with carry. TEST_F(AvmArithmeticTestsU128, additionCarry) { - uint128_t const a = (uint128_t{ UINT64_MAX } << 64) + uint128_t{ UINT64_MAX } - uint128_t{ 72948899 }; - uint128_t const b = (uint128_t{ UINT64_MAX } << 64) + uint128_t{ UINT64_MAX } - uint128_t{ 36177344 }; - uint128_t const c = - (uint128_t{ UINT64_MAX } << 64) + uint128_t{ UINT64_MAX } - uint128_t{ 36177345 } - uint128_t{ 72948899 }; + const FF a = (uint256_t{ UINT64_MAX } << 64) + uint256_t{ UINT64_MAX } - uint256_t{ 72948899 }; + const FF b = (uint256_t{ UINT64_MAX } << 64) + uint256_t{ UINT64_MAX } - uint256_t{ 36177344 }; + const FF c = + (uint256_t{ UINT64_MAX } << 64) + uint256_t{ UINT64_MAX } - uint256_t{ 36177345 } - uint256_t{ 72948899 }; // trace_builder trace_builder.op_set(0, a, 8, AvmMemoryTag::U128); @@ -1378,14 +1371,7 @@ TEST_F(AvmArithmeticTestsU128, additionCarry) trace_builder.op_return(0, 0, 0); auto trace = trace_builder.finalize(); - auto alu_row = common_validate_add(trace, - FF(uint256_t::from_uint128(a)), - FF(uint256_t::from_uint128(b)), - FF(uint256_t::from_uint128(c)), - FF(8), - FF(9), - FF(9), - AvmMemoryTag::U128); + auto alu_row = common_validate_add(trace, a, b, c, FF(8), FF(9), FF(9), AvmMemoryTag::U128); EXPECT_EQ(alu_row.alu_u128_tag, FF(1)); EXPECT_EQ(alu_row.alu_cf, FF(1)); @@ -1396,9 +1382,9 @@ TEST_F(AvmArithmeticTestsU128, additionCarry) // Test on basic subtraction over u128 type. TEST_F(AvmArithmeticTestsU128, subtraction) { - uint128_t const a = (uint128_t{ UINT64_MAX } << 64) + uint128_t{ UINT64_MAX } - uint128_t{ 36177344 }; - uint128_t const b = (uint128_t{ UINT64_MAX } << 64) + uint128_t{ UINT64_MAX } - uint128_t{ 72948899 }; - uint128_t const c = 36771555; // 72948899 - 36177344 + const FF a = (uint256_t{ UINT64_MAX } << 64) + uint256_t{ UINT64_MAX } - uint256_t{ 36177344 }; + const FF b = (uint256_t{ UINT64_MAX } << 64) + uint256_t{ UINT64_MAX } - uint256_t{ 72948899 }; + const FF c = 36771555; // 72948899 - 36177344 // trace_builder trace_builder.op_set(0, a, 8, AvmMemoryTag::U128); @@ -1408,14 +1394,7 @@ TEST_F(AvmArithmeticTestsU128, subtraction) trace_builder.op_return(0, 0, 0); auto trace = trace_builder.finalize(); - auto alu_row = common_validate_sub(trace, - FF(uint256_t::from_uint128(a)), - FF(uint256_t::from_uint128(b)), - FF(uint256_t::from_uint128(c)), - FF(8), - FF(9), - FF(9), - AvmMemoryTag::U128); + auto alu_row = common_validate_sub(trace, a, b, c, FF(8), FF(9), FF(9), AvmMemoryTag::U128); EXPECT_EQ(alu_row.alu_u128_tag, FF(1)); EXPECT_EQ(alu_row.alu_cf, FF(0)); @@ -1426,9 +1405,9 @@ TEST_F(AvmArithmeticTestsU128, subtraction) // Test on basic subtraction over u128 type with carry. TEST_F(AvmArithmeticTestsU128, subtractionCarry) { - uint128_t const a = (uint128_t{ 0x5555222233334444LLU } << 64) + uint128_t{ 0x88889999AAAABBBBLLU }; - uint128_t const b = (uint128_t{ 0x3333222233331111LLU } << 64) + uint128_t{ 0x5555111155553333LLU }; - uint128_t const c = (uint128_t{ 0x2222000000003333LLU } << 64) + uint128_t{ 0x3333888855558888LLU }; + const FF a = (uint256_t{ 0x5555222233334444LLU } << 64) + uint256_t{ 0x88889999AAAABBBBLLU }; + const FF b = (uint256_t{ 0x3333222233331111LLU } << 64) + uint256_t{ 0x5555111155553333LLU }; + const FF c = (uint256_t{ 0x2222000000003333LLU } << 64) + uint256_t{ 0x3333888855558888LLU }; // trace_builder trace_builder.op_set(0, a, 8, AvmMemoryTag::U128); @@ -1438,14 +1417,7 @@ TEST_F(AvmArithmeticTestsU128, subtractionCarry) trace_builder.op_return(0, 0, 0); auto trace = trace_builder.finalize(); - auto alu_row = common_validate_sub(trace, - FF(uint256_t::from_uint128(a)), - FF(uint256_t::from_uint128(b)), - FF(uint256_t::from_uint128(c)), - FF(8), - FF(9), - FF(9), - AvmMemoryTag::U128); + auto alu_row = common_validate_sub(trace, a, b, c, FF(8), FF(9), FF(9), AvmMemoryTag::U128); EXPECT_EQ(alu_row.alu_u128_tag, FF(1)); EXPECT_EQ(alu_row.alu_cf, FF(0)); @@ -1480,8 +1452,8 @@ TEST_F(AvmArithmeticTestsU128, multiplicationOverflow) { // (2^128 - 2) * (2^128 - 4) = 2^256 - 2^130 - 2^129 + 2^3 // The above modulo 2^128 = 8 - uint128_t const a = (uint128_t{ UINT64_MAX } << 64) + uint128_t{ UINT64_MAX - 1 }; - uint128_t const b = (uint128_t{ UINT64_MAX } << 64) + uint128_t{ UINT64_MAX - 3 }; + const FF a = (uint256_t{ UINT64_MAX } << 64) + uint256_t{ UINT64_MAX - 1 }; + const FF b = (uint256_t{ UINT64_MAX } << 64) + uint256_t{ UINT64_MAX - 3 }; // trace_builder trace_builder.op_set(0, a, 0, AvmMemoryTag::U128); @@ -1491,14 +1463,7 @@ TEST_F(AvmArithmeticTestsU128, multiplicationOverflow) trace_builder.op_return(0, 0, 0); auto trace = trace_builder.finalize(); - auto alu_row_index = common_validate_mul(trace, - FF{ uint256_t::from_uint128(a) }, - FF{ uint256_t::from_uint128(b) }, - FF{ 8 }, - FF(0), - FF(1), - FF(2), - AvmMemoryTag::U128); + auto alu_row_index = common_validate_mul(trace, a, b, FF{ 8 }, FF(0), FF(1), FF(2), AvmMemoryTag::U128); auto alu_row_first = trace.at(alu_row_index); EXPECT_EQ(alu_row_first.alu_u128_tag, FF(1)); @@ -1508,17 +1473,10 @@ TEST_F(AvmArithmeticTestsU128, multiplicationOverflow) TEST_F(AvmArithmeticTestsU128, equality) { - uint128_t const elem = (uint128_t{ 0x5555222233334444LLU } << 64) + uint128_t{ 0x88889999AAAABBBBLLU }; + const FF elem = (uint256_t{ 0x5555222233334444LLU } << 64) + uint256_t{ 0x88889999AAAABBBBLLU }; auto trace = gen_trace_eq(elem, elem, 0, 1, 2, AvmMemoryTag::U128); - auto alu_row_index = common_validate_eq(trace, - FF(uint256_t::from_uint128(elem)), - FF(uint256_t::from_uint128(elem)), - FF(1), - FF(0), - FF(1), - FF(2), - AvmMemoryTag::U128); + auto alu_row_index = common_validate_eq(trace, elem, elem, FF(1), FF(0), FF(1), FF(2), AvmMemoryTag::U128); auto alu_row = trace.at(alu_row_index); EXPECT_EQ(alu_row.alu_u128_tag, FF(1)); @@ -1529,18 +1487,11 @@ TEST_F(AvmArithmeticTestsU128, equality) // Test correct non-equality of U128 elements TEST_F(AvmArithmeticTestsU128, nonEquality) { - uint128_t const a = (uint128_t{ 0x5555222233334444LLU } << 64) + uint128_t{ 0x88889999AAAABBBBLLU }; - uint128_t const b = a - (0xdeadbeefLLU << 32); + const FF a = (uint256_t{ 0x5555222233334444LLU } << 64) + uint256_t{ 0x88889999AAAABBBBLLU }; + const FF b = a - (0xdeadbeefLLU << 32); auto trace = gen_trace_eq(a, b, 0, 1, 2, AvmMemoryTag::U128); - auto alu_row_index = common_validate_eq(trace, - FF(uint256_t::from_uint128(a)), - FF(uint256_t::from_uint128(b)), - FF(0), - FF(0), - FF(1), - FF(2), - AvmMemoryTag::U128); + auto alu_row_index = common_validate_eq(trace, a, b, FF(0), FF(0), FF(1), FF(2), AvmMemoryTag::U128); auto alu_row = trace.at(alu_row_index); EXPECT_EQ(alu_row.alu_u128_tag, FF(1)); diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/tests/bitwise.test.cpp b/barretenberg/cpp/src/barretenberg/vm/avm/tests/bitwise.test.cpp index deab35a0efc..ecb51b50a7d 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/tests/bitwise.test.cpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/tests/bitwise.test.cpp @@ -357,7 +357,7 @@ class AvmBitwiseTests : public ::testing::Test { std::vector gen_mutated_trace_not(FF const& a, FF const& c_mutated, avm_trace::AvmMemoryTag tag) { - trace_builder.op_set(0, uint128_t{ a }, 0, tag); + trace_builder.op_set(0, a, 0, tag); trace_builder.op_not(0, 0, 1, tag); trace_builder.op_return(0, 0, 0); auto trace = trace_builder.finalize(); @@ -375,21 +375,21 @@ class AvmBitwiseTests : public ::testing::Test { * ******************************************************************************/ -using TwoOpParamRow = std::tuple, AvmMemoryTag>; +using TwoOpParamRow = std::tuple, AvmMemoryTag>; std::vector mem_tags{ { AvmMemoryTag::U8, AvmMemoryTag::U16, AvmMemoryTag::U32, AvmMemoryTag::U64, AvmMemoryTag::U128 } }; -std::vector> positive_op_not_test_values = { { { 1, 254 }, - { 512, 65'023 }, - { 131'072, 4'294'836'223LLU }, - { 0x100000000LLU, 0xfffffffeffffffffLLU }, - { uint128_t{ 0x4000000000000 } << 64, - (uint128_t{ 0xfffbffffffffffff } << 64) + - uint128_t{ 0xffffffffffffffff } } } }; +std::vector> positive_op_not_test_values = { { { 1, 254 }, + { 512, 65'023 }, + { 131'072, 4'294'836'223LLU }, + { 0x100000000LLU, 0xfffffffeffffffffLLU }, + { uint256_t{ 0x4000000000000 } << 64, + (uint256_t{ 0xfffbffffffffffff } << 64) + + uint256_t{ 0xffffffffffffffff } } } }; // This is essentially a zip while we wait for C++23 -std::vector gen_two_op_params(std::vector> operands, +std::vector gen_two_op_params(std::vector> operands, std::vector mem_tags) { std::vector params; @@ -470,9 +470,7 @@ TEST_P(AvmBitwiseTestsNot, ParamTest) trace_builder.op_not(0, 0, 1, mem_tag); // [1,254,0,0,....] trace_builder.op_return(0, 0, 0); auto trace = trace_builder.finalize(); - FF ff_a = FF(uint256_t::from_uint128(a)); - FF ff_output = FF(uint256_t::from_uint128(output)); - common_validate_op_not(trace, ff_a, ff_output, FF(0), FF(1), mem_tag); + common_validate_op_not(trace, a, output, FF(0), FF(1), mem_tag); validate_trace(std::move(trace), public_inputs); } @@ -484,8 +482,8 @@ TEST_P(AvmBitwiseTestsAnd, AllAndTest) { const auto [operands, mem_tag] = GetParam(); const auto [a, b, output] = operands; - trace_builder.op_set(0, uint128_t(a), 0, mem_tag); - trace_builder.op_set(0, uint128_t(b), 1, mem_tag); + trace_builder.op_set(0, a, 0, mem_tag); + trace_builder.op_set(0, b, 1, mem_tag); trace_builder.op_and(0, 0, 1, 2, mem_tag); trace_builder.op_return(0, 2, 1); @@ -501,8 +499,8 @@ TEST_P(AvmBitwiseTestsOr, AllOrTest) { const auto [operands, mem_tag] = GetParam(); const auto [a, b, output] = operands; - trace_builder.op_set(0, uint128_t(a), 0, mem_tag); - trace_builder.op_set(0, uint128_t(b), 1, mem_tag); + trace_builder.op_set(0, a, 0, mem_tag); + trace_builder.op_set(0, b, 1, mem_tag); trace_builder.op_or(0, 0, 1, 2, mem_tag); trace_builder.op_return(0, 2, 1); auto trace = trace_builder.finalize(); @@ -518,8 +516,8 @@ TEST_P(AvmBitwiseTestsXor, AllXorTest) { const auto [operands, mem_tag] = GetParam(); const auto [a, b, output] = operands; - trace_builder.op_set(0, uint128_t(a), 0, mem_tag); - trace_builder.op_set(0, uint128_t(b), 1, mem_tag); + trace_builder.op_set(0, a, 0, mem_tag); + trace_builder.op_set(0, b, 1, mem_tag); trace_builder.op_xor(0, 0, 1, 2, mem_tag); trace_builder.op_return(0, 2, 1); auto trace = trace_builder.finalize(); @@ -536,8 +534,8 @@ TEST_P(AvmBitwiseTestsShr, AllShrTest) { const auto [operands, mem_tag] = GetParam(); const auto [a, b, output] = operands; - trace_builder.op_set(0, uint128_t(a), 0, mem_tag); - trace_builder.op_set(0, uint128_t(b), 1, mem_tag); + trace_builder.op_set(0, a, 0, mem_tag); + trace_builder.op_set(0, b, 1, mem_tag); trace_builder.op_shr(0, 0, 1, 2, mem_tag); trace_builder.op_return(0, 2, 1); auto trace = trace_builder.finalize(); @@ -553,8 +551,8 @@ TEST_P(AvmBitwiseTestsShl, AllShlTest) { const auto [operands, mem_tag] = GetParam(); const auto [a, b, output] = operands; - trace_builder.op_set(0, uint128_t(a), 0, mem_tag); - trace_builder.op_set(0, uint128_t(b), 1, mem_tag); + trace_builder.op_set(0, a, 0, mem_tag); + trace_builder.op_set(0, b, 1, mem_tag); trace_builder.op_shl(0, 0, 1, 2, mem_tag); trace_builder.op_return(0, 2, 1); auto trace = trace_builder.finalize(); @@ -653,8 +651,8 @@ TEST_P(AvmBitwiseNegativeTestsAnd, AllNegativeTests) const auto [failure_string, failure_mode] = failure; const auto [operands, mem_tag] = params; const auto [a, b, output] = operands; - trace_builder.op_set(0, uint128_t{ a }, 0, mem_tag); - trace_builder.op_set(0, uint128_t{ b }, 1, mem_tag); + trace_builder.op_set(0, a, 0, mem_tag); + trace_builder.op_set(0, b, 1, mem_tag); trace_builder.op_and(0, 0, 1, 2, mem_tag); trace_builder.op_return(0, 0, 0); auto trace = trace_builder.finalize(); @@ -672,8 +670,8 @@ TEST_P(AvmBitwiseNegativeTestsOr, AllNegativeTests) const auto [failure_string, failure_mode] = failure; const auto [operands, mem_tag] = params; const auto [a, b, output] = operands; - trace_builder.op_set(0, uint128_t{ a }, 0, mem_tag); - trace_builder.op_set(0, uint128_t{ b }, 1, mem_tag); + trace_builder.op_set(0, a, 0, mem_tag); + trace_builder.op_set(0, b, 1, mem_tag); trace_builder.op_or(0, 0, 1, 2, mem_tag); trace_builder.op_return(0, 0, 0); auto trace = trace_builder.finalize(); @@ -690,8 +688,8 @@ TEST_P(AvmBitwiseNegativeTestsXor, AllNegativeTests) const auto [failure_string, failure_mode] = failure; const auto [operands, mem_tag] = params; const auto [a, b, output] = operands; - trace_builder.op_set(0, uint128_t{ a }, 0, mem_tag); - trace_builder.op_set(0, uint128_t{ b }, 1, mem_tag); + trace_builder.op_set(0, a, 0, mem_tag); + trace_builder.op_set(0, b, 1, mem_tag); trace_builder.op_xor(0, 0, 1, 2, mem_tag); trace_builder.op_return(0, 0, 0); auto trace = trace_builder.finalize(); @@ -708,8 +706,8 @@ TEST_P(AvmBitwiseNegativeTestsShr, AllNegativeTests) const auto [failure, params] = GetParam(); const auto [operands, mem_tag] = params; const auto [a, b, output] = operands; - trace_builder.op_set(0, uint128_t{ a }, 0, mem_tag); - trace_builder.op_set(0, uint128_t{ b }, 1, mem_tag); + trace_builder.op_set(0, a, 0, mem_tag); + trace_builder.op_set(0, b, 1, mem_tag); trace_builder.op_shr(0, 0, 1, 2, mem_tag); trace_builder.op_return(0, 0, 0); auto trace = trace_builder.finalize(); @@ -727,8 +725,8 @@ TEST_P(AvmBitwiseNegativeTestsShl, AllNegativeTests) const auto [failure, params] = GetParam(); const auto [operands, mem_tag] = params; const auto [a, b, output] = operands; - trace_builder.op_set(0, uint128_t{ a }, 0, mem_tag); - trace_builder.op_set(0, uint128_t{ b }, 1, mem_tag); + trace_builder.op_set(0, a, 0, mem_tag); + trace_builder.op_set(0, b, 1, mem_tag); trace_builder.op_shl(0, 0, 1, 2, mem_tag); trace_builder.op_return(0, 0, 0); auto trace = trace_builder.finalize(); diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/tests/cast.test.cpp b/barretenberg/cpp/src/barretenberg/vm/avm/tests/cast.test.cpp index c074ebf46e8..b9985009ba3 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/tests/cast.test.cpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/tests/cast.test.cpp @@ -1,3 +1,4 @@ +#include "barretenberg/numeric/uint256/uint256.hpp" #include "barretenberg/vm/avm/tests/helpers.test.hpp" #include "barretenberg/vm/avm/trace/common.hpp" #include "common.test.hpp" @@ -33,7 +34,7 @@ class AvmCastTests : public ::testing::Test { void gen_trace( uint128_t const& a, uint32_t src_address, uint32_t dst_address, AvmMemoryTag src_tag, AvmMemoryTag dst_tag) { - trace_builder.op_set(0, a, src_address, src_tag); + trace_builder.op_set(0, uint256_t::from_uint128(a), src_address, src_tag); trace_builder.op_cast(0, src_address, dst_address, dst_tag); trace_builder.op_return(0, 0, 0); trace = trace_builder.finalize(); diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/tests/comparison.test.cpp b/barretenberg/cpp/src/barretenberg/vm/avm/tests/comparison.test.cpp index 36ec0f9bee9..b1315b0bb97 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/tests/comparison.test.cpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/tests/comparison.test.cpp @@ -113,8 +113,8 @@ TEST_P(AvmCmpTestsLT, ParamTest) trace_builder = AvmTraceBuilder(public_inputs, {}, 0, calldata); trace_builder.op_calldata_copy(0, 0, 2, 0); } else { - trace_builder.op_set(0, uint128_t(a), 0, mem_tag); - trace_builder.op_set(0, uint128_t(b), 1, mem_tag); + trace_builder.op_set(0, a, 0, mem_tag); + trace_builder.op_set(0, b, 1, mem_tag); } trace_builder.op_lt(0, 0, 1, 2, mem_tag); trace_builder.op_return(0, 0, 0); @@ -149,8 +149,8 @@ TEST_P(AvmCmpTestsLTE, ParamTest) trace_builder = AvmTraceBuilder(public_inputs, {}, 0, calldata); trace_builder.op_calldata_copy(0, 0, 2, 0); } else { - trace_builder.op_set(0, uint128_t(a), 0, mem_tag); - trace_builder.op_set(0, uint128_t(b), 1, mem_tag); + trace_builder.op_set(0, a, 0, mem_tag); + trace_builder.op_set(0, b, 1, mem_tag); } trace_builder.op_lte(0, 0, 1, 2, mem_tag); trace_builder.op_return(0, 0, 0); diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/tests/execution.test.cpp b/barretenberg/cpp/src/barretenberg/vm/avm/tests/execution.test.cpp index 5956687061d..268c42e7e85 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/tests/execution.test.cpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/tests/execution.test.cpp @@ -108,16 +108,16 @@ TEST_F(AvmExecutionTests, basicAddReturn) // Positive test for SET and SUB opcodes TEST_F(AvmExecutionTests, setAndSubOpcodes) { - std::string bytecode_hex = to_hex(OpCode::SET) + // opcode SET + std::string bytecode_hex = to_hex(OpCode::SET_16) + // opcode SET "00" // Indirect flag "02" // U16 "B813" // val 47123 - "000000AA" // dst_offset 170 - + to_hex(OpCode::SET) + // opcode SET + "00AA" // dst_offset 170 + + to_hex(OpCode::SET_16) + // opcode SET "00" // Indirect flag "02" // U16 "9103" // val 37123 - "00000033" // dst_offset 51 + "0033" // dst_offset 51 + to_hex(OpCode::SUB) + // opcode SUB "00" // Indirect flag "02" // U16 @@ -136,21 +136,21 @@ TEST_F(AvmExecutionTests, setAndSubOpcodes) // SET EXPECT_THAT(instructions.at(0), - AllOf(Field(&Instruction::op_code, OpCode::SET), + AllOf(Field(&Instruction::op_code, OpCode::SET_16), Field(&Instruction::operands, ElementsAre(VariantWith(0), VariantWith(AvmMemoryTag::U16), VariantWith(47123), - VariantWith(170))))); + VariantWith(170))))); // SET EXPECT_THAT(instructions.at(1), - AllOf(Field(&Instruction::op_code, OpCode::SET), + AllOf(Field(&Instruction::op_code, OpCode::SET_16), Field(&Instruction::operands, ElementsAre(VariantWith(0), VariantWith(AvmMemoryTag::U16), VariantWith(37123), - VariantWith(51))))); + VariantWith(51))))); // SUB EXPECT_THAT(instructions.at(2), @@ -178,18 +178,16 @@ TEST_F(AvmExecutionTests, setAndSubOpcodes) // the result at offset 1. TEST_F(AvmExecutionTests, powerWithMulOpcodes) { - std::string bytecode_hex = to_hex(OpCode::SET) + // opcode SET - "00" // Indirect flag - "04" // U64 - "00000000" // val 5 higher 32 bits - "00000005" // val 5 lower 32 bits - "00000000" // dst_offset 0 - + to_hex(OpCode::SET) + // opcode SET - "00" // Indirect flag - "04" // U64 - "00000000" // val 1 higher 32 bits - "00000001" // val 1 lower 32 bits - "00000001"; // dst_offset 1 + std::string bytecode_hex = to_hex(OpCode::SET_8) + // opcode SET + "00" // Indirect flag + "04" // U64 + "05" // val + "00" // dst_offset 0 + + to_hex(OpCode::SET_8) + // opcode SET + "00" // Indirect flag + "04" // U64 + "01" // val + "01"; // dst_offset 1 std::string const mul_hex = to_hex(OpCode::MUL) + // opcode MUL "00" // Indirect flag @@ -261,11 +259,11 @@ TEST_F(AvmExecutionTests, powerWithMulOpcodes) // 0 1 2 3 4 5 TEST_F(AvmExecutionTests, simpleInternalCall) { - std::string bytecode_hex = to_hex(OpCode::SET) + // opcode SET + std::string bytecode_hex = to_hex(OpCode::SET_32) + // opcode SET "00" // Indirect flag "03" // U32 "0D3D2518" // val 222111000 = 0xD3D2518 - "00000004" // dst_offset 4 + "0004" // dst_offset 4 + to_hex(OpCode::INTERNALCALL) + // opcode INTERNALCALL "00000004" // jmp_dest + to_hex(OpCode::ADD) + // opcode ADD @@ -278,11 +276,11 @@ TEST_F(AvmExecutionTests, simpleInternalCall) "00" // Indirect flag "00000000" // ret offset 0 "00000000" // ret size 0 - + to_hex(OpCode::SET) + // opcode SET + + to_hex(OpCode::SET_32) + // opcode SET "00" // Indirect flag "03" // U32 "075BCD15" // val 123456789 = 0x75BCD15 - "00000007" // dst_offset 7 + "0007" // dst_offset 7 + to_hex(OpCode::INTERNALRETURN) // opcode INTERNALRETURN ; @@ -337,10 +335,11 @@ TEST_F(AvmExecutionTests, nestedInternalCalls) }; auto setInstructionHex = [](std::string const& val, std::string const& dst_offset) { - return to_hex(OpCode::SET) // opcode SET - + "00" // Indirect flag - + "01" // U8 - + val + "000000" + dst_offset; + // val and dst_offset is assumed to be 2 bytes + return to_hex(OpCode::SET_32) // opcode SET + + "00" // Indirect flag + + "01" // U8 + + "000000" + val + "00" + dst_offset; }; const std::string tag_address_arguments = "00" // Indirect Flag @@ -369,12 +368,11 @@ TEST_F(AvmExecutionTests, nestedInternalCalls) ASSERT_THAT(instructions, SizeIs(12)); // Expected sequence of opcodes - std::vector const opcode_sequence{ OpCode::SET, OpCode::SET, - OpCode::INTERNALCALL, OpCode::RETURN, - OpCode::MUL, OpCode::INTERNALRETURN, - OpCode::ADD, OpCode::INTERNALRETURN, - OpCode::INTERNALCALL, OpCode::SET, - OpCode::INTERNALCALL, OpCode::INTERNALRETURN }; + std::vector const opcode_sequence{ + OpCode::SET_32, OpCode::SET_32, OpCode::INTERNALCALL, OpCode::RETURN, + OpCode::MUL, OpCode::INTERNALRETURN, OpCode::ADD, OpCode::INTERNALRETURN, + OpCode::INTERNALCALL, OpCode::SET_32, OpCode::INTERNALCALL, OpCode::INTERNALRETURN + }; for (size_t i = 0; i < 12; i++) { EXPECT_EQ(instructions.at(i).op_code, opcode_sequence.at(i)); @@ -406,16 +404,16 @@ TEST_F(AvmExecutionTests, nestedInternalCalls) TEST_F(AvmExecutionTests, jumpAndCalldatacopy) { GTEST_SKIP(); - std::string bytecode_hex = to_hex(OpCode::SET) + // opcode SET + std::string bytecode_hex = to_hex(OpCode::SET_8) + // opcode SET "00" // Indirect flag "03" // U32 - "00000000" // val - "00000000" // dst_offset 101 - + to_hex(OpCode::SET) + // opcode SET + "00" // val + "00" // dst_offset 101 + + to_hex(OpCode::SET_8) + // opcode SET "00" // Indirect flag "03" // U32 - "00000002" // val - "00000001" // dst_offset 101 + "02" // val + "01" // dst_offset 101 + to_hex(OpCode::CALLDATACOPY) + // opcode CALLDATACOPY (no in tag) "00" // Indirect flag "00000000" // cd_offset @@ -500,11 +498,11 @@ TEST_F(AvmExecutionTests, jumpiAndCalldatacopy) "00000000" // cd_offset "00000001" // copy_size "0000000A" // dst_offset 10 - + to_hex(OpCode::SET) + // opcode SET + + to_hex(OpCode::SET_16) + // opcode SET "00" // Indirect flag "02" // U16 "0014" // val 20 - "00000065" // dst_offset 101 + "0065" // dst_offset 101 + to_hex(OpCode::JUMPI) + // opcode JUMPI "00" // Indirect flag "00000004" // jmp_dest (MUL located at 4) @@ -582,11 +580,11 @@ TEST_F(AvmExecutionTests, jumpiAndCalldatacopy) // Positive test with MOV. TEST_F(AvmExecutionTests, movOpcode) { - std::string bytecode_hex = to_hex(OpCode::SET) + // opcode SET + std::string bytecode_hex = to_hex(OpCode::SET_8) + // opcode SET "00" // Indirect flag "01" // U8 "13" // val 19 - "000000AB" // dst_offset 171 + "AB" // dst_offset 171 + to_hex(OpCode::MOV_8) + // opcode MOV "00" // Indirect flag "AB" // src_offset 171 @@ -603,12 +601,12 @@ TEST_F(AvmExecutionTests, movOpcode) // SET EXPECT_THAT(instructions.at(0), - AllOf(Field(&Instruction::op_code, OpCode::SET), + AllOf(Field(&Instruction::op_code, OpCode::SET_8), Field(&Instruction::operands, ElementsAre(VariantWith(0), VariantWith(AvmMemoryTag::U8), VariantWith(19), - VariantWith(171))))); + VariantWith(171))))); // MOV EXPECT_THAT( @@ -630,21 +628,21 @@ TEST_F(AvmExecutionTests, movOpcode) // Positive test with CMOV. TEST_F(AvmExecutionTests, cmovOpcode) { - std::string bytecode_hex = to_hex(OpCode::SET) + // opcode SET + std::string bytecode_hex = to_hex(OpCode::SET_8) + // opcode SET "00" // Indirect flag "01" // U8 "03" // val 3 - "00000010" // a_offset 16 - + to_hex(OpCode::SET) + // opcode SET + "10" // a_offset 16 + + to_hex(OpCode::SET_8) + // opcode SET "00" // Indirect flag "02" // U16 - "0004" // val 4 - "00000011" // b_offset 17 - + to_hex(OpCode::SET) + // opcode SET + "04" // val 4 + "11" // b_offset 17 + + to_hex(OpCode::SET_8) + // opcode SET "00" // Indirect flag "03" // U32 - "00000005" // val 5 - "00000020" // cond_offset 32 + "05" // val 5 + "20" // cond_offset 32 + to_hex(OpCode::CMOV) + // opcode CMOV "00" // Indirect flag "00000010" // a_offset 16 @@ -686,21 +684,21 @@ TEST_F(AvmExecutionTests, cmovOpcode) // Positive test with indirect MOV. TEST_F(AvmExecutionTests, indMovOpcode) { - std::string bytecode_hex = to_hex(OpCode::SET) + // opcode SET + std::string bytecode_hex = to_hex(OpCode::SET_8) + // opcode SET "00" // Indirect flag "03" // U32 - "0000000A" // val 10 - "00000001" // dst_offset 1 - + to_hex(OpCode::SET) + // opcode SET + "0A" // val 10 + "01" // dst_offset 1 + + to_hex(OpCode::SET_8) + // opcode SET "00" // Indirect flag "03" // U32 - "0000000B" // val 11 - "00000002" // dst_offset 2 - + to_hex(OpCode::SET) + // opcode SET + "0B" // val 11 + "02" // dst_offset 2 + + to_hex(OpCode::SET_8) + // opcode SET "00" // Indirect flag "01" // U8 "FF" // val 255 - "0000000A" // dst_offset 10 + "0A" // dst_offset 10 + to_hex(OpCode::MOV_8) + // opcode MOV "01" // Indirect flag "01" // src_offset 1 --> direct offset 10 @@ -734,11 +732,11 @@ TEST_F(AvmExecutionTests, indMovOpcode) // Positive test for SET and CAST opcodes TEST_F(AvmExecutionTests, setAndCastOpcodes) { - std::string bytecode_hex = to_hex(OpCode::SET) + // opcode SET + std::string bytecode_hex = to_hex(OpCode::SET_16) + // opcode SET "00" // Indirect flag "02" // U16 "B813" // val 47123 - "00000011" // dst_offset 17 + "0011" // dst_offset 17 + to_hex(OpCode::CAST) + // opcode CAST "00" // Indirect flag "01" // U8 @@ -775,31 +773,31 @@ TEST_F(AvmExecutionTests, setAndCastOpcodes) // Positive test with TO_RADIX_LE. TEST_F(AvmExecutionTests, toRadixLeOpcode) { - std::string bytecode_hex = to_hex(OpCode::SET) + // opcode SET + std::string bytecode_hex = to_hex(OpCode::SET_8) + // opcode SET "00" // Indirect flag "03" // U32 - "00000000" // val - "00000000" // dst_offset - + to_hex(OpCode::SET) + // opcode SET + "00" // val + "00" // dst_offset + + to_hex(OpCode::SET_8) + // opcode SET "00" // Indirect flag "03" // U32 - "00000001" // val - "00000001" // dst_offset + "01" // val + "01" // dst_offset + to_hex(OpCode::CALLDATACOPY) + // opcode CALLDATACOPY "00" // Indirect flag "00000000" // cd_offset "00000001" // copy_size "00000001" // dst_offset - + to_hex(OpCode::SET) + // opcode SET for indirect src + + to_hex(OpCode::SET_8) + // opcode SET for indirect src "00" // Indirect flag "03" // U32 - "00000001" // value 1 (i.e. where the src from calldata is copied) - "00000011" // dst_offset 17 - + to_hex(OpCode::SET) + // opcode SET for indirect dst + "01" // value 1 (i.e. where the src from calldata is copied) + "11" // dst_offset 17 + + to_hex(OpCode::SET_8) + // opcode SET for indirect dst "00" // Indirect flag "03" // U32 - "00000005" // value 5 (i.e. where the dst will be written to) - "00000015" // dst_offset 21 + "05" // value 5 (i.e. where the dst will be written to) + "15" // dst_offset 21 + to_hex(OpCode::TORADIXLE) + // opcode TO_RADIX_LE "03" // Indirect flag "00000011" // src_offset 17 (indirect) @@ -839,39 +837,39 @@ TEST_F(AvmExecutionTests, sha256CompressionOpcode) // Set operations for sha256 state // Test vectors taken from noir black_box_solver // State = Uint32Array.from([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]), - for (uint32_t i = 1; i <= 8; i++) { - bytecode_preamble += to_hex(OpCode::SET) + // opcode SET - "00" // Indirect flag - "03" + // U32 - to_hex(i) + // val i - to_hex(i); // val i + for (uint8_t i = 1; i <= 8; i++) { + bytecode_preamble += to_hex(OpCode::SET_8) + // opcode SET + "00" // Indirect flag + "03" + // U32 + to_hex(i) + // val i + to_hex(i); // val i } // Set operations for sha256 input // Test vectors taken from noir black_box_solver // Input = Uint32Array.from([1, 2, 3, 4, 5, 6, 7, 8]), - for (uint32_t i = 1; i <= 16; i++) { - bytecode_preamble += to_hex(OpCode::SET) + // opcode SET - "00" // Indirect flag - "03" + // U32 - to_hex(i) + // val i - to_hex(i + 8); // val i + for (uint8_t i = 1; i <= 16; i++) { + bytecode_preamble += to_hex(OpCode::SET_8) + // opcode SET + "00" // Indirect flag + "03" + // U32 + to_hex(i) + // val i + to_hex(i + 8); // val i } - std::string bytecode_hex = bytecode_preamble // Initial SET operations to store state and input - + to_hex(OpCode::SET) + // opcode SET for indirect dst (output) - "00" // Indirect flag - "03" // U32 - "00000100" // value 256 (i.e. where the dst will be written to) - "00000024" // dst_offset 36 - + to_hex(OpCode::SET) + // opcode SET for indirect state - "00" // Indirect flag - "03" // U32 - "00000001" // value 1 (i.e. where the state will be read from) - "00000022" // dst_offset 34 - + to_hex(OpCode::SET) + // opcode SET for indirect input - "00" // Indirect flag - "03" // U32 - "00000009" // value 9 (i.e. where the input will be read from) - "00000023" // dst_offset 35 + std::string bytecode_hex = bytecode_preamble // Initial SET operations to store state and input + + to_hex(OpCode::SET_16) + // opcode SET for indirect dst (output) + "00" // Indirect flag + "03" // U32 + "0100" // value 256 (i.e. where the dst will be written to) + "0024" // dst_offset 36 + + to_hex(OpCode::SET_8) + // opcode SET for indirect state + "00" // Indirect flag + "03" // U32 + "01" // value 1 (i.e. where the state will be read from) + "22" // dst_offset 34 + + to_hex(OpCode::SET_8) + // opcode SET for indirect input + "00" // Indirect flag + "03" // U32 + "09" // value 9 (i.e. where the input will be read from) + "23" // dst_offset 35 + to_hex(OpCode::SHA256COMPRESSION) + // opcode SHA256COMPRESSION "07" // Indirect flag (first 3 operands indirect) "00000024" // output offset (indirect 36) @@ -915,36 +913,36 @@ TEST_F(AvmExecutionTests, sha256Opcode) FF(0xde), FF(0x5d), FF(0xae), FF(0x22), FF(0x23), FF(0xb0), FF(0x03), FF(0x61), FF(0xa3), FF(0x96), FF(0x17), FF(0x7a), FF(0x9c), FF(0xb4), FF(0x10), FF(0xff), FF(0x61), FF(0xf2), FF(0x00), FF(0x15), FF(0xad), }; - std::string bytecode_hex = to_hex(OpCode::SET) + // Initial SET operations to store state and input + std::string bytecode_hex = to_hex(OpCode::SET_8) + // Initial SET operations to store state and input "00" // Indirect Flag "01" // U8 "61" // val 97 - "00000001" // dst_offset 1 - + to_hex(OpCode::SET) + // opcode SET for indirect src (input) + "01" // dst_offset 1 + + to_hex(OpCode::SET_8) + // opcode SET for indirect src (input) "00" // Indirect flag "01" // U8 "62" // value 98 (i.e. where the src will be read from)A - "00000002" // input_offset 2 - + to_hex(OpCode::SET) + // opcode SET for indirect src (input) + "02" // input_offset 2 + + to_hex(OpCode::SET_8) + // opcode SET for indirect src (input) "00" // Indirect flag "01" // U32 "63" // value 99 (i.e. where the src will be read from) - "00000003" // input_offset 36 - + to_hex(OpCode::SET) + // opcode SET for indirect src (input) + "03" // input_offset 36 + + to_hex(OpCode::SET_8) + // opcode SET for indirect src (input) "00" // Indirect flag "03" // U32 - "00000001" // value 1 (i.e. where the src will be read from) - "00000024" // input_offset 36 - + to_hex(OpCode::SET) + // + "01" // value 1 (i.e. where the src will be read from) + "24" // input_offset 36 + + to_hex(OpCode::SET_8) + // "00" // Indirect flag "03" // U8 - "00000003" // value 3 (i.e. where the length parameter is stored) - "00000025" // input_offset 37 - + to_hex(OpCode::SET) + // opcode SET for indirect dst (output) + "03" // value 3 (i.e. where the length parameter is stored) + "25" // input_offset 37 + + to_hex(OpCode::SET_16) + // opcode SET for indirect dst (output) "00" // Indirect flag "03" // U32 - "00000100" // value 256 (i.e. where the ouput will be written to) - "00000023" // dst_offset 35 + "0100" // value 256 (i.e. where the ouput will be written to) + "0023" // dst_offset 35 + to_hex(OpCode::SHA256) + // opcode SHA256 "03" // Indirect flag (first 2 operands indirect) "00000023" // output offset (indirect 35) @@ -977,31 +975,31 @@ TEST_F(AvmExecutionTests, poseidon2PermutationOpCode) FF(std::string("9a807b615c4d3e2fa0b1c2d3e4f56789fedcba9876543210abcdef0123456789")), FF(std::string("9a807b615c4d3e2fa0b1c2d3e4f56789fedcba9876543210abcdef0123456789")) }; - std::string bytecode_hex = to_hex(OpCode::SET) + // opcode SET + std::string bytecode_hex = to_hex(OpCode::SET_8) + // opcode SET "00" // Indirect flag "03" // U32 - "00000000" // val - "00000000" // dst_offset - + to_hex(OpCode::SET) + // opcode SET + "00" // val + "00" // dst_offset + + to_hex(OpCode::SET_8) + // opcode SET "00" // Indirect flag "03" // U32 - "00000004" // val - "00000001" // dst_offset + "04" // val + "01" // dst_offset + to_hex(OpCode::CALLDATACOPY) + // opcode CALL DATA COPY "00" // Indirect Flag "00000000" // cd_offset "00000001" // copy_size "00000001" // dst_offset 1 - + to_hex(OpCode::SET) + // opcode SET for indirect src (input) + + to_hex(OpCode::SET_8) + // opcode SET for indirect src (input) "00" // Indirect flag "03" // U32 - "00000001" // value 1 (i.e. where the src will be read from) - "00000024" // dst_offset 36 - + to_hex(OpCode::SET) + // opcode SET for indirect dst (output) + "01" // value 1 (i.e. where the src will be read from) + "24" // dst_offset 36 + + to_hex(OpCode::SET_8) + // opcode SET for indirect dst (output) "00" // Indirect flag "03" // U32 - "00000009" // value 9 (i.e. where the ouput will be written to) - "00000023" // dst_offset 35 + "09" // value 9 (i.e. where the ouput will be written to) + "23" // dst_offset 35 + to_hex(OpCode::POSEIDON2) + // opcode POSEIDON2 "03" // Indirect flag (first 2 operands indirect) "00000024" // input offset (indirect 36) @@ -1055,31 +1053,31 @@ TEST_F(AvmExecutionTests, keccakf1600OpCode) std::string bytecode_preamble; // Set operations for keccak state - for (uint32_t i = 0; i < 25; i++) { - bytecode_preamble += to_hex(OpCode::SET) + // opcode SET + for (uint8_t i = 0; i < 25; i++) { + bytecode_preamble += to_hex(OpCode::SET_64) + // opcode SET "00" // Indirect flag "04" + // U64 to_hex(state[i]) + // val i - to_hex(i + 1); // dst offset + to_hex(i + 1); // dst offset } // We use calldatacopy twice because we need to set up 4 inputs std::string bytecode_hex = bytecode_preamble + // Initial SET operations to store state and input - to_hex(OpCode::SET) + // opcode SET for indirect src (input) + to_hex(OpCode::SET_8) + // opcode SET for indirect src (input) "00" // Indirect flag "03" // U32 - "00000001" // value 1 (i.e. where the src will be read from) - "00000024" // input_offset 36 - + to_hex(OpCode::SET) + // + "01" // value 1 (i.e. where the src will be read from) + "24" // input_offset 36 + + to_hex(OpCode::SET_8) + // "00" // Indirect flag "03" // U32 - "00000019" // value 25 (i.e. where the length parameter is stored) - "00000025" // input_offset 37 - + to_hex(OpCode::SET) + // opcode SET for indirect dst (output) + "19" // value 25 (i.e. where the length parameter is stored) + "25" // input_offset 37 + + to_hex(OpCode::SET_16) + // opcode SET for indirect dst (output) "00" // Indirect flag "03" // U32 - "00000100" // value 256 (i.e. where the ouput will be written to) - "00000023" // dst_offset 35 + "0100" // value 256 (i.e. where the ouput will be written to) + "0023" // dst_offset 35 + to_hex(OpCode::KECCAKF1600) + // opcode KECCAKF1600 "03" // Indirect flag (first 2 operands indirect) "00000023" // output offset (indirect 35) @@ -1117,26 +1115,26 @@ TEST_F(AvmExecutionTests, keccakOpCode) FF(0x33), FF(0x65), FF(0x19), FF(0x37), FF(0xe8), FF(0x05), FF(0x27), FF(0x0c), FF(0xa3), FF(0xf3), FF(0xaf), FF(0x1c), FF(0x0d), FF(0xd2), FF(0x46), FF(0x2d), FF(0xca), FF(0x4b), FF(0x3b), FF(0x1a), FF(0xbf) }; - std::string bytecode_hex = to_hex(OpCode::SET) + // Initial SET operations to store state and input + std::string bytecode_hex = to_hex(OpCode::SET_8) + // Initial SET operations to store state and input "00" // Indirect Flag "01" // U8 "BD" // val 189 - "00000001" // dst_offset 1 - + to_hex(OpCode::SET) + // opcode SET for indirect src (input) + "01" // dst_offset 1 + + to_hex(OpCode::SET_8) + // opcode SET for indirect src (input) "00" // Indirect flag "03" // U32 - "00000001" // value 1 (i.e. where the src will be read from) - "00000024" // input_offset 36 - + to_hex(OpCode::SET) + // + "01" // value 1 (i.e. where the src will be read from) + "24" // input_offset 36 + + to_hex(OpCode::SET_8) + // "00" // Indirect flag "03" // U8 - "00000001" // value 1 (i.e. where the length parameter is stored) - "00000025" // input_offset 37 - + to_hex(OpCode::SET) + // opcode SET for indirect dst (output) + "01" // value 1 (i.e. where the length parameter is stored) + "25" // input_offset 37 + + to_hex(OpCode::SET_16) + // opcode SET for indirect dst (output) "00" // Indirect flag "03" // U32 - "00000100" // value 256 (i.e. where the ouput will be written to) - "00000023" // dst_offset 35 + "0100" // value 256 (i.e. where the ouput will be written to) + "0023" // dst_offset 35 + to_hex(OpCode::KECCAK) + // opcode KECCAK "03" // Indirect flag (first 2 operands indirect) "00000023" // output offset (indirect 35) @@ -1168,36 +1166,36 @@ TEST_F(AvmExecutionTests, pedersenHashOpCode) // output = 0x1c446df60816b897cda124524e6b03f36df0cec333fad87617aab70d7861daa6 // hash_index = 5; FF expected_output = FF("0x1c446df60816b897cda124524e6b03f36df0cec333fad87617aab70d7861daa6"); - std::string bytecode_hex = to_hex(OpCode::SET) + // opcode SET + std::string bytecode_hex = to_hex(OpCode::SET_8) + // opcode SET "00" // Indirect flag "03" // U32 - "00000000" // val - "00000000" // dst_offset - + to_hex(OpCode::SET) + // opcode SET + "00" // val + "00" // dst_offset + + to_hex(OpCode::SET_8) + // opcode SET "00" // Indirect flag "03" // U32 - "00000002" // val - "00000001" // dst_offset + "02" // val + "01" // dst_offset + to_hex(OpCode::CALLDATACOPY) + // Calldatacopy "00" // Indirect flag "00000000" // cd_offset "00000001" // copy_size "00000000" // dst_offset - + to_hex(OpCode::SET) + // opcode SET for direct hash index offset + + to_hex(OpCode::SET_8) + // opcode SET for direct hash index offset "00" // Indirect flag "03" // U32 - "00000005" // value 5 - "00000002" // input_offset 2 - + to_hex(OpCode::SET) + // opcode SET for indirect src + "05" // value 5 + "02" // input_offset 2 + + to_hex(OpCode::SET_8) + // opcode SET for indirect src "00" // Indirect flag "03" // U32 - "00000000" // value 0 (i.e. where the src will be read from) - "00000004" // dst_offset 4 - + to_hex(OpCode::SET) + // opcode SET for direct src_length + "00" // value 0 (i.e. where the src will be read from) + "04" // dst_offset 4 + + to_hex(OpCode::SET_8) + // opcode SET for direct src_length "00" // Indirect flag "03" // U32 - "00000002" // value 2 - "00000005" // dst_offset + "02" // value 2 + "05" // dst_offset + to_hex(OpCode::PEDERSEN) + // opcode PEDERSEN "04" // Indirect flag (3rd operand indirect) "00000002" // hash_index offset (direct) @@ -1232,49 +1230,49 @@ TEST_F(AvmExecutionTests, embeddedCurveAddOpCode) auto b_is_inf = b.is_point_at_infinity(); grumpkin::g1::affine_element res = a + b; auto expected_output = std::vector{ res.x, res.y, res.is_point_at_infinity() }; - std::string bytecode_hex = to_hex(OpCode::SET) + // opcode SET - "00" // Indirect flag - "03" // U32 - "00000000" // val - "00000000" // dst_offset - + to_hex(OpCode::SET) + // opcode SET - "00" // Indirect flag - "03" // U32 - "00000006" // val - "00000001" + - to_hex(OpCode::CALLDATACOPY) + // Calldatacopy - "00" // Indirect flag - "00000000" // cd_offset - "00000001" // copy_size - "00000000" // dst_offset - + to_hex(OpCode::CAST) + // opcode CAST inf to U8 - "00" // Indirect flag - "01" // U8 tag field - "00000002" // a_is_inf - "00000002" // a_is_inf - + to_hex(OpCode::CAST) + // opcode CAST inf to U8 - "00" // Indirect flag - "01" // U8 tag field - "00000005" // b_is_inf - "00000005" // b_is_inf - + to_hex(OpCode::SET) + // opcode SET for direct src_length - "00" // Indirect flag - "03" // U32 - "00000007" // value - "00000006" // dst_offset - + to_hex(OpCode::ECADD) + // opcode ECADD - "40" // Indirect flag (sixth operand indirect) - "00000000" // hash_index offset (direct) - "00000001" // dest offset (direct) - "00000002" // input offset (indirect) - "00000003" // length offset (direct) - "00000004" // length offset (direct) - "00000005" // length offset (direct) - "00000006" // length offset (direct) - + to_hex(OpCode::RETURN) + // opcode RETURN - "00" // Indirect flag - "00000007" // ret offset 3 - "00000003"; // ret size 1 + std::string bytecode_hex = to_hex(OpCode::SET_8) + // opcode SET + "00" // Indirect flag + "03" // U32 + "00" // val + "00" // dst_offset + + to_hex(OpCode::SET_8) + // opcode SET + "00" // Indirect flag + "03" // U32 + "06" // val + "01" // dst_offset + + to_hex(OpCode::CALLDATACOPY) + // Calldatacopy + "00" // Indirect flag + "00000000" // cd_offset + "00000001" // copy_size + "00000000" // dst_offset + + to_hex(OpCode::CAST) + // opcode CAST inf to U8 + "00" // Indirect flag + "01" // U8 tag field + "00000002" // a_is_inf + "00000002" // a_is_inf + + to_hex(OpCode::CAST) + // opcode CAST inf to U8 + "00" // Indirect flag + "01" // U8 tag field + "00000005" // b_is_inf + "00000005" // b_is_inf + + to_hex(OpCode::SET_8) + // opcode SET for direct src_length + "00" // Indirect flag + "03" // U32 + "07" // value + "06" // dst_offset + + to_hex(OpCode::ECADD) + // opcode ECADD + "40" // Indirect flag (sixth operand indirect) + "00000000" // hash_index offset (direct) + "00000001" // dest offset (direct) + "00000002" // input offset (indirect) + "00000003" // length offset (direct) + "00000004" // length offset (direct) + "00000005" // length offset (direct) + "00000006" // length offset (direct) + + to_hex(OpCode::RETURN) + // opcode RETURN + "00" // Indirect flag + "00000007" // ret offset 3 + "00000003"; // ret size 1 auto bytecode = hex_to_bytes(bytecode_hex); auto instructions = Deserialization::parse(bytecode); @@ -1308,16 +1306,16 @@ TEST_F(AvmExecutionTests, msmOpCode) // Send all the input as Fields and cast them to U8 later std::vector calldata = { FF(a.x), FF(a.y), a_is_inf, FF(b.x), FF(b.y), b_is_inf, scalar_a_lo, scalar_a_hi, scalar_b_lo, scalar_b_hi }; - std::string bytecode_hex = to_hex(OpCode::SET) + // opcode SET - "00" // Indirect flag - "03" // U32 - "00000000" // val - "00000000" // dst_offset - + to_hex(OpCode::SET) + // opcode SET - "00" // Indirect flag - "03" // U32 - "0000000A" // val - "00000001" + + std::string bytecode_hex = to_hex(OpCode::SET_8) + // opcode SET + "00" // Indirect flag + "03" // U32 + "00" // val + "00" // dst_offset + + to_hex(OpCode::SET_8) + // opcode SET + "00" // Indirect flag + "03" // U32 + "0A" // val + "01" + to_hex(OpCode::CALLDATACOPY) + // Calldatacopy "00" // Indirect flag "00000000" // cd_offset 0 @@ -1333,26 +1331,26 @@ TEST_F(AvmExecutionTests, msmOpCode) "01" // U8 tag field "00000005" // b_is_inf "00000005" // - + to_hex(OpCode::SET) + // opcode SET for length + + to_hex(OpCode::SET_8) + // opcode SET for length "00" // Indirect flag "03" // U32 - "00000006" // Length of point elements (6) - "0000000b" // dst offset (11) - + to_hex(OpCode::SET) + // SET Indirects + "06" // Length of point elements (6) + "0b" // dst offset (11) + + to_hex(OpCode::SET_8) + // SET Indirects "00" // Indirect flag "03" // U32 - "00000000" // points offset - "0000000d" // dst offset + - + to_hex(OpCode::SET) + // SET Indirects + "00" // points offset + "0d" // dst offset + + + to_hex(OpCode::SET_8) + // SET Indirects "00" // Indirect flag "03" // U32 - "00000006" // scalars offset - "0000000e" + // dst offset - to_hex(OpCode::SET) + // SET Indirects + "06" // scalars offset + "0e" + // dst offset + to_hex(OpCode::SET_8) + // SET Indirects "00" // Indirect flag "03" // U32 - "0000000c" // output offset - "0000000f" + // dst offset + "0c" // output offset + "0f" + // dst offset to_hex(OpCode::MSM) + // opcode MSM "07" // Indirect flag (first 3 indirect) "0000000d" // points offset @@ -1391,41 +1389,41 @@ TEST_F(AvmExecutionTests, pedersenCommitmentOpcode) std::vector expected_output = { expected_result.x, expected_result.y, expected_result.is_point_at_infinity() }; // Send all the input as Fields and cast them to U8 later std::vector calldata = { scalar_a, scalar_b }; - std::string bytecode_hex = to_hex(OpCode::SET) + // opcode SET - "00" // Indirect flag - "03" // U32 - "00000000" // val - "00000000" // dst_offset - + to_hex(OpCode::SET) + // opcode SET - "00" // Indirect flag - "03" // U32 - "00000002" // val - "00000001" + + std::string bytecode_hex = to_hex(OpCode::SET_8) + // opcode SET + "00" // Indirect flag + "03" // U32 + "00" // val + "00" // dst_offset + + to_hex(OpCode::SET_8) + // opcode SET + "00" // Indirect flag + "03" // U32 + "02" // val + "01" + to_hex(OpCode::CALLDATACOPY) + // Calldatacopy "00" // Indirect flag "00000000" // cd_offset 0 "00000001" // copy_size (2 elements) "00000000" // dst_offset 0 - + to_hex(OpCode::SET) + // opcode SET for indirect input + + to_hex(OpCode::SET_8) + // opcode SET for indirect input "00" // Indirect flag "03" // U32 - "00000000" // Input stored at memory 0 - "0000000b" // dst offset (11) - + to_hex(OpCode::SET) + // opcode SET for indirect output + "00" // Input stored at memory 0 + "0b" // dst offset (11) + + to_hex(OpCode::SET_8) + // opcode SET for indirect output "00" // Indirect flag "03" // U32 - "00000020" // output offset - "0000000d" // dst offset - + to_hex(OpCode::SET) + // opcode SET for input length + "20" // output offset + "0d" // dst offset + + to_hex(OpCode::SET_8) + // opcode SET for input length "00" // Indirect flag "03" // U32 - "00000002" // scalars length (2) - "00000002" + // dst offset (2) - to_hex(OpCode::SET) + // opcode SET for ctx index + "02" // scalars length (2) + "02" + // dst offset (2) + to_hex(OpCode::SET_8) + // opcode SET for ctx index "00" // Indirect flag "03" // U32 - "00000000" // ctx index (0) - "0000000f" + // dst offset + "00" // ctx index (0) + "0f" + // dst offset to_hex(OpCode::PEDERSENCOMMITMENT) + // opcode MSM "03" // Indirect flag (first 2 indirect) "0000000b" // inputs offset @@ -1660,11 +1658,11 @@ TEST_F(AvmExecutionTests, kernelInputOpcodes) // Positive test for L2GASLEFT opcode TEST_F(AvmExecutionTests, l2GasLeft) { - std::string bytecode_hex = to_hex(OpCode::SET) + // opcode SET + std::string bytecode_hex = to_hex(OpCode::SET_16) + // opcode SET "00" // Indirect flag "03" // U32 - "00000101" // val 257 - "00000011" // dst_offset 17 + "0101" // val 257 + "0011" // dst_offset 17 + to_hex(OpCode::L2GASLEFT) + // opcode L2GASLEFT "01" // Indirect flag "00000011" // dst_offset (indirect addr: 17) @@ -1689,7 +1687,7 @@ TEST_F(AvmExecutionTests, l2GasLeft) auto row = std::ranges::find_if(trace.begin(), trace.end(), [](Row r) { return r.main_sel_op_l2gasleft == 1; }); uint32_t expected_rem_gas = DEFAULT_INITIAL_L2_GAS - - static_cast(GAS_COST_TABLE.at(OpCode::SET).base_l2_gas_fixed_table) - + static_cast(GAS_COST_TABLE.at(OpCode::SET_8).base_l2_gas_fixed_table) - static_cast(GAS_COST_TABLE.at(OpCode::L2GASLEFT).base_l2_gas_fixed_table); EXPECT_EQ(row->main_ia, expected_rem_gas); @@ -1761,11 +1759,11 @@ TEST_F(AvmExecutionTests, ExecutorThrowsWithIncorrectNumberOfPublicInputs) TEST_F(AvmExecutionTests, kernelOutputEmitOpcodes) { // Set values into the first register to emit - std::string bytecode_hex = to_hex(OpCode::SET) + // opcode Set - "00" // Indirect flag - "03" // U32 - "00000001" // value 1 - "00000001" // dst_offset 1 + std::string bytecode_hex = to_hex(OpCode::SET_8) + // opcode Set + "00" // Indirect flag + "03" // U32 + "01" // value 1 + "01" // dst_offset 1 // Cast set to field + to_hex(OpCode::CAST) + // opcode CAST "00" // Indirect flag @@ -1863,11 +1861,11 @@ TEST_F(AvmExecutionTests, kernelOutputEmitOpcodes) TEST_F(AvmExecutionTests, kernelOutputStorageLoadOpcodeSimple) { // Sload from a value that has not previously been written to will require a hint to process - std::string bytecode_hex = to_hex(OpCode::SET) + // opcode SET + std::string bytecode_hex = to_hex(OpCode::SET_8) + // opcode SET "00" // Indirect flag "03" // U32 - "00000009" // value 9 - "00000001" // dst_offset 1 + "09" // value 9 + "01" // dst_offset 1 + to_hex(OpCode::CAST) + // opcode CAST (Cast set to field) "00" // Indirect flag "06" // tag field @@ -1919,16 +1917,16 @@ TEST_F(AvmExecutionTests, kernelOutputStorageStoreOpcodeSimple) { // SSTORE, write 2 elements of calldata to dstOffset 1 and 2. std::vector calldata = { 42, 123, 9, 10 }; - std::string bytecode_hex = to_hex(OpCode::SET) + // opcode SET - "00" // Indirect flag - "03" // U32 - "00000000" // val - "00000000" // dst_offset - + to_hex(OpCode::SET) + // opcode SET - "00" // Indirect flag - "03" // U32 - "00000004" // val - "00000001" + + std::string bytecode_hex = to_hex(OpCode::SET_8) + // opcode SET + "00" // Indirect flag + "03" // U32 + "00" // val + "00" // dst_offset + + to_hex(OpCode::SET_8) + // opcode SET + "00" // Indirect flag + "03" // U32 + "04" // val + "01" + to_hex(OpCode::CALLDATACOPY) + // opcode CALLDATACOPY "00" // Indirect flag "00000000" // cd_offset @@ -1975,11 +1973,11 @@ TEST_F(AvmExecutionTests, kernelOutputStorageStoreOpcodeSimple) TEST_F(AvmExecutionTests, kernelOutputStorageOpcodes) { // Sload from a value that has not previously been written to will require a hint to process - std::string bytecode_hex = to_hex(OpCode::SET) + // opcode SET - "00" // Indirect flag - "03" // U32 - "00000009" // value 9 - "00000001" // dst_offset 1 + std::string bytecode_hex = to_hex(OpCode::SET_8) + // opcode SET + "00" // Indirect flag + "03" // U32 + "09" // value 9 + "01" // dst_offset 1 // Cast set to field + to_hex(OpCode::CAST) + // opcode CAST "00" // Indirect flag @@ -2050,11 +2048,11 @@ TEST_F(AvmExecutionTests, kernelOutputStorageOpcodes) TEST_F(AvmExecutionTests, kernelOutputHashExistsOpcodes) { // hash exists from a value that has not previously been written to will require a hint to process - std::string bytecode_hex = to_hex(OpCode::SET) + // opcode SET - "00" // Indirect flag - "03" // U32 - "00000001" // value 1 - "00000001" // dst_offset 1 + std::string bytecode_hex = to_hex(OpCode::SET_8) + // opcode SET + "00" // Indirect flag + "03" // U32 + "01" // value 1 + "01" // dst_offset 1 // Cast set to field + to_hex(OpCode::CAST) + // opcode CAST "00" // Indirect flag @@ -2149,52 +2147,52 @@ TEST_F(AvmExecutionTests, opCallOpcodes) std::vector calldata = { 17, 10, 34802342, 1, 2, 3, 4 }; std::string bytecode_preamble; // Set up Gas offsets - bytecode_preamble += to_hex(OpCode::SET) + // opcode SET for gas offset indirect - "00" // Indirect flag - "03" // U32 - "00000000" // val 0 (address where gas tuple is located) - "00000011"; // dst_offset 17 + bytecode_preamble += to_hex(OpCode::SET_8) + // opcode SET for gas offset indirect + "00" // Indirect flag + "03" // U32 + "00" // val 0 (address where gas tuple is located) + "11"; // dst_offset 17 // Set up contract address offset - bytecode_preamble += to_hex(OpCode::SET) + // opcode SET for args offset indirect - "00" // Indirect flag - "03" // U32 - "00000002" // val 2 (where contract address is located) - "00000012"; // dst_offset 18 + bytecode_preamble += to_hex(OpCode::SET_8) + // opcode SET for args offset indirect + "00" // Indirect flag + "03" // U32 + "02" // val 2 (where contract address is located) + "12"; // dst_offset 18 // Set up args offset - bytecode_preamble += to_hex(OpCode::SET) + // opcode SET for ret offset indirect - "00" // Indirect flag - "03" // U32 - "00000003" // val 3 (the start of the args array) - "00000013"; // dst_offset 19 + bytecode_preamble += to_hex(OpCode::SET_8) + // opcode SET for ret offset indirect + "00" // Indirect flag + "03" // U32 + "03" // val 3 (the start of the args array) + "13"; // dst_offset 19 // Set up args size offset - bytecode_preamble += to_hex(OpCode::SET) + // opcode SET for ret offset indirect - "00" // Indirect flag - "03" // U32 - "00000004" // val 4 (the length of the args array) - "00000014"; // dst_offset 20 + bytecode_preamble += to_hex(OpCode::SET_8) + // opcode SET for ret offset indirect + "00" // Indirect flag + "03" // U32 + "04" // val 4 (the length of the args array) + "14"; // dst_offset 20 // Set up the ret offset - bytecode_preamble += to_hex(OpCode::SET) + // opcode SET for ret offset indirect - "00" // Indirect flag - "03" // U32 - "00000100" // val 256 (the start of where to write the return data) - "00000015"; // dst_offset 21 + bytecode_preamble += to_hex(OpCode::SET_16) + // opcode SET for ret offset indirect + "00" // Indirect flag + "03" // U32 + "0100" // val 256 (the start of where to write the return data) + "0015"; // dst_offset 21 // Set up the success offset - bytecode_preamble += to_hex(OpCode::SET) + // opcode SET for ret offset indirect - "00" // Indirect flag - "03" // U32 - "00000102" // val 258 (write the success flag at ret_offset + ret_size) - "00000016"; // dst_offset 22 - - std::string bytecode_hex = to_hex(OpCode::SET) + // opcode SET - "00" // Indirect flag - "03" // U32 - "00000000" // val - "00000000" // dst_offset - + to_hex(OpCode::SET) + // opcode SET - "00" // Indirect flag - "03" // U32 - "00000007" // val - "00000001" + + bytecode_preamble += to_hex(OpCode::SET_16) + // opcode SET for ret offset indirect + "00" // Indirect flag + "03" // U32 + "0102" // val 258 (write the success flag at ret_offset + ret_size) + "0016"; // dst_offset 22 + + std::string bytecode_hex = to_hex(OpCode::SET_8) + // opcode SET + "00" // Indirect flag + "03" // U32 + "00" // val + "00" // dst_offset + + to_hex(OpCode::SET_8) + // opcode SET + "00" // Indirect flag + "03" // U32 + "07" // val + "01" + to_hex(OpCode::CALLDATACOPY) + // opcode CALLDATACOPY "00" // Indirect flag "00000000" // cd_offset @@ -2238,26 +2236,26 @@ TEST_F(AvmExecutionTests, opCallOpcodes) TEST_F(AvmExecutionTests, opGetContractInstanceOpcodes) { - std::string bytecode_hex = to_hex(OpCode::SET) + // opcode SET - "00" // Indirect flag - "03" // U32 - "00000000" // val - "00000000" // dst_offset - + to_hex(OpCode::SET) + // opcode SET - "00" // Indirect flag - "03" // U32 - "00000001" // val - "00000001" + + std::string bytecode_hex = to_hex(OpCode::SET_8) + // opcode SET + "00" // Indirect flag + "03" // U32 + "00" // val + "00" // dst_offset + + to_hex(OpCode::SET_8) + // opcode SET + "00" // Indirect flag + "03" // U32 + "01" // val + "01" + to_hex(OpCode::CALLDATACOPY) + // opcode CALLDATACOPY for addr "00" // Indirect flag "00000000" // cd_offset "00000001" // copy_size "00000001" // dst_offset, (i.e. where we store the addr) - + to_hex(OpCode::SET) + // opcode SET for the indirect dst offset + + to_hex(OpCode::SET_8) + // opcode SET for the indirect dst offset "00" // Indirect flag "03" // U32 - "00000003" // val i - "00000002" + // dst_offset 2 + "03" // val i + "02" + // dst_offset 2 to_hex(OpCode::GETCONTRACTINSTANCE) + // opcode CALL "02" // Indirect flag "00000001" // address offset @@ -2319,40 +2317,6 @@ TEST_F(AvmExecutionTests, invalidInstructionTag) EXPECT_THROW_WITH_MESSAGE(Deserialization::parse(bytecode), "Instruction tag is invalid"); } -// Negative test detecting SET opcode with instruction memory tag set to FF. -TEST_F(AvmExecutionTests, ffInstructionTagSetOpcode) -{ - std::string bytecode_hex = "00" // ADD - "00" // Indirect flag - "05" // U128 - "00000007" // addr a 7 - "00000009" // addr b 9 - "00000001" // addr c 1 - + to_hex(OpCode::SET) + // opcode SET - "00" // Indirect flag - "06" // tag FF - "00002344"; // - - auto bytecode = hex_to_bytes(bytecode_hex); - EXPECT_THROW_WITH_MESSAGE(Deserialization::parse(bytecode), "Instruction tag for SET opcode is invalid"); -} - -// Negative test detecting SET opcode without any operand. -TEST_F(AvmExecutionTests, SetOpcodeNoOperand) -{ - std::string bytecode_hex = "00" // ADD - "00" // Indirect flag - "05" // U128 - "00000007" // addr a 7 - "00000009" // addr b 9 - "00000001" // addr c 1 - + to_hex(OpCode::SET) + // opcode SET - "00"; // Indirect flag - - auto bytecode = hex_to_bytes(bytecode_hex); - EXPECT_THROW_WITH_MESSAGE(Deserialization::parse(bytecode), "Operand for SET opcode is missing"); -} - // Negative test detecting an incomplete instruction: missing instruction tag TEST_F(AvmExecutionTests, truncatedInstructionNoTag) { diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/tests/inter_table.test.cpp b/barretenberg/cpp/src/barretenberg/vm/avm/tests/inter_table.test.cpp index d20103006f2..98aa04b7e66 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/tests/inter_table.test.cpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/tests/inter_table.test.cpp @@ -148,8 +148,7 @@ class AvmRangeCheckNegativeTests : public AvmInterTableTests { void SetUp() override { GTEST_SKIP(); } - void genTraceAdd( - uint128_t const& a, uint128_t const& b, uint128_t const& c, AvmMemoryTag tag, uint32_t min_trace_size = 0) + void genTraceAdd(FF const& a, FF const& b, FF const& c, AvmMemoryTag tag, uint32_t min_trace_size = 0) { trace_builder.op_set(0, a, 0, tag); trace_builder.op_set(0, b, 1, tag); @@ -161,9 +160,9 @@ class AvmRangeCheckNegativeTests : public AvmInterTableTests { auto row = std::ranges::find_if(trace.begin(), trace.end(), [](Row r) { return r.main_sel_op_add == FF(1); }); ASSERT_TRUE(row != trace.end()); - ASSERT_EQ(row->main_ia, FF(uint256_t::from_uint128(a))); - ASSERT_EQ(row->main_ib, FF(uint256_t::from_uint128(b))); - ASSERT_EQ(row->main_ic, FF(uint256_t::from_uint128(c))); + ASSERT_EQ(row->main_ia, a); + ASSERT_EQ(row->main_ib, b); + ASSERT_EQ(row->main_ic, c); auto clk = row->main_clk; // Find the corresponding Alu trace row @@ -400,7 +399,7 @@ class AvmPermMainMemNegativeTests : public AvmInterTableTests { // Helper function to generate a trace with a subtraction // for c = a - b at arbitray chosen addresses 52 (a), 11 (b), 55 (c). - void executeSub(uint128_t const a, uint128_t const b) + void executeSub(FF const a, FF const b) { trace_builder.op_set(0, a, 52, AvmMemoryTag::U8); trace_builder.op_set(0, b, 11, AvmMemoryTag::U8); diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/tests/kernel.test.cpp b/barretenberg/cpp/src/barretenberg/vm/avm/tests/kernel.test.cpp index e0b277b344d..b18553f1f2c 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/tests/kernel.test.cpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/tests/kernel.test.cpp @@ -1081,7 +1081,7 @@ TEST_F(AvmKernelOutputPositiveTests, kernelSload) auto execution_hints = ExecutionHints().with_storage_value_hints({ { 0, value } }); auto apply_opcodes = [=](AvmTraceBuilder& trace_builder) { - trace_builder.op_set(0, static_cast(slot), slot_offset, AvmMemoryTag::FF); + trace_builder.op_set(0, slot, slot_offset, AvmMemoryTag::FF); trace_builder.op_sload(indirect, slot_offset, size, dest_offset); }; auto checks = [=]([[maybe_unused]] bool indirect, const std::vector& trace) { @@ -1121,8 +1121,8 @@ TEST_F(AvmKernelOutputPositiveTests, kernelSstore) uint32_t output_offset = START_SSTORE_WRITE_OFFSET; auto apply_opcodes = [=](AvmTraceBuilder& trace_builder) { - trace_builder.op_set(0, static_cast(value), value_offset, AvmMemoryTag::FF); - trace_builder.op_set(0, static_cast(slot), metadata_offset, AvmMemoryTag::FF); + trace_builder.op_set(0, value, value_offset, AvmMemoryTag::FF); + trace_builder.op_set(0, slot, metadata_offset, AvmMemoryTag::FF); trace_builder.op_sstore(indirect, value_offset, size, metadata_offset); }; auto checks = [=]([[maybe_unused]] bool indirect, const std::vector& trace) { @@ -1165,13 +1165,13 @@ TEST_F(AvmKernelOutputPositiveTests, kernelNoteHashExists) auto execution_hints = ExecutionHints().with_note_hash_exists_hints({ { 0, exists } }); auto direct_apply_opcodes = [=](AvmTraceBuilder& trace_builder) { - trace_builder.op_set(0, static_cast(value), value_offset, AvmMemoryTag::FF); + trace_builder.op_set(0, value, value_offset, AvmMemoryTag::FF); // TODO(#8287): Leaf index isnt constrained properly so we just set it to 0 trace_builder.op_note_hash_exists(/*indirect*/ false, value_offset, 0, metadata_offset); }; // TODO: fix auto indirect_apply_opcodes = [=](AvmTraceBuilder& trace_builder) { - trace_builder.op_set(0, static_cast(value), value_offset, AvmMemoryTag::FF); + trace_builder.op_set(0, value, value_offset, AvmMemoryTag::FF); trace_builder.op_set(0, value_offset, indirect_value_offset, AvmMemoryTag::U32); trace_builder.op_set(0, metadata_offset, indirect_metadata_offset, AvmMemoryTag::U32); // TODO(#8287): Leaf index isnt constrained properly so we just set it to 0 @@ -1214,7 +1214,7 @@ TEST_F(AvmKernelOutputPositiveTests, kernelNullifierExists) auto execution_hints = ExecutionHints().with_nullifier_exists_hints({ { 0, exists } }); auto apply_opcodes = [=](AvmTraceBuilder& trace_builder) { - trace_builder.op_set(0, static_cast(value), value_offset, AvmMemoryTag::FF); + trace_builder.op_set(0, value, value_offset, AvmMemoryTag::FF); trace_builder.op_nullifier_exists(/*indirect=*/0, value_offset, metadata_offset); }; auto checks = [=](bool indirect, const std::vector& trace) { @@ -1253,7 +1253,7 @@ TEST_F(AvmKernelOutputPositiveTests, kernelNullifierNonExists) auto execution_hints = ExecutionHints().with_nullifier_exists_hints({ { 0, exists } }); auto apply_opcodes = [=](AvmTraceBuilder& trace_builder) { - trace_builder.op_set(0, static_cast(value), value_offset, AvmMemoryTag::FF); + trace_builder.op_set(0, value, value_offset, AvmMemoryTag::FF); trace_builder.op_nullifier_exists(/*indirect=*/0, value_offset, metadata_offset); }; auto checks = [=](bool indirect, const std::vector& trace) { @@ -1293,7 +1293,7 @@ TEST_F(AvmKernelOutputPositiveTests, kernelL1ToL2MsgExists) auto execution_hints = ExecutionHints().with_l1_to_l2_message_exists_hints({ { 0, exists } }); auto apply_opcodes = [=](AvmTraceBuilder& trace_builder) { - trace_builder.op_set(0, static_cast(value), value_offset, AvmMemoryTag::FF); + trace_builder.op_set(0, value, value_offset, AvmMemoryTag::FF); // TODO(#8287): Leaf index isnt constrained properly so we just set it to 0 trace_builder.op_l1_to_l2_msg_exists(/*indirect*/ false, value_offset, 0, metadata_offset); }; diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/tests/mem_opcodes.test.cpp b/barretenberg/cpp/src/barretenberg/vm/avm/tests/mem_opcodes.test.cpp index cfd90a2db00..84eed13b773 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/tests/mem_opcodes.test.cpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/tests/mem_opcodes.test.cpp @@ -48,9 +48,9 @@ class AvmMemOpcodeTests : public ::testing::Test { if (indirect) { trace_builder.op_set(0, dir_src_offset, src_offset, AvmMemoryTag::U32); trace_builder.op_set(0, dir_dst_offset, dst_offset, AvmMemoryTag::U32); - trace_builder.op_set(0, val, dir_src_offset, tag); + trace_builder.op_set(0, uint256_t::from_uint128(val), dir_src_offset, tag); } else { - trace_builder.op_set(0, val, src_offset, tag); + trace_builder.op_set(0, uint256_t::from_uint128(val), src_offset, tag); } trace_builder.op_mov(indirect ? 3 : 0, src_offset, dst_offset); diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/trace/deserialization.cpp b/barretenberg/cpp/src/barretenberg/vm/avm/trace/deserialization.cpp index 25c92733338..799ce6219ae 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/trace/deserialization.cpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/trace/deserialization.cpp @@ -87,7 +87,12 @@ const std::unordered_map> OPCODE_WIRE_FORMAT = { OpCode::INTERNALRETURN, {} }, // Machine State - Memory - // OpCode::SET is handled differently + { OpCode::SET_8, { OperandType::INDIRECT, OperandType::TAG, OperandType::UINT8, OperandType::UINT8 } }, + { OpCode::SET_16, { OperandType::INDIRECT, OperandType::TAG, OperandType::UINT16, OperandType::UINT16 } }, + { OpCode::SET_32, { OperandType::INDIRECT, OperandType::TAG, OperandType::UINT32, OperandType::UINT16 } }, + { OpCode::SET_64, { OperandType::INDIRECT, OperandType::TAG, OperandType::UINT64, OperandType::UINT16 } }, + { OpCode::SET_128, { OperandType::INDIRECT, OperandType::TAG, OperandType::UINT128, OperandType::UINT16 } }, + { OpCode::SET_FF, { OperandType::INDIRECT, OperandType::TAG, OperandType::FF, OperandType::UINT16 } }, { OpCode::MOV_8, { OperandType::INDIRECT, OperandType::UINT8, OperandType::UINT8 } }, { OpCode::MOV_16, { OperandType::INDIRECT, OperandType::UINT16, OperandType::UINT16 } }, { OpCode::CMOV, @@ -177,7 +182,7 @@ const std::unordered_map> OPCODE_WIRE_FORMAT = const std::unordered_map OPERAND_TYPE_SIZE = { { OperandType::INDIRECT, 1 }, { OperandType::TAG, 1 }, { OperandType::UINT8, 1 }, { OperandType::UINT16, 2 }, - { OperandType::UINT32, 4 }, { OperandType::UINT64, 8 }, { OperandType::UINT128, 16 }, + { OperandType::UINT32, 4 }, { OperandType::UINT64, 8 }, { OperandType::UINT128, 16 }, { OperandType::FF, 32 } }; } // Anonymous namespace @@ -208,58 +213,11 @@ std::vector Deserialization::parse(std::vector const& byte pos++; auto const opcode = static_cast(opcode_byte); - std::vector inst_format; - - if (opcode == OpCode::SET) { - // Small hack here because of the structure of SET (where Indirect is the first flag). - // Right now pos is pointing to the indirect flag, but we want it to point to the memory tag. - // We cannot increment pos again because we need to read from pos later when parsing the SET opcode - // So we effectively peek at the next pos - if (pos + 1 == length) { - throw_or_abort("Operand for SET opcode is missing at position " + std::to_string(pos)); - } - - std::set const valid_tags = { static_cast(AvmMemoryTag::U8), - static_cast(AvmMemoryTag::U16), - static_cast(AvmMemoryTag::U32), - static_cast(AvmMemoryTag::U64), - static_cast(AvmMemoryTag::U128) }; - // Peek again here for the mem tag - uint8_t set_tag_u8 = bytecode.at(pos + 1); - - if (!valid_tags.contains(set_tag_u8)) { - throw_or_abort("Instruction tag for SET opcode is invalid at position " + std::to_string(pos + 1) + - " value: " + std::to_string(set_tag_u8)); - } - - auto in_tag = static_cast(set_tag_u8); - switch (in_tag) { - case AvmMemoryTag::U8: - inst_format = { OperandType::INDIRECT, OperandType::TAG, OperandType::UINT8, OperandType::UINT32 }; - break; - case AvmMemoryTag::U16: - inst_format = { OperandType::INDIRECT, OperandType::TAG, OperandType::UINT16, OperandType::UINT32 }; - break; - case AvmMemoryTag::U32: - inst_format = { OperandType::INDIRECT, OperandType::TAG, OperandType::UINT32, OperandType::UINT32 }; - break; - case AvmMemoryTag::U64: - inst_format = { OperandType::INDIRECT, OperandType::TAG, OperandType::UINT64, OperandType::UINT32 }; - break; - case AvmMemoryTag::U128: - inst_format = { OperandType::INDIRECT, OperandType::TAG, OperandType::UINT128, OperandType::UINT32 }; - break; - default: // This branch is guarded above. - throw_or_abort("Error processing wire format of SET opcode."); - } - } else { - auto const iter = OPCODE_WIRE_FORMAT.find(opcode); - if (iter == OPCODE_WIRE_FORMAT.end()) { - throw_or_abort("Opcode not found in OPCODE_WIRE_FORMAT: " + to_hex(opcode) + " name " + - to_string(opcode)); - } - inst_format = iter->second; + auto const iter = OPCODE_WIRE_FORMAT.find(opcode); + if (iter == OPCODE_WIRE_FORMAT.end()) { + throw_or_abort("Opcode not found in OPCODE_WIRE_FORMAT: " + to_hex(opcode) + " name " + to_string(opcode)); } + std::vector inst_format = iter->second; std::vector operands; for (OperandType const& opType : inst_format) { @@ -315,6 +273,12 @@ std::vector Deserialization::parse(std::vector const& byte operands.emplace_back(operand_u128); break; } + case OperandType::FF: { + FF operand_ff; + uint8_t const* pos_ptr = &bytecode.at(pos); + read(pos_ptr, operand_ff); + operands.emplace_back(operand_ff); + } } pos += OPERAND_TYPE_SIZE.at(opType); } diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/trace/deserialization.hpp b/barretenberg/cpp/src/barretenberg/vm/avm/trace/deserialization.hpp index 42238d7c7b1..2a38e836f03 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/trace/deserialization.hpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/trace/deserialization.hpp @@ -11,7 +11,7 @@ namespace bb::avm_trace { // See avm/serialization/instruction_serialization.ts). // Note that the TAG enum value is not supported in TS and is parsed as UINT8. // INDIRECT is parsed as UINT8 where the bits represent the operands that have indirect mem access. -enum class OperandType : uint8_t { INDIRECT, TAG, UINT8, UINT16, UINT32, UINT64, UINT128 }; +enum class OperandType : uint8_t { INDIRECT, TAG, UINT8, UINT16, UINT32, UINT64, UINT128, FF }; class Deserialization { public: diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/trace/execution.cpp b/barretenberg/cpp/src/barretenberg/vm/avm/trace/execution.cpp index 4cb862e4484..133e8484d08 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/trace/execution.cpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/trace/execution.cpp @@ -589,32 +589,46 @@ std::vector Execution::gen_trace(std::vector const& instructio break; // Machine State - Memory - case OpCode::SET: { - uint128_t val = 0; - AvmMemoryTag in_tag = std::get(inst.operands.at(1)); - - switch (in_tag) { - case AvmMemoryTag::U8: - val = std::get(inst.operands.at(2)); - break; - case AvmMemoryTag::U16: - val = std::get(inst.operands.at(2)); - break; - case AvmMemoryTag::U32: - val = std::get(inst.operands.at(2)); - break; - case AvmMemoryTag::U64: - val = std::get(inst.operands.at(2)); - break; - case AvmMemoryTag::U128: - val = std::get(inst.operands.at(2)); - break; - default: - break; - } - - trace_builder.op_set( - std::get(inst.operands.at(0)), val, std::get(inst.operands.at(3)), in_tag); + case OpCode::SET_8: { + trace_builder.op_set(std::get(inst.operands.at(0)), + std::get(inst.operands.at(2)), + std::get(inst.operands.at(3)), + std::get(inst.operands.at(1))); + break; + } + case OpCode::SET_16: { + trace_builder.op_set(std::get(inst.operands.at(0)), + std::get(inst.operands.at(2)), + std::get(inst.operands.at(3)), + std::get(inst.operands.at(1))); + break; + } + case OpCode::SET_32: { + trace_builder.op_set(std::get(inst.operands.at(0)), + std::get(inst.operands.at(2)), + std::get(inst.operands.at(3)), + std::get(inst.operands.at(1))); + break; + } + case OpCode::SET_64: { + trace_builder.op_set(std::get(inst.operands.at(0)), + std::get(inst.operands.at(2)), + std::get(inst.operands.at(3)), + std::get(inst.operands.at(1))); + break; + } + case OpCode::SET_128: { + trace_builder.op_set(std::get(inst.operands.at(0)), + uint256_t::from_uint128(std::get(inst.operands.at(2))), + std::get(inst.operands.at(3)), + std::get(inst.operands.at(1))); + break; + } + case OpCode::SET_FF: { + trace_builder.op_set(std::get(inst.operands.at(0)), + std::get(inst.operands.at(2)), + std::get(inst.operands.at(3)), + std::get(inst.operands.at(1))); break; } case OpCode::MOV_8: diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/trace/fixed_gas.cpp b/barretenberg/cpp/src/barretenberg/vm/avm/trace/fixed_gas.cpp index fa4dd2f515e..76f472d6400 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/trace/fixed_gas.cpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/trace/fixed_gas.cpp @@ -51,7 +51,12 @@ const std::unordered_map GAS_COST_TABLE = { { OpCode::JUMPI, make_cost(AVM_JUMPI_BASE_L2_GAS, 0, AVM_JUMPI_DYN_L2_GAS, 0) }, { OpCode::INTERNALCALL, make_cost(AVM_INTERNALCALL_BASE_L2_GAS, 0, AVM_INTERNALCALL_DYN_L2_GAS, 0) }, { OpCode::INTERNALRETURN, make_cost(AVM_INTERNALRETURN_BASE_L2_GAS, 0, AVM_INTERNALRETURN_DYN_L2_GAS, 0) }, - { OpCode::SET, make_cost(AVM_SET_BASE_L2_GAS, 0, AVM_SET_DYN_L2_GAS, 0) }, + { OpCode::SET_8, make_cost(AVM_SET_BASE_L2_GAS, 0, AVM_SET_DYN_L2_GAS, 0) }, + { OpCode::SET_16, make_cost(AVM_SET_BASE_L2_GAS, 0, AVM_SET_DYN_L2_GAS, 0) }, + { OpCode::SET_32, make_cost(AVM_SET_BASE_L2_GAS, 0, AVM_SET_DYN_L2_GAS, 0) }, + { OpCode::SET_64, make_cost(AVM_SET_BASE_L2_GAS, 0, AVM_SET_DYN_L2_GAS, 0) }, + { OpCode::SET_128, make_cost(AVM_SET_BASE_L2_GAS, 0, AVM_SET_DYN_L2_GAS, 0) }, + { OpCode::SET_FF, make_cost(AVM_SET_BASE_L2_GAS, 0, AVM_SET_DYN_L2_GAS, 0) }, { OpCode::MOV_8, make_cost(AVM_MOV_BASE_L2_GAS, 0, AVM_MOV_DYN_L2_GAS, 0) }, { OpCode::MOV_16, make_cost(AVM_MOV_BASE_L2_GAS, 0, AVM_MOV_DYN_L2_GAS, 0) }, { OpCode::CMOV, make_cost(AVM_CMOV_BASE_L2_GAS, 0, AVM_CMOV_DYN_L2_GAS, 0) }, diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/trace/instructions.hpp b/barretenberg/cpp/src/barretenberg/vm/avm/trace/instructions.hpp index 78679099bb0..5c003ece969 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/trace/instructions.hpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/trace/instructions.hpp @@ -11,7 +11,7 @@ namespace bb::avm_trace { -using Operand = std::variant; +using Operand = std::variant; class Instruction { public: @@ -40,6 +40,8 @@ class Instruction { str += std::to_string(std::get(operand)); } else if (std::holds_alternative(operand)) { str += "someu128"; + } else if (std::holds_alternative(operand)) { + str += "someff"; } else { str += "unknown operand type"; } diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/trace/opcode.cpp b/barretenberg/cpp/src/barretenberg/vm/avm/trace/opcode.cpp index f359fdc1e05..5c9721a25eb 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/trace/opcode.cpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/trace/opcode.cpp @@ -102,8 +102,18 @@ std::string to_string(OpCode opcode) case OpCode::INTERNALRETURN: return "INTERNALRETURN"; // Machine State - Memory - case OpCode::SET: - return "SET"; + case OpCode::SET_8: + return "SET_8"; + case OpCode::SET_16: + return "SET_16"; + case OpCode::SET_32: + return "SET_32"; + case OpCode::SET_64: + return "SET_64"; + case OpCode::SET_128: + return "SET_128"; + case OpCode::SET_FF: + return "SET_FF"; case OpCode::MOV_8: return "MOV_8"; case OpCode::MOV_16: diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/trace/opcode.hpp b/barretenberg/cpp/src/barretenberg/vm/avm/trace/opcode.hpp index 963fd23831b..711376e6e09 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/trace/opcode.hpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/trace/opcode.hpp @@ -67,7 +67,12 @@ enum class OpCode : uint8_t { INTERNALCALL, INTERNALRETURN, // Machine State - Memory - SET, + SET_8, + SET_16, + SET_32, + SET_64, + SET_128, + SET_FF, MOV_8, MOV_16, CMOV, diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/trace/trace.cpp b/barretenberg/cpp/src/barretenberg/vm/avm/trace/trace.cpp index b08a1bec6d4..cc3a48260d9 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/trace/trace.cpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/trace/trace.cpp @@ -217,10 +217,10 @@ FF AvmTraceBuilder::unconstrained_read_from_memory(AddressWithMode addr) void AvmTraceBuilder::write_to_memory(AddressWithMode addr, FF val, AvmMemoryTag w_tag) { - // op_set_internal increments the pc, so we need to store the current pc and then jump back to it + // op_set increments the pc, so we need to store the current pc and then jump back to it // to legaly reset the pc. auto current_pc = pc; - op_set_internal(static_cast(addr.mode), val, addr.offset, w_tag); + op_set(static_cast(addr.mode), val, addr.offset, w_tag); op_jump(current_pc); } @@ -1744,13 +1744,7 @@ void AvmTraceBuilder::op_internal_return() * @param dst_offset Memory destination offset where val is written to * @param in_tag The instruction memory tag */ -void AvmTraceBuilder::op_set(uint8_t indirect, uint128_t val, uint32_t dst_offset, AvmMemoryTag in_tag) -{ - auto const val_ff = FF{ uint256_t::from_uint128(val) }; - op_set_internal(indirect, val_ff, dst_offset, in_tag); -} - -void AvmTraceBuilder::op_set_internal(uint8_t indirect, FF val_ff, uint32_t dst_offset, AvmMemoryTag in_tag) +void AvmTraceBuilder::op_set(uint8_t indirect, FF val_ff, uint32_t dst_offset, AvmMemoryTag in_tag) { auto const clk = static_cast(main_trace.size()) + 1; auto [resolved_c] = unpack_indirects<1>(indirect, { dst_offset }); @@ -1759,7 +1753,8 @@ void AvmTraceBuilder::op_set_internal(uint8_t indirect, FF val_ff, uint32_t dst_ constrained_write_to_memory(call_ptr, clk, resolved_c, val_ff, AvmMemoryTag::U0, in_tag, IntermRegister::IC); // Constrain gas cost - gas_trace_builder.constrain_gas(clk, OpCode::SET); + // FIXME: not great that we are having to choose one specific opcode here! + gas_trace_builder.constrain_gas(clk, OpCode::SET_8); main_trace.push_back(Row{ .main_clk = clk, diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/trace/trace.hpp b/barretenberg/cpp/src/barretenberg/vm/avm/trace/trace.hpp index e97d8b8662b..2267006c7fe 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/trace/trace.hpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/trace/trace.hpp @@ -112,9 +112,7 @@ class AvmTraceBuilder { void op_internal_return(); // Machine State - Memory - void op_set(uint8_t indirect, uint128_t val, uint32_t dst_offset, AvmMemoryTag in_tag); - // TODO: only used for write_slice_to_memory. Remove. - void op_set_internal(uint8_t indirect, FF val_ff, uint32_t dst_offset, AvmMemoryTag in_tag); + void op_set(uint8_t indirect, FF val, uint32_t dst_offset, AvmMemoryTag in_tag); void op_mov(uint8_t indirect, uint32_t src_offset, uint32_t dst_offset); void op_cmov(uint8_t indirect, uint32_t a_offset, uint32_t b_offset, uint32_t cond_offset, uint32_t dst_offset); diff --git a/noir-projects/noir-contracts/contracts/avm_test_contract/src/main.nr b/noir-projects/noir-contracts/contracts/avm_test_contract/src/main.nr index 81ef861d364..f621ba153ae 100644 --- a/noir-projects/noir-contracts/contracts/avm_test_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/avm_test_contract/src/main.nr @@ -22,6 +22,7 @@ contract AvmTest { global big_field_128_bits: Field = 0x001234567890abcdef1234567890abcdef; global big_field_136_bits: Field = 0x991234567890abcdef1234567890abcdef; + global big_field_254_bits: Field = 0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef; // Libs use std::embedded_curve_ops::{multi_scalar_mul, EmbeddedCurvePoint}; @@ -125,6 +126,11 @@ contract AvmTest { big_field_136_bits } + #[aztec(public)] + fn set_opcode_really_big_field() -> Field { + big_field_254_bits + } + #[aztec(public)] fn add_u128(a: U128, b: U128) -> U128 { a + b diff --git a/noir/noir-repo/compiler/noirc_evaluator/src/brillig/brillig_ir/instructions.rs b/noir/noir-repo/compiler/noirc_evaluator/src/brillig/brillig_ir/instructions.rs index c728b36c193..fab43041e65 100644 --- a/noir/noir-repo/compiler/noirc_evaluator/src/brillig/brillig_ir/instructions.rs +++ b/noir/noir-repo/compiler/noirc_evaluator/src/brillig/brillig_ir/instructions.rs @@ -394,43 +394,7 @@ impl BrilligContext< constant, bit_size ); - if bit_size > 128 && constant.num_bits() > 128 { - let high = F::from_be_bytes_reduce( - constant.to_be_bytes().get(0..16).expect("FieldElement::to_be_bytes() too short!"), - ); - let low = F::from(constant.to_u128()); - let high_register = SingleAddrVariable::new(self.allocate_register(), 254); - let low_register = SingleAddrVariable::new(self.allocate_register(), 254); - let intermediate_register = SingleAddrVariable::new(self.allocate_register(), 254); - - self.constant(high_register.address, high_register.bit_size, high, false); - self.constant(low_register.address, low_register.bit_size, low, false); - // I want to multiply high by 2^128, but I can't get that big constant in. - // So I'll multiply by 2^64 twice. - self.constant( - intermediate_register.address, - intermediate_register.bit_size, - F::from(1_u128 << 64), - false, - ); - self.binary(high_register, intermediate_register, high_register, BrilligBinaryOp::Mul); - self.binary(high_register, intermediate_register, high_register, BrilligBinaryOp::Mul); - // Now we can add. - self.binary(high_register, low_register, intermediate_register, BrilligBinaryOp::Add); - if indirect { - self.cast( - SingleAddrVariable::new(intermediate_register.address, bit_size), - intermediate_register, - ); - self.store_instruction(result, intermediate_register.address); - } else { - self.cast(SingleAddrVariable::new(result, bit_size), intermediate_register); - } - - self.deallocate_single_addr(high_register); - self.deallocate_single_addr(low_register); - self.deallocate_single_addr(intermediate_register); - } else if indirect { + if indirect { self.push_opcode(BrilligOpcode::IndirectConst { destination_pointer: result, value: constant, diff --git a/yarn-project/simulator/src/avm/avm_gas.ts b/yarn-project/simulator/src/avm/avm_gas.ts index ef854cd1f53..598c5d58e65 100644 --- a/yarn-project/simulator/src/avm/avm_gas.ts +++ b/yarn-project/simulator/src/avm/avm_gas.ts @@ -90,7 +90,12 @@ const BaseGasCosts: Record = { [Opcode.JUMPI]: makeCost(c.AVM_JUMPI_BASE_L2_GAS, 0), [Opcode.INTERNALCALL]: makeCost(c.AVM_INTERNALCALL_BASE_L2_GAS, 0), [Opcode.INTERNALRETURN]: makeCost(c.AVM_INTERNALRETURN_BASE_L2_GAS, 0), - [Opcode.SET]: makeCost(c.AVM_SET_BASE_L2_GAS, 0), + [Opcode.SET_8]: makeCost(c.AVM_SET_BASE_L2_GAS, 0), + [Opcode.SET_16]: makeCost(c.AVM_SET_BASE_L2_GAS, 0), + [Opcode.SET_32]: makeCost(c.AVM_SET_BASE_L2_GAS, 0), + [Opcode.SET_64]: makeCost(c.AVM_SET_BASE_L2_GAS, 0), + [Opcode.SET_128]: makeCost(c.AVM_SET_BASE_L2_GAS, 0), + [Opcode.SET_FF]: makeCost(c.AVM_SET_BASE_L2_GAS, 0), [Opcode.MOV_8]: makeCost(c.AVM_MOV_BASE_L2_GAS, 0), [Opcode.MOV_16]: makeCost(c.AVM_MOV_BASE_L2_GAS, 0), [Opcode.CMOV]: makeCost(c.AVM_CMOV_BASE_L2_GAS, 0), @@ -156,7 +161,12 @@ const DynamicGasCosts: Record = { [Opcode.JUMPI]: makeCost(c.AVM_JUMPI_DYN_L2_GAS, 0), [Opcode.INTERNALCALL]: makeCost(c.AVM_INTERNALCALL_DYN_L2_GAS, 0), [Opcode.INTERNALRETURN]: makeCost(c.AVM_INTERNALRETURN_DYN_L2_GAS, 0), - [Opcode.SET]: makeCost(c.AVM_SET_DYN_L2_GAS, 0), + [Opcode.SET_8]: makeCost(c.AVM_SET_DYN_L2_GAS, 0), + [Opcode.SET_16]: makeCost(c.AVM_SET_DYN_L2_GAS, 0), + [Opcode.SET_32]: makeCost(c.AVM_SET_DYN_L2_GAS, 0), + [Opcode.SET_64]: makeCost(c.AVM_SET_DYN_L2_GAS, 0), + [Opcode.SET_128]: makeCost(c.AVM_SET_DYN_L2_GAS, 0), + [Opcode.SET_FF]: makeCost(c.AVM_SET_DYN_L2_GAS, 0), [Opcode.MOV_8]: makeCost(c.AVM_MOV_DYN_L2_GAS, 0), [Opcode.MOV_16]: makeCost(c.AVM_MOV_DYN_L2_GAS, 0), [Opcode.CMOV]: makeCost(c.AVM_CMOV_DYN_L2_GAS, 0), diff --git a/yarn-project/simulator/src/avm/avm_memory_types.ts b/yarn-project/simulator/src/avm/avm_memory_types.ts index 59eb9a98553..c85f920b7be 100644 --- a/yarn-project/simulator/src/avm/avm_memory_types.ts +++ b/yarn-project/simulator/src/avm/avm_memory_types.ts @@ -350,7 +350,7 @@ export class TaggedMemory implements TaggedMemoryInterface { } // Truncates the value to fit the type. - public static integralFromTag(v: bigint | number, tag: TypeTag): IntegralValue { + public static buildFromTagTruncating(v: bigint | number, tag: TypeTag): MemoryValue { v = BigInt(v); switch (tag) { case TypeTag.UINT8: @@ -363,8 +363,10 @@ export class TaggedMemory implements TaggedMemoryInterface { return new Uint64(v & ((1n << 64n) - 1n)); case TypeTag.UINT128: return new Uint128(v & ((1n << 128n) - 1n)); + case TypeTag.FIELD: + return new Field(v); default: - throw new Error(`${TypeTag[tag]} is not a valid integral type.`); + throw new Error(`${TypeTag[tag]} is not a valid tag.`); } } diff --git a/yarn-project/simulator/src/avm/avm_simulator.test.ts b/yarn-project/simulator/src/avm/avm_simulator.test.ts index ad2b51b22aa..2918db3c119 100644 --- a/yarn-project/simulator/src/avm/avm_simulator.test.ts +++ b/yarn-project/simulator/src/avm/avm_simulator.test.ts @@ -34,6 +34,7 @@ import { type HostStorage } from './journal/host_storage.js'; import { type AvmPersistableStateManager } from './journal/journal.js'; import { Add, CalldataCopy, Return, Set } from './opcodes/index.js'; import { encodeToBytecode } from './serialization/bytecode_serialization.js'; +import { Opcode } from './serialization/instruction_serialization.js'; import { mockGetBytecode, mockGetContractInstance, @@ -52,8 +53,11 @@ describe('AVM simulator: injected bytecode', () => { beforeAll(() => { calldata = [new Fr(1), new Fr(2)]; bytecode = encodeToBytecode([ - new Set(/*indirect*/ 0, TypeTag.UINT32, /*value*/ adjustCalldataIndex(0), /*dstOffset*/ 0), - new Set(/*indirect*/ 0, TypeTag.UINT32, /*value*/ 2, /*dstOffset*/ 1), + new Set(/*indirect*/ 0, TypeTag.UINT32, /*value*/ adjustCalldataIndex(0), /*dstOffset*/ 0).as( + Opcode.SET_8, + Set.wireFormat8, + ), + new Set(/*indirect*/ 0, TypeTag.UINT32, /*value*/ 2, /*dstOffset*/ 1).as(Opcode.SET_8, Set.wireFormat8), new CalldataCopy(/*indirect=*/ 0, /*cdOffset=*/ 0, /*copySize=*/ 1, /*dstOffset=*/ 0), new Add(/*indirect=*/ 0, TypeTag.FIELD, /*aOffset=*/ 0, /*bOffset=*/ 1, /*dstOffset=*/ 2), new Return(/*indirect=*/ 0, /*returnOffset=*/ 2, /*copySize=*/ 1), @@ -227,6 +231,7 @@ describe('AVM simulator: transpiled Noir contracts', () => { ['set_opcode_u64', 1n << 60n], ['set_opcode_small_field', 0x001234567890abcdef1234567890abcdefn], ['set_opcode_big_field', 0x991234567890abcdef1234567890abcdefn], + ['set_opcode_really_big_field', 0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdefn], ])('SET functions', (name: string, res: bigint) => { it(`function '${name}'`, async () => { const context = initContext(); diff --git a/yarn-project/simulator/src/avm/opcodes/external_calls.test.ts b/yarn-project/simulator/src/avm/opcodes/external_calls.test.ts index 48f703c8185..8cde0f61cb4 100644 --- a/yarn-project/simulator/src/avm/opcodes/external_calls.test.ts +++ b/yarn-project/simulator/src/avm/opcodes/external_calls.test.ts @@ -10,6 +10,7 @@ import { adjustCalldataIndex, initContext, initHostStorage, initPersistableState import { type HostStorage } from '../journal/host_storage.js'; import { type AvmPersistableStateManager } from '../journal/journal.js'; import { encodeToBytecode } from '../serialization/bytecode_serialization.js'; +import { Opcode } from '../serialization/instruction_serialization.js'; import { mockGetBytecode, mockTraceFork } from '../test_utils.js'; import { L2GasLeft } from './context_getters.js'; import { Call, Return, Revert, StaticCall } from './external_calls.js'; @@ -83,8 +84,11 @@ describe('External Calls', () => { // const otherContextInstructionsL2GasCost = 780; // Includes the cost of the call itself const otherContextInstructionsBytecode = markBytecodeAsAvm( encodeToBytecode([ - new Set(/*indirect=*/ 0, TypeTag.UINT32, adjustCalldataIndex(0), /*dstOffset=*/ 0), - new Set(/*indirect=*/ 0, TypeTag.UINT32, argsSize, /*dstOffset=*/ 1), + new Set(/*indirect=*/ 0, TypeTag.UINT32, adjustCalldataIndex(0), /*dstOffset=*/ 0).as( + Opcode.SET_8, + Set.wireFormat8, + ), + new Set(/*indirect=*/ 0, TypeTag.UINT32, argsSize, /*dstOffset=*/ 1).as(Opcode.SET_8, Set.wireFormat8), new CalldataCopy(/*indirect=*/ 0, /*csOffsetAddress=*/ 0, /*copySizeOffset=*/ 1, /*dstOffset=*/ 0), new SStore(/*indirect=*/ 0, /*srcOffset=*/ valueOffset, /*slotOffset=*/ slotOffset), new Return(/*indirect=*/ 0, /*retOffset=*/ 0, /*size=*/ 2), diff --git a/yarn-project/simulator/src/avm/opcodes/memory.test.ts b/yarn-project/simulator/src/avm/opcodes/memory.test.ts index 80e60b4ca5d..99967748062 100644 --- a/yarn-project/simulator/src/avm/opcodes/memory.test.ts +++ b/yarn-project/simulator/src/avm/opcodes/memory.test.ts @@ -2,7 +2,6 @@ import { Fr } from '@aztec/foundation/fields'; import { type AvmContext } from '../avm_context.js'; import { Field, TypeTag, Uint8, Uint16, Uint32, Uint64, Uint128 } from '../avm_memory_types.js'; -import { InstructionExecutionError } from '../errors.js'; import { adjustCalldataIndex, initContext, initExecutionEnvironment } from '../fixtures/index.js'; import { Opcode } from '../serialization/instruction_serialization.js'; import { Addressing, AddressingMode } from './addressing_mode.js'; @@ -18,86 +17,111 @@ describe('Memory instructions', () => { describe('SET', () => { it('Should (de)serialize correctly [tag=u8]', () => { const buf = Buffer.from([ - Set.opcode, // opcode + Opcode.SET_8, // opcode 0x01, // indirect TypeTag.UINT8, // inTag ...Buffer.from('12', 'hex'), - ...Buffer.from('3456789a', 'hex'), // dstOffset + ...Buffer.from('56', 'hex'), // dstOffset ]); - const inst = new Set(/*indirect=*/ 0x01, /*inTag=*/ TypeTag.UINT8, /*value=*/ 0x12, /*dstOffset=*/ 0x3456789a); + const inst = new Set(/*indirect=*/ 0x01, /*inTag=*/ TypeTag.UINT8, /*value=*/ 0x12, /*dstOffset=*/ 0x56).as( + Opcode.SET_8, + Set.wireFormat8, + ); - expect(Set.deserialize(buf)).toEqual(inst); + expect(Set.as(Set.wireFormat8).deserialize(buf)).toEqual(inst); expect(inst.serialize()).toEqual(buf); }); it('Should (de)serialize correctly [tag=u16]', () => { const buf = Buffer.from([ - Set.opcode, // opcode + Opcode.SET_16, // opcode 0x01, // indirect TypeTag.UINT16, // inTag ...Buffer.from('1234', 'hex'), - ...Buffer.from('3456789a', 'hex'), // dstOffset + ...Buffer.from('3456', 'hex'), // dstOffset ]); - const inst = new Set(/*indirect=*/ 0x01, /*inTag=*/ TypeTag.UINT16, /*value=*/ 0x1234, /*dstOffset=*/ 0x3456789a); + const inst = new Set(/*indirect=*/ 0x01, /*inTag=*/ TypeTag.UINT16, /*value=*/ 0x1234, /*dstOffset=*/ 0x3456).as( + Opcode.SET_16, + Set.wireFormat16, + ); - expect(Set.deserialize(buf)).toEqual(inst); + expect(Set.as(Set.wireFormat16).deserialize(buf)).toEqual(inst); expect(inst.serialize()).toEqual(buf); }); it('Should (de)serialize correctly [tag=u32]', () => { const buf = Buffer.from([ - Set.opcode, // opcode + Opcode.SET_32, // opcode 0x01, // indirect TypeTag.UINT32, // inTag ...Buffer.from('12345678', 'hex'), - ...Buffer.from('3456789a', 'hex'), // dstOffset + ...Buffer.from('3456', 'hex'), // dstOffset ]); const inst = new Set( /*indirect=*/ 0x01, /*inTag=*/ TypeTag.UINT32, /*value=*/ 0x12345678, - /*dstOffset=*/ 0x3456789a, - ); + /*dstOffset=*/ 0x3456, + ).as(Opcode.SET_32, Set.wireFormat32); - expect(Set.deserialize(buf)).toEqual(inst); + expect(Set.as(Set.wireFormat32).deserialize(buf)).toEqual(inst); expect(inst.serialize()).toEqual(buf); }); it('Should (de)serialize correctly [tag=u64]', () => { const buf = Buffer.from([ - Set.opcode, // opcode + Opcode.SET_64, // opcode 0x01, // indirect TypeTag.UINT64, // inTag ...Buffer.from('1234567812345678', 'hex'), - ...Buffer.from('3456789a', 'hex'), // dstOffset + ...Buffer.from('34567', 'hex'), // dstOffset ]); const inst = new Set( /*indirect=*/ 0x01, /*inTag=*/ TypeTag.UINT64, /*value=*/ 0x1234567812345678n, - /*dstOffset=*/ 0x3456789a, - ); + /*dstOffset=*/ 0x3456, + ).as(Opcode.SET_64, Set.wireFormat64); - expect(Set.deserialize(buf)).toEqual(inst); + expect(Set.as(Set.wireFormat64).deserialize(buf)).toEqual(inst); expect(inst.serialize()).toEqual(buf); }); it('Should (de)serialize correctly [tag=u128]', () => { const buf = Buffer.from([ - Set.opcode, // opcode + Opcode.SET_128, // opcode 0x01, // indirect TypeTag.UINT128, // inTag ...Buffer.from('12345678123456781234567812345678', 'hex'), // const (will be 128 bit) - ...Buffer.from('3456789a', 'hex'), // dstOffset + ...Buffer.from('3456', 'hex'), // dstOffset ]); const inst = new Set( /*indirect=*/ 0x01, /*inTag=*/ TypeTag.UINT128, /*value=*/ 0x12345678123456781234567812345678n, - /*dstOffset=*/ 0x3456789a, - ); + /*dstOffset=*/ 0x3456, + ).as(Opcode.SET_128, Set.wireFormat128); - expect(Set.deserialize(buf)).toEqual(inst); + expect(Set.as(Set.wireFormat128).deserialize(buf)).toEqual(inst); + expect(inst.serialize()).toEqual(buf); + }); + + it('Should (de)serialize correctly [tag=ff]', () => { + const buf = Buffer.from([ + Opcode.SET_FF, // opcode + 0x01, // indirect + TypeTag.UINT128, // inTag + ...Buffer.from('1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef', 'hex'), // const (will be 32 bytes) + ...Buffer.from('3456', 'hex'), // dstOffset + ]); + const inst = new Set( + /*indirect=*/ 0x01, + /*inTag=*/ TypeTag.UINT128, + /*value=*/ 0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdefn, + /*dstOffset=*/ 0x3456, + ).as(Opcode.SET_FF, Set.wireFormatFF); + + expect(Set.as(Set.wireFormatFF).deserialize(buf)).toEqual(inst); expect(inst.serialize()).toEqual(buf); }); @@ -132,14 +156,6 @@ describe('Memory instructions', () => { expect(actual).toEqual(new Uint16(0x5678)); expect(tag).toEqual(TypeTag.UINT16); }); - - it('should throw if tag is FIELD, UNINITIALIZED, INVALID', async () => { - for (const tag of [TypeTag.FIELD, TypeTag.UNINITIALIZED, TypeTag.INVALID]) { - await expect( - async () => await new Set(/*indirect=*/ 0, /*inTag=*/ tag, /*value=*/ 1234n, /*offset=*/ 1).execute(context), - ).rejects.toThrow(InstructionExecutionError); - } - }); }); describe('CAST', () => { diff --git a/yarn-project/simulator/src/avm/opcodes/memory.ts b/yarn-project/simulator/src/avm/opcodes/memory.ts index 91d85884ed5..66a04494af2 100644 --- a/yarn-project/simulator/src/avm/opcodes/memory.ts +++ b/yarn-project/simulator/src/avm/opcodes/memory.ts @@ -1,39 +1,57 @@ import type { AvmContext } from '../avm_context.js'; -import { Field, TaggedMemory, TypeTag } from '../avm_memory_types.js'; -import { InstructionExecutionError } from '../errors.js'; -import { BufferCursor } from '../serialization/buffer_cursor.js'; -import { Opcode, OperandType, deserialize, serializeAs } from '../serialization/instruction_serialization.js'; +import { Field, TaggedMemory } from '../avm_memory_types.js'; +import { Opcode, OperandType } from '../serialization/instruction_serialization.js'; import { Addressing } from './addressing_mode.js'; import { Instruction } from './instruction.js'; import { TwoOperandInstruction } from './instruction_impl.js'; -const TAG_TO_OPERAND_TYPE = new Map([ - [TypeTag.UINT8, OperandType.UINT8], - [TypeTag.UINT16, OperandType.UINT16], - [TypeTag.UINT32, OperandType.UINT32], - [TypeTag.UINT64, OperandType.UINT64], - [TypeTag.UINT128, OperandType.UINT128], -]); - -function getOperandTypeFromInTag(inTag: number | bigint): OperandType { - inTag = inTag as number; - const tagOperandType = TAG_TO_OPERAND_TYPE.get(inTag); - if (tagOperandType === undefined) { - throw new Error(`Invalid tag ${inTag} for SET.`); - } - return tagOperandType; -} - export class Set extends Instruction { static readonly type: string = 'SET'; - static readonly opcode: Opcode = Opcode.SET; - - private static readonly wireFormatBeforeConst: OperandType[] = [ - OperandType.UINT8, - OperandType.UINT8, - OperandType.UINT8, + // Required for gas. + static readonly opcode: Opcode = Opcode.SET_8; + + public static readonly wireFormat8: OperandType[] = [ + OperandType.UINT8, // opcode + OperandType.UINT8, // indirect + OperandType.UINT8, // tag + OperandType.UINT8, // const (value) + OperandType.UINT8, // dstOffset + ]; + public static readonly wireFormat16: OperandType[] = [ + OperandType.UINT8, // opcode + OperandType.UINT8, // indirect + OperandType.UINT8, // tag + OperandType.UINT16, // const (value) + OperandType.UINT16, // dstOffset + ]; + public static readonly wireFormat32: OperandType[] = [ + OperandType.UINT8, // opcode + OperandType.UINT8, // indirect + OperandType.UINT8, // tag + OperandType.UINT32, // const (value) + OperandType.UINT16, // dstOffset + ]; + public static readonly wireFormat64: OperandType[] = [ + OperandType.UINT8, // opcode + OperandType.UINT8, // indirect + OperandType.UINT8, // tag + OperandType.UINT64, // const (value) + OperandType.UINT16, // dstOffset + ]; + public static readonly wireFormat128: OperandType[] = [ + OperandType.UINT8, // opcode + OperandType.UINT8, // indirect + OperandType.UINT8, // tag + OperandType.UINT128, // const (value) + OperandType.UINT16, // dstOffset + ]; + public static readonly wireFormatFF: OperandType[] = [ + OperandType.UINT8, // opcode + OperandType.UINT8, // indirect + OperandType.UINT8, // tag + OperandType.FF, // const (value) + OperandType.UINT16, // dstOffset ]; - private static readonly wireFormatAfterConst: OperandType[] = [OperandType.UINT32]; constructor( private indirect: number, @@ -44,42 +62,13 @@ export class Set extends Instruction { super(); } - /** We need to use a custom serialize function because of the variable length of the value. */ - public override serialize(): Buffer { - const format: OperandType[] = [ - ...Set.wireFormatBeforeConst, - getOperandTypeFromInTag(this.inTag), - ...Set.wireFormatAfterConst, - ]; - return serializeAs(format, this.opcode, this); - } - - /** We need to use a custom deserialize function because of the variable length of the value. */ - public static override deserialize(buf: BufferCursor | Buffer): Set { - if (buf instanceof Buffer) { - buf = new BufferCursor(buf); - } - const beforeConst = deserialize(buf, Set.wireFormatBeforeConst); - const tag = beforeConst[beforeConst.length - 1]; - const val = deserialize(buf, [getOperandTypeFromInTag(tag)]); - const afterConst = deserialize(buf, Set.wireFormatAfterConst); - const res = [...beforeConst, ...val, ...afterConst]; - const args = res.slice(1) as ConstructorParameters; // Remove opcode. - return new Set(...args); - } - public async execute(context: AvmContext): Promise { const memoryOperations = { writes: 1, indirect: this.indirect }; const memory = context.machineState.memory.track(this.type); context.machineState.consumeGas(this.gasCost(memoryOperations)); - // Per the YP, the tag cannot be a field. - if ([TypeTag.FIELD, TypeTag.UNINITIALIZED, TypeTag.INVALID].includes(this.inTag)) { - throw new InstructionExecutionError(`Invalid tag ${TypeTag[this.inTag]} for SET.`); - } const [dstOffset] = Addressing.fromWire(this.indirect).resolve([this.dstOffset], memory); - - const res = TaggedMemory.integralFromTag(this.value, this.inTag); + const res = TaggedMemory.buildFromTagTruncating(this.value, this.inTag); memory.set(dstOffset, res); memory.assert(memoryOperations); @@ -148,9 +137,7 @@ export class Cast extends TwoOperandInstruction { const [srcOffset, dstOffset] = Addressing.fromWire(this.indirect).resolve([this.aOffset, this.dstOffset], memory); const a = memory.get(srcOffset); - - const casted = - this.inTag == TypeTag.FIELD ? new Field(a.toBigInt()) : TaggedMemory.integralFromTag(a.toBigInt(), this.inTag); + const casted = TaggedMemory.buildFromTagTruncating(a.toBigInt(), this.inTag); memory.set(dstOffset, casted); diff --git a/yarn-project/simulator/src/avm/serialization/bytecode_serialization.ts b/yarn-project/simulator/src/avm/serialization/bytecode_serialization.ts index cad761b80cc..099357c888d 100644 --- a/yarn-project/simulator/src/avm/serialization/bytecode_serialization.ts +++ b/yarn-project/simulator/src/avm/serialization/bytecode_serialization.ts @@ -113,7 +113,12 @@ const INSTRUCTION_SET = () => [JumpI.opcode, Instruction.deserialize.bind(JumpI)], [InternalCall.opcode, Instruction.deserialize.bind(InternalCall)], [InternalReturn.opcode, Instruction.deserialize.bind(InternalReturn)], - [Set.opcode, Set.deserialize.bind(Set)], + [Opcode.SET_8, Set.as(Set.wireFormat8).deserialize], + [Opcode.SET_16, Set.as(Set.wireFormat16).deserialize], + [Opcode.SET_32, Set.as(Set.wireFormat32).deserialize], + [Opcode.SET_64, Set.as(Set.wireFormat64).deserialize], + [Opcode.SET_128, Set.as(Set.wireFormat128).deserialize], + [Opcode.SET_FF, Set.as(Set.wireFormatFF).deserialize], [Opcode.MOV_8, Mov.as(Mov.wireFormat8).deserialize], [Opcode.MOV_16, Mov.as(Mov.wireFormat16).deserialize], [CMov.opcode, Instruction.deserialize.bind(CMov)], diff --git a/yarn-project/simulator/src/avm/serialization/instruction_serialization.ts b/yarn-project/simulator/src/avm/serialization/instruction_serialization.ts index 436d4893a2a..cdc1b463bbf 100644 --- a/yarn-project/simulator/src/avm/serialization/instruction_serialization.ts +++ b/yarn-project/simulator/src/avm/serialization/instruction_serialization.ts @@ -45,7 +45,12 @@ export enum Opcode { INTERNALCALL, INTERNALRETURN, // Memory - SET, + SET_8, + SET_16, + SET_32, + SET_64, + SET_128, + SET_FF, MOV_8, MOV_16, CMOV, @@ -93,6 +98,7 @@ export enum OperandType { UINT32, UINT64, UINT128, + FF, } type OperandNativeType = number | bigint; @@ -105,8 +111,27 @@ const OPERAND_SPEC = new Map OperandNativeType, Oper [OperandType.UINT32, [4, Buffer.prototype.readUint32BE, Buffer.prototype.writeUint32BE]], [OperandType.UINT64, [8, Buffer.prototype.readBigInt64BE, Buffer.prototype.writeBigInt64BE]], [OperandType.UINT128, [16, readBigInt128BE, writeBigInt128BE]], + [OperandType.FF, [32, readBigInt254BE, writeBigInt254BE]], ]); +function readBigInt254BE(this: Buffer): bigint { + const totalBytes = 32; + let ret: bigint = 0n; + for (let i = 0; i < totalBytes; ++i) { + ret <<= 8n; + ret |= BigInt(this.readUint8(i)); + } + return ret; +} + +function writeBigInt254BE(this: Buffer, value: bigint): void { + const totalBytes = 32; + for (let offset = totalBytes - 1; offset >= 0; --offset) { + this.writeUint8(Number(value & 0xffn), offset); + value >>= 8n; + } +} + function readBigInt128BE(this: Buffer): bigint { const totalBytes = 16; let ret: bigint = 0n; From bd332a97d5907e1fd18f6d34704db8497d705f41 Mon Sep 17 00:00:00 2001 From: fcarreiro Date: Mon, 9 Sep 2024 19:47:18 +0000 Subject: [PATCH 92/98] fix sizes in wire format --- .../cpp/src/barretenberg/vm/avm/trace/deserialization.cpp | 7 ++++++- .../cpp/src/barretenberg/vm/avm/trace/execution.cpp | 4 ++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/trace/deserialization.cpp b/barretenberg/cpp/src/barretenberg/vm/avm/trace/deserialization.cpp index 62f04134d5f..dc753debe51 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/trace/deserialization.cpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/trace/deserialization.cpp @@ -149,7 +149,12 @@ const std::unordered_map> OPCODE_WIRE_FORMAT = { OpCode::KECCAK, { OperandType::INDIRECT, OperandType::UINT32, OperandType::UINT32, OperandType::UINT32 } }, { OpCode::POSEIDON2, { OperandType::INDIRECT, OperandType::UINT32, OperandType::UINT32 } }, { OpCode::SHA256COMPRESSION, - { OperandType::INDIRECT, OperandType::UINT32, OperandType::UINT32, OperandType::UINT32 } }, + { OperandType::INDIRECT, + OperandType::UINT32, + OperandType::UINT32, + OperandType::UINT32, + OperandType::UINT32, + OperandType::UINT32 } }, { OpCode::KECCAKF1600, { OperandType::INDIRECT, OperandType::UINT32, OperandType::UINT32, OperandType::UINT32 } }, { OpCode::PEDERSEN, { OperandType::INDIRECT, OperandType::UINT32, OperandType::UINT32, OperandType::UINT32, OperandType::UINT32 } }, diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/trace/execution.cpp b/barretenberg/cpp/src/barretenberg/vm/avm/trace/execution.cpp index f69a9192831..20d9c5641fb 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/trace/execution.cpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/trace/execution.cpp @@ -773,12 +773,12 @@ std::vector Execution::gen_trace(std::vector const& instructio std::get(inst.operands.at(4))); break; - // Future Gadgets -- pending changes in noir case OpCode::SHA256COMPRESSION: + // TODO: sizes in wire format are ignored. trace_builder.op_sha256_compression(std::get(inst.operands.at(0)), std::get(inst.operands.at(1)), std::get(inst.operands.at(2)), - std::get(inst.operands.at(3))); + std::get(inst.operands.at(4))); break; case OpCode::KECCAKF1600: From ed23fcbc10c7f1c1947551b27ac6364aebf1d00b Mon Sep 17 00:00:00 2001 From: fcarreiro Date: Mon, 9 Sep 2024 22:16:37 +0000 Subject: [PATCH 93/98] fix execution test --- .../vm/avm/tests/execution.test.cpp | 27 +++++-------------- 1 file changed, 7 insertions(+), 20 deletions(-) diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/tests/execution.test.cpp b/barretenberg/cpp/src/barretenberg/vm/avm/tests/execution.test.cpp index dc67f77be15..e69d4675a80 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/tests/execution.test.cpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/tests/execution.test.cpp @@ -833,27 +833,14 @@ TEST_F(AvmExecutionTests, sha256CompressionOpcode) to_hex(i) + // val i to_hex(i + 8); // val i } - std::string bytecode_hex = bytecode_preamble // Initial SET operations to store state and input - + to_hex(OpCode::SET) + // opcode SET for indirect dst (output) - "00" // Indirect flag - "03" // U32 - "00000100" // value 256 (i.e. where the dst will be written to) - "00000024" // dst_offset 36 - + to_hex(OpCode::SET) + // opcode SET for indirect state - "00" // Indirect flag - "03" // U32 - "00000001" // value 1 (i.e. where the state will be read from) - "00000022" // dst_offset 34 - + to_hex(OpCode::SET) + // opcode SET for indirect input - "00" // Indirect flag - "03" // U32 - "00000009" // value 9 (i.e. where the input will be read from) - "00000023" // dst_offset 35 + std::string bytecode_hex = bytecode_preamble // Initial SET operations to store state and input + to_hex(OpCode::SHA256COMPRESSION) + // opcode SHA256COMPRESSION - "07" // Indirect flag (first 3 operands indirect) - "00000024" // output offset (indirect 36) - "00000022" // state offset (indirect 34) - "00000023" // input offset (indirect 35) + "00" // Indirect flag + "00000100" // output offset + "00000001" // state offset + "0000000F" // state size + "00000009" // input offset + "00000008" // input size + to_hex(OpCode::RETURN) + // opcode RETURN "00" // Indirect flag "00000100" // ret offset 256 From b683e3ca4e83ae03a72341f3e37b15012455564a Mon Sep 17 00:00:00 2001 From: guipublic Date: Mon, 16 Sep 2024 09:06:05 +0000 Subject: [PATCH 94/98] update serialization test case --- .../acvm-repo/acir/tests/test_program_serialization.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/noir/noir-repo/acvm-repo/acir/tests/test_program_serialization.rs b/noir/noir-repo/acvm-repo/acir/tests/test_program_serialization.rs index 571ec2c2df8..6bf5afe52d9 100644 --- a/noir/noir-repo/acvm-repo/acir/tests/test_program_serialization.rs +++ b/noir/noir-repo/acvm-repo/acir/tests/test_program_serialization.rs @@ -91,10 +91,10 @@ fn multi_scalar_mul_circuit() { let bytes = Program::serialize_program(&program); let expected_serialization: Vec = vec![ - 31, 139, 8, 0, 0, 0, 0, 0, 0, 255, 93, 141, 11, 10, 0, 32, 8, 67, 43, 181, 15, 116, 255, - 227, 70, 74, 11, 86, 194, 195, 169, 83, 115, 58, 49, 156, 12, 29, 121, 58, 66, 117, 176, - 144, 11, 105, 161, 222, 245, 42, 205, 13, 186, 58, 205, 233, 240, 25, 249, 11, 238, 40, - 245, 19, 253, 255, 119, 159, 216, 103, 157, 249, 169, 193, 0, 0, 0, + 31, 139, 8, 0, 0, 0, 0, 0, 0, 255, 93, 141, 11, 10, 0, 32, 8, 67, 43, 181, 15, 221, 255, + 186, 145, 210, 130, 149, 240, 112, 234, 212, 156, 78, 12, 39, 67, 71, 158, 142, 80, 29, 44, + 228, 66, 90, 168, 119, 189, 74, 115, 131, 174, 78, 115, 58, 124, 70, 254, 130, 59, 74, 253, + 68, 255, 255, 221, 39, 54, 29, 134, 27, 102, 193, 0, 0, 0, ]; assert_eq!(bytes, expected_serialization) From 4ba6d32a2d46e5c2d140954bb9655e3a4ed02487 Mon Sep 17 00:00:00 2001 From: guipublic Date: Mon, 16 Sep 2024 16:34:22 +0000 Subject: [PATCH 95/98] update yarn.lock --- yarn-project/yarn.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/yarn-project/yarn.lock b/yarn-project/yarn.lock index 0a64d09d724..ab479bc08b6 100644 --- a/yarn-project/yarn.lock +++ b/yarn-project/yarn.lock @@ -3376,12 +3376,12 @@ __metadata: "@noir-lang/noir_js@file:../noir/packages/noir_js::locator=%40aztec%2Faztec3-packages%40workspace%3A.": version: 0.34.0 - resolution: "@noir-lang/noir_js@file:../noir/packages/noir_js#../noir/packages/noir_js::hash=0a6cc4&locator=%40aztec%2Faztec3-packages%40workspace%3A." + resolution: "@noir-lang/noir_js@file:../noir/packages/noir_js#../noir/packages/noir_js::hash=999f32&locator=%40aztec%2Faztec3-packages%40workspace%3A." dependencies: "@noir-lang/acvm_js": 0.50.0 "@noir-lang/noirc_abi": 0.34.0 "@noir-lang/types": 0.34.0 - checksum: 432f14d70d911c94aacab42012e7813b5823d9a8971d1d9a543b82ab3b2e38739bf1e065788c08e8f44bebd75fb3ab0f8dba3151b74bbb3aa2ec5c105f4bca61 + checksum: 72009b3553a8c2652270b86b02bf5215456adb3c66ebb08a3b66185d20b708e86cf3300c3f57641d2e9e9f10d340bbf5e2f9fb1f89507900ccdd9b0e42c4349a languageName: node linkType: hard From c8afcb1d51f8e963ecf63616a9c3659258229108 Mon Sep 17 00:00:00 2001 From: guipublic Date: Tue, 17 Sep 2024 09:05:25 +0000 Subject: [PATCH 96/98] fix test case serialisation --- .../acvm-repo/acvm_js/test/shared/multi_scalar_mul.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/noir/noir-repo/acvm-repo/acvm_js/test/shared/multi_scalar_mul.ts b/noir/noir-repo/acvm-repo/acvm_js/test/shared/multi_scalar_mul.ts index ffb9952b136..f23847a75fc 100644 --- a/noir/noir-repo/acvm-repo/acvm_js/test/shared/multi_scalar_mul.ts +++ b/noir/noir-repo/acvm-repo/acvm_js/test/shared/multi_scalar_mul.ts @@ -1,8 +1,8 @@ // See `multi_scalar_mul_circuit` integration test in `acir/tests/test_program_serialization.rs`. export const bytecode = Uint8Array.from([ - 31, 139, 8, 0, 0, 0, 0, 0, 0, 255, 93, 141, 11, 10, 0, 32, 8, 67, 43, 181, 15, 116, 255, 227, 70, 74, 11, 86, 194, - 195, 169, 83, 115, 58, 49, 156, 12, 29, 121, 58, 66, 117, 176, 144, 11, 105, 161, 222, 245, 42, 205, 13, 186, 58, 205, - 233, 240, 25, 249, 11, 238, 40, 245, 19, 253, 255, 119, 159, 216, 103, 157, 249, 169, 193, 0, 0, 0, + 31, 139, 8, 0, 0, 0, 0, 0, 0, 255, 93, 141, 11, 10, 0, 32, 8, 67, 43, 181, 15, 221, 255, 186, 145, 210, 130, 149, 240, + 112, 234, 212, 156, 78, 12, 39, 67, 71, 158, 142, 80, 29, 44, 228, 66, 90, 168, 119, 189, 74, 115, 131, 174, 78, 115, + 58, 124, 70, 254, 130, 59, 74, 253, 68, 255, 255, 221, 39, 54, 29, 134, 27, 102, 193, 0, 0, 0, ]); export const initialWitnessMap = new Map([ [1, '0x0000000000000000000000000000000000000000000000000000000000000001'], From 205c0f53e61515da529099681b3964d46e45ed8f Mon Sep 17 00:00:00 2001 From: Tom French Date: Tue, 17 Sep 2024 10:26:58 +0100 Subject: [PATCH 97/98] chore: fix duplicated import --- .../simulator/src/avm/serialization/bytecode_serialization.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/yarn-project/simulator/src/avm/serialization/bytecode_serialization.ts b/yarn-project/simulator/src/avm/serialization/bytecode_serialization.ts index b6b1a95f00c..6f5fae94394 100644 --- a/yarn-project/simulator/src/avm/serialization/bytecode_serialization.ts +++ b/yarn-project/simulator/src/avm/serialization/bytecode_serialization.ts @@ -2,7 +2,6 @@ import { PedersenCommitment } from '../opcodes/commitment.js'; import { DAGasLeft, L2GasLeft } from '../opcodes/context_getters.js'; import { EcAdd } from '../opcodes/ec_add.js'; import { Keccak, KeccakF1600, Pedersen, Poseidon2, Sha256Compression } from '../opcodes/hashing.js'; -import { Instruction } from '../opcodes/index.js'; import { Add, Address, From def3634f4f95dfa4985d8e9f7f918a32b1fbcd55 Mon Sep 17 00:00:00 2001 From: fcarreiro Date: Fri, 20 Sep 2024 17:18:51 +0000 Subject: [PATCH 98/98] fix sha indirects in avm cpp --- .../barretenberg/vm/avm/trace/execution.cpp | 5 ++-- .../src/barretenberg/vm/avm/trace/trace.cpp | 25 ++++++++++++------- .../src/barretenberg/vm/avm/trace/trace.hpp | 7 +++++- 3 files changed, 25 insertions(+), 12 deletions(-) diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/trace/execution.cpp b/barretenberg/cpp/src/barretenberg/vm/avm/trace/execution.cpp index 283bebde0bc..5ded033326c 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/trace/execution.cpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/trace/execution.cpp @@ -967,11 +967,12 @@ std::vector Execution::gen_trace(std::vector const& instructio break; case OpCode::SHA256COMPRESSION: - // TODO: sizes in wire format are ignored. trace_builder.op_sha256_compression(std::get(inst.operands.at(0)), std::get(inst.operands.at(1)), std::get(inst.operands.at(2)), - std::get(inst.operands.at(4))); + std::get(inst.operands.at(3)), + std::get(inst.operands.at(4)), + std::get(inst.operands.at(5))); break; case OpCode::KECCAKF1600: diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/trace/trace.cpp b/barretenberg/cpp/src/barretenberg/vm/avm/trace/trace.cpp index 010cf1edbda..3d2f928aa79 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/trace/trace.cpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/trace/trace.cpp @@ -3314,7 +3314,7 @@ void AvmTraceBuilder::op_to_radix_le(uint8_t indirect, * @brief SHA256 Compression with direct or indirect memory access. * * @param indirect byte encoding information about indirect/direct memory access. - * @param h_init_offset An index in memory pointing to the first U32 value of the state array to be used in the next + * @param state_offset An index in memory pointing to the first U32 value of the state array to be used in the next * instance of sha256 compression. * @param input_offset An index in memory pointing to the first U32 value of the input array to be used in the next * instance of sha256 compression. @@ -3323,21 +3323,28 @@ void AvmTraceBuilder::op_to_radix_le(uint8_t indirect, */ void AvmTraceBuilder::op_sha256_compression(uint8_t indirect, uint32_t output_offset, - uint32_t h_init_offset, - uint32_t input_offset) + uint32_t state_offset, + uint32_t state_size_offset, + uint32_t inputs_offset, + uint32_t inputs_size_offset) { // The clk plays a crucial role in this function as we attempt to write across multiple lines in the main trace. auto clk = static_cast(main_trace.size()) + 1; // Resolve the indirect flags, the results of this function are used to determine the memory offsets // that point to the starting memory addresses for the input and output values. - auto [resolved_h_init_offset, resolved_input_offset, resolved_output_offset] = - unpack_indirects<3>(indirect, { h_init_offset, input_offset, output_offset }); + auto [resolved_output_offset, + resolved_state_offset, + resolved_state_size_offset, + resolved_inputs_offset, + resolved_inputs_size_offset] = + unpack_indirects<5>(indirect, + { output_offset, state_offset, state_size_offset, inputs_offset, inputs_size_offset }); auto read_a = constrained_read_from_memory( - call_ptr, clk, resolved_h_init_offset, AvmMemoryTag::U32, AvmMemoryTag::U0, IntermRegister::IA); + call_ptr, clk, resolved_state_offset, AvmMemoryTag::U32, AvmMemoryTag::U0, IntermRegister::IA); auto read_b = constrained_read_from_memory( - call_ptr, clk, resolved_input_offset, AvmMemoryTag::U32, AvmMemoryTag::U0, IntermRegister::IB); + call_ptr, clk, resolved_inputs_offset, AvmMemoryTag::U32, AvmMemoryTag::U0, IntermRegister::IB); bool tag_match = read_a.tag_match && read_b.tag_match; // Constrain gas cost @@ -3379,9 +3386,9 @@ void AvmTraceBuilder::op_sha256_compression(uint8_t indirect, // Input for hash is expanded to 512 bits std::vector input_vec; // Read results are written to h_init array. - read_slice_from_memory(resolved_h_init_offset, 8, h_init_vec); + read_slice_from_memory(resolved_state_offset, 8, h_init_vec); // Read results are written to input array - read_slice_from_memory(resolved_input_offset, 16, input_vec); + read_slice_from_memory(resolved_inputs_offset, 16, input_vec); // Now that we have read all the values, we can perform the operation to get the resulting witness. // Note: We use the sha_op_clk to ensure that the sha256 operation is performed at the same clock cycle as the diff --git a/barretenberg/cpp/src/barretenberg/vm/avm/trace/trace.hpp b/barretenberg/cpp/src/barretenberg/vm/avm/trace/trace.hpp index de86ef0b39b..6390d6a1aba 100644 --- a/barretenberg/cpp/src/barretenberg/vm/avm/trace/trace.hpp +++ b/barretenberg/cpp/src/barretenberg/vm/avm/trace/trace.hpp @@ -194,7 +194,12 @@ class AvmTraceBuilder { uint8_t output_bits); // Future Gadgets -- pending changes in noir - void op_sha256_compression(uint8_t indirect, uint32_t output_offset, uint32_t h_init_offset, uint32_t input_offset); + void op_sha256_compression(uint8_t indirect, + uint32_t output_offset, + uint32_t state_offset, + uint32_t state_size_offset, + uint32_t inputs_offset, + uint32_t inputs_size_offset); void op_keccakf1600(uint8_t indirect, uint32_t output_offset, uint32_t input_offset, uint32_t input_size_offset); std::vector finalize();