From d21e0b7b754b3d7b4570f2dcac985c1da466cdce Mon Sep 17 00:00:00 2001 From: Ohad Agadi Date: Sun, 1 Dec 2024 17:23:09 +0200 Subject: [PATCH] update verify generic and ret from auto gen --- .../crates/prover/src/cairo_air/air.rs | 56 +- .../components/generic_opcode/component.rs | 872 +++++----- .../src/components/generic_opcode/mod.rs | 2 +- .../src/components/generic_opcode/prover.rs | 1442 +++++++++-------- .../crates/prover/src/components/mod.rs | 7 + .../src/components/ret_opcode/component.rs | 54 +- .../prover/src/components/ret_opcode/mod.rs | 2 +- .../src/components/ret_opcode/prover.rs | 227 +-- .../verify_instruction/component.rs | 87 +- .../src/components/verify_instruction/mod.rs | 2 +- .../components/verify_instruction/prover.rs | 331 ++-- 11 files changed, 1586 insertions(+), 1496 deletions(-) diff --git a/stwo_cairo_prover/crates/prover/src/cairo_air/air.rs b/stwo_cairo_prover/crates/prover/src/cairo_air/air.rs index 7370ea39..7cd8e5aa 100644 --- a/stwo_cairo_prover/crates/prover/src/cairo_air/air.rs +++ b/stwo_cairo_prover/crates/prover/src/cairo_air/air.rs @@ -230,15 +230,17 @@ impl OpcodeInteractionClaim { pub fn sum(&self) -> SecureField { let mut sum = QM31::zero(); for interaction_claim in &self.generic { - sum += match interaction_claim.claimed_sum { + let (total_sum, claimed_sum) = interaction_claim.logup_sums; + sum += match claimed_sum { Some((claimed_sum, ..)) => claimed_sum, - None => interaction_claim.total_sum, + None => total_sum, }; } for interaction_claim in &self.ret { - sum += match interaction_claim.claimed_sum { + let (total_sum, claimed_sum) = interaction_claim.logup_sums; + sum += match claimed_sum { Some((claimed_sum, ..)) => claimed_sum, - None => interaction_claim.total_sum, + None => total_sum, }; } sum @@ -263,10 +265,10 @@ impl OpcodesInteractionClaimGenerator { tree_builder, &interaction_elements.memory_address_to_id, &interaction_elements.memory_id_to_value, + &interaction_elements.opcodes, &interaction_elements.range_check_19, &interaction_elements.range_check_9_9, &interaction_elements.verify_instruction, - &interaction_elements.opcodes, ) }) .collect(); @@ -278,8 +280,8 @@ impl OpcodesInteractionClaimGenerator { tree_builder, &interaction_elements.memory_address_to_id, &interaction_elements.memory_id_to_value, - &interaction_elements.verify_instruction, &interaction_elements.opcodes, + &interaction_elements.verify_instruction, ) }) .collect(); @@ -375,6 +377,7 @@ impl CairoClaimGenerator { self.verify_instruction_trace_generator.write_trace( tree_builder, &mut self.memory_address_to_id_trace_generator, + &mut self.memory_id_to_value_trace_generator, &mut self.range_check_4_3_trace_generator, &mut self.range_check_7_2_5_trace_generator, ); @@ -545,7 +548,7 @@ pub fn lookup_sum( // Otherwise, the claimed_sum is the total_sum. // TODO(Ohad): hide this logic behind `InteractionClaim`, and only sum here. sum += interaction_claim.opcodes.sum(); - sum += interaction_claim.verify_instruction.claimed_sum.unwrap().0; + sum += interaction_claim.verify_instruction.logup_sums.1.unwrap().0; sum += interaction_claim.range_check_19.claimed_sum; sum += interaction_claim.range_check_9_9.claimed_sum; sum += interaction_claim.range_check_7_2_5.claimed_sum; @@ -582,16 +585,16 @@ impl OpcodeComponents { memoryidtobig_lookup_elements: interaction_elements .memory_id_to_value .clone(), - verify_instruction_lookup_elements: interaction_elements - .verify_instruction - .clone(), opcodes_lookup_elements: interaction_elements.opcodes.clone(), - range_check_19_lookup_elements: interaction_elements.range_check_19.clone(), - range_check_9_9_lookup_elements: interaction_elements + rangecheck_19_lookup_elements: interaction_elements.range_check_19.clone(), + rangecheck_9_9_lookup_elements: interaction_elements .range_check_9_9 .clone(), + verifyinstruction_lookup_elements: interaction_elements + .verify_instruction + .clone(), }, - (interaction_claim.total_sum, interaction_claim.claimed_sum), + interaction_claim.logup_sums, ) }) .collect_vec(); @@ -610,12 +613,12 @@ impl OpcodeComponents { memoryidtobig_lookup_elements: interaction_elements .memory_id_to_value .clone(), - verify_instruction_lookup_elements: interaction_elements + verifyinstruction_lookup_elements: interaction_elements .verify_instruction .clone(), opcodes_lookup_elements: interaction_elements.opcodes.clone(), }, - (interaction_claim.total_sum, interaction_claim.claimed_sum), + interaction_claim.logup_sums, ) }) .collect_vec(); @@ -677,18 +680,17 @@ impl CairoComponents { ); let verify_instruction_component = verify_instruction::Component::new( tree_span_provider, - verify_instruction::Eval::new( - cairo_claim.verify_instruction, - interaction_elements.memory_address_to_id.clone(), - interaction_elements.memory_id_to_value.clone(), - interaction_elements.range_check_4_3.clone(), - interaction_elements.range_check_7_2_5.clone(), - interaction_elements.verify_instruction.clone(), - ), - ( - interaction_claim.verify_instruction.total_sum, - interaction_claim.verify_instruction.claimed_sum, - ), + verify_instruction::Eval { + claim: cairo_claim.verify_instruction, + memoryaddresstoid_lookup_elements: interaction_elements + .memory_address_to_id + .clone(), + memoryidtobig_lookup_elements: interaction_elements.memory_id_to_value.clone(), + rangecheck_4_3_lookup_elements: interaction_elements.range_check_4_3.clone(), + rangecheck_7_2_5_lookup_elements: interaction_elements.range_check_7_2_5.clone(), + verifyinstruction_lookup_elements: interaction_elements.verify_instruction.clone(), + }, + interaction_claim.verify_instruction.logup_sums, ); let memory_address_to_id_component = memory_address_to_id::Component::new( tree_span_provider, diff --git a/stwo_cairo_prover/crates/prover/src/components/generic_opcode/component.rs b/stwo_cairo_prover/crates/prover/src/components/generic_opcode/component.rs index a0800e8e..55241a68 100644 --- a/stwo_cairo_prover/crates/prover/src/components/generic_opcode/component.rs +++ b/stwo_cairo_prover/crates/prover/src/components/generic_opcode/component.rs @@ -1,50 +1,28 @@ #![allow(non_camel_case_types)] #![allow(unused_imports)] -use std::ops::{Mul, Sub}; - use num_traits::{One, Zero}; use serde::{Deserialize, Serialize}; -use stwo_prover::constraint_framework::logup::{ClaimedPrefixSum, LogupAtRow, LookupElements}; -use stwo_prover::constraint_framework::preprocessed_columns::PreprocessedColumn; +use stwo_prover::constraint_framework::logup::{LogupAtRow, LogupSums, LookupElements}; use stwo_prover::constraint_framework::{ - EvalAtRow, FrameworkComponent, FrameworkEval, RelationEntry, INTERACTION_TRACE_IDX, + EvalAtRow, FrameworkComponent, FrameworkEval, RelationEntry, }; -use stwo_prover::core::backend::simd::m31::{PackedM31, LOG_N_LANES}; +use stwo_prover::core::backend::simd::m31::LOG_N_LANES; use stwo_prover::core::channel::Channel; use stwo_prover::core::fields::m31::M31; use stwo_prover::core::fields::qm31::SecureField; use stwo_prover::core::fields::secure_column::SECURE_EXTENSION_DEGREE; -use stwo_prover::core::lookups::utils::Fraction; use stwo_prover::core::pcs::TreeVec; -use crate::components::{ - memory_address_to_id, memory_id_to_big, pack_values, range_check_19, range_check_9_9, - verify_instruction, -}; use crate::relations; -#[derive(Clone, Debug, PartialEq, Eq)] -pub struct RelationElements(LookupElements<4>); -impl RelationElements { - pub fn draw(channel: &mut impl Channel) -> Self { - Self(LookupElements::<4>::draw(channel)) - } - pub fn combine(&self, values: &[F]) -> EF - where - EF: Clone + Zero + From + From + Mul + Sub, - { - self.0.combine(values) - } -} - pub struct Eval { pub claim: Claim, pub memoryaddresstoid_lookup_elements: relations::MemoryAddressToId, pub memoryidtobig_lookup_elements: relations::MemoryIdToBig, - pub range_check_19_lookup_elements: relations::RangeCheck_19, - pub range_check_9_9_lookup_elements: relations::RangeCheck_9_9, - pub verify_instruction_lookup_elements: relations::VerifyInstruction, pub opcodes_lookup_elements: relations::Opcodes, + pub rangecheck_19_lookup_elements: relations::RangeCheck_19, + pub rangecheck_9_9_lookup_elements: relations::RangeCheck_9_9, + pub verifyinstruction_lookup_elements: relations::VerifyInstruction, } #[derive(Copy, Clone, Serialize, Deserialize)] @@ -71,13 +49,13 @@ impl Claim { #[derive(Copy, Clone, Serialize, Deserialize)] pub struct InteractionClaim { - pub total_sum: SecureField, - pub claimed_sum: Option, + pub logup_sums: LogupSums, } impl InteractionClaim { pub fn mix_into(&self, channel: &mut impl Channel) { - channel.mix_felts(&[self.total_sum]); - if let Some(claimed_sum) = self.claimed_sum { + let (total_sum, claimed_sum) = self.logup_sums; + channel.mix_felts(&[total_sum]); + if let Some(claimed_sum) = claimed_sum { channel.mix_felts(&[claimed_sum.0]); channel.mix_u64(claimed_sum.1 as u64); } @@ -345,12 +323,12 @@ impl FrameworkEval for Eval { let mid_limbs_set_col227 = eval.next_trace_mask(); let next_pc_jnz_col228 = eval.next_trace_mask(); - // DecodeGenericInstruction. + // decode_generic_instruction. - // DecodeInstruction_337193008ebaa578. + // decode_instruction_337193008ebaa578. eval.add_to_relation(&[RelationEntry::new( - &self.verify_instruction_lookup_elements, + &self.verifyinstruction_lookup_elements, E::EF::one(), &[ input_pc_col0.clone(), @@ -375,44 +353,44 @@ impl FrameworkEval for Eval { ], )]); - let op1_base_op0_tmp_230 = (((M31_1.clone() - op1_imm_col8.clone()) + let op1_base_op0_tmp_225 = (((M31_1.clone() - op1_imm_col8.clone()) - op1_base_fp_col9.clone()) - op1_base_ap_col10.clone()); // op1_src is 0, 1, 2, or 4. eval.add_constraint( - (op1_base_op0_tmp_230.clone() * (M31_1.clone() - op1_base_op0_tmp_230.clone())), + (op1_base_op0_tmp_225.clone() * (M31_1.clone() - op1_base_op0_tmp_225.clone())), ); - let res_op1_tmp_231 = (((M31_1.clone() - res_add_col11.clone()) - res_mul_col12.clone()) + let res_op1_tmp_226 = (((M31_1.clone() - res_add_col11.clone()) - res_mul_col12.clone()) - pc_update_jnz_col15.clone()); // res_logic is 0, 1, or 2. - eval.add_constraint((res_op1_tmp_231.clone() * (M31_1.clone() - res_op1_tmp_231.clone()))); - let pc_update_regular_tmp_232 = (((M31_1.clone() - pc_update_jump_col13.clone()) + eval.add_constraint((res_op1_tmp_226.clone() * (M31_1.clone() - res_op1_tmp_226.clone()))); + let pc_update_regular_tmp_227 = (((M31_1.clone() - pc_update_jump_col13.clone()) - pc_update_jump_rel_col14.clone()) - pc_update_jnz_col15.clone()); // pc_update is 0, 1, 2, or 4. eval.add_constraint( - (pc_update_regular_tmp_232.clone() - * (M31_1.clone() - pc_update_regular_tmp_232.clone())), + (pc_update_regular_tmp_227.clone() + * (M31_1.clone() - pc_update_regular_tmp_227.clone())), ); - let ap_update_regular_tmp_233 = (((M31_1.clone() - ap_update_add_col16.clone()) + let ap_update_regular_tmp_228 = (((M31_1.clone() - ap_update_add_col16.clone()) - ap_update_add_1_col17.clone()) - opcode_call_col18.clone()); // ap_update is 0, 1, 2, or 4. eval.add_constraint( - (ap_update_regular_tmp_233.clone() - * (M31_1.clone() - ap_update_regular_tmp_233.clone())), + (ap_update_regular_tmp_228.clone() + * (M31_1.clone() - ap_update_regular_tmp_228.clone())), ); - let fp_update_regular_tmp_234 = + let fp_update_regular_tmp_229 = ((M31_1.clone() - opcode_call_col18.clone()) - opcode_ret_col19.clone()); // opcode is 0, 1, 2, or 4. eval.add_constraint( - (fp_update_regular_tmp_234.clone() - * (M31_1.clone() - fp_update_regular_tmp_234.clone())), + (fp_update_regular_tmp_229.clone() + * (M31_1.clone() - fp_update_regular_tmp_229.clone())), ); - // EvalOperands. + // eval_operands. - // ReadPositive_num_bits_252. + // read_positive_num_bits_252. eval.add_to_relation(&[RelationEntry::new( &self.memoryaddresstoid_lookup_elements, @@ -461,7 +439,7 @@ impl FrameworkEval for Eval { ], )]); - // ReadPositive_num_bits_252. + // read_positive_num_bits_252. eval.add_to_relation(&[RelationEntry::new( &self.memoryaddresstoid_lookup_elements, @@ -510,60 +488,60 @@ impl FrameworkEval for Eval { ], )]); - // CondFelt252AsAddr. + // cond_felt252_as_addr. // Address limb 3 equals 0. - eval.add_constraint((op1_base_op0_tmp_230.clone() * op0_limb_3_col54.clone())); + eval.add_constraint((op1_base_op0_tmp_225.clone() * op0_limb_3_col54.clone())); // Address limb 4 equals 0. - eval.add_constraint((op1_base_op0_tmp_230.clone() * op0_limb_4_col55.clone())); + eval.add_constraint((op1_base_op0_tmp_225.clone() * op0_limb_4_col55.clone())); // Address limb 5 equals 0. - eval.add_constraint((op1_base_op0_tmp_230.clone() * op0_limb_5_col56.clone())); + eval.add_constraint((op1_base_op0_tmp_225.clone() * op0_limb_5_col56.clone())); // Address limb 6 equals 0. - eval.add_constraint((op1_base_op0_tmp_230.clone() * op0_limb_6_col57.clone())); + eval.add_constraint((op1_base_op0_tmp_225.clone() * op0_limb_6_col57.clone())); // Address limb 7 equals 0. - eval.add_constraint((op1_base_op0_tmp_230.clone() * op0_limb_7_col58.clone())); + eval.add_constraint((op1_base_op0_tmp_225.clone() * op0_limb_7_col58.clone())); // Address limb 8 equals 0. - eval.add_constraint((op1_base_op0_tmp_230.clone() * op0_limb_8_col59.clone())); + eval.add_constraint((op1_base_op0_tmp_225.clone() * op0_limb_8_col59.clone())); // Address limb 9 equals 0. - eval.add_constraint((op1_base_op0_tmp_230.clone() * op0_limb_9_col60.clone())); + eval.add_constraint((op1_base_op0_tmp_225.clone() * op0_limb_9_col60.clone())); // Address limb 10 equals 0. - eval.add_constraint((op1_base_op0_tmp_230.clone() * op0_limb_10_col61.clone())); + eval.add_constraint((op1_base_op0_tmp_225.clone() * op0_limb_10_col61.clone())); // Address limb 11 equals 0. - eval.add_constraint((op1_base_op0_tmp_230.clone() * op0_limb_11_col62.clone())); + eval.add_constraint((op1_base_op0_tmp_225.clone() * op0_limb_11_col62.clone())); // Address limb 12 equals 0. - eval.add_constraint((op1_base_op0_tmp_230.clone() * op0_limb_12_col63.clone())); + eval.add_constraint((op1_base_op0_tmp_225.clone() * op0_limb_12_col63.clone())); // Address limb 13 equals 0. - eval.add_constraint((op1_base_op0_tmp_230.clone() * op0_limb_13_col64.clone())); + eval.add_constraint((op1_base_op0_tmp_225.clone() * op0_limb_13_col64.clone())); // Address limb 14 equals 0. - eval.add_constraint((op1_base_op0_tmp_230.clone() * op0_limb_14_col65.clone())); + eval.add_constraint((op1_base_op0_tmp_225.clone() * op0_limb_14_col65.clone())); // Address limb 15 equals 0. - eval.add_constraint((op1_base_op0_tmp_230.clone() * op0_limb_15_col66.clone())); + eval.add_constraint((op1_base_op0_tmp_225.clone() * op0_limb_15_col66.clone())); // Address limb 16 equals 0. - eval.add_constraint((op1_base_op0_tmp_230.clone() * op0_limb_16_col67.clone())); + eval.add_constraint((op1_base_op0_tmp_225.clone() * op0_limb_16_col67.clone())); // Address limb 17 equals 0. - eval.add_constraint((op1_base_op0_tmp_230.clone() * op0_limb_17_col68.clone())); + eval.add_constraint((op1_base_op0_tmp_225.clone() * op0_limb_17_col68.clone())); // Address limb 18 equals 0. - eval.add_constraint((op1_base_op0_tmp_230.clone() * op0_limb_18_col69.clone())); + eval.add_constraint((op1_base_op0_tmp_225.clone() * op0_limb_18_col69.clone())); // Address limb 19 equals 0. - eval.add_constraint((op1_base_op0_tmp_230.clone() * op0_limb_19_col70.clone())); + eval.add_constraint((op1_base_op0_tmp_225.clone() * op0_limb_19_col70.clone())); // Address limb 20 equals 0. - eval.add_constraint((op1_base_op0_tmp_230.clone() * op0_limb_20_col71.clone())); + eval.add_constraint((op1_base_op0_tmp_225.clone() * op0_limb_20_col71.clone())); // Address limb 21 equals 0. - eval.add_constraint((op1_base_op0_tmp_230.clone() * op0_limb_21_col72.clone())); + eval.add_constraint((op1_base_op0_tmp_225.clone() * op0_limb_21_col72.clone())); // Address limb 22 equals 0. - eval.add_constraint((op1_base_op0_tmp_230.clone() * op0_limb_22_col73.clone())); + eval.add_constraint((op1_base_op0_tmp_225.clone() * op0_limb_22_col73.clone())); // Address limb 23 equals 0. - eval.add_constraint((op1_base_op0_tmp_230.clone() * op0_limb_23_col74.clone())); + eval.add_constraint((op1_base_op0_tmp_225.clone() * op0_limb_23_col74.clone())); // Address limb 24 equals 0. - eval.add_constraint((op1_base_op0_tmp_230.clone() * op0_limb_24_col75.clone())); + eval.add_constraint((op1_base_op0_tmp_225.clone() * op0_limb_24_col75.clone())); // Address limb 25 equals 0. - eval.add_constraint((op1_base_op0_tmp_230.clone() * op0_limb_25_col76.clone())); + eval.add_constraint((op1_base_op0_tmp_225.clone() * op0_limb_25_col76.clone())); // Address limb 26 equals 0. - eval.add_constraint((op1_base_op0_tmp_230.clone() * op0_limb_26_col77.clone())); + eval.add_constraint((op1_base_op0_tmp_225.clone() * op0_limb_26_col77.clone())); // Address limb 27 equals 0. - eval.add_constraint((op1_base_op0_tmp_230.clone() * op0_limb_27_col78.clone())); + eval.add_constraint((op1_base_op0_tmp_225.clone() * op0_limb_27_col78.clone())); - // ReadPositive_num_bits_252. + // read_positive_num_bits_252. eval.add_to_relation(&[RelationEntry::new( &self.memoryaddresstoid_lookup_elements, @@ -572,7 +550,7 @@ impl FrameworkEval for Eval { (((((op1_base_fp_col9.clone() * input_fp_col2.clone()) + (op1_base_ap_col10.clone() * input_ap_col1.clone())) + (op1_imm_col8.clone() * input_pc_col0.clone())) - + (op1_base_op0_tmp_230.clone() + + (op1_base_op0_tmp_225.clone() * ((op0_limb_0_col51.clone() + (op0_limb_1_col52.clone() * M31_512.clone())) + (op0_limb_2_col53.clone() * M31_262144.clone())))) @@ -617,42 +595,42 @@ impl FrameworkEval for Eval { ], )]); - // Add252. + // add252. - // RangeCheckBigValue. + // range_check_big_value. eval.add_to_relation(&[RelationEntry::new( - &self.range_check_9_9_lookup_elements, + &self.rangecheck_9_9_lookup_elements, E::EF::one(), &[add_res_limb_0_col108.clone(), add_res_limb_1_col109.clone()], )]); eval.add_to_relation(&[RelationEntry::new( - &self.range_check_9_9_lookup_elements, + &self.rangecheck_9_9_lookup_elements, E::EF::one(), &[add_res_limb_2_col110.clone(), add_res_limb_3_col111.clone()], )]); eval.add_to_relation(&[RelationEntry::new( - &self.range_check_9_9_lookup_elements, + &self.rangecheck_9_9_lookup_elements, E::EF::one(), &[add_res_limb_4_col112.clone(), add_res_limb_5_col113.clone()], )]); eval.add_to_relation(&[RelationEntry::new( - &self.range_check_9_9_lookup_elements, + &self.rangecheck_9_9_lookup_elements, E::EF::one(), &[add_res_limb_6_col114.clone(), add_res_limb_7_col115.clone()], )]); eval.add_to_relation(&[RelationEntry::new( - &self.range_check_9_9_lookup_elements, + &self.rangecheck_9_9_lookup_elements, E::EF::one(), &[add_res_limb_8_col116.clone(), add_res_limb_9_col117.clone()], )]); eval.add_to_relation(&[RelationEntry::new( - &self.range_check_9_9_lookup_elements, + &self.rangecheck_9_9_lookup_elements, E::EF::one(), &[ add_res_limb_10_col118.clone(), @@ -661,7 +639,7 @@ impl FrameworkEval for Eval { )]); eval.add_to_relation(&[RelationEntry::new( - &self.range_check_9_9_lookup_elements, + &self.rangecheck_9_9_lookup_elements, E::EF::one(), &[ add_res_limb_12_col120.clone(), @@ -670,7 +648,7 @@ impl FrameworkEval for Eval { )]); eval.add_to_relation(&[RelationEntry::new( - &self.range_check_9_9_lookup_elements, + &self.rangecheck_9_9_lookup_elements, E::EF::one(), &[ add_res_limb_14_col122.clone(), @@ -679,7 +657,7 @@ impl FrameworkEval for Eval { )]); eval.add_to_relation(&[RelationEntry::new( - &self.range_check_9_9_lookup_elements, + &self.rangecheck_9_9_lookup_elements, E::EF::one(), &[ add_res_limb_16_col124.clone(), @@ -688,7 +666,7 @@ impl FrameworkEval for Eval { )]); eval.add_to_relation(&[RelationEntry::new( - &self.range_check_9_9_lookup_elements, + &self.rangecheck_9_9_lookup_elements, E::EF::one(), &[ add_res_limb_18_col126.clone(), @@ -697,7 +675,7 @@ impl FrameworkEval for Eval { )]); eval.add_to_relation(&[RelationEntry::new( - &self.range_check_9_9_lookup_elements, + &self.rangecheck_9_9_lookup_elements, E::EF::one(), &[ add_res_limb_20_col128.clone(), @@ -706,7 +684,7 @@ impl FrameworkEval for Eval { )]); eval.add_to_relation(&[RelationEntry::new( - &self.range_check_9_9_lookup_elements, + &self.rangecheck_9_9_lookup_elements, E::EF::one(), &[ add_res_limb_22_col130.clone(), @@ -715,7 +693,7 @@ impl FrameworkEval for Eval { )]); eval.add_to_relation(&[RelationEntry::new( - &self.range_check_9_9_lookup_elements, + &self.rangecheck_9_9_lookup_elements, E::EF::one(), &[ add_res_limb_24_col132.clone(), @@ -724,7 +702,7 @@ impl FrameworkEval for Eval { )]); eval.add_to_relation(&[RelationEntry::new( - &self.range_check_9_9_lookup_elements, + &self.rangecheck_9_9_lookup_elements, E::EF::one(), &[ add_res_limb_26_col134.clone(), @@ -732,297 +710,297 @@ impl FrameworkEval for Eval { ], )]); - // VerifyAdd252. + // verify_add252. // sub_p_bit is a bit. eval.add_constraint( (sub_p_bit_col136.clone() * (sub_p_bit_col136.clone() - M31_1.clone())), ); - let carry_tmp_745 = (((((op0_limb_0_col51.clone() + op1_limb_0_col80.clone()) + let carry_tmp_740 = (((((op0_limb_0_col51.clone() + op1_limb_0_col80.clone()) + M31_0.clone()) - add_res_limb_0_col108.clone()) - (M31_1.clone() * sub_p_bit_col136.clone())) * M31_4194304.clone()); + eval.add_constraint( + (carry_tmp_740.clone() + * ((carry_tmp_740.clone() * carry_tmp_740.clone()) - M31_1.clone())), + ); + let carry_tmp_741 = (((((op0_limb_1_col52.clone() + op1_limb_1_col81.clone()) + + carry_tmp_740.clone()) + - add_res_limb_1_col109.clone()) + - (M31_0.clone() * sub_p_bit_col136.clone())) + * M31_4194304.clone()); + eval.add_constraint( + (carry_tmp_741.clone() + * ((carry_tmp_741.clone() * carry_tmp_741.clone()) - M31_1.clone())), + ); + let carry_tmp_742 = (((((op0_limb_2_col53.clone() + op1_limb_2_col82.clone()) + + carry_tmp_741.clone()) + - add_res_limb_2_col110.clone()) + - (M31_0.clone() * sub_p_bit_col136.clone())) + * M31_4194304.clone()); + eval.add_constraint( + (carry_tmp_742.clone() + * ((carry_tmp_742.clone() * carry_tmp_742.clone()) - M31_1.clone())), + ); + let carry_tmp_743 = (((((op0_limb_3_col54.clone() + op1_limb_3_col83.clone()) + + carry_tmp_742.clone()) + - add_res_limb_3_col111.clone()) + - (M31_0.clone() * sub_p_bit_col136.clone())) + * M31_4194304.clone()); + eval.add_constraint( + (carry_tmp_743.clone() + * ((carry_tmp_743.clone() * carry_tmp_743.clone()) - M31_1.clone())), + ); + let carry_tmp_744 = (((((op0_limb_4_col55.clone() + op1_limb_4_col84.clone()) + + carry_tmp_743.clone()) + - add_res_limb_4_col112.clone()) + - (M31_0.clone() * sub_p_bit_col136.clone())) + * M31_4194304.clone()); + eval.add_constraint( + (carry_tmp_744.clone() + * ((carry_tmp_744.clone() * carry_tmp_744.clone()) - M31_1.clone())), + ); + let carry_tmp_745 = (((((op0_limb_5_col56.clone() + op1_limb_5_col85.clone()) + + carry_tmp_744.clone()) + - add_res_limb_5_col113.clone()) + - (M31_0.clone() * sub_p_bit_col136.clone())) + * M31_4194304.clone()); eval.add_constraint( (carry_tmp_745.clone() * ((carry_tmp_745.clone() * carry_tmp_745.clone()) - M31_1.clone())), ); - let carry_tmp_746 = (((((op0_limb_1_col52.clone() + op1_limb_1_col81.clone()) + let carry_tmp_746 = (((((op0_limb_6_col57.clone() + op1_limb_6_col86.clone()) + carry_tmp_745.clone()) - - add_res_limb_1_col109.clone()) + - add_res_limb_6_col114.clone()) - (M31_0.clone() * sub_p_bit_col136.clone())) * M31_4194304.clone()); eval.add_constraint( (carry_tmp_746.clone() * ((carry_tmp_746.clone() * carry_tmp_746.clone()) - M31_1.clone())), ); - let carry_tmp_747 = (((((op0_limb_2_col53.clone() + op1_limb_2_col82.clone()) + let carry_tmp_747 = (((((op0_limb_7_col58.clone() + op1_limb_7_col87.clone()) + carry_tmp_746.clone()) - - add_res_limb_2_col110.clone()) + - add_res_limb_7_col115.clone()) - (M31_0.clone() * sub_p_bit_col136.clone())) * M31_4194304.clone()); eval.add_constraint( (carry_tmp_747.clone() * ((carry_tmp_747.clone() * carry_tmp_747.clone()) - M31_1.clone())), ); - let carry_tmp_748 = (((((op0_limb_3_col54.clone() + op1_limb_3_col83.clone()) + let carry_tmp_748 = (((((op0_limb_8_col59.clone() + op1_limb_8_col88.clone()) + carry_tmp_747.clone()) - - add_res_limb_3_col111.clone()) + - add_res_limb_8_col116.clone()) - (M31_0.clone() * sub_p_bit_col136.clone())) * M31_4194304.clone()); eval.add_constraint( (carry_tmp_748.clone() * ((carry_tmp_748.clone() * carry_tmp_748.clone()) - M31_1.clone())), ); - let carry_tmp_749 = (((((op0_limb_4_col55.clone() + op1_limb_4_col84.clone()) + let carry_tmp_749 = (((((op0_limb_9_col60.clone() + op1_limb_9_col89.clone()) + carry_tmp_748.clone()) - - add_res_limb_4_col112.clone()) + - add_res_limb_9_col117.clone()) - (M31_0.clone() * sub_p_bit_col136.clone())) * M31_4194304.clone()); eval.add_constraint( (carry_tmp_749.clone() * ((carry_tmp_749.clone() * carry_tmp_749.clone()) - M31_1.clone())), ); - let carry_tmp_750 = (((((op0_limb_5_col56.clone() + op1_limb_5_col85.clone()) + let carry_tmp_750 = (((((op0_limb_10_col61.clone() + op1_limb_10_col90.clone()) + carry_tmp_749.clone()) - - add_res_limb_5_col113.clone()) + - add_res_limb_10_col118.clone()) - (M31_0.clone() * sub_p_bit_col136.clone())) * M31_4194304.clone()); eval.add_constraint( (carry_tmp_750.clone() * ((carry_tmp_750.clone() * carry_tmp_750.clone()) - M31_1.clone())), ); - let carry_tmp_751 = (((((op0_limb_6_col57.clone() + op1_limb_6_col86.clone()) + let carry_tmp_751 = (((((op0_limb_11_col62.clone() + op1_limb_11_col91.clone()) + carry_tmp_750.clone()) - - add_res_limb_6_col114.clone()) + - add_res_limb_11_col119.clone()) - (M31_0.clone() * sub_p_bit_col136.clone())) * M31_4194304.clone()); eval.add_constraint( (carry_tmp_751.clone() * ((carry_tmp_751.clone() * carry_tmp_751.clone()) - M31_1.clone())), ); - let carry_tmp_752 = (((((op0_limb_7_col58.clone() + op1_limb_7_col87.clone()) + let carry_tmp_752 = (((((op0_limb_12_col63.clone() + op1_limb_12_col92.clone()) + carry_tmp_751.clone()) - - add_res_limb_7_col115.clone()) + - add_res_limb_12_col120.clone()) - (M31_0.clone() * sub_p_bit_col136.clone())) * M31_4194304.clone()); eval.add_constraint( (carry_tmp_752.clone() * ((carry_tmp_752.clone() * carry_tmp_752.clone()) - M31_1.clone())), ); - let carry_tmp_753 = (((((op0_limb_8_col59.clone() + op1_limb_8_col88.clone()) + let carry_tmp_753 = (((((op0_limb_13_col64.clone() + op1_limb_13_col93.clone()) + carry_tmp_752.clone()) - - add_res_limb_8_col116.clone()) + - add_res_limb_13_col121.clone()) - (M31_0.clone() * sub_p_bit_col136.clone())) * M31_4194304.clone()); eval.add_constraint( (carry_tmp_753.clone() * ((carry_tmp_753.clone() * carry_tmp_753.clone()) - M31_1.clone())), ); - let carry_tmp_754 = (((((op0_limb_9_col60.clone() + op1_limb_9_col89.clone()) + let carry_tmp_754 = (((((op0_limb_14_col65.clone() + op1_limb_14_col94.clone()) + carry_tmp_753.clone()) - - add_res_limb_9_col117.clone()) + - add_res_limb_14_col122.clone()) - (M31_0.clone() * sub_p_bit_col136.clone())) * M31_4194304.clone()); eval.add_constraint( (carry_tmp_754.clone() * ((carry_tmp_754.clone() * carry_tmp_754.clone()) - M31_1.clone())), ); - let carry_tmp_755 = (((((op0_limb_10_col61.clone() + op1_limb_10_col90.clone()) + let carry_tmp_755 = (((((op0_limb_15_col66.clone() + op1_limb_15_col95.clone()) + carry_tmp_754.clone()) - - add_res_limb_10_col118.clone()) + - add_res_limb_15_col123.clone()) - (M31_0.clone() * sub_p_bit_col136.clone())) * M31_4194304.clone()); eval.add_constraint( (carry_tmp_755.clone() * ((carry_tmp_755.clone() * carry_tmp_755.clone()) - M31_1.clone())), ); - let carry_tmp_756 = (((((op0_limb_11_col62.clone() + op1_limb_11_col91.clone()) + let carry_tmp_756 = (((((op0_limb_16_col67.clone() + op1_limb_16_col96.clone()) + carry_tmp_755.clone()) - - add_res_limb_11_col119.clone()) + - add_res_limb_16_col124.clone()) - (M31_0.clone() * sub_p_bit_col136.clone())) * M31_4194304.clone()); eval.add_constraint( (carry_tmp_756.clone() * ((carry_tmp_756.clone() * carry_tmp_756.clone()) - M31_1.clone())), ); - let carry_tmp_757 = (((((op0_limb_12_col63.clone() + op1_limb_12_col92.clone()) + let carry_tmp_757 = (((((op0_limb_17_col68.clone() + op1_limb_17_col97.clone()) + carry_tmp_756.clone()) - - add_res_limb_12_col120.clone()) + - add_res_limb_17_col125.clone()) - (M31_0.clone() * sub_p_bit_col136.clone())) * M31_4194304.clone()); eval.add_constraint( (carry_tmp_757.clone() * ((carry_tmp_757.clone() * carry_tmp_757.clone()) - M31_1.clone())), ); - let carry_tmp_758 = (((((op0_limb_13_col64.clone() + op1_limb_13_col93.clone()) + let carry_tmp_758 = (((((op0_limb_18_col69.clone() + op1_limb_18_col98.clone()) + carry_tmp_757.clone()) - - add_res_limb_13_col121.clone()) + - add_res_limb_18_col126.clone()) - (M31_0.clone() * sub_p_bit_col136.clone())) * M31_4194304.clone()); eval.add_constraint( (carry_tmp_758.clone() * ((carry_tmp_758.clone() * carry_tmp_758.clone()) - M31_1.clone())), ); - let carry_tmp_759 = (((((op0_limb_14_col65.clone() + op1_limb_14_col94.clone()) + let carry_tmp_759 = (((((op0_limb_19_col70.clone() + op1_limb_19_col99.clone()) + carry_tmp_758.clone()) - - add_res_limb_14_col122.clone()) + - add_res_limb_19_col127.clone()) - (M31_0.clone() * sub_p_bit_col136.clone())) * M31_4194304.clone()); eval.add_constraint( (carry_tmp_759.clone() * ((carry_tmp_759.clone() * carry_tmp_759.clone()) - M31_1.clone())), ); - let carry_tmp_760 = (((((op0_limb_15_col66.clone() + op1_limb_15_col95.clone()) + let carry_tmp_760 = (((((op0_limb_20_col71.clone() + op1_limb_20_col100.clone()) + carry_tmp_759.clone()) - - add_res_limb_15_col123.clone()) + - add_res_limb_20_col128.clone()) - (M31_0.clone() * sub_p_bit_col136.clone())) * M31_4194304.clone()); eval.add_constraint( (carry_tmp_760.clone() * ((carry_tmp_760.clone() * carry_tmp_760.clone()) - M31_1.clone())), ); - let carry_tmp_761 = (((((op0_limb_16_col67.clone() + op1_limb_16_col96.clone()) + let carry_tmp_761 = (((((op0_limb_21_col72.clone() + op1_limb_21_col101.clone()) + carry_tmp_760.clone()) - - add_res_limb_16_col124.clone()) - - (M31_0.clone() * sub_p_bit_col136.clone())) + - add_res_limb_21_col129.clone()) + - (M31_136.clone() * sub_p_bit_col136.clone())) * M31_4194304.clone()); eval.add_constraint( (carry_tmp_761.clone() * ((carry_tmp_761.clone() * carry_tmp_761.clone()) - M31_1.clone())), ); - let carry_tmp_762 = (((((op0_limb_17_col68.clone() + op1_limb_17_col97.clone()) + let carry_tmp_762 = (((((op0_limb_22_col73.clone() + op1_limb_22_col102.clone()) + carry_tmp_761.clone()) - - add_res_limb_17_col125.clone()) + - add_res_limb_22_col130.clone()) - (M31_0.clone() * sub_p_bit_col136.clone())) * M31_4194304.clone()); eval.add_constraint( (carry_tmp_762.clone() * ((carry_tmp_762.clone() * carry_tmp_762.clone()) - M31_1.clone())), ); - let carry_tmp_763 = (((((op0_limb_18_col69.clone() + op1_limb_18_col98.clone()) + let carry_tmp_763 = (((((op0_limb_23_col74.clone() + op1_limb_23_col103.clone()) + carry_tmp_762.clone()) - - add_res_limb_18_col126.clone()) + - add_res_limb_23_col131.clone()) - (M31_0.clone() * sub_p_bit_col136.clone())) * M31_4194304.clone()); eval.add_constraint( (carry_tmp_763.clone() * ((carry_tmp_763.clone() * carry_tmp_763.clone()) - M31_1.clone())), ); - let carry_tmp_764 = (((((op0_limb_19_col70.clone() + op1_limb_19_col99.clone()) + let carry_tmp_764 = (((((op0_limb_24_col75.clone() + op1_limb_24_col104.clone()) + carry_tmp_763.clone()) - - add_res_limb_19_col127.clone()) + - add_res_limb_24_col132.clone()) - (M31_0.clone() * sub_p_bit_col136.clone())) * M31_4194304.clone()); eval.add_constraint( (carry_tmp_764.clone() * ((carry_tmp_764.clone() * carry_tmp_764.clone()) - M31_1.clone())), ); - let carry_tmp_765 = (((((op0_limb_20_col71.clone() + op1_limb_20_col100.clone()) + let carry_tmp_765 = (((((op0_limb_25_col76.clone() + op1_limb_25_col105.clone()) + carry_tmp_764.clone()) - - add_res_limb_20_col128.clone()) + - add_res_limb_25_col133.clone()) - (M31_0.clone() * sub_p_bit_col136.clone())) * M31_4194304.clone()); eval.add_constraint( (carry_tmp_765.clone() * ((carry_tmp_765.clone() * carry_tmp_765.clone()) - M31_1.clone())), ); - let carry_tmp_766 = (((((op0_limb_21_col72.clone() + op1_limb_21_col101.clone()) + let carry_tmp_766 = (((((op0_limb_26_col77.clone() + op1_limb_26_col106.clone()) + carry_tmp_765.clone()) - - add_res_limb_21_col129.clone()) - - (M31_136.clone() * sub_p_bit_col136.clone())) - * M31_4194304.clone()); - eval.add_constraint( - (carry_tmp_766.clone() - * ((carry_tmp_766.clone() * carry_tmp_766.clone()) - M31_1.clone())), - ); - let carry_tmp_767 = (((((op0_limb_22_col73.clone() + op1_limb_22_col102.clone()) - + carry_tmp_766.clone()) - - add_res_limb_22_col130.clone()) - - (M31_0.clone() * sub_p_bit_col136.clone())) - * M31_4194304.clone()); - eval.add_constraint( - (carry_tmp_767.clone() - * ((carry_tmp_767.clone() * carry_tmp_767.clone()) - M31_1.clone())), - ); - let carry_tmp_768 = (((((op0_limb_23_col74.clone() + op1_limb_23_col103.clone()) - + carry_tmp_767.clone()) - - add_res_limb_23_col131.clone()) - - (M31_0.clone() * sub_p_bit_col136.clone())) - * M31_4194304.clone()); - eval.add_constraint( - (carry_tmp_768.clone() - * ((carry_tmp_768.clone() * carry_tmp_768.clone()) - M31_1.clone())), - ); - let carry_tmp_769 = (((((op0_limb_24_col75.clone() + op1_limb_24_col104.clone()) - + carry_tmp_768.clone()) - - add_res_limb_24_col132.clone()) - - (M31_0.clone() * sub_p_bit_col136.clone())) - * M31_4194304.clone()); - eval.add_constraint( - (carry_tmp_769.clone() - * ((carry_tmp_769.clone() * carry_tmp_769.clone()) - M31_1.clone())), - ); - let carry_tmp_770 = (((((op0_limb_25_col76.clone() + op1_limb_25_col105.clone()) - + carry_tmp_769.clone()) - - add_res_limb_25_col133.clone()) - - (M31_0.clone() * sub_p_bit_col136.clone())) - * M31_4194304.clone()); - eval.add_constraint( - (carry_tmp_770.clone() - * ((carry_tmp_770.clone() * carry_tmp_770.clone()) - M31_1.clone())), - ); - let carry_tmp_771 = (((((op0_limb_26_col77.clone() + op1_limb_26_col106.clone()) - + carry_tmp_770.clone()) - add_res_limb_26_col134.clone()) - (M31_0.clone() * sub_p_bit_col136.clone())) * M31_4194304.clone()); eval.add_constraint( - (carry_tmp_771.clone() - * ((carry_tmp_771.clone() * carry_tmp_771.clone()) - M31_1.clone())), + (carry_tmp_766.clone() + * ((carry_tmp_766.clone() * carry_tmp_766.clone()) - M31_1.clone())), ); eval.add_constraint( - ((((op0_limb_27_col78.clone() + op1_limb_27_col107.clone()) + carry_tmp_771.clone()) + ((((op0_limb_27_col78.clone() + op1_limb_27_col107.clone()) + carry_tmp_766.clone()) - add_res_limb_27_col135.clone()) - (M31_256.clone() * sub_p_bit_col136.clone())), ); - // Mul252. + // mul252. - // RangeCheckBigValue. + // range_check_big_value. eval.add_to_relation(&[RelationEntry::new( - &self.range_check_9_9_lookup_elements, + &self.rangecheck_9_9_lookup_elements, E::EF::one(), &[mul_res_limb_0_col137.clone(), mul_res_limb_1_col138.clone()], )]); eval.add_to_relation(&[RelationEntry::new( - &self.range_check_9_9_lookup_elements, + &self.rangecheck_9_9_lookup_elements, E::EF::one(), &[mul_res_limb_2_col139.clone(), mul_res_limb_3_col140.clone()], )]); eval.add_to_relation(&[RelationEntry::new( - &self.range_check_9_9_lookup_elements, + &self.rangecheck_9_9_lookup_elements, E::EF::one(), &[mul_res_limb_4_col141.clone(), mul_res_limb_5_col142.clone()], )]); eval.add_to_relation(&[RelationEntry::new( - &self.range_check_9_9_lookup_elements, + &self.rangecheck_9_9_lookup_elements, E::EF::one(), &[mul_res_limb_6_col143.clone(), mul_res_limb_7_col144.clone()], )]); eval.add_to_relation(&[RelationEntry::new( - &self.range_check_9_9_lookup_elements, + &self.rangecheck_9_9_lookup_elements, E::EF::one(), &[mul_res_limb_8_col145.clone(), mul_res_limb_9_col146.clone()], )]); eval.add_to_relation(&[RelationEntry::new( - &self.range_check_9_9_lookup_elements, + &self.rangecheck_9_9_lookup_elements, E::EF::one(), &[ mul_res_limb_10_col147.clone(), @@ -1031,7 +1009,7 @@ impl FrameworkEval for Eval { )]); eval.add_to_relation(&[RelationEntry::new( - &self.range_check_9_9_lookup_elements, + &self.rangecheck_9_9_lookup_elements, E::EF::one(), &[ mul_res_limb_12_col149.clone(), @@ -1040,7 +1018,7 @@ impl FrameworkEval for Eval { )]); eval.add_to_relation(&[RelationEntry::new( - &self.range_check_9_9_lookup_elements, + &self.rangecheck_9_9_lookup_elements, E::EF::one(), &[ mul_res_limb_14_col151.clone(), @@ -1049,7 +1027,7 @@ impl FrameworkEval for Eval { )]); eval.add_to_relation(&[RelationEntry::new( - &self.range_check_9_9_lookup_elements, + &self.rangecheck_9_9_lookup_elements, E::EF::one(), &[ mul_res_limb_16_col153.clone(), @@ -1058,7 +1036,7 @@ impl FrameworkEval for Eval { )]); eval.add_to_relation(&[RelationEntry::new( - &self.range_check_9_9_lookup_elements, + &self.rangecheck_9_9_lookup_elements, E::EF::one(), &[ mul_res_limb_18_col155.clone(), @@ -1067,7 +1045,7 @@ impl FrameworkEval for Eval { )]); eval.add_to_relation(&[RelationEntry::new( - &self.range_check_9_9_lookup_elements, + &self.rangecheck_9_9_lookup_elements, E::EF::one(), &[ mul_res_limb_20_col157.clone(), @@ -1076,7 +1054,7 @@ impl FrameworkEval for Eval { )]); eval.add_to_relation(&[RelationEntry::new( - &self.range_check_9_9_lookup_elements, + &self.rangecheck_9_9_lookup_elements, E::EF::one(), &[ mul_res_limb_22_col159.clone(), @@ -1085,7 +1063,7 @@ impl FrameworkEval for Eval { )]); eval.add_to_relation(&[RelationEntry::new( - &self.range_check_9_9_lookup_elements, + &self.rangecheck_9_9_lookup_elements, E::EF::one(), &[ mul_res_limb_24_col161.clone(), @@ -1094,7 +1072,7 @@ impl FrameworkEval for Eval { )]); eval.add_to_relation(&[RelationEntry::new( - &self.range_check_9_9_lookup_elements, + &self.rangecheck_9_9_lookup_elements, E::EF::one(), &[ mul_res_limb_26_col163.clone(), @@ -1102,36 +1080,36 @@ impl FrameworkEval for Eval { ], )]); - // VerifyMul252. + // verify_mul252. - let conv_tmp_787 = ((M31_0.clone() - mul_res_limb_0_col137.clone()) + let conv_tmp_782 = ((M31_0.clone() - mul_res_limb_0_col137.clone()) + (op0_limb_0_col51.clone() * op1_limb_0_col80.clone())); - let conv_tmp_788 = (((M31_0.clone() - mul_res_limb_1_col138.clone()) + let conv_tmp_783 = (((M31_0.clone() - mul_res_limb_1_col138.clone()) + (op0_limb_0_col51.clone() * op1_limb_1_col81.clone())) + (op0_limb_1_col52.clone() * op1_limb_0_col80.clone())); - let conv_tmp_789 = ((((M31_0.clone() - mul_res_limb_2_col139.clone()) + let conv_tmp_784 = ((((M31_0.clone() - mul_res_limb_2_col139.clone()) + (op0_limb_0_col51.clone() * op1_limb_2_col82.clone())) + (op0_limb_1_col52.clone() * op1_limb_1_col81.clone())) + (op0_limb_2_col53.clone() * op1_limb_0_col80.clone())); - let conv_tmp_790 = (((((M31_0.clone() - mul_res_limb_3_col140.clone()) + let conv_tmp_785 = (((((M31_0.clone() - mul_res_limb_3_col140.clone()) + (op0_limb_0_col51.clone() * op1_limb_3_col83.clone())) + (op0_limb_1_col52.clone() * op1_limb_2_col82.clone())) + (op0_limb_2_col53.clone() * op1_limb_1_col81.clone())) + (op0_limb_3_col54.clone() * op1_limb_0_col80.clone())); - let conv_tmp_791 = ((((((M31_0.clone() - mul_res_limb_4_col141.clone()) + let conv_tmp_786 = ((((((M31_0.clone() - mul_res_limb_4_col141.clone()) + (op0_limb_0_col51.clone() * op1_limb_4_col84.clone())) + (op0_limb_1_col52.clone() * op1_limb_3_col83.clone())) + (op0_limb_2_col53.clone() * op1_limb_2_col82.clone())) + (op0_limb_3_col54.clone() * op1_limb_1_col81.clone())) + (op0_limb_4_col55.clone() * op1_limb_0_col80.clone())); - let conv_tmp_792 = (((((((M31_0.clone() - mul_res_limb_5_col142.clone()) + let conv_tmp_787 = (((((((M31_0.clone() - mul_res_limb_5_col142.clone()) + (op0_limb_0_col51.clone() * op1_limb_5_col85.clone())) + (op0_limb_1_col52.clone() * op1_limb_4_col84.clone())) + (op0_limb_2_col53.clone() * op1_limb_3_col83.clone())) + (op0_limb_3_col54.clone() * op1_limb_2_col82.clone())) + (op0_limb_4_col55.clone() * op1_limb_1_col81.clone())) + (op0_limb_5_col56.clone() * op1_limb_0_col80.clone())); - let conv_tmp_793 = ((((((((M31_0.clone() - mul_res_limb_6_col143.clone()) + let conv_tmp_788 = ((((((((M31_0.clone() - mul_res_limb_6_col143.clone()) + (op0_limb_0_col51.clone() * op1_limb_6_col86.clone())) + (op0_limb_1_col52.clone() * op1_limb_5_col85.clone())) + (op0_limb_2_col53.clone() * op1_limb_4_col84.clone())) @@ -1139,7 +1117,7 @@ impl FrameworkEval for Eval { + (op0_limb_4_col55.clone() * op1_limb_2_col82.clone())) + (op0_limb_5_col56.clone() * op1_limb_1_col81.clone())) + (op0_limb_6_col57.clone() * op1_limb_0_col80.clone())); - let conv_tmp_794 = (((((((((M31_0.clone() - mul_res_limb_7_col144.clone()) + let conv_tmp_789 = (((((((((M31_0.clone() - mul_res_limb_7_col144.clone()) + (op0_limb_0_col51.clone() * op1_limb_7_col87.clone())) + (op0_limb_1_col52.clone() * op1_limb_6_col86.clone())) + (op0_limb_2_col53.clone() * op1_limb_5_col85.clone())) @@ -1148,7 +1126,7 @@ impl FrameworkEval for Eval { + (op0_limb_5_col56.clone() * op1_limb_2_col82.clone())) + (op0_limb_6_col57.clone() * op1_limb_1_col81.clone())) + (op0_limb_7_col58.clone() * op1_limb_0_col80.clone())); - let conv_tmp_795 = ((((((((((M31_0.clone() - mul_res_limb_8_col145.clone()) + let conv_tmp_790 = ((((((((((M31_0.clone() - mul_res_limb_8_col145.clone()) + (op0_limb_0_col51.clone() * op1_limb_8_col88.clone())) + (op0_limb_1_col52.clone() * op1_limb_7_col87.clone())) + (op0_limb_2_col53.clone() * op1_limb_6_col86.clone())) @@ -1158,7 +1136,7 @@ impl FrameworkEval for Eval { + (op0_limb_6_col57.clone() * op1_limb_2_col82.clone())) + (op0_limb_7_col58.clone() * op1_limb_1_col81.clone())) + (op0_limb_8_col59.clone() * op1_limb_0_col80.clone())); - let conv_tmp_796 = (((((((((((M31_0.clone() - mul_res_limb_9_col146.clone()) + let conv_tmp_791 = (((((((((((M31_0.clone() - mul_res_limb_9_col146.clone()) + (op0_limb_0_col51.clone() * op1_limb_9_col89.clone())) + (op0_limb_1_col52.clone() * op1_limb_8_col88.clone())) + (op0_limb_2_col53.clone() * op1_limb_7_col87.clone())) @@ -1169,7 +1147,7 @@ impl FrameworkEval for Eval { + (op0_limb_7_col58.clone() * op1_limb_2_col82.clone())) + (op0_limb_8_col59.clone() * op1_limb_1_col81.clone())) + (op0_limb_9_col60.clone() * op1_limb_0_col80.clone())); - let conv_tmp_797 = ((((((((((((M31_0.clone() - mul_res_limb_10_col147.clone()) + let conv_tmp_792 = ((((((((((((M31_0.clone() - mul_res_limb_10_col147.clone()) + (op0_limb_0_col51.clone() * op1_limb_10_col90.clone())) + (op0_limb_1_col52.clone() * op1_limb_9_col89.clone())) + (op0_limb_2_col53.clone() * op1_limb_8_col88.clone())) @@ -1181,7 +1159,7 @@ impl FrameworkEval for Eval { + (op0_limb_8_col59.clone() * op1_limb_2_col82.clone())) + (op0_limb_9_col60.clone() * op1_limb_1_col81.clone())) + (op0_limb_10_col61.clone() * op1_limb_0_col80.clone())); - let conv_tmp_798 = (((((((((((((M31_0.clone() - mul_res_limb_11_col148.clone()) + let conv_tmp_793 = (((((((((((((M31_0.clone() - mul_res_limb_11_col148.clone()) + (op0_limb_0_col51.clone() * op1_limb_11_col91.clone())) + (op0_limb_1_col52.clone() * op1_limb_10_col90.clone())) + (op0_limb_2_col53.clone() * op1_limb_9_col89.clone())) @@ -1194,7 +1172,7 @@ impl FrameworkEval for Eval { + (op0_limb_9_col60.clone() * op1_limb_2_col82.clone())) + (op0_limb_10_col61.clone() * op1_limb_1_col81.clone())) + (op0_limb_11_col62.clone() * op1_limb_0_col80.clone())); - let conv_tmp_799 = ((((((((((((((M31_0.clone() + let conv_tmp_794 = ((((((((((((((M31_0.clone() - mul_res_limb_12_col149.clone()) + (op0_limb_0_col51.clone() * op1_limb_12_col92.clone())) + (op0_limb_1_col52.clone() * op1_limb_11_col91.clone())) @@ -1209,7 +1187,7 @@ impl FrameworkEval for Eval { + (op0_limb_10_col61.clone() * op1_limb_2_col82.clone())) + (op0_limb_11_col62.clone() * op1_limb_1_col81.clone())) + (op0_limb_12_col63.clone() * op1_limb_0_col80.clone())); - let conv_tmp_800 = (((((((((((((((M31_0.clone() + let conv_tmp_795 = (((((((((((((((M31_0.clone() - mul_res_limb_13_col150.clone()) + (op0_limb_0_col51.clone() * op1_limb_13_col93.clone())) + (op0_limb_1_col52.clone() * op1_limb_12_col92.clone())) @@ -1225,7 +1203,7 @@ impl FrameworkEval for Eval { + (op0_limb_11_col62.clone() * op1_limb_2_col82.clone())) + (op0_limb_12_col63.clone() * op1_limb_1_col81.clone())) + (op0_limb_13_col64.clone() * op1_limb_0_col80.clone())); - let conv_tmp_801 = ((((((((((((((((M31_0.clone() + let conv_tmp_796 = ((((((((((((((((M31_0.clone() - mul_res_limb_14_col151.clone()) + (op0_limb_0_col51.clone() * op1_limb_14_col94.clone())) + (op0_limb_1_col52.clone() * op1_limb_13_col93.clone())) @@ -1242,7 +1220,7 @@ impl FrameworkEval for Eval { + (op0_limb_12_col63.clone() * op1_limb_2_col82.clone())) + (op0_limb_13_col64.clone() * op1_limb_1_col81.clone())) + (op0_limb_14_col65.clone() * op1_limb_0_col80.clone())); - let conv_tmp_802 = (((((((((((((((((M31_0.clone() + let conv_tmp_797 = (((((((((((((((((M31_0.clone() - mul_res_limb_15_col152.clone()) + (op0_limb_0_col51.clone() * op1_limb_15_col95.clone())) + (op0_limb_1_col52.clone() * op1_limb_14_col94.clone())) @@ -1260,7 +1238,7 @@ impl FrameworkEval for Eval { + (op0_limb_13_col64.clone() * op1_limb_2_col82.clone())) + (op0_limb_14_col65.clone() * op1_limb_1_col81.clone())) + (op0_limb_15_col66.clone() * op1_limb_0_col80.clone())); - let conv_tmp_803 = ((((((((((((((((((M31_0.clone() + let conv_tmp_798 = ((((((((((((((((((M31_0.clone() - mul_res_limb_16_col153.clone()) + (op0_limb_0_col51.clone() * op1_limb_16_col96.clone())) + (op0_limb_1_col52.clone() * op1_limb_15_col95.clone())) @@ -1279,7 +1257,7 @@ impl FrameworkEval for Eval { + (op0_limb_14_col65.clone() * op1_limb_2_col82.clone())) + (op0_limb_15_col66.clone() * op1_limb_1_col81.clone())) + (op0_limb_16_col67.clone() * op1_limb_0_col80.clone())); - let conv_tmp_804 = (((((((((((((((((((M31_0.clone() + let conv_tmp_799 = (((((((((((((((((((M31_0.clone() - mul_res_limb_17_col154.clone()) + (op0_limb_0_col51.clone() * op1_limb_17_col97.clone())) + (op0_limb_1_col52.clone() * op1_limb_16_col96.clone())) @@ -1299,7 +1277,7 @@ impl FrameworkEval for Eval { + (op0_limb_15_col66.clone() * op1_limb_2_col82.clone())) + (op0_limb_16_col67.clone() * op1_limb_1_col81.clone())) + (op0_limb_17_col68.clone() * op1_limb_0_col80.clone())); - let conv_tmp_805 = ((((((((((((((((((((M31_0.clone() + let conv_tmp_800 = ((((((((((((((((((((M31_0.clone() - mul_res_limb_18_col155.clone()) + (op0_limb_0_col51.clone() * op1_limb_18_col98.clone())) + (op0_limb_1_col52.clone() * op1_limb_17_col97.clone())) @@ -1320,7 +1298,7 @@ impl FrameworkEval for Eval { + (op0_limb_16_col67.clone() * op1_limb_2_col82.clone())) + (op0_limb_17_col68.clone() * op1_limb_1_col81.clone())) + (op0_limb_18_col69.clone() * op1_limb_0_col80.clone())); - let conv_tmp_806 = (((((((((((((((((((((M31_0.clone() + let conv_tmp_801 = (((((((((((((((((((((M31_0.clone() - mul_res_limb_19_col156.clone()) + (op0_limb_0_col51.clone() * op1_limb_19_col99.clone())) + (op0_limb_1_col52.clone() * op1_limb_18_col98.clone())) @@ -1342,7 +1320,7 @@ impl FrameworkEval for Eval { + (op0_limb_17_col68.clone() * op1_limb_2_col82.clone())) + (op0_limb_18_col69.clone() * op1_limb_1_col81.clone())) + (op0_limb_19_col70.clone() * op1_limb_0_col80.clone())); - let conv_tmp_807 = ((((((((((((((((((((((M31_0.clone() + let conv_tmp_802 = ((((((((((((((((((((((M31_0.clone() - mul_res_limb_20_col157.clone()) + (op0_limb_0_col51.clone() * op1_limb_20_col100.clone())) + (op0_limb_1_col52.clone() * op1_limb_19_col99.clone())) @@ -1365,7 +1343,7 @@ impl FrameworkEval for Eval { + (op0_limb_18_col69.clone() * op1_limb_2_col82.clone())) + (op0_limb_19_col70.clone() * op1_limb_1_col81.clone())) + (op0_limb_20_col71.clone() * op1_limb_0_col80.clone())); - let conv_tmp_808 = (((((((((((((((((((((((M31_0.clone() + let conv_tmp_803 = (((((((((((((((((((((((M31_0.clone() - mul_res_limb_21_col158.clone()) + (op0_limb_0_col51.clone() * op1_limb_21_col101.clone())) + (op0_limb_1_col52.clone() * op1_limb_20_col100.clone())) @@ -1389,7 +1367,7 @@ impl FrameworkEval for Eval { + (op0_limb_19_col70.clone() * op1_limb_2_col82.clone())) + (op0_limb_20_col71.clone() * op1_limb_1_col81.clone())) + (op0_limb_21_col72.clone() * op1_limb_0_col80.clone())); - let conv_tmp_809 = ((((((((((((((((((((((((M31_0.clone() + let conv_tmp_804 = ((((((((((((((((((((((((M31_0.clone() - mul_res_limb_22_col159.clone()) + (op0_limb_0_col51.clone() * op1_limb_22_col102.clone())) + (op0_limb_1_col52.clone() * op1_limb_21_col101.clone())) @@ -1414,7 +1392,7 @@ impl FrameworkEval for Eval { + (op0_limb_20_col71.clone() * op1_limb_2_col82.clone())) + (op0_limb_21_col72.clone() * op1_limb_1_col81.clone())) + (op0_limb_22_col73.clone() * op1_limb_0_col80.clone())); - let conv_tmp_810 = (((((((((((((((((((((((((M31_0.clone() + let conv_tmp_805 = (((((((((((((((((((((((((M31_0.clone() - mul_res_limb_23_col160.clone()) + (op0_limb_0_col51.clone() * op1_limb_23_col103.clone())) + (op0_limb_1_col52.clone() * op1_limb_22_col102.clone())) @@ -1440,7 +1418,7 @@ impl FrameworkEval for Eval { + (op0_limb_21_col72.clone() * op1_limb_2_col82.clone())) + (op0_limb_22_col73.clone() * op1_limb_1_col81.clone())) + (op0_limb_23_col74.clone() * op1_limb_0_col80.clone())); - let conv_tmp_811 = ((((((((((((((((((((((((((M31_0.clone() + let conv_tmp_806 = ((((((((((((((((((((((((((M31_0.clone() - mul_res_limb_24_col161.clone()) + (op0_limb_0_col51.clone() * op1_limb_24_col104.clone())) + (op0_limb_1_col52.clone() * op1_limb_23_col103.clone())) @@ -1467,7 +1445,7 @@ impl FrameworkEval for Eval { + (op0_limb_22_col73.clone() * op1_limb_2_col82.clone())) + (op0_limb_23_col74.clone() * op1_limb_1_col81.clone())) + (op0_limb_24_col75.clone() * op1_limb_0_col80.clone())); - let conv_tmp_812 = (((((((((((((((((((((((((((M31_0.clone() + let conv_tmp_807 = (((((((((((((((((((((((((((M31_0.clone() - mul_res_limb_25_col162.clone()) + (op0_limb_0_col51.clone() * op1_limb_25_col105.clone())) + (op0_limb_1_col52.clone() * op1_limb_24_col104.clone())) @@ -1495,7 +1473,7 @@ impl FrameworkEval for Eval { + (op0_limb_23_col74.clone() * op1_limb_2_col82.clone())) + (op0_limb_24_col75.clone() * op1_limb_1_col81.clone())) + (op0_limb_25_col76.clone() * op1_limb_0_col80.clone())); - let conv_tmp_813 = ((((((((((((((((((((((((((((M31_0.clone() + let conv_tmp_808 = ((((((((((((((((((((((((((((M31_0.clone() - mul_res_limb_26_col163.clone()) + (op0_limb_0_col51.clone() * op1_limb_26_col106.clone())) + (op0_limb_1_col52.clone() * op1_limb_25_col105.clone())) @@ -1524,7 +1502,7 @@ impl FrameworkEval for Eval { + (op0_limb_24_col75.clone() * op1_limb_2_col82.clone())) + (op0_limb_25_col76.clone() * op1_limb_1_col81.clone())) + (op0_limb_26_col77.clone() * op1_limb_0_col80.clone())); - let conv_tmp_814 = (((((((((((((((((((((((((((((M31_0.clone() + let conv_tmp_809 = (((((((((((((((((((((((((((((M31_0.clone() - mul_res_limb_27_col164.clone()) + (op0_limb_0_col51.clone() * op1_limb_27_col107.clone())) + (op0_limb_1_col52.clone() * op1_limb_26_col106.clone())) @@ -1554,7 +1532,7 @@ impl FrameworkEval for Eval { + (op0_limb_25_col76.clone() * op1_limb_2_col82.clone())) + (op0_limb_26_col77.clone() * op1_limb_1_col81.clone())) + (op0_limb_27_col78.clone() * op1_limb_0_col80.clone())); - let conv_tmp_815 = (((((((((((((((((((((((((((M31_0.clone() + let conv_tmp_810 = (((((((((((((((((((((((((((M31_0.clone() + (op0_limb_1_col52.clone() * op1_limb_27_col107.clone())) + (op0_limb_2_col53.clone() * op1_limb_26_col106.clone())) + (op0_limb_3_col54.clone() * op1_limb_25_col105.clone())) @@ -1582,7 +1560,7 @@ impl FrameworkEval for Eval { + (op0_limb_25_col76.clone() * op1_limb_3_col83.clone())) + (op0_limb_26_col77.clone() * op1_limb_2_col82.clone())) + (op0_limb_27_col78.clone() * op1_limb_1_col81.clone())); - let conv_tmp_816 = ((((((((((((((((((((((((((M31_0.clone() + let conv_tmp_811 = ((((((((((((((((((((((((((M31_0.clone() + (op0_limb_2_col53.clone() * op1_limb_27_col107.clone())) + (op0_limb_3_col54.clone() * op1_limb_26_col106.clone())) + (op0_limb_4_col55.clone() * op1_limb_25_col105.clone())) @@ -1609,7 +1587,7 @@ impl FrameworkEval for Eval { + (op0_limb_25_col76.clone() * op1_limb_4_col84.clone())) + (op0_limb_26_col77.clone() * op1_limb_3_col83.clone())) + (op0_limb_27_col78.clone() * op1_limb_2_col82.clone())); - let conv_tmp_817 = (((((((((((((((((((((((((M31_0.clone() + let conv_tmp_812 = (((((((((((((((((((((((((M31_0.clone() + (op0_limb_3_col54.clone() * op1_limb_27_col107.clone())) + (op0_limb_4_col55.clone() * op1_limb_26_col106.clone())) + (op0_limb_5_col56.clone() * op1_limb_25_col105.clone())) @@ -1635,7 +1613,7 @@ impl FrameworkEval for Eval { + (op0_limb_25_col76.clone() * op1_limb_5_col85.clone())) + (op0_limb_26_col77.clone() * op1_limb_4_col84.clone())) + (op0_limb_27_col78.clone() * op1_limb_3_col83.clone())); - let conv_tmp_818 = ((((((((((((((((((((((((M31_0.clone() + let conv_tmp_813 = ((((((((((((((((((((((((M31_0.clone() + (op0_limb_4_col55.clone() * op1_limb_27_col107.clone())) + (op0_limb_5_col56.clone() * op1_limb_26_col106.clone())) + (op0_limb_6_col57.clone() * op1_limb_25_col105.clone())) @@ -1660,7 +1638,7 @@ impl FrameworkEval for Eval { + (op0_limb_25_col76.clone() * op1_limb_6_col86.clone())) + (op0_limb_26_col77.clone() * op1_limb_5_col85.clone())) + (op0_limb_27_col78.clone() * op1_limb_4_col84.clone())); - let conv_tmp_819 = (((((((((((((((((((((((M31_0.clone() + let conv_tmp_814 = (((((((((((((((((((((((M31_0.clone() + (op0_limb_5_col56.clone() * op1_limb_27_col107.clone())) + (op0_limb_6_col57.clone() * op1_limb_26_col106.clone())) + (op0_limb_7_col58.clone() * op1_limb_25_col105.clone())) @@ -1684,7 +1662,7 @@ impl FrameworkEval for Eval { + (op0_limb_25_col76.clone() * op1_limb_7_col87.clone())) + (op0_limb_26_col77.clone() * op1_limb_6_col86.clone())) + (op0_limb_27_col78.clone() * op1_limb_5_col85.clone())); - let conv_tmp_820 = ((((((((((((((((((((((M31_0.clone() + let conv_tmp_815 = ((((((((((((((((((((((M31_0.clone() + (op0_limb_6_col57.clone() * op1_limb_27_col107.clone())) + (op0_limb_7_col58.clone() * op1_limb_26_col106.clone())) + (op0_limb_8_col59.clone() * op1_limb_25_col105.clone())) @@ -1707,7 +1685,7 @@ impl FrameworkEval for Eval { + (op0_limb_25_col76.clone() * op1_limb_8_col88.clone())) + (op0_limb_26_col77.clone() * op1_limb_7_col87.clone())) + (op0_limb_27_col78.clone() * op1_limb_6_col86.clone())); - let conv_tmp_821 = (((((((((((((((((((((M31_0.clone() + let conv_tmp_816 = (((((((((((((((((((((M31_0.clone() + (op0_limb_7_col58.clone() * op1_limb_27_col107.clone())) + (op0_limb_8_col59.clone() * op1_limb_26_col106.clone())) + (op0_limb_9_col60.clone() * op1_limb_25_col105.clone())) @@ -1729,7 +1707,7 @@ impl FrameworkEval for Eval { + (op0_limb_25_col76.clone() * op1_limb_9_col89.clone())) + (op0_limb_26_col77.clone() * op1_limb_8_col88.clone())) + (op0_limb_27_col78.clone() * op1_limb_7_col87.clone())); - let conv_tmp_822 = ((((((((((((((((((((M31_0.clone() + let conv_tmp_817 = ((((((((((((((((((((M31_0.clone() + (op0_limb_8_col59.clone() * op1_limb_27_col107.clone())) + (op0_limb_9_col60.clone() * op1_limb_26_col106.clone())) + (op0_limb_10_col61.clone() * op1_limb_25_col105.clone())) @@ -1750,7 +1728,7 @@ impl FrameworkEval for Eval { + (op0_limb_25_col76.clone() * op1_limb_10_col90.clone())) + (op0_limb_26_col77.clone() * op1_limb_9_col89.clone())) + (op0_limb_27_col78.clone() * op1_limb_8_col88.clone())); - let conv_tmp_823 = (((((((((((((((((((M31_0.clone() + let conv_tmp_818 = (((((((((((((((((((M31_0.clone() + (op0_limb_9_col60.clone() * op1_limb_27_col107.clone())) + (op0_limb_10_col61.clone() * op1_limb_26_col106.clone())) + (op0_limb_11_col62.clone() * op1_limb_25_col105.clone())) @@ -1770,7 +1748,7 @@ impl FrameworkEval for Eval { + (op0_limb_25_col76.clone() * op1_limb_11_col91.clone())) + (op0_limb_26_col77.clone() * op1_limb_10_col90.clone())) + (op0_limb_27_col78.clone() * op1_limb_9_col89.clone())); - let conv_tmp_824 = ((((((((((((((((((M31_0.clone() + let conv_tmp_819 = ((((((((((((((((((M31_0.clone() + (op0_limb_10_col61.clone() * op1_limb_27_col107.clone())) + (op0_limb_11_col62.clone() * op1_limb_26_col106.clone())) + (op0_limb_12_col63.clone() * op1_limb_25_col105.clone())) @@ -1789,7 +1767,7 @@ impl FrameworkEval for Eval { + (op0_limb_25_col76.clone() * op1_limb_12_col92.clone())) + (op0_limb_26_col77.clone() * op1_limb_11_col91.clone())) + (op0_limb_27_col78.clone() * op1_limb_10_col90.clone())); - let conv_tmp_825 = (((((((((((((((((M31_0.clone() + let conv_tmp_820 = (((((((((((((((((M31_0.clone() + (op0_limb_11_col62.clone() * op1_limb_27_col107.clone())) + (op0_limb_12_col63.clone() * op1_limb_26_col106.clone())) + (op0_limb_13_col64.clone() * op1_limb_25_col105.clone())) @@ -1807,7 +1785,7 @@ impl FrameworkEval for Eval { + (op0_limb_25_col76.clone() * op1_limb_13_col93.clone())) + (op0_limb_26_col77.clone() * op1_limb_12_col92.clone())) + (op0_limb_27_col78.clone() * op1_limb_11_col91.clone())); - let conv_tmp_826 = ((((((((((((((((M31_0.clone() + let conv_tmp_821 = ((((((((((((((((M31_0.clone() + (op0_limb_12_col63.clone() * op1_limb_27_col107.clone())) + (op0_limb_13_col64.clone() * op1_limb_26_col106.clone())) + (op0_limb_14_col65.clone() * op1_limb_25_col105.clone())) @@ -1824,7 +1802,7 @@ impl FrameworkEval for Eval { + (op0_limb_25_col76.clone() * op1_limb_14_col94.clone())) + (op0_limb_26_col77.clone() * op1_limb_13_col93.clone())) + (op0_limb_27_col78.clone() * op1_limb_12_col92.clone())); - let conv_tmp_827 = (((((((((((((((M31_0.clone() + let conv_tmp_822 = (((((((((((((((M31_0.clone() + (op0_limb_13_col64.clone() * op1_limb_27_col107.clone())) + (op0_limb_14_col65.clone() * op1_limb_26_col106.clone())) + (op0_limb_15_col66.clone() * op1_limb_25_col105.clone())) @@ -1840,7 +1818,7 @@ impl FrameworkEval for Eval { + (op0_limb_25_col76.clone() * op1_limb_15_col95.clone())) + (op0_limb_26_col77.clone() * op1_limb_14_col94.clone())) + (op0_limb_27_col78.clone() * op1_limb_13_col93.clone())); - let conv_tmp_828 = ((((((((((((((M31_0.clone() + let conv_tmp_823 = ((((((((((((((M31_0.clone() + (op0_limb_14_col65.clone() * op1_limb_27_col107.clone())) + (op0_limb_15_col66.clone() * op1_limb_26_col106.clone())) + (op0_limb_16_col67.clone() * op1_limb_25_col105.clone())) @@ -1855,7 +1833,7 @@ impl FrameworkEval for Eval { + (op0_limb_25_col76.clone() * op1_limb_16_col96.clone())) + (op0_limb_26_col77.clone() * op1_limb_15_col95.clone())) + (op0_limb_27_col78.clone() * op1_limb_14_col94.clone())); - let conv_tmp_829 = (((((((((((((M31_0.clone() + let conv_tmp_824 = (((((((((((((M31_0.clone() + (op0_limb_15_col66.clone() * op1_limb_27_col107.clone())) + (op0_limb_16_col67.clone() * op1_limb_26_col106.clone())) + (op0_limb_17_col68.clone() * op1_limb_25_col105.clone())) @@ -1869,7 +1847,7 @@ impl FrameworkEval for Eval { + (op0_limb_25_col76.clone() * op1_limb_17_col97.clone())) + (op0_limb_26_col77.clone() * op1_limb_16_col96.clone())) + (op0_limb_27_col78.clone() * op1_limb_15_col95.clone())); - let conv_tmp_830 = ((((((((((((M31_0.clone() + let conv_tmp_825 = ((((((((((((M31_0.clone() + (op0_limb_16_col67.clone() * op1_limb_27_col107.clone())) + (op0_limb_17_col68.clone() * op1_limb_26_col106.clone())) + (op0_limb_18_col69.clone() * op1_limb_25_col105.clone())) @@ -1882,7 +1860,7 @@ impl FrameworkEval for Eval { + (op0_limb_25_col76.clone() * op1_limb_18_col98.clone())) + (op0_limb_26_col77.clone() * op1_limb_17_col97.clone())) + (op0_limb_27_col78.clone() * op1_limb_16_col96.clone())); - let conv_tmp_831 = (((((((((((M31_0.clone() + let conv_tmp_826 = (((((((((((M31_0.clone() + (op0_limb_17_col68.clone() * op1_limb_27_col107.clone())) + (op0_limb_18_col69.clone() * op1_limb_26_col106.clone())) + (op0_limb_19_col70.clone() * op1_limb_25_col105.clone())) @@ -1894,7 +1872,7 @@ impl FrameworkEval for Eval { + (op0_limb_25_col76.clone() * op1_limb_19_col99.clone())) + (op0_limb_26_col77.clone() * op1_limb_18_col98.clone())) + (op0_limb_27_col78.clone() * op1_limb_17_col97.clone())); - let conv_tmp_832 = ((((((((((M31_0.clone() + let conv_tmp_827 = ((((((((((M31_0.clone() + (op0_limb_18_col69.clone() * op1_limb_27_col107.clone())) + (op0_limb_19_col70.clone() * op1_limb_26_col106.clone())) + (op0_limb_20_col71.clone() * op1_limb_25_col105.clone())) @@ -1905,7 +1883,7 @@ impl FrameworkEval for Eval { + (op0_limb_25_col76.clone() * op1_limb_20_col100.clone())) + (op0_limb_26_col77.clone() * op1_limb_19_col99.clone())) + (op0_limb_27_col78.clone() * op1_limb_18_col98.clone())); - let conv_tmp_833 = (((((((((M31_0.clone() + let conv_tmp_828 = (((((((((M31_0.clone() + (op0_limb_19_col70.clone() * op1_limb_27_col107.clone())) + (op0_limb_20_col71.clone() * op1_limb_26_col106.clone())) + (op0_limb_21_col72.clone() * op1_limb_25_col105.clone())) @@ -1915,7 +1893,7 @@ impl FrameworkEval for Eval { + (op0_limb_25_col76.clone() * op1_limb_21_col101.clone())) + (op0_limb_26_col77.clone() * op1_limb_20_col100.clone())) + (op0_limb_27_col78.clone() * op1_limb_19_col99.clone())); - let conv_tmp_834 = ((((((((M31_0.clone() + let conv_tmp_829 = ((((((((M31_0.clone() + (op0_limb_20_col71.clone() * op1_limb_27_col107.clone())) + (op0_limb_21_col72.clone() * op1_limb_26_col106.clone())) + (op0_limb_22_col73.clone() * op1_limb_25_col105.clone())) @@ -1924,7 +1902,7 @@ impl FrameworkEval for Eval { + (op0_limb_25_col76.clone() * op1_limb_22_col102.clone())) + (op0_limb_26_col77.clone() * op1_limb_21_col101.clone())) + (op0_limb_27_col78.clone() * op1_limb_20_col100.clone())); - let conv_tmp_835 = (((((((M31_0.clone() + let conv_tmp_830 = (((((((M31_0.clone() + (op0_limb_21_col72.clone() * op1_limb_27_col107.clone())) + (op0_limb_22_col73.clone() * op1_limb_26_col106.clone())) + (op0_limb_23_col74.clone() * op1_limb_25_col105.clone())) @@ -1932,57 +1910,77 @@ impl FrameworkEval for Eval { + (op0_limb_25_col76.clone() * op1_limb_23_col103.clone())) + (op0_limb_26_col77.clone() * op1_limb_22_col102.clone())) + (op0_limb_27_col78.clone() * op1_limb_21_col101.clone())); - let conv_tmp_836 = ((((((M31_0.clone() + let conv_tmp_831 = ((((((M31_0.clone() + (op0_limb_22_col73.clone() * op1_limb_27_col107.clone())) + (op0_limb_23_col74.clone() * op1_limb_26_col106.clone())) + (op0_limb_24_col75.clone() * op1_limb_25_col105.clone())) + (op0_limb_25_col76.clone() * op1_limb_24_col104.clone())) + (op0_limb_26_col77.clone() * op1_limb_23_col103.clone())) + (op0_limb_27_col78.clone() * op1_limb_22_col102.clone())); - let conv_tmp_837 = (((((M31_0.clone() + let conv_tmp_832 = (((((M31_0.clone() + (op0_limb_23_col74.clone() * op1_limb_27_col107.clone())) + (op0_limb_24_col75.clone() * op1_limb_26_col106.clone())) + (op0_limb_25_col76.clone() * op1_limb_25_col105.clone())) + (op0_limb_26_col77.clone() * op1_limb_24_col104.clone())) + (op0_limb_27_col78.clone() * op1_limb_23_col103.clone())); - let conv_tmp_838 = ((((M31_0.clone() + let conv_tmp_833 = ((((M31_0.clone() + (op0_limb_24_col75.clone() * op1_limb_27_col107.clone())) + (op0_limb_25_col76.clone() * op1_limb_26_col106.clone())) + (op0_limb_26_col77.clone() * op1_limb_25_col105.clone())) + (op0_limb_27_col78.clone() * op1_limb_24_col104.clone())); - let conv_tmp_839 = (((M31_0.clone() + let conv_tmp_834 = (((M31_0.clone() + (op0_limb_25_col76.clone() * op1_limb_27_col107.clone())) + (op0_limb_26_col77.clone() * op1_limb_26_col106.clone())) + (op0_limb_27_col78.clone() * op1_limb_25_col105.clone())); - let conv_tmp_840 = ((M31_0.clone() + let conv_tmp_835 = ((M31_0.clone() + (op0_limb_26_col77.clone() * op1_limb_27_col107.clone())) + (op0_limb_27_col78.clone() * op1_limb_26_col106.clone())); - let conv_tmp_841 = + let conv_tmp_836 = (M31_0.clone() + (op0_limb_27_col78.clone() * op1_limb_27_col107.clone())); - let conv_mod_tmp_842 = (((M31_0.clone() + (M31_32.clone() * conv_tmp_787.clone())) + let conv_mod_tmp_837 = (((M31_0.clone() + (M31_32.clone() * conv_tmp_782.clone())) + - (M31_4.clone() * conv_tmp_803.clone())) + + (M31_8.clone() * conv_tmp_831.clone())); + let conv_mod_tmp_838 = ((((M31_0.clone() + (M31_1.clone() * conv_tmp_782.clone())) + + (M31_32.clone() * conv_tmp_783.clone())) + - (M31_4.clone() * conv_tmp_804.clone())) + + (M31_8.clone() * conv_tmp_832.clone())); + let conv_mod_tmp_839 = ((((M31_0.clone() + (M31_1.clone() * conv_tmp_783.clone())) + + (M31_32.clone() * conv_tmp_784.clone())) + - (M31_4.clone() * conv_tmp_805.clone())) + + (M31_8.clone() * conv_tmp_833.clone())); + let conv_mod_tmp_840 = ((((M31_0.clone() + (M31_1.clone() * conv_tmp_784.clone())) + + (M31_32.clone() * conv_tmp_785.clone())) + - (M31_4.clone() * conv_tmp_806.clone())) + + (M31_8.clone() * conv_tmp_834.clone())); + let conv_mod_tmp_841 = ((((M31_0.clone() + (M31_1.clone() * conv_tmp_785.clone())) + + (M31_32.clone() * conv_tmp_786.clone())) + - (M31_4.clone() * conv_tmp_807.clone())) + + (M31_8.clone() * conv_tmp_835.clone())); + let conv_mod_tmp_842 = ((((M31_0.clone() + (M31_1.clone() * conv_tmp_786.clone())) + + (M31_32.clone() * conv_tmp_787.clone())) - (M31_4.clone() * conv_tmp_808.clone())) + (M31_8.clone() * conv_tmp_836.clone())); - let conv_mod_tmp_843 = ((((M31_0.clone() + (M31_1.clone() * conv_tmp_787.clone())) + let conv_mod_tmp_843 = (((M31_0.clone() + (M31_1.clone() * conv_tmp_787.clone())) + (M31_32.clone() * conv_tmp_788.clone())) - - (M31_4.clone() * conv_tmp_809.clone())) - + (M31_8.clone() * conv_tmp_837.clone())); - let conv_mod_tmp_844 = ((((M31_0.clone() + (M31_1.clone() * conv_tmp_788.clone())) + - (M31_4.clone() * conv_tmp_809.clone())); + let conv_mod_tmp_844 = ((((M31_0.clone() + (M31_2.clone() * conv_tmp_782.clone())) + + (M31_1.clone() * conv_tmp_788.clone())) + (M31_32.clone() * conv_tmp_789.clone())) - - (M31_4.clone() * conv_tmp_810.clone())) - + (M31_8.clone() * conv_tmp_838.clone())); - let conv_mod_tmp_845 = ((((M31_0.clone() + (M31_1.clone() * conv_tmp_789.clone())) + - (M31_4.clone() * conv_tmp_810.clone())); + let conv_mod_tmp_845 = ((((M31_0.clone() + (M31_2.clone() * conv_tmp_783.clone())) + + (M31_1.clone() * conv_tmp_789.clone())) + (M31_32.clone() * conv_tmp_790.clone())) - - (M31_4.clone() * conv_tmp_811.clone())) - + (M31_8.clone() * conv_tmp_839.clone())); - let conv_mod_tmp_846 = ((((M31_0.clone() + (M31_1.clone() * conv_tmp_790.clone())) + - (M31_4.clone() * conv_tmp_811.clone())); + let conv_mod_tmp_846 = ((((M31_0.clone() + (M31_2.clone() * conv_tmp_784.clone())) + + (M31_1.clone() * conv_tmp_790.clone())) + (M31_32.clone() * conv_tmp_791.clone())) - - (M31_4.clone() * conv_tmp_812.clone())) - + (M31_8.clone() * conv_tmp_840.clone())); - let conv_mod_tmp_847 = ((((M31_0.clone() + (M31_1.clone() * conv_tmp_791.clone())) + - (M31_4.clone() * conv_tmp_812.clone())); + let conv_mod_tmp_847 = ((((M31_0.clone() + (M31_2.clone() * conv_tmp_785.clone())) + + (M31_1.clone() * conv_tmp_791.clone())) + (M31_32.clone() * conv_tmp_792.clone())) - - (M31_4.clone() * conv_tmp_813.clone())) - + (M31_8.clone() * conv_tmp_841.clone())); - let conv_mod_tmp_848 = (((M31_0.clone() + (M31_1.clone() * conv_tmp_792.clone())) + - (M31_4.clone() * conv_tmp_813.clone())); + let conv_mod_tmp_848 = ((((M31_0.clone() + (M31_2.clone() * conv_tmp_786.clone())) + + (M31_1.clone() * conv_tmp_792.clone())) + (M31_32.clone() * conv_tmp_793.clone())) - (M31_4.clone() * conv_tmp_814.clone())); let conv_mod_tmp_849 = ((((M31_0.clone() + (M31_2.clone() * conv_tmp_787.clone())) @@ -2023,338 +2021,318 @@ impl FrameworkEval for Eval { - (M31_4.clone() * conv_tmp_823.clone())); let conv_mod_tmp_858 = ((((M31_0.clone() + (M31_2.clone() * conv_tmp_796.clone())) + (M31_1.clone() * conv_tmp_802.clone())) - + (M31_32.clone() * conv_tmp_803.clone())) - - (M31_4.clone() * conv_tmp_824.clone())); + - (M31_4.clone() * conv_tmp_824.clone())) + + (M31_64.clone() * conv_tmp_831.clone())); let conv_mod_tmp_859 = ((((M31_0.clone() + (M31_2.clone() * conv_tmp_797.clone())) - + (M31_1.clone() * conv_tmp_803.clone())) - + (M31_32.clone() * conv_tmp_804.clone())) - - (M31_4.clone() * conv_tmp_825.clone())); + - (M31_4.clone() * conv_tmp_825.clone())) + + (M31_2.clone() * conv_tmp_831.clone())) + + (M31_64.clone() * conv_tmp_832.clone())); let conv_mod_tmp_860 = ((((M31_0.clone() + (M31_2.clone() * conv_tmp_798.clone())) - + (M31_1.clone() * conv_tmp_804.clone())) - + (M31_32.clone() * conv_tmp_805.clone())) - - (M31_4.clone() * conv_tmp_826.clone())); + - (M31_4.clone() * conv_tmp_826.clone())) + + (M31_2.clone() * conv_tmp_832.clone())) + + (M31_64.clone() * conv_tmp_833.clone())); let conv_mod_tmp_861 = ((((M31_0.clone() + (M31_2.clone() * conv_tmp_799.clone())) - + (M31_1.clone() * conv_tmp_805.clone())) - + (M31_32.clone() * conv_tmp_806.clone())) - - (M31_4.clone() * conv_tmp_827.clone())); + - (M31_4.clone() * conv_tmp_827.clone())) + + (M31_2.clone() * conv_tmp_833.clone())) + + (M31_64.clone() * conv_tmp_834.clone())); let conv_mod_tmp_862 = ((((M31_0.clone() + (M31_2.clone() * conv_tmp_800.clone())) - + (M31_1.clone() * conv_tmp_806.clone())) - + (M31_32.clone() * conv_tmp_807.clone())) - - (M31_4.clone() * conv_tmp_828.clone())); + - (M31_4.clone() * conv_tmp_828.clone())) + + (M31_2.clone() * conv_tmp_834.clone())) + + (M31_64.clone() * conv_tmp_835.clone())); let conv_mod_tmp_863 = ((((M31_0.clone() + (M31_2.clone() * conv_tmp_801.clone())) - + (M31_1.clone() * conv_tmp_807.clone())) - (M31_4.clone() * conv_tmp_829.clone())) + + (M31_2.clone() * conv_tmp_835.clone())) + (M31_64.clone() * conv_tmp_836.clone())); - let conv_mod_tmp_864 = ((((M31_0.clone() + (M31_2.clone() * conv_tmp_802.clone())) + let conv_mod_tmp_864 = (((M31_0.clone() + (M31_2.clone() * conv_tmp_802.clone())) - (M31_4.clone() * conv_tmp_830.clone())) - + (M31_2.clone() * conv_tmp_836.clone())) - + (M31_64.clone() * conv_tmp_837.clone())); - let conv_mod_tmp_865 = ((((M31_0.clone() + (M31_2.clone() * conv_tmp_803.clone())) - - (M31_4.clone() * conv_tmp_831.clone())) - + (M31_2.clone() * conv_tmp_837.clone())) - + (M31_64.clone() * conv_tmp_838.clone())); - let conv_mod_tmp_866 = ((((M31_0.clone() + (M31_2.clone() * conv_tmp_804.clone())) - - (M31_4.clone() * conv_tmp_832.clone())) - + (M31_2.clone() * conv_tmp_838.clone())) - + (M31_64.clone() * conv_tmp_839.clone())); - let conv_mod_tmp_867 = ((((M31_0.clone() + (M31_2.clone() * conv_tmp_805.clone())) - - (M31_4.clone() * conv_tmp_833.clone())) - + (M31_2.clone() * conv_tmp_839.clone())) - + (M31_64.clone() * conv_tmp_840.clone())); - let conv_mod_tmp_868 = ((((M31_0.clone() + (M31_2.clone() * conv_tmp_806.clone())) - - (M31_4.clone() * conv_tmp_834.clone())) - + (M31_2.clone() * conv_tmp_840.clone())) - + (M31_64.clone() * conv_tmp_841.clone())); - let conv_mod_tmp_869 = (((M31_0.clone() + (M31_2.clone() * conv_tmp_807.clone())) - - (M31_4.clone() * conv_tmp_835.clone())) - + (M31_2.clone() * conv_tmp_841.clone())); - eval.add_to_relation(&[RelationEntry::new( - &self.range_check_19_lookup_elements, + + (M31_2.clone() * conv_tmp_836.clone())); + eval.add_to_relation(&[RelationEntry::new( + &self.rangecheck_19_lookup_elements, E::EF::one(), &[(k_col165.clone() + M31_262144.clone())], )]); eval.add_constraint( ((carry_0_col166.clone() * M31_512.clone()) - - ((conv_mod_tmp_842.clone() - (M31_1.clone() * k_col165.clone())) + - ((conv_mod_tmp_837.clone() - (M31_1.clone() * k_col165.clone())) + M31_0.clone())), ); eval.add_to_relation(&[RelationEntry::new( - &self.range_check_19_lookup_elements, + &self.rangecheck_19_lookup_elements, E::EF::one(), &[(carry_0_col166.clone() + M31_131072.clone())], )]); eval.add_constraint( ((carry_1_col167.clone() * M31_512.clone()) - - (conv_mod_tmp_843.clone() + carry_0_col166.clone())), + - (conv_mod_tmp_838.clone() + carry_0_col166.clone())), ); eval.add_to_relation(&[RelationEntry::new( - &self.range_check_19_lookup_elements, + &self.rangecheck_19_lookup_elements, E::EF::one(), &[(carry_1_col167.clone() + M31_131072.clone())], )]); eval.add_constraint( ((carry_2_col168.clone() * M31_512.clone()) - - (conv_mod_tmp_844.clone() + carry_1_col167.clone())), + - (conv_mod_tmp_839.clone() + carry_1_col167.clone())), ); eval.add_to_relation(&[RelationEntry::new( - &self.range_check_19_lookup_elements, + &self.rangecheck_19_lookup_elements, E::EF::one(), &[(carry_2_col168.clone() + M31_131072.clone())], )]); eval.add_constraint( ((carry_3_col169.clone() * M31_512.clone()) - - (conv_mod_tmp_845.clone() + carry_2_col168.clone())), + - (conv_mod_tmp_840.clone() + carry_2_col168.clone())), ); eval.add_to_relation(&[RelationEntry::new( - &self.range_check_19_lookup_elements, + &self.rangecheck_19_lookup_elements, E::EF::one(), &[(carry_3_col169.clone() + M31_131072.clone())], )]); eval.add_constraint( ((carry_4_col170.clone() * M31_512.clone()) - - (conv_mod_tmp_846.clone() + carry_3_col169.clone())), + - (conv_mod_tmp_841.clone() + carry_3_col169.clone())), ); eval.add_to_relation(&[RelationEntry::new( - &self.range_check_19_lookup_elements, + &self.rangecheck_19_lookup_elements, E::EF::one(), &[(carry_4_col170.clone() + M31_131072.clone())], )]); eval.add_constraint( ((carry_5_col171.clone() * M31_512.clone()) - - (conv_mod_tmp_847.clone() + carry_4_col170.clone())), + - (conv_mod_tmp_842.clone() + carry_4_col170.clone())), ); eval.add_to_relation(&[RelationEntry::new( - &self.range_check_19_lookup_elements, + &self.rangecheck_19_lookup_elements, E::EF::one(), &[(carry_5_col171.clone() + M31_131072.clone())], )]); eval.add_constraint( ((carry_6_col172.clone() * M31_512.clone()) - - (conv_mod_tmp_848.clone() + carry_5_col171.clone())), + - (conv_mod_tmp_843.clone() + carry_5_col171.clone())), ); eval.add_to_relation(&[RelationEntry::new( - &self.range_check_19_lookup_elements, + &self.rangecheck_19_lookup_elements, E::EF::one(), &[(carry_6_col172.clone() + M31_131072.clone())], )]); eval.add_constraint( ((carry_7_col173.clone() * M31_512.clone()) - - (conv_mod_tmp_849.clone() + carry_6_col172.clone())), + - (conv_mod_tmp_844.clone() + carry_6_col172.clone())), ); eval.add_to_relation(&[RelationEntry::new( - &self.range_check_19_lookup_elements, + &self.rangecheck_19_lookup_elements, E::EF::one(), &[(carry_7_col173.clone() + M31_131072.clone())], )]); eval.add_constraint( ((carry_8_col174.clone() * M31_512.clone()) - - (conv_mod_tmp_850.clone() + carry_7_col173.clone())), + - (conv_mod_tmp_845.clone() + carry_7_col173.clone())), ); eval.add_to_relation(&[RelationEntry::new( - &self.range_check_19_lookup_elements, + &self.rangecheck_19_lookup_elements, E::EF::one(), &[(carry_8_col174.clone() + M31_131072.clone())], )]); eval.add_constraint( ((carry_9_col175.clone() * M31_512.clone()) - - (conv_mod_tmp_851.clone() + carry_8_col174.clone())), + - (conv_mod_tmp_846.clone() + carry_8_col174.clone())), ); eval.add_to_relation(&[RelationEntry::new( - &self.range_check_19_lookup_elements, + &self.rangecheck_19_lookup_elements, E::EF::one(), &[(carry_9_col175.clone() + M31_131072.clone())], )]); eval.add_constraint( ((carry_10_col176.clone() * M31_512.clone()) - - (conv_mod_tmp_852.clone() + carry_9_col175.clone())), + - (conv_mod_tmp_847.clone() + carry_9_col175.clone())), ); eval.add_to_relation(&[RelationEntry::new( - &self.range_check_19_lookup_elements, + &self.rangecheck_19_lookup_elements, E::EF::one(), &[(carry_10_col176.clone() + M31_131072.clone())], )]); eval.add_constraint( ((carry_11_col177.clone() * M31_512.clone()) - - (conv_mod_tmp_853.clone() + carry_10_col176.clone())), + - (conv_mod_tmp_848.clone() + carry_10_col176.clone())), ); eval.add_to_relation(&[RelationEntry::new( - &self.range_check_19_lookup_elements, + &self.rangecheck_19_lookup_elements, E::EF::one(), &[(carry_11_col177.clone() + M31_131072.clone())], )]); eval.add_constraint( ((carry_12_col178.clone() * M31_512.clone()) - - (conv_mod_tmp_854.clone() + carry_11_col177.clone())), + - (conv_mod_tmp_849.clone() + carry_11_col177.clone())), ); eval.add_to_relation(&[RelationEntry::new( - &self.range_check_19_lookup_elements, + &self.rangecheck_19_lookup_elements, E::EF::one(), &[(carry_12_col178.clone() + M31_131072.clone())], )]); eval.add_constraint( ((carry_13_col179.clone() * M31_512.clone()) - - (conv_mod_tmp_855.clone() + carry_12_col178.clone())), + - (conv_mod_tmp_850.clone() + carry_12_col178.clone())), ); eval.add_to_relation(&[RelationEntry::new( - &self.range_check_19_lookup_elements, + &self.rangecheck_19_lookup_elements, E::EF::one(), &[(carry_13_col179.clone() + M31_131072.clone())], )]); eval.add_constraint( ((carry_14_col180.clone() * M31_512.clone()) - - (conv_mod_tmp_856.clone() + carry_13_col179.clone())), + - (conv_mod_tmp_851.clone() + carry_13_col179.clone())), ); eval.add_to_relation(&[RelationEntry::new( - &self.range_check_19_lookup_elements, + &self.rangecheck_19_lookup_elements, E::EF::one(), &[(carry_14_col180.clone() + M31_131072.clone())], )]); eval.add_constraint( ((carry_15_col181.clone() * M31_512.clone()) - - (conv_mod_tmp_857.clone() + carry_14_col180.clone())), + - (conv_mod_tmp_852.clone() + carry_14_col180.clone())), ); eval.add_to_relation(&[RelationEntry::new( - &self.range_check_19_lookup_elements, + &self.rangecheck_19_lookup_elements, E::EF::one(), &[(carry_15_col181.clone() + M31_131072.clone())], )]); eval.add_constraint( ((carry_16_col182.clone() * M31_512.clone()) - - (conv_mod_tmp_858.clone() + carry_15_col181.clone())), + - (conv_mod_tmp_853.clone() + carry_15_col181.clone())), ); eval.add_to_relation(&[RelationEntry::new( - &self.range_check_19_lookup_elements, + &self.rangecheck_19_lookup_elements, E::EF::one(), &[(carry_16_col182.clone() + M31_131072.clone())], )]); eval.add_constraint( ((carry_17_col183.clone() * M31_512.clone()) - - (conv_mod_tmp_859.clone() + carry_16_col182.clone())), + - (conv_mod_tmp_854.clone() + carry_16_col182.clone())), ); eval.add_to_relation(&[RelationEntry::new( - &self.range_check_19_lookup_elements, + &self.rangecheck_19_lookup_elements, E::EF::one(), &[(carry_17_col183.clone() + M31_131072.clone())], )]); eval.add_constraint( ((carry_18_col184.clone() * M31_512.clone()) - - (conv_mod_tmp_860.clone() + carry_17_col183.clone())), + - (conv_mod_tmp_855.clone() + carry_17_col183.clone())), ); eval.add_to_relation(&[RelationEntry::new( - &self.range_check_19_lookup_elements, + &self.rangecheck_19_lookup_elements, E::EF::one(), &[(carry_18_col184.clone() + M31_131072.clone())], )]); eval.add_constraint( ((carry_19_col185.clone() * M31_512.clone()) - - (conv_mod_tmp_861.clone() + carry_18_col184.clone())), + - (conv_mod_tmp_856.clone() + carry_18_col184.clone())), ); eval.add_to_relation(&[RelationEntry::new( - &self.range_check_19_lookup_elements, + &self.rangecheck_19_lookup_elements, E::EF::one(), &[(carry_19_col185.clone() + M31_131072.clone())], )]); eval.add_constraint( ((carry_20_col186.clone() * M31_512.clone()) - - (conv_mod_tmp_862.clone() + carry_19_col185.clone())), + - (conv_mod_tmp_857.clone() + carry_19_col185.clone())), ); eval.add_to_relation(&[RelationEntry::new( - &self.range_check_19_lookup_elements, + &self.rangecheck_19_lookup_elements, E::EF::one(), &[(carry_20_col186.clone() + M31_131072.clone())], )]); eval.add_constraint( ((carry_21_col187.clone() * M31_512.clone()) - - ((conv_mod_tmp_863.clone() - (M31_136.clone() * k_col165.clone())) + - ((conv_mod_tmp_858.clone() - (M31_136.clone() * k_col165.clone())) + carry_20_col186.clone())), ); eval.add_to_relation(&[RelationEntry::new( - &self.range_check_19_lookup_elements, + &self.rangecheck_19_lookup_elements, E::EF::one(), &[(carry_21_col187.clone() + M31_131072.clone())], )]); eval.add_constraint( ((carry_22_col188.clone() * M31_512.clone()) - - (conv_mod_tmp_864.clone() + carry_21_col187.clone())), + - (conv_mod_tmp_859.clone() + carry_21_col187.clone())), ); eval.add_to_relation(&[RelationEntry::new( - &self.range_check_19_lookup_elements, + &self.rangecheck_19_lookup_elements, E::EF::one(), &[(carry_22_col188.clone() + M31_131072.clone())], )]); eval.add_constraint( ((carry_23_col189.clone() * M31_512.clone()) - - (conv_mod_tmp_865.clone() + carry_22_col188.clone())), + - (conv_mod_tmp_860.clone() + carry_22_col188.clone())), ); eval.add_to_relation(&[RelationEntry::new( - &self.range_check_19_lookup_elements, + &self.rangecheck_19_lookup_elements, E::EF::one(), &[(carry_23_col189.clone() + M31_131072.clone())], )]); eval.add_constraint( ((carry_24_col190.clone() * M31_512.clone()) - - (conv_mod_tmp_866.clone() + carry_23_col189.clone())), + - (conv_mod_tmp_861.clone() + carry_23_col189.clone())), ); eval.add_to_relation(&[RelationEntry::new( - &self.range_check_19_lookup_elements, + &self.rangecheck_19_lookup_elements, E::EF::one(), &[(carry_24_col190.clone() + M31_131072.clone())], )]); eval.add_constraint( ((carry_25_col191.clone() * M31_512.clone()) - - (conv_mod_tmp_867.clone() + carry_24_col190.clone())), + - (conv_mod_tmp_862.clone() + carry_24_col190.clone())), ); eval.add_to_relation(&[RelationEntry::new( - &self.range_check_19_lookup_elements, + &self.rangecheck_19_lookup_elements, E::EF::one(), &[(carry_25_col191.clone() + M31_131072.clone())], )]); eval.add_constraint( ((carry_26_col192.clone() * M31_512.clone()) - - (conv_mod_tmp_868.clone() + carry_25_col191.clone())), + - (conv_mod_tmp_863.clone() + carry_25_col191.clone())), ); eval.add_to_relation(&[RelationEntry::new( - &self.range_check_19_lookup_elements, + &self.rangecheck_19_lookup_elements, E::EF::one(), &[(carry_26_col192.clone() + M31_131072.clone())], )]); eval.add_constraint( - ((conv_mod_tmp_869.clone() - (M31_256.clone() * k_col165.clone())) + ((conv_mod_tmp_864.clone() - (M31_256.clone() * k_col165.clone())) + carry_26_col192.clone()), ); - let res_constrained_tmp_900 = (M31_1.clone() - pc_update_jnz_col15.clone()); + let res_constrained_tmp_895 = (M31_1.clone() - pc_update_jnz_col15.clone()); eval.add_constraint( - (res_constrained_tmp_900.clone() - * (((res_op1_tmp_231.clone() + (res_constrained_tmp_895.clone() + * (((res_op1_tmp_226.clone() * (res_limb_0_col193.clone() - op1_limb_0_col80.clone())) + (res_add_col11.clone() * (res_limb_0_col193.clone() - add_res_limb_0_col108.clone()))) @@ -2362,8 +2340,8 @@ impl FrameworkEval for Eval { * (res_limb_0_col193.clone() - mul_res_limb_0_col137.clone())))), ); eval.add_constraint( - (res_constrained_tmp_900.clone() - * (((res_op1_tmp_231.clone() + (res_constrained_tmp_895.clone() + * (((res_op1_tmp_226.clone() * (res_limb_1_col194.clone() - op1_limb_1_col81.clone())) + (res_add_col11.clone() * (res_limb_1_col194.clone() - add_res_limb_1_col109.clone()))) @@ -2371,8 +2349,8 @@ impl FrameworkEval for Eval { * (res_limb_1_col194.clone() - mul_res_limb_1_col138.clone())))), ); eval.add_constraint( - (res_constrained_tmp_900.clone() - * (((res_op1_tmp_231.clone() + (res_constrained_tmp_895.clone() + * (((res_op1_tmp_226.clone() * (res_limb_2_col195.clone() - op1_limb_2_col82.clone())) + (res_add_col11.clone() * (res_limb_2_col195.clone() - add_res_limb_2_col110.clone()))) @@ -2380,8 +2358,8 @@ impl FrameworkEval for Eval { * (res_limb_2_col195.clone() - mul_res_limb_2_col139.clone())))), ); eval.add_constraint( - (res_constrained_tmp_900.clone() - * (((res_op1_tmp_231.clone() + (res_constrained_tmp_895.clone() + * (((res_op1_tmp_226.clone() * (res_limb_3_col196.clone() - op1_limb_3_col83.clone())) + (res_add_col11.clone() * (res_limb_3_col196.clone() - add_res_limb_3_col111.clone()))) @@ -2389,8 +2367,8 @@ impl FrameworkEval for Eval { * (res_limb_3_col196.clone() - mul_res_limb_3_col140.clone())))), ); eval.add_constraint( - (res_constrained_tmp_900.clone() - * (((res_op1_tmp_231.clone() + (res_constrained_tmp_895.clone() + * (((res_op1_tmp_226.clone() * (res_limb_4_col197.clone() - op1_limb_4_col84.clone())) + (res_add_col11.clone() * (res_limb_4_col197.clone() - add_res_limb_4_col112.clone()))) @@ -2398,8 +2376,8 @@ impl FrameworkEval for Eval { * (res_limb_4_col197.clone() - mul_res_limb_4_col141.clone())))), ); eval.add_constraint( - (res_constrained_tmp_900.clone() - * (((res_op1_tmp_231.clone() + (res_constrained_tmp_895.clone() + * (((res_op1_tmp_226.clone() * (res_limb_5_col198.clone() - op1_limb_5_col85.clone())) + (res_add_col11.clone() * (res_limb_5_col198.clone() - add_res_limb_5_col113.clone()))) @@ -2407,8 +2385,8 @@ impl FrameworkEval for Eval { * (res_limb_5_col198.clone() - mul_res_limb_5_col142.clone())))), ); eval.add_constraint( - (res_constrained_tmp_900.clone() - * (((res_op1_tmp_231.clone() + (res_constrained_tmp_895.clone() + * (((res_op1_tmp_226.clone() * (res_limb_6_col199.clone() - op1_limb_6_col86.clone())) + (res_add_col11.clone() * (res_limb_6_col199.clone() - add_res_limb_6_col114.clone()))) @@ -2416,8 +2394,8 @@ impl FrameworkEval for Eval { * (res_limb_6_col199.clone() - mul_res_limb_6_col143.clone())))), ); eval.add_constraint( - (res_constrained_tmp_900.clone() - * (((res_op1_tmp_231.clone() + (res_constrained_tmp_895.clone() + * (((res_op1_tmp_226.clone() * (res_limb_7_col200.clone() - op1_limb_7_col87.clone())) + (res_add_col11.clone() * (res_limb_7_col200.clone() - add_res_limb_7_col115.clone()))) @@ -2425,8 +2403,8 @@ impl FrameworkEval for Eval { * (res_limb_7_col200.clone() - mul_res_limb_7_col144.clone())))), ); eval.add_constraint( - (res_constrained_tmp_900.clone() - * (((res_op1_tmp_231.clone() + (res_constrained_tmp_895.clone() + * (((res_op1_tmp_226.clone() * (res_limb_8_col201.clone() - op1_limb_8_col88.clone())) + (res_add_col11.clone() * (res_limb_8_col201.clone() - add_res_limb_8_col116.clone()))) @@ -2434,8 +2412,8 @@ impl FrameworkEval for Eval { * (res_limb_8_col201.clone() - mul_res_limb_8_col145.clone())))), ); eval.add_constraint( - (res_constrained_tmp_900.clone() - * (((res_op1_tmp_231.clone() + (res_constrained_tmp_895.clone() + * (((res_op1_tmp_226.clone() * (res_limb_9_col202.clone() - op1_limb_9_col89.clone())) + (res_add_col11.clone() * (res_limb_9_col202.clone() - add_res_limb_9_col117.clone()))) @@ -2443,8 +2421,8 @@ impl FrameworkEval for Eval { * (res_limb_9_col202.clone() - mul_res_limb_9_col146.clone())))), ); eval.add_constraint( - (res_constrained_tmp_900.clone() - * (((res_op1_tmp_231.clone() + (res_constrained_tmp_895.clone() + * (((res_op1_tmp_226.clone() * (res_limb_10_col203.clone() - op1_limb_10_col90.clone())) + (res_add_col11.clone() * (res_limb_10_col203.clone() - add_res_limb_10_col118.clone()))) @@ -2452,8 +2430,8 @@ impl FrameworkEval for Eval { * (res_limb_10_col203.clone() - mul_res_limb_10_col147.clone())))), ); eval.add_constraint( - (res_constrained_tmp_900.clone() - * (((res_op1_tmp_231.clone() + (res_constrained_tmp_895.clone() + * (((res_op1_tmp_226.clone() * (res_limb_11_col204.clone() - op1_limb_11_col91.clone())) + (res_add_col11.clone() * (res_limb_11_col204.clone() - add_res_limb_11_col119.clone()))) @@ -2461,8 +2439,8 @@ impl FrameworkEval for Eval { * (res_limb_11_col204.clone() - mul_res_limb_11_col148.clone())))), ); eval.add_constraint( - (res_constrained_tmp_900.clone() - * (((res_op1_tmp_231.clone() + (res_constrained_tmp_895.clone() + * (((res_op1_tmp_226.clone() * (res_limb_12_col205.clone() - op1_limb_12_col92.clone())) + (res_add_col11.clone() * (res_limb_12_col205.clone() - add_res_limb_12_col120.clone()))) @@ -2470,8 +2448,8 @@ impl FrameworkEval for Eval { * (res_limb_12_col205.clone() - mul_res_limb_12_col149.clone())))), ); eval.add_constraint( - (res_constrained_tmp_900.clone() - * (((res_op1_tmp_231.clone() + (res_constrained_tmp_895.clone() + * (((res_op1_tmp_226.clone() * (res_limb_13_col206.clone() - op1_limb_13_col93.clone())) + (res_add_col11.clone() * (res_limb_13_col206.clone() - add_res_limb_13_col121.clone()))) @@ -2479,8 +2457,8 @@ impl FrameworkEval for Eval { * (res_limb_13_col206.clone() - mul_res_limb_13_col150.clone())))), ); eval.add_constraint( - (res_constrained_tmp_900.clone() - * (((res_op1_tmp_231.clone() + (res_constrained_tmp_895.clone() + * (((res_op1_tmp_226.clone() * (res_limb_14_col207.clone() - op1_limb_14_col94.clone())) + (res_add_col11.clone() * (res_limb_14_col207.clone() - add_res_limb_14_col122.clone()))) @@ -2488,8 +2466,8 @@ impl FrameworkEval for Eval { * (res_limb_14_col207.clone() - mul_res_limb_14_col151.clone())))), ); eval.add_constraint( - (res_constrained_tmp_900.clone() - * (((res_op1_tmp_231.clone() + (res_constrained_tmp_895.clone() + * (((res_op1_tmp_226.clone() * (res_limb_15_col208.clone() - op1_limb_15_col95.clone())) + (res_add_col11.clone() * (res_limb_15_col208.clone() - add_res_limb_15_col123.clone()))) @@ -2497,8 +2475,8 @@ impl FrameworkEval for Eval { * (res_limb_15_col208.clone() - mul_res_limb_15_col152.clone())))), ); eval.add_constraint( - (res_constrained_tmp_900.clone() - * (((res_op1_tmp_231.clone() + (res_constrained_tmp_895.clone() + * (((res_op1_tmp_226.clone() * (res_limb_16_col209.clone() - op1_limb_16_col96.clone())) + (res_add_col11.clone() * (res_limb_16_col209.clone() - add_res_limb_16_col124.clone()))) @@ -2506,8 +2484,8 @@ impl FrameworkEval for Eval { * (res_limb_16_col209.clone() - mul_res_limb_16_col153.clone())))), ); eval.add_constraint( - (res_constrained_tmp_900.clone() - * (((res_op1_tmp_231.clone() + (res_constrained_tmp_895.clone() + * (((res_op1_tmp_226.clone() * (res_limb_17_col210.clone() - op1_limb_17_col97.clone())) + (res_add_col11.clone() * (res_limb_17_col210.clone() - add_res_limb_17_col125.clone()))) @@ -2515,8 +2493,8 @@ impl FrameworkEval for Eval { * (res_limb_17_col210.clone() - mul_res_limb_17_col154.clone())))), ); eval.add_constraint( - (res_constrained_tmp_900.clone() - * (((res_op1_tmp_231.clone() + (res_constrained_tmp_895.clone() + * (((res_op1_tmp_226.clone() * (res_limb_18_col211.clone() - op1_limb_18_col98.clone())) + (res_add_col11.clone() * (res_limb_18_col211.clone() - add_res_limb_18_col126.clone()))) @@ -2524,8 +2502,8 @@ impl FrameworkEval for Eval { * (res_limb_18_col211.clone() - mul_res_limb_18_col155.clone())))), ); eval.add_constraint( - (res_constrained_tmp_900.clone() - * (((res_op1_tmp_231.clone() + (res_constrained_tmp_895.clone() + * (((res_op1_tmp_226.clone() * (res_limb_19_col212.clone() - op1_limb_19_col99.clone())) + (res_add_col11.clone() * (res_limb_19_col212.clone() - add_res_limb_19_col127.clone()))) @@ -2533,8 +2511,8 @@ impl FrameworkEval for Eval { * (res_limb_19_col212.clone() - mul_res_limb_19_col156.clone())))), ); eval.add_constraint( - (res_constrained_tmp_900.clone() - * (((res_op1_tmp_231.clone() + (res_constrained_tmp_895.clone() + * (((res_op1_tmp_226.clone() * (res_limb_20_col213.clone() - op1_limb_20_col100.clone())) + (res_add_col11.clone() * (res_limb_20_col213.clone() - add_res_limb_20_col128.clone()))) @@ -2542,8 +2520,8 @@ impl FrameworkEval for Eval { * (res_limb_20_col213.clone() - mul_res_limb_20_col157.clone())))), ); eval.add_constraint( - (res_constrained_tmp_900.clone() - * (((res_op1_tmp_231.clone() + (res_constrained_tmp_895.clone() + * (((res_op1_tmp_226.clone() * (res_limb_21_col214.clone() - op1_limb_21_col101.clone())) + (res_add_col11.clone() * (res_limb_21_col214.clone() - add_res_limb_21_col129.clone()))) @@ -2551,8 +2529,8 @@ impl FrameworkEval for Eval { * (res_limb_21_col214.clone() - mul_res_limb_21_col158.clone())))), ); eval.add_constraint( - (res_constrained_tmp_900.clone() - * (((res_op1_tmp_231.clone() + (res_constrained_tmp_895.clone() + * (((res_op1_tmp_226.clone() * (res_limb_22_col215.clone() - op1_limb_22_col102.clone())) + (res_add_col11.clone() * (res_limb_22_col215.clone() - add_res_limb_22_col130.clone()))) @@ -2560,8 +2538,8 @@ impl FrameworkEval for Eval { * (res_limb_22_col215.clone() - mul_res_limb_22_col159.clone())))), ); eval.add_constraint( - (res_constrained_tmp_900.clone() - * (((res_op1_tmp_231.clone() + (res_constrained_tmp_895.clone() + * (((res_op1_tmp_226.clone() * (res_limb_23_col216.clone() - op1_limb_23_col103.clone())) + (res_add_col11.clone() * (res_limb_23_col216.clone() - add_res_limb_23_col131.clone()))) @@ -2569,8 +2547,8 @@ impl FrameworkEval for Eval { * (res_limb_23_col216.clone() - mul_res_limb_23_col160.clone())))), ); eval.add_constraint( - (res_constrained_tmp_900.clone() - * (((res_op1_tmp_231.clone() + (res_constrained_tmp_895.clone() + * (((res_op1_tmp_226.clone() * (res_limb_24_col217.clone() - op1_limb_24_col104.clone())) + (res_add_col11.clone() * (res_limb_24_col217.clone() - add_res_limb_24_col132.clone()))) @@ -2578,8 +2556,8 @@ impl FrameworkEval for Eval { * (res_limb_24_col217.clone() - mul_res_limb_24_col161.clone())))), ); eval.add_constraint( - (res_constrained_tmp_900.clone() - * (((res_op1_tmp_231.clone() + (res_constrained_tmp_895.clone() + * (((res_op1_tmp_226.clone() * (res_limb_25_col218.clone() - op1_limb_25_col105.clone())) + (res_add_col11.clone() * (res_limb_25_col218.clone() - add_res_limb_25_col133.clone()))) @@ -2587,8 +2565,8 @@ impl FrameworkEval for Eval { * (res_limb_25_col218.clone() - mul_res_limb_25_col162.clone())))), ); eval.add_constraint( - (res_constrained_tmp_900.clone() - * (((res_op1_tmp_231.clone() + (res_constrained_tmp_895.clone() + * (((res_op1_tmp_226.clone() * (res_limb_26_col219.clone() - op1_limb_26_col106.clone())) + (res_add_col11.clone() * (res_limb_26_col219.clone() - add_res_limb_26_col134.clone()))) @@ -2596,8 +2574,8 @@ impl FrameworkEval for Eval { * (res_limb_26_col219.clone() - mul_res_limb_26_col163.clone())))), ); eval.add_constraint( - (res_constrained_tmp_900.clone() - * (((res_op1_tmp_231.clone() + (res_constrained_tmp_895.clone() + * (((res_op1_tmp_226.clone() * (res_limb_27_col220.clone() - op1_limb_27_col107.clone())) + (res_add_col11.clone() * (res_limb_27_col220.clone() - add_res_limb_27_col135.clone()))) @@ -2605,7 +2583,7 @@ impl FrameworkEval for Eval { * (res_limb_27_col220.clone() - mul_res_limb_27_col164.clone())))), ); - // HandleOpcodes. + // handle_opcodes. eval.add_constraint( (opcode_assert_eq_col20.clone() @@ -2734,7 +2712,7 @@ impl FrameworkEval for Eval { (opcode_ret_col19.clone() * ((((M31_4.clone() - pc_update_jump_col13.clone()) - dst_base_fp_col6.clone()) - op1_base_fp_col9.clone()) - - res_op1_tmp_231.clone())), + - res_op1_tmp_226.clone())), ); // call opcode offset0 equals 0. eval.add_constraint( @@ -2750,7 +2728,7 @@ impl FrameworkEval for Eval { (opcode_call_col18.clone() * (op0_base_fp_col7.clone() + dst_base_fp_col6.clone())), ); - // CondFelt252AsAddr. + // cond_felt252_as_addr. // Address limb 3 equals 0. eval.add_constraint((opcode_call_col18.clone() * dst_limb_3_col25.clone())); @@ -2810,7 +2788,7 @@ impl FrameworkEval for Eval { - input_fp_col2.clone())), ); - // CondFelt252AsAddr. + // cond_felt252_as_addr. // Address limb 3 equals 0. eval.add_constraint((opcode_call_col18.clone() * op0_limb_3_col54.clone())); @@ -2870,9 +2848,9 @@ impl FrameworkEval for Eval { - (input_pc_col0.clone() + (M31_1.clone() + op1_imm_col8.clone())))), ); - // UpdateRegisters. + // update_registers. - // CondFelt252AsAddr. + // cond_felt252_as_addr. // Address limb 3 equals 0. eval.add_constraint((pc_update_jump_col13.clone() * res_limb_3_col196.clone())); @@ -2925,7 +2903,7 @@ impl FrameworkEval for Eval { // Address limb 27 equals 0. eval.add_constraint((pc_update_jump_col13.clone() * res_limb_27_col220.clone())); - // CondFelt252AsAddr. + // cond_felt252_as_addr. // Address limb 3 equals 0. eval.add_constraint((opcode_ret_col19.clone() * dst_limb_3_col25.clone())); @@ -2978,9 +2956,9 @@ impl FrameworkEval for Eval { // Address limb 27 equals 0. eval.add_constraint((opcode_ret_col19.clone() * dst_limb_27_col49.clone())); - // CondFelt252AsRelImm. + // cond_felt252_as_rel_imm. - // CondDecodeSmallSign. + // cond_decode_small_sign. // msb is a bit. eval.add_constraint((msb_col221.clone() * (msb_col221.clone() - M31_1.clone()))); @@ -3122,14 +3100,14 @@ impl FrameworkEval for Eval { * (res_limb_27_col220.clone() - (msb_col221.clone() * M31_256.clone()))), ); - let diff_from_p_tmp_915 = (dst_limb_0_col22.clone() - M31_1.clone()); - let diff_from_p_tmp_916 = (dst_limb_21_col43.clone() - M31_136.clone()); - let diff_from_p_tmp_917 = (dst_limb_27_col49.clone() - M31_256.clone()); + let diff_from_p_tmp_910 = (dst_limb_0_col22.clone() - M31_1.clone()); + let diff_from_p_tmp_911 = (dst_limb_21_col43.clone() - M31_136.clone()); + let diff_from_p_tmp_912 = (dst_limb_27_col49.clone() - M31_256.clone()); // dst_not_p. eval.add_constraint( ((((((((((((((((((((((((((((((M31_0.clone() - + (diff_from_p_tmp_915.clone() - * diff_from_p_tmp_915.clone())) + + (diff_from_p_tmp_910.clone() + * diff_from_p_tmp_910.clone())) + dst_limb_1_col23.clone()) + dst_limb_2_col24.clone()) + dst_limb_3_col25.clone()) @@ -3150,13 +3128,13 @@ impl FrameworkEval for Eval { + dst_limb_18_col40.clone()) + dst_limb_19_col41.clone()) + dst_limb_20_col42.clone()) - + (diff_from_p_tmp_916.clone() * diff_from_p_tmp_916.clone())) + + (diff_from_p_tmp_911.clone() * diff_from_p_tmp_911.clone())) + dst_limb_22_col44.clone()) + dst_limb_23_col45.clone()) + dst_limb_24_col46.clone()) + dst_limb_25_col47.clone()) + dst_limb_26_col48.clone()) - + (diff_from_p_tmp_917.clone() * diff_from_p_tmp_917.clone())) + + (diff_from_p_tmp_912.clone() * diff_from_p_tmp_912.clone())) * dst_sum_squares_inv_col223.clone()) - M31_1.clone()), ); @@ -3195,9 +3173,9 @@ impl FrameworkEval for Eval { + dst_limb_27_col49.clone()))), ); - // CondFelt252AsRelImm. + // cond_felt252_as_rel_imm. - // CondDecodeSmallSign. + // cond_decode_small_sign. // msb is a bit. eval.add_constraint((msb_col226.clone() * (msb_col226.clone() - M31_1.clone()))); @@ -3423,7 +3401,7 @@ impl FrameworkEval for Eval { &self.opcodes_lookup_elements, -E::EF::one(), &[ - ((((pc_update_regular_tmp_232.clone() + ((((pc_update_regular_tmp_227.clone() * (input_pc_col0.clone() + (M31_1.clone() + op1_imm_col8.clone()))) + (pc_update_jump_col13.clone() * ((res_limb_0_col193.clone() @@ -3446,7 +3424,7 @@ impl FrameworkEval for Eval { - (M31_134217728.clone() * mid_limbs_set_col222.clone())))) + (ap_update_add_1_col17.clone() * M31_1.clone())) + (opcode_call_col18.clone() * M31_2.clone())), - (((fp_update_regular_tmp_234.clone() * input_fp_col2.clone()) + (((fp_update_regular_tmp_229.clone() * input_fp_col2.clone()) + (opcode_ret_col19.clone() * ((dst_limb_0_col22.clone() + (dst_limb_1_col23.clone() * M31_512.clone())) diff --git a/stwo_cairo_prover/crates/prover/src/components/generic_opcode/mod.rs b/stwo_cairo_prover/crates/prover/src/components/generic_opcode/mod.rs index 7d93d744..465c814b 100644 --- a/stwo_cairo_prover/crates/prover/src/components/generic_opcode/mod.rs +++ b/stwo_cairo_prover/crates/prover/src/components/generic_opcode/mod.rs @@ -2,5 +2,5 @@ pub mod component; pub mod prover; -pub use component::{Claim, Component, Eval, InteractionClaim, RelationElements}; +pub use component::{Claim, Component, Eval, InteractionClaim}; pub use prover::{ClaimGenerator, InputType, InteractionClaimGenerator}; diff --git a/stwo_cairo_prover/crates/prover/src/components/generic_opcode/prover.rs b/stwo_cairo_prover/crates/prover/src/components/generic_opcode/prover.rs index edb7b1aa..a2de5857 100644 --- a/stwo_cairo_prover/crates/prover/src/components/generic_opcode/prover.rs +++ b/stwo_cairo_prover/crates/prover/src/components/generic_opcode/prover.rs @@ -1,5 +1,4 @@ -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] +#![cfg_attr(rustfmt, rustfmt_skip)]#![allow(unused_parens)] #![allow(unused_imports)] use itertools::{chain, zip_eq, Itertools}; use num_traits::{One, Zero}; @@ -8,27 +7,23 @@ use prover_types::simd::*; use stwo_prover::constraint_framework::logup::LogupTraceGenerator; use stwo_prover::constraint_framework::Relation; use stwo_prover::core::air::Component; +use stwo_prover::core::backend::{Col, Column}; use stwo_prover::core::backend::simd::column::BaseColumn; -use stwo_prover::core::backend::simd::conversion::{Pack, Unpack}; +use stwo_prover::core::backend::simd::conversion::Unpack; use stwo_prover::core::backend::simd::m31::{PackedM31, LOG_N_LANES, N_LANES}; use stwo_prover::core::backend::simd::qm31::PackedQM31; use stwo_prover::core::backend::simd::SimdBackend; -use stwo_prover::core::backend::{Col, Column}; use stwo_prover::core::fields::m31::M31; -use stwo_prover::core::fields::qm31::QM31; use stwo_prover::core::pcs::TreeBuilder; -use stwo_prover::core::poly::circle::{CanonicCoset, CircleEvaluation}; use stwo_prover::core::poly::BitReversedOrder; +use stwo_prover::core::poly::circle::{CanonicCoset, CircleEvaluation}; use stwo_prover::core::utils::bit_reverse_coset_to_circle_domain_order; use stwo_prover::core::vcs::blake2_merkle::{Blake2sMerkleChannel, Blake2sMerkleHasher}; -use super::component::{Claim, InteractionClaim, RelationElements}; -use crate::components::memory::{memory_address_to_id, memory_id_to_big}; +use super::component::{Claim, InteractionClaim}; +use crate::components::pack_values; use crate::relations; -use crate::components::{pack_values, verify_instruction}; -use crate::components::range_check_vector::range_check_9_9; -use crate::components::range_check_vector::range_check_19; -use crate::relations::MemoryAddressToId; +use crate::components::memory_address_to_id;use crate::components::memory_id_to_big;use crate::components::verify_instruction;use crate::components::range_check_9_9;use crate::components::range_check_19; pub type InputType = CasmState; pub type PackedInputType = PackedCasmState; @@ -39,13 +34,14 @@ pub struct ClaimGenerator { pub inputs: Vec, } impl ClaimGenerator { - pub fn new(cpu_inputs: Vec) -> Self { - Self { inputs: cpu_inputs } + pub fn new(inputs: Vec) -> Self { + Self { inputs } } + pub fn write_trace( mut self, tree_builder: &mut TreeBuilder<'_, '_, SimdBackend, Blake2sMerkleChannel>, - memoryaddresstoid_state: &mut memory_address_to_id::ClaimGenerator,memoryidtobig_state: &mut memory_id_to_big::ClaimGenerator,range_check_19_state: &mut range_check_19::ClaimGenerator,range_check_9_9_state: &mut range_check_9_9::ClaimGenerator,verify_instruction_state: &mut verify_instruction::ClaimGenerator, + memory_address_to_id_state: &mut memory_address_to_id::ClaimGenerator,memory_id_to_big_state: &mut memory_id_to_big::ClaimGenerator,range_check_19_state: &mut range_check_19::ClaimGenerator,range_check_9_9_state: &mut range_check_9_9::ClaimGenerator,verify_instruction_state: &mut verify_instruction::ClaimGenerator, ) -> (Claim, InteractionClaimGenerator) { let n_calls = self.inputs.len(); assert_ne!(n_calls, 0); @@ -59,19 +55,19 @@ impl ClaimGenerator { let packed_inputs = pack_values(&self.inputs); let (trace, mut sub_components_inputs, lookup_data) = - write_trace_simd(packed_inputs, memoryaddresstoid_state,memoryidtobig_state,); + write_trace_simd(packed_inputs, memory_address_to_id_state,memory_id_to_big_state,); if need_padding { sub_components_inputs.bit_reverse_coset_to_circle_domain_order(); } - sub_components_inputs.memoryaddresstoid_inputs.iter().for_each(|inputs| { - memoryaddresstoid_state.add_inputs(&inputs[..n_calls]); - });sub_components_inputs.memoryidtobig_inputs.iter().for_each(|inputs| { - memoryidtobig_state.add_inputs(&inputs[..n_calls]); - });sub_components_inputs.range_check_19_inputs.iter().for_each(|inputs| { + sub_components_inputs.range_check_19_inputs.iter().for_each(|inputs| { range_check_19_state.add_inputs(&inputs[..n_calls]); });sub_components_inputs.range_check_9_9_inputs.iter().for_each(|inputs| { range_check_9_9_state.add_inputs(&inputs[..n_calls]); + });sub_components_inputs.memory_address_to_id_inputs.iter().for_each(|inputs| { + memory_address_to_id_state.add_inputs(&inputs[..n_calls]); + });sub_components_inputs.memory_id_to_big_inputs.iter().for_each(|inputs| { + memory_id_to_big_state.add_inputs(&inputs[..n_calls]); });sub_components_inputs.verify_instruction_inputs.iter().for_each(|inputs| { verify_instruction_state.add_inputs(&inputs[..n_calls]); }); @@ -111,25 +107,24 @@ impl ClaimGenerator { } pub struct SubComponentInputs -{pub memoryaddresstoid_inputs: [Vec; 4],pub memoryidtobig_inputs: [Vec; 4],pub range_check_19_inputs: [Vec; 28],pub range_check_9_9_inputs: [Vec; 28],pub verify_instruction_inputs: [Vec; 1],} +{pub range_check_19_inputs: [Vec; 28],pub range_check_9_9_inputs: [Vec; 28],pub memory_address_to_id_inputs: [Vec; 3],pub memory_id_to_big_inputs: [Vec; 3],pub verify_instruction_inputs: [Vec; 1],} impl SubComponentInputs { #[allow(unused_variables)] fn with_capacity(capacity: usize) -> Self { - Self {memoryaddresstoid_inputs: [Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),],memoryidtobig_inputs: [Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),],range_check_19_inputs: [Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),],range_check_9_9_inputs: [Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),],verify_instruction_inputs: [Vec::with_capacity(capacity),],} - + Self {range_check_19_inputs: [Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),],range_check_9_9_inputs: [Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),],memory_address_to_id_inputs: [Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),],memory_id_to_big_inputs: [Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),],verify_instruction_inputs: [Vec::with_capacity(capacity),],} } fn bit_reverse_coset_to_circle_domain_order(&mut self) { - self.memoryaddresstoid_inputs + self.range_check_19_inputs .iter_mut() .for_each(|vec| bit_reverse_coset_to_circle_domain_order(vec)); - self.memoryidtobig_inputs + self.range_check_9_9_inputs .iter_mut() .for_each(|vec| bit_reverse_coset_to_circle_domain_order(vec)); - self.range_check_19_inputs + self.memory_address_to_id_inputs .iter_mut() .for_each(|vec| bit_reverse_coset_to_circle_domain_order(vec)); - self.range_check_9_9_inputs + self.memory_id_to_big_inputs .iter_mut() .for_each(|vec| bit_reverse_coset_to_circle_domain_order(vec)); self.verify_instruction_inputs @@ -145,10 +140,11 @@ impl SubComponentInputs { #[allow(non_snake_case)] pub fn write_trace_simd( inputs: Vec, - memoryaddresstoid_state: &mut memory_address_to_id::ClaimGenerator,memoryidtobig_state: &mut memory_id_to_big::ClaimGenerator, + memory_address_to_id_state: &mut memory_address_to_id::ClaimGenerator,memory_id_to_big_state: &mut memory_id_to_big::ClaimGenerator, ) -> ([BaseColumn; N_TRACE_COLUMNS], SubComponentInputs, LookupData) { + const N_TRACE_COLUMNS: usize = 229; let mut trace: [_ ;N_TRACE_COLUMNS]= std::array::from_fn (|_| Col::::zeros(inputs.len() * N_LANES)); @@ -160,719 +156,753 @@ pub fn write_trace_simd( inputs.into_iter() .enumerate().for_each(|(row_index, generic_opcode_input)| { - let input_tmp_138 = generic_opcode_input; -let input_pc_col0 = input_tmp_138.pc; + let input_tmp_134 = generic_opcode_input; +let input_pc_col0 = input_tmp_134.pc; trace[0].data[row_index] = input_pc_col0; -let input_ap_col1 = input_tmp_138.ap; +let input_ap_col1 = input_tmp_134.ap; trace[1].data[row_index] = input_ap_col1; -let input_fp_col2 = input_tmp_138.fp; +let input_fp_col2 = input_tmp_134.fp; trace[2].data[row_index] = input_fp_col2; - //DecodeGenericInstruction. + //decode_generic_instruction. + + //decode_instruction_337193008ebaa578. - //DecodeInstruction_337193008ebaa578. - - -sub_components_inputs - .memoryaddresstoid_inputs[0] - .extend(input_pc_col0.unpack()); - let memoryaddresstoid_value_tmp_209 = memoryaddresstoid_state.deduce_output( + +let memory_address_to_id_value_tmp_204 = memory_address_to_id_state.deduce_output( input_pc_col0 ); -sub_components_inputs - .memoryidtobig_inputs[0] - .extend(memoryaddresstoid_value_tmp_209.unpack()); - let memoryidtobig_value_tmp_210 = memoryidtobig_state.deduce_output( - memoryaddresstoid_value_tmp_209 +let memory_id_to_big_value_tmp_205 = memory_id_to_big_state.deduce_output( + memory_address_to_id_value_tmp_204 ); -let offset0_tmp_211 = ((PackedUInt16::from_m31(memoryidtobig_value_tmp_210.get_m31(0))) + (((((PackedUInt16::from_m31(memoryidtobig_value_tmp_210.get_m31(1))) & (UInt16_127))) << (UInt16_9)))); -let offset0_col3 = offset0_tmp_211.as_m31(); +let offset0_tmp_206 = ((PackedUInt16::from_m31(memory_id_to_big_value_tmp_205.get_m31(0))) + (((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_205.get_m31(1))) & (UInt16_127))) << (UInt16_9)))); +let offset0_col3 = offset0_tmp_206.as_m31(); trace[3].data[row_index] = offset0_col3; -let offset1_tmp_212 = ((((((PackedUInt16::from_m31(memoryidtobig_value_tmp_210.get_m31(1))) >> (UInt16_7))) + (((PackedUInt16::from_m31(memoryidtobig_value_tmp_210.get_m31(2))) << (UInt16_2))))) + (((((PackedUInt16::from_m31(memoryidtobig_value_tmp_210.get_m31(3))) & (UInt16_31))) << (UInt16_11)))); -let offset1_col4 = offset1_tmp_212.as_m31(); +let offset1_tmp_207 = ((((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_205.get_m31(1))) >> (UInt16_7))) + (((PackedUInt16::from_m31(memory_id_to_big_value_tmp_205.get_m31(2))) << (UInt16_2))))) + (((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_205.get_m31(3))) & (UInt16_31))) << (UInt16_11)))); +let offset1_col4 = offset1_tmp_207.as_m31(); trace[4].data[row_index] = offset1_col4; -let offset2_tmp_213 = ((((((PackedUInt16::from_m31(memoryidtobig_value_tmp_210.get_m31(3))) >> (UInt16_5))) + (((PackedUInt16::from_m31(memoryidtobig_value_tmp_210.get_m31(4))) << (UInt16_4))))) + (((((PackedUInt16::from_m31(memoryidtobig_value_tmp_210.get_m31(5))) & (UInt16_7))) << (UInt16_13)))); -let offset2_col5 = offset2_tmp_213.as_m31(); +let offset2_tmp_208 = ((((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_205.get_m31(3))) >> (UInt16_5))) + (((PackedUInt16::from_m31(memory_id_to_big_value_tmp_205.get_m31(4))) << (UInt16_4))))) + (((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_205.get_m31(5))) & (UInt16_7))) << (UInt16_13)))); +let offset2_col5 = offset2_tmp_208.as_m31(); trace[5].data[row_index] = offset2_col5; -let dst_base_fp_tmp_214 = ((((((((PackedUInt16::from_m31(memoryidtobig_value_tmp_210.get_m31(5))) >> (UInt16_3))) + (((PackedUInt16::from_m31(memoryidtobig_value_tmp_210.get_m31(6))) << (UInt16_6))))) >> (UInt16_0))) & (UInt16_1)); -let dst_base_fp_col6 = dst_base_fp_tmp_214.as_m31(); +let dst_base_fp_tmp_209 = ((((((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_205.get_m31(5))) >> (UInt16_3))) + (((PackedUInt16::from_m31(memory_id_to_big_value_tmp_205.get_m31(6))) << (UInt16_6))))) >> (UInt16_0))) & (UInt16_1)); +let dst_base_fp_col6 = dst_base_fp_tmp_209.as_m31(); trace[6].data[row_index] = dst_base_fp_col6; -let op0_base_fp_tmp_215 = ((((((((PackedUInt16::from_m31(memoryidtobig_value_tmp_210.get_m31(5))) >> (UInt16_3))) + (((PackedUInt16::from_m31(memoryidtobig_value_tmp_210.get_m31(6))) << (UInt16_6))))) >> (UInt16_1))) & (UInt16_1)); -let op0_base_fp_col7 = op0_base_fp_tmp_215.as_m31(); +let op0_base_fp_tmp_210 = ((((((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_205.get_m31(5))) >> (UInt16_3))) + (((PackedUInt16::from_m31(memory_id_to_big_value_tmp_205.get_m31(6))) << (UInt16_6))))) >> (UInt16_1))) & (UInt16_1)); +let op0_base_fp_col7 = op0_base_fp_tmp_210.as_m31(); trace[7].data[row_index] = op0_base_fp_col7; -let op1_imm_tmp_216 = ((((((((PackedUInt16::from_m31(memoryidtobig_value_tmp_210.get_m31(5))) >> (UInt16_3))) + (((PackedUInt16::from_m31(memoryidtobig_value_tmp_210.get_m31(6))) << (UInt16_6))))) >> (UInt16_2))) & (UInt16_1)); -let op1_imm_col8 = op1_imm_tmp_216.as_m31(); +let op1_imm_tmp_211 = ((((((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_205.get_m31(5))) >> (UInt16_3))) + (((PackedUInt16::from_m31(memory_id_to_big_value_tmp_205.get_m31(6))) << (UInt16_6))))) >> (UInt16_2))) & (UInt16_1)); +let op1_imm_col8 = op1_imm_tmp_211.as_m31(); trace[8].data[row_index] = op1_imm_col8; -let op1_base_fp_tmp_217 = ((((((((PackedUInt16::from_m31(memoryidtobig_value_tmp_210.get_m31(5))) >> (UInt16_3))) + (((PackedUInt16::from_m31(memoryidtobig_value_tmp_210.get_m31(6))) << (UInt16_6))))) >> (UInt16_3))) & (UInt16_1)); -let op1_base_fp_col9 = op1_base_fp_tmp_217.as_m31(); +let op1_base_fp_tmp_212 = ((((((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_205.get_m31(5))) >> (UInt16_3))) + (((PackedUInt16::from_m31(memory_id_to_big_value_tmp_205.get_m31(6))) << (UInt16_6))))) >> (UInt16_3))) & (UInt16_1)); +let op1_base_fp_col9 = op1_base_fp_tmp_212.as_m31(); trace[9].data[row_index] = op1_base_fp_col9; -let op1_base_ap_tmp_218 = ((((((((PackedUInt16::from_m31(memoryidtobig_value_tmp_210.get_m31(5))) >> (UInt16_3))) + (((PackedUInt16::from_m31(memoryidtobig_value_tmp_210.get_m31(6))) << (UInt16_6))))) >> (UInt16_4))) & (UInt16_1)); -let op1_base_ap_col10 = op1_base_ap_tmp_218.as_m31(); +let op1_base_ap_tmp_213 = ((((((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_205.get_m31(5))) >> (UInt16_3))) + (((PackedUInt16::from_m31(memory_id_to_big_value_tmp_205.get_m31(6))) << (UInt16_6))))) >> (UInt16_4))) & (UInt16_1)); +let op1_base_ap_col10 = op1_base_ap_tmp_213.as_m31(); trace[10].data[row_index] = op1_base_ap_col10; -let res_add_tmp_219 = ((((((((PackedUInt16::from_m31(memoryidtobig_value_tmp_210.get_m31(5))) >> (UInt16_3))) + (((PackedUInt16::from_m31(memoryidtobig_value_tmp_210.get_m31(6))) << (UInt16_6))))) >> (UInt16_5))) & (UInt16_1)); -let res_add_col11 = res_add_tmp_219.as_m31(); +let res_add_tmp_214 = ((((((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_205.get_m31(5))) >> (UInt16_3))) + (((PackedUInt16::from_m31(memory_id_to_big_value_tmp_205.get_m31(6))) << (UInt16_6))))) >> (UInt16_5))) & (UInt16_1)); +let res_add_col11 = res_add_tmp_214.as_m31(); trace[11].data[row_index] = res_add_col11; -let res_mul_tmp_220 = ((((((((PackedUInt16::from_m31(memoryidtobig_value_tmp_210.get_m31(5))) >> (UInt16_3))) + (((PackedUInt16::from_m31(memoryidtobig_value_tmp_210.get_m31(6))) << (UInt16_6))))) >> (UInt16_6))) & (UInt16_1)); -let res_mul_col12 = res_mul_tmp_220.as_m31(); +let res_mul_tmp_215 = ((((((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_205.get_m31(5))) >> (UInt16_3))) + (((PackedUInt16::from_m31(memory_id_to_big_value_tmp_205.get_m31(6))) << (UInt16_6))))) >> (UInt16_6))) & (UInt16_1)); +let res_mul_col12 = res_mul_tmp_215.as_m31(); trace[12].data[row_index] = res_mul_col12; -let pc_update_jump_tmp_221 = ((((((((PackedUInt16::from_m31(memoryidtobig_value_tmp_210.get_m31(5))) >> (UInt16_3))) + (((PackedUInt16::from_m31(memoryidtobig_value_tmp_210.get_m31(6))) << (UInt16_6))))) >> (UInt16_7))) & (UInt16_1)); -let pc_update_jump_col13 = pc_update_jump_tmp_221.as_m31(); +let pc_update_jump_tmp_216 = ((((((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_205.get_m31(5))) >> (UInt16_3))) + (((PackedUInt16::from_m31(memory_id_to_big_value_tmp_205.get_m31(6))) << (UInt16_6))))) >> (UInt16_7))) & (UInt16_1)); +let pc_update_jump_col13 = pc_update_jump_tmp_216.as_m31(); trace[13].data[row_index] = pc_update_jump_col13; -let pc_update_jump_rel_tmp_222 = ((((((((PackedUInt16::from_m31(memoryidtobig_value_tmp_210.get_m31(5))) >> (UInt16_3))) + (((PackedUInt16::from_m31(memoryidtobig_value_tmp_210.get_m31(6))) << (UInt16_6))))) >> (UInt16_8))) & (UInt16_1)); -let pc_update_jump_rel_col14 = pc_update_jump_rel_tmp_222.as_m31(); +let pc_update_jump_rel_tmp_217 = ((((((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_205.get_m31(5))) >> (UInt16_3))) + (((PackedUInt16::from_m31(memory_id_to_big_value_tmp_205.get_m31(6))) << (UInt16_6))))) >> (UInt16_8))) & (UInt16_1)); +let pc_update_jump_rel_col14 = pc_update_jump_rel_tmp_217.as_m31(); trace[14].data[row_index] = pc_update_jump_rel_col14; -let pc_update_jnz_tmp_223 = ((((((((PackedUInt16::from_m31(memoryidtobig_value_tmp_210.get_m31(5))) >> (UInt16_3))) + (((PackedUInt16::from_m31(memoryidtobig_value_tmp_210.get_m31(6))) << (UInt16_6))))) >> (UInt16_9))) & (UInt16_1)); -let pc_update_jnz_col15 = pc_update_jnz_tmp_223.as_m31(); +let pc_update_jnz_tmp_218 = ((((((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_205.get_m31(5))) >> (UInt16_3))) + (((PackedUInt16::from_m31(memory_id_to_big_value_tmp_205.get_m31(6))) << (UInt16_6))))) >> (UInt16_9))) & (UInt16_1)); +let pc_update_jnz_col15 = pc_update_jnz_tmp_218.as_m31(); trace[15].data[row_index] = pc_update_jnz_col15; -let ap_update_add_tmp_224 = ((((((((PackedUInt16::from_m31(memoryidtobig_value_tmp_210.get_m31(5))) >> (UInt16_3))) + (((PackedUInt16::from_m31(memoryidtobig_value_tmp_210.get_m31(6))) << (UInt16_6))))) >> (UInt16_10))) & (UInt16_1)); -let ap_update_add_col16 = ap_update_add_tmp_224.as_m31(); +let ap_update_add_tmp_219 = ((((((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_205.get_m31(5))) >> (UInt16_3))) + (((PackedUInt16::from_m31(memory_id_to_big_value_tmp_205.get_m31(6))) << (UInt16_6))))) >> (UInt16_10))) & (UInt16_1)); +let ap_update_add_col16 = ap_update_add_tmp_219.as_m31(); trace[16].data[row_index] = ap_update_add_col16; -let ap_update_add_1_tmp_225 = ((((((((PackedUInt16::from_m31(memoryidtobig_value_tmp_210.get_m31(5))) >> (UInt16_3))) + (((PackedUInt16::from_m31(memoryidtobig_value_tmp_210.get_m31(6))) << (UInt16_6))))) >> (UInt16_11))) & (UInt16_1)); -let ap_update_add_1_col17 = ap_update_add_1_tmp_225.as_m31(); +let ap_update_add_1_tmp_220 = ((((((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_205.get_m31(5))) >> (UInt16_3))) + (((PackedUInt16::from_m31(memory_id_to_big_value_tmp_205.get_m31(6))) << (UInt16_6))))) >> (UInt16_11))) & (UInt16_1)); +let ap_update_add_1_col17 = ap_update_add_1_tmp_220.as_m31(); trace[17].data[row_index] = ap_update_add_1_col17; -let opcode_call_tmp_226 = ((((((((PackedUInt16::from_m31(memoryidtobig_value_tmp_210.get_m31(5))) >> (UInt16_3))) + (((PackedUInt16::from_m31(memoryidtobig_value_tmp_210.get_m31(6))) << (UInt16_6))))) >> (UInt16_12))) & (UInt16_1)); -let opcode_call_col18 = opcode_call_tmp_226.as_m31(); +let opcode_call_tmp_221 = ((((((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_205.get_m31(5))) >> (UInt16_3))) + (((PackedUInt16::from_m31(memory_id_to_big_value_tmp_205.get_m31(6))) << (UInt16_6))))) >> (UInt16_12))) & (UInt16_1)); +let opcode_call_col18 = opcode_call_tmp_221.as_m31(); trace[18].data[row_index] = opcode_call_col18; -let opcode_ret_tmp_227 = ((((((((PackedUInt16::from_m31(memoryidtobig_value_tmp_210.get_m31(5))) >> (UInt16_3))) + (((PackedUInt16::from_m31(memoryidtobig_value_tmp_210.get_m31(6))) << (UInt16_6))))) >> (UInt16_13))) & (UInt16_1)); -let opcode_ret_col19 = opcode_ret_tmp_227.as_m31(); +let opcode_ret_tmp_222 = ((((((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_205.get_m31(5))) >> (UInt16_3))) + (((PackedUInt16::from_m31(memory_id_to_big_value_tmp_205.get_m31(6))) << (UInt16_6))))) >> (UInt16_13))) & (UInt16_1)); +let opcode_ret_col19 = opcode_ret_tmp_222.as_m31(); trace[19].data[row_index] = opcode_ret_col19; -let opcode_assert_eq_tmp_228 = ((((((((PackedUInt16::from_m31(memoryidtobig_value_tmp_210.get_m31(5))) >> (UInt16_3))) + (((PackedUInt16::from_m31(memoryidtobig_value_tmp_210.get_m31(6))) << (UInt16_6))))) >> (UInt16_14))) & (UInt16_1)); -let opcode_assert_eq_col20 = opcode_assert_eq_tmp_228.as_m31(); +let opcode_assert_eq_tmp_223 = ((((((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_205.get_m31(5))) >> (UInt16_3))) + (((PackedUInt16::from_m31(memory_id_to_big_value_tmp_205.get_m31(6))) << (UInt16_6))))) >> (UInt16_14))) & (UInt16_1)); +let opcode_assert_eq_col20 = opcode_assert_eq_tmp_223.as_m31(); trace[20].data[row_index] = opcode_assert_eq_col20; + sub_components_inputs .verify_instruction_inputs[0] .extend((input_pc_col0, [offset0_col3, offset1_col4, offset2_col5], [dst_base_fp_col6, op0_base_fp_col7, op1_imm_col8, op1_base_fp_col9, op1_base_ap_col10, res_add_col11, res_mul_col12, pc_update_jump_col13, pc_update_jump_rel_col14, pc_update_jnz_col15, ap_update_add_col16, ap_update_add_1_col17, opcode_call_col18, opcode_ret_col19, opcode_assert_eq_col20]).unpack()); - -lookup_data.verify_instruction[0].push([input_pc_col0, offset0_col3, offset1_col4, offset2_col5, dst_base_fp_col6, op0_base_fp_col7, op1_imm_col8, op1_base_fp_col9, op1_base_ap_col10, res_add_col11, res_mul_col12, pc_update_jump_col13, pc_update_jump_rel_col14, pc_update_jnz_col15, ap_update_add_col16, ap_update_add_1_col17, opcode_call_col18, opcode_ret_col19, opcode_assert_eq_col20]); - - - -let op1_base_op0_tmp_230 = ((((((M31_1) - (op1_imm_col8))) - (op1_base_fp_col9))) - (op1_base_ap_col10)); -let res_op1_tmp_231 = ((((((M31_1) - (res_add_col11))) - (res_mul_col12))) - (pc_update_jnz_col15)); -let pc_update_regular_tmp_232 = ((((((M31_1) - (pc_update_jump_col13))) - (pc_update_jump_rel_col14))) - (pc_update_jnz_col15)); -let ap_update_regular_tmp_233 = ((((((M31_1) - (ap_update_add_col16))) - (ap_update_add_1_col17))) - (opcode_call_col18)); -let fp_update_regular_tmp_234 = ((((M31_1) - (opcode_call_col18))) - (opcode_ret_col19)); + +lookup_data.verifyinstruction[0].push([input_pc_col0, offset0_col3, offset1_col4, offset2_col5, dst_base_fp_col6, op0_base_fp_col7, op1_imm_col8, op1_base_fp_col9, op1_base_ap_col10, res_add_col11, res_mul_col12, pc_update_jump_col13, pc_update_jump_rel_col14, pc_update_jnz_col15, ap_update_add_col16, ap_update_add_1_col17, opcode_call_col18, opcode_ret_col19, opcode_assert_eq_col20]); + +let op1_base_op0_tmp_225 = ((((((M31_1) - (op1_imm_col8))) - (op1_base_fp_col9))) - (op1_base_ap_col10)); +let res_op1_tmp_226 = ((((((M31_1) - (res_add_col11))) - (res_mul_col12))) - (pc_update_jnz_col15)); +let pc_update_regular_tmp_227 = ((((((M31_1) - (pc_update_jump_col13))) - (pc_update_jump_rel_col14))) - (pc_update_jnz_col15)); +let ap_update_regular_tmp_228 = ((((((M31_1) - (ap_update_add_col16))) - (ap_update_add_1_col17))) - (opcode_call_col18)); +let fp_update_regular_tmp_229 = ((((M31_1) - (opcode_call_col18))) - (opcode_ret_col19)); + - //EvalOperands. + //eval_operands. + - //ReadPositive_num_bits_252. + //read_positive_num_bits_252. - -sub_components_inputs - .memoryaddresstoid_inputs[1] - .extend(((((((dst_base_fp_col6) * (input_fp_col2))) + (((((M31_1) - (dst_base_fp_col6))) * (input_ap_col1))))) + (((offset0_col3) - (M31_32768)))).unpack()); - let memoryaddresstoid_value_tmp_723 = memoryaddresstoid_state.deduce_output( + +let memory_address_to_id_value_tmp_718 = memory_address_to_id_state.deduce_output( ((((((dst_base_fp_col6) * (input_fp_col2))) + (((((M31_1) - (dst_base_fp_col6))) * (input_ap_col1))))) + (((offset0_col3) - (M31_32768)))) ); -let dst_id_col21 = memoryaddresstoid_value_tmp_723; +let memory_id_to_big_value_tmp_719 = memory_id_to_big_state.deduce_output( + memory_address_to_id_value_tmp_718 + ); +let dst_id_col21 = memory_address_to_id_value_tmp_718; trace[21].data[row_index] = dst_id_col21; -lookup_data.memoryaddresstoid[0].push([((((((dst_base_fp_col6) * (input_fp_col2))) + (((((M31_1) - (dst_base_fp_col6))) * (input_ap_col1))))) + (((offset0_col3) - (M31_32768)))), dst_id_col21]); sub_components_inputs - .memoryidtobig_inputs[1] - .extend(dst_id_col21.unpack()); - let memoryidtobig_value_tmp_724 = memoryidtobig_state.deduce_output( - dst_id_col21 - ); -let dst_limb_0_col22 = memoryidtobig_value_tmp_724.get_m31(0); + .memory_address_to_id_inputs[0] + .extend(((((((dst_base_fp_col6) * (input_fp_col2))) + (((((M31_1) - (dst_base_fp_col6))) * (input_ap_col1))))) + (((offset0_col3) - (M31_32768)))).unpack()); + +lookup_data.memoryaddresstoid[0].push([((((((dst_base_fp_col6) * (input_fp_col2))) + (((((M31_1) - (dst_base_fp_col6))) * (input_ap_col1))))) + (((offset0_col3) - (M31_32768)))), dst_id_col21]); +let dst_limb_0_col22 = memory_id_to_big_value_tmp_719.get_m31(0); trace[22].data[row_index] = dst_limb_0_col22; -let dst_limb_1_col23 = memoryidtobig_value_tmp_724.get_m31(1); +let dst_limb_1_col23 = memory_id_to_big_value_tmp_719.get_m31(1); trace[23].data[row_index] = dst_limb_1_col23; -let dst_limb_2_col24 = memoryidtobig_value_tmp_724.get_m31(2); +let dst_limb_2_col24 = memory_id_to_big_value_tmp_719.get_m31(2); trace[24].data[row_index] = dst_limb_2_col24; -let dst_limb_3_col25 = memoryidtobig_value_tmp_724.get_m31(3); +let dst_limb_3_col25 = memory_id_to_big_value_tmp_719.get_m31(3); trace[25].data[row_index] = dst_limb_3_col25; -let dst_limb_4_col26 = memoryidtobig_value_tmp_724.get_m31(4); +let dst_limb_4_col26 = memory_id_to_big_value_tmp_719.get_m31(4); trace[26].data[row_index] = dst_limb_4_col26; -let dst_limb_5_col27 = memoryidtobig_value_tmp_724.get_m31(5); +let dst_limb_5_col27 = memory_id_to_big_value_tmp_719.get_m31(5); trace[27].data[row_index] = dst_limb_5_col27; -let dst_limb_6_col28 = memoryidtobig_value_tmp_724.get_m31(6); +let dst_limb_6_col28 = memory_id_to_big_value_tmp_719.get_m31(6); trace[28].data[row_index] = dst_limb_6_col28; -let dst_limb_7_col29 = memoryidtobig_value_tmp_724.get_m31(7); +let dst_limb_7_col29 = memory_id_to_big_value_tmp_719.get_m31(7); trace[29].data[row_index] = dst_limb_7_col29; -let dst_limb_8_col30 = memoryidtobig_value_tmp_724.get_m31(8); +let dst_limb_8_col30 = memory_id_to_big_value_tmp_719.get_m31(8); trace[30].data[row_index] = dst_limb_8_col30; -let dst_limb_9_col31 = memoryidtobig_value_tmp_724.get_m31(9); +let dst_limb_9_col31 = memory_id_to_big_value_tmp_719.get_m31(9); trace[31].data[row_index] = dst_limb_9_col31; -let dst_limb_10_col32 = memoryidtobig_value_tmp_724.get_m31(10); +let dst_limb_10_col32 = memory_id_to_big_value_tmp_719.get_m31(10); trace[32].data[row_index] = dst_limb_10_col32; -let dst_limb_11_col33 = memoryidtobig_value_tmp_724.get_m31(11); +let dst_limb_11_col33 = memory_id_to_big_value_tmp_719.get_m31(11); trace[33].data[row_index] = dst_limb_11_col33; -let dst_limb_12_col34 = memoryidtobig_value_tmp_724.get_m31(12); +let dst_limb_12_col34 = memory_id_to_big_value_tmp_719.get_m31(12); trace[34].data[row_index] = dst_limb_12_col34; -let dst_limb_13_col35 = memoryidtobig_value_tmp_724.get_m31(13); +let dst_limb_13_col35 = memory_id_to_big_value_tmp_719.get_m31(13); trace[35].data[row_index] = dst_limb_13_col35; -let dst_limb_14_col36 = memoryidtobig_value_tmp_724.get_m31(14); +let dst_limb_14_col36 = memory_id_to_big_value_tmp_719.get_m31(14); trace[36].data[row_index] = dst_limb_14_col36; -let dst_limb_15_col37 = memoryidtobig_value_tmp_724.get_m31(15); +let dst_limb_15_col37 = memory_id_to_big_value_tmp_719.get_m31(15); trace[37].data[row_index] = dst_limb_15_col37; -let dst_limb_16_col38 = memoryidtobig_value_tmp_724.get_m31(16); +let dst_limb_16_col38 = memory_id_to_big_value_tmp_719.get_m31(16); trace[38].data[row_index] = dst_limb_16_col38; -let dst_limb_17_col39 = memoryidtobig_value_tmp_724.get_m31(17); +let dst_limb_17_col39 = memory_id_to_big_value_tmp_719.get_m31(17); trace[39].data[row_index] = dst_limb_17_col39; -let dst_limb_18_col40 = memoryidtobig_value_tmp_724.get_m31(18); +let dst_limb_18_col40 = memory_id_to_big_value_tmp_719.get_m31(18); trace[40].data[row_index] = dst_limb_18_col40; -let dst_limb_19_col41 = memoryidtobig_value_tmp_724.get_m31(19); +let dst_limb_19_col41 = memory_id_to_big_value_tmp_719.get_m31(19); trace[41].data[row_index] = dst_limb_19_col41; -let dst_limb_20_col42 = memoryidtobig_value_tmp_724.get_m31(20); +let dst_limb_20_col42 = memory_id_to_big_value_tmp_719.get_m31(20); trace[42].data[row_index] = dst_limb_20_col42; -let dst_limb_21_col43 = memoryidtobig_value_tmp_724.get_m31(21); +let dst_limb_21_col43 = memory_id_to_big_value_tmp_719.get_m31(21); trace[43].data[row_index] = dst_limb_21_col43; -let dst_limb_22_col44 = memoryidtobig_value_tmp_724.get_m31(22); +let dst_limb_22_col44 = memory_id_to_big_value_tmp_719.get_m31(22); trace[44].data[row_index] = dst_limb_22_col44; -let dst_limb_23_col45 = memoryidtobig_value_tmp_724.get_m31(23); +let dst_limb_23_col45 = memory_id_to_big_value_tmp_719.get_m31(23); trace[45].data[row_index] = dst_limb_23_col45; -let dst_limb_24_col46 = memoryidtobig_value_tmp_724.get_m31(24); +let dst_limb_24_col46 = memory_id_to_big_value_tmp_719.get_m31(24); trace[46].data[row_index] = dst_limb_24_col46; -let dst_limb_25_col47 = memoryidtobig_value_tmp_724.get_m31(25); +let dst_limb_25_col47 = memory_id_to_big_value_tmp_719.get_m31(25); trace[47].data[row_index] = dst_limb_25_col47; -let dst_limb_26_col48 = memoryidtobig_value_tmp_724.get_m31(26); +let dst_limb_26_col48 = memory_id_to_big_value_tmp_719.get_m31(26); trace[48].data[row_index] = dst_limb_26_col48; -let dst_limb_27_col49 = memoryidtobig_value_tmp_724.get_m31(27); +let dst_limb_27_col49 = memory_id_to_big_value_tmp_719.get_m31(27); trace[49].data[row_index] = dst_limb_27_col49; +sub_components_inputs + .memory_id_to_big_inputs[0] + .extend(dst_id_col21.unpack()); + lookup_data.memoryidtobig[0].push([dst_id_col21, dst_limb_0_col22, dst_limb_1_col23, dst_limb_2_col24, dst_limb_3_col25, dst_limb_4_col26, dst_limb_5_col27, dst_limb_6_col28, dst_limb_7_col29, dst_limb_8_col30, dst_limb_9_col31, dst_limb_10_col32, dst_limb_11_col33, dst_limb_12_col34, dst_limb_13_col35, dst_limb_14_col36, dst_limb_15_col37, dst_limb_16_col38, dst_limb_17_col39, dst_limb_18_col40, dst_limb_19_col41, dst_limb_20_col42, dst_limb_21_col43, dst_limb_22_col44, dst_limb_23_col45, dst_limb_24_col46, dst_limb_25_col47, dst_limb_26_col48, dst_limb_27_col49]); + + //read_positive_num_bits_252. - //ReadPositive_num_bits_252. - - -sub_components_inputs - .memoryaddresstoid_inputs[2] - .extend(((((((op0_base_fp_col7) * (input_fp_col2))) + (((((M31_1) - (op0_base_fp_col7))) * (input_ap_col1))))) + (((offset1_col4) - (M31_32768)))).unpack()); - let memoryaddresstoid_value_tmp_725 = memoryaddresstoid_state.deduce_output( + +let memory_address_to_id_value_tmp_720 = memory_address_to_id_state.deduce_output( ((((((op0_base_fp_col7) * (input_fp_col2))) + (((((M31_1) - (op0_base_fp_col7))) * (input_ap_col1))))) + (((offset1_col4) - (M31_32768)))) ); -let op0_id_col50 = memoryaddresstoid_value_tmp_725; +let memory_id_to_big_value_tmp_721 = memory_id_to_big_state.deduce_output( + memory_address_to_id_value_tmp_720 + ); +let op0_id_col50 = memory_address_to_id_value_tmp_720; trace[50].data[row_index] = op0_id_col50; -lookup_data.memoryaddresstoid[1].push([((((((op0_base_fp_col7) * (input_fp_col2))) + (((((M31_1) - (op0_base_fp_col7))) * (input_ap_col1))))) + (((offset1_col4) - (M31_32768)))), op0_id_col50]); sub_components_inputs - .memoryidtobig_inputs[2] - .extend(op0_id_col50.unpack()); - let memoryidtobig_value_tmp_726 = memoryidtobig_state.deduce_output( - op0_id_col50 - ); -let op0_limb_0_col51 = memoryidtobig_value_tmp_726.get_m31(0); + .memory_address_to_id_inputs[1] + .extend(((((((op0_base_fp_col7) * (input_fp_col2))) + (((((M31_1) - (op0_base_fp_col7))) * (input_ap_col1))))) + (((offset1_col4) - (M31_32768)))).unpack()); + +lookup_data.memoryaddresstoid[1].push([((((((op0_base_fp_col7) * (input_fp_col2))) + (((((M31_1) - (op0_base_fp_col7))) * (input_ap_col1))))) + (((offset1_col4) - (M31_32768)))), op0_id_col50]); +let op0_limb_0_col51 = memory_id_to_big_value_tmp_721.get_m31(0); trace[51].data[row_index] = op0_limb_0_col51; -let op0_limb_1_col52 = memoryidtobig_value_tmp_726.get_m31(1); +let op0_limb_1_col52 = memory_id_to_big_value_tmp_721.get_m31(1); trace[52].data[row_index] = op0_limb_1_col52; -let op0_limb_2_col53 = memoryidtobig_value_tmp_726.get_m31(2); +let op0_limb_2_col53 = memory_id_to_big_value_tmp_721.get_m31(2); trace[53].data[row_index] = op0_limb_2_col53; -let op0_limb_3_col54 = memoryidtobig_value_tmp_726.get_m31(3); +let op0_limb_3_col54 = memory_id_to_big_value_tmp_721.get_m31(3); trace[54].data[row_index] = op0_limb_3_col54; -let op0_limb_4_col55 = memoryidtobig_value_tmp_726.get_m31(4); +let op0_limb_4_col55 = memory_id_to_big_value_tmp_721.get_m31(4); trace[55].data[row_index] = op0_limb_4_col55; -let op0_limb_5_col56 = memoryidtobig_value_tmp_726.get_m31(5); +let op0_limb_5_col56 = memory_id_to_big_value_tmp_721.get_m31(5); trace[56].data[row_index] = op0_limb_5_col56; -let op0_limb_6_col57 = memoryidtobig_value_tmp_726.get_m31(6); +let op0_limb_6_col57 = memory_id_to_big_value_tmp_721.get_m31(6); trace[57].data[row_index] = op0_limb_6_col57; -let op0_limb_7_col58 = memoryidtobig_value_tmp_726.get_m31(7); +let op0_limb_7_col58 = memory_id_to_big_value_tmp_721.get_m31(7); trace[58].data[row_index] = op0_limb_7_col58; -let op0_limb_8_col59 = memoryidtobig_value_tmp_726.get_m31(8); +let op0_limb_8_col59 = memory_id_to_big_value_tmp_721.get_m31(8); trace[59].data[row_index] = op0_limb_8_col59; -let op0_limb_9_col60 = memoryidtobig_value_tmp_726.get_m31(9); +let op0_limb_9_col60 = memory_id_to_big_value_tmp_721.get_m31(9); trace[60].data[row_index] = op0_limb_9_col60; -let op0_limb_10_col61 = memoryidtobig_value_tmp_726.get_m31(10); +let op0_limb_10_col61 = memory_id_to_big_value_tmp_721.get_m31(10); trace[61].data[row_index] = op0_limb_10_col61; -let op0_limb_11_col62 = memoryidtobig_value_tmp_726.get_m31(11); +let op0_limb_11_col62 = memory_id_to_big_value_tmp_721.get_m31(11); trace[62].data[row_index] = op0_limb_11_col62; -let op0_limb_12_col63 = memoryidtobig_value_tmp_726.get_m31(12); +let op0_limb_12_col63 = memory_id_to_big_value_tmp_721.get_m31(12); trace[63].data[row_index] = op0_limb_12_col63; -let op0_limb_13_col64 = memoryidtobig_value_tmp_726.get_m31(13); +let op0_limb_13_col64 = memory_id_to_big_value_tmp_721.get_m31(13); trace[64].data[row_index] = op0_limb_13_col64; -let op0_limb_14_col65 = memoryidtobig_value_tmp_726.get_m31(14); +let op0_limb_14_col65 = memory_id_to_big_value_tmp_721.get_m31(14); trace[65].data[row_index] = op0_limb_14_col65; -let op0_limb_15_col66 = memoryidtobig_value_tmp_726.get_m31(15); +let op0_limb_15_col66 = memory_id_to_big_value_tmp_721.get_m31(15); trace[66].data[row_index] = op0_limb_15_col66; -let op0_limb_16_col67 = memoryidtobig_value_tmp_726.get_m31(16); +let op0_limb_16_col67 = memory_id_to_big_value_tmp_721.get_m31(16); trace[67].data[row_index] = op0_limb_16_col67; -let op0_limb_17_col68 = memoryidtobig_value_tmp_726.get_m31(17); +let op0_limb_17_col68 = memory_id_to_big_value_tmp_721.get_m31(17); trace[68].data[row_index] = op0_limb_17_col68; -let op0_limb_18_col69 = memoryidtobig_value_tmp_726.get_m31(18); +let op0_limb_18_col69 = memory_id_to_big_value_tmp_721.get_m31(18); trace[69].data[row_index] = op0_limb_18_col69; -let op0_limb_19_col70 = memoryidtobig_value_tmp_726.get_m31(19); +let op0_limb_19_col70 = memory_id_to_big_value_tmp_721.get_m31(19); trace[70].data[row_index] = op0_limb_19_col70; -let op0_limb_20_col71 = memoryidtobig_value_tmp_726.get_m31(20); +let op0_limb_20_col71 = memory_id_to_big_value_tmp_721.get_m31(20); trace[71].data[row_index] = op0_limb_20_col71; -let op0_limb_21_col72 = memoryidtobig_value_tmp_726.get_m31(21); +let op0_limb_21_col72 = memory_id_to_big_value_tmp_721.get_m31(21); trace[72].data[row_index] = op0_limb_21_col72; -let op0_limb_22_col73 = memoryidtobig_value_tmp_726.get_m31(22); +let op0_limb_22_col73 = memory_id_to_big_value_tmp_721.get_m31(22); trace[73].data[row_index] = op0_limb_22_col73; -let op0_limb_23_col74 = memoryidtobig_value_tmp_726.get_m31(23); +let op0_limb_23_col74 = memory_id_to_big_value_tmp_721.get_m31(23); trace[74].data[row_index] = op0_limb_23_col74; -let op0_limb_24_col75 = memoryidtobig_value_tmp_726.get_m31(24); +let op0_limb_24_col75 = memory_id_to_big_value_tmp_721.get_m31(24); trace[75].data[row_index] = op0_limb_24_col75; -let op0_limb_25_col76 = memoryidtobig_value_tmp_726.get_m31(25); +let op0_limb_25_col76 = memory_id_to_big_value_tmp_721.get_m31(25); trace[76].data[row_index] = op0_limb_25_col76; -let op0_limb_26_col77 = memoryidtobig_value_tmp_726.get_m31(26); +let op0_limb_26_col77 = memory_id_to_big_value_tmp_721.get_m31(26); trace[77].data[row_index] = op0_limb_26_col77; -let op0_limb_27_col78 = memoryidtobig_value_tmp_726.get_m31(27); +let op0_limb_27_col78 = memory_id_to_big_value_tmp_721.get_m31(27); trace[78].data[row_index] = op0_limb_27_col78; +sub_components_inputs + .memory_id_to_big_inputs[1] + .extend(op0_id_col50.unpack()); + lookup_data.memoryidtobig[1].push([op0_id_col50, op0_limb_0_col51, op0_limb_1_col52, op0_limb_2_col53, op0_limb_3_col54, op0_limb_4_col55, op0_limb_5_col56, op0_limb_6_col57, op0_limb_7_col58, op0_limb_8_col59, op0_limb_9_col60, op0_limb_10_col61, op0_limb_11_col62, op0_limb_12_col63, op0_limb_13_col64, op0_limb_14_col65, op0_limb_15_col66, op0_limb_16_col67, op0_limb_17_col68, op0_limb_18_col69, op0_limb_19_col70, op0_limb_20_col71, op0_limb_21_col72, op0_limb_22_col73, op0_limb_23_col74, op0_limb_24_col75, op0_limb_25_col76, op0_limb_26_col77, op0_limb_27_col78]); + + //cond_felt252_as_addr. - //CondFelt252AsAddr. - + + + //read_positive_num_bits_252. - - //ReadPositive_num_bits_252. - - -sub_components_inputs - .memoryaddresstoid_inputs[3] - .extend(((((((((((op1_base_fp_col9) * (input_fp_col2))) + (((op1_base_ap_col10) * (input_ap_col1))))) + (((op1_imm_col8) * (input_pc_col0))))) + (((op1_base_op0_tmp_230) * (((((op0_limb_0_col51) + (((op0_limb_1_col52) * (M31_512))))) + (((op0_limb_2_col53) * (M31_262144))))))))) + (((offset2_col5) - (M31_32768)))).unpack()); - let memoryaddresstoid_value_tmp_727 = memoryaddresstoid_state.deduce_output( - ((((((((((op1_base_fp_col9) * (input_fp_col2))) + (((op1_base_ap_col10) * (input_ap_col1))))) + (((op1_imm_col8) * (input_pc_col0))))) + (((op1_base_op0_tmp_230) * (((((op0_limb_0_col51) + (((op0_limb_1_col52) * (M31_512))))) + (((op0_limb_2_col53) * (M31_262144))))))))) + (((offset2_col5) - (M31_32768)))) + +let memory_address_to_id_value_tmp_722 = memory_address_to_id_state.deduce_output( + ((((((((((op1_base_fp_col9) * (input_fp_col2))) + (((op1_base_ap_col10) * (input_ap_col1))))) + (((op1_imm_col8) * (input_pc_col0))))) + (((op1_base_op0_tmp_225) * (((((op0_limb_0_col51) + (((op0_limb_1_col52) * (M31_512))))) + (((op0_limb_2_col53) * (M31_262144))))))))) + (((offset2_col5) - (M31_32768)))) + ); +let memory_id_to_big_value_tmp_723 = memory_id_to_big_state.deduce_output( + memory_address_to_id_value_tmp_722 ); -let op1_id_col79 = memoryaddresstoid_value_tmp_727; +let op1_id_col79 = memory_address_to_id_value_tmp_722; trace[79].data[row_index] = op1_id_col79; -lookup_data.memoryaddresstoid[2].push([((((((((((op1_base_fp_col9) * (input_fp_col2))) + (((op1_base_ap_col10) * (input_ap_col1))))) + (((op1_imm_col8) * (input_pc_col0))))) + (((op1_base_op0_tmp_230) * (((((op0_limb_0_col51) + (((op0_limb_1_col52) * (M31_512))))) + (((op0_limb_2_col53) * (M31_262144))))))))) + (((offset2_col5) - (M31_32768)))), op1_id_col79]); sub_components_inputs - .memoryidtobig_inputs[3] - .extend(op1_id_col79.unpack()); - let memoryidtobig_value_tmp_728 = memoryidtobig_state.deduce_output( - op1_id_col79 - ); -let op1_limb_0_col80 = memoryidtobig_value_tmp_728.get_m31(0); + .memory_address_to_id_inputs[2] + .extend(((((((((((op1_base_fp_col9) * (input_fp_col2))) + (((op1_base_ap_col10) * (input_ap_col1))))) + (((op1_imm_col8) * (input_pc_col0))))) + (((op1_base_op0_tmp_225) * (((((op0_limb_0_col51) + (((op0_limb_1_col52) * (M31_512))))) + (((op0_limb_2_col53) * (M31_262144))))))))) + (((offset2_col5) - (M31_32768)))).unpack()); + +lookup_data.memoryaddresstoid[2].push([((((((((((op1_base_fp_col9) * (input_fp_col2))) + (((op1_base_ap_col10) * (input_ap_col1))))) + (((op1_imm_col8) * (input_pc_col0))))) + (((op1_base_op0_tmp_225) * (((((op0_limb_0_col51) + (((op0_limb_1_col52) * (M31_512))))) + (((op0_limb_2_col53) * (M31_262144))))))))) + (((offset2_col5) - (M31_32768)))), op1_id_col79]); +let op1_limb_0_col80 = memory_id_to_big_value_tmp_723.get_m31(0); trace[80].data[row_index] = op1_limb_0_col80; -let op1_limb_1_col81 = memoryidtobig_value_tmp_728.get_m31(1); +let op1_limb_1_col81 = memory_id_to_big_value_tmp_723.get_m31(1); trace[81].data[row_index] = op1_limb_1_col81; -let op1_limb_2_col82 = memoryidtobig_value_tmp_728.get_m31(2); +let op1_limb_2_col82 = memory_id_to_big_value_tmp_723.get_m31(2); trace[82].data[row_index] = op1_limb_2_col82; -let op1_limb_3_col83 = memoryidtobig_value_tmp_728.get_m31(3); +let op1_limb_3_col83 = memory_id_to_big_value_tmp_723.get_m31(3); trace[83].data[row_index] = op1_limb_3_col83; -let op1_limb_4_col84 = memoryidtobig_value_tmp_728.get_m31(4); +let op1_limb_4_col84 = memory_id_to_big_value_tmp_723.get_m31(4); trace[84].data[row_index] = op1_limb_4_col84; -let op1_limb_5_col85 = memoryidtobig_value_tmp_728.get_m31(5); +let op1_limb_5_col85 = memory_id_to_big_value_tmp_723.get_m31(5); trace[85].data[row_index] = op1_limb_5_col85; -let op1_limb_6_col86 = memoryidtobig_value_tmp_728.get_m31(6); +let op1_limb_6_col86 = memory_id_to_big_value_tmp_723.get_m31(6); trace[86].data[row_index] = op1_limb_6_col86; -let op1_limb_7_col87 = memoryidtobig_value_tmp_728.get_m31(7); +let op1_limb_7_col87 = memory_id_to_big_value_tmp_723.get_m31(7); trace[87].data[row_index] = op1_limb_7_col87; -let op1_limb_8_col88 = memoryidtobig_value_tmp_728.get_m31(8); +let op1_limb_8_col88 = memory_id_to_big_value_tmp_723.get_m31(8); trace[88].data[row_index] = op1_limb_8_col88; -let op1_limb_9_col89 = memoryidtobig_value_tmp_728.get_m31(9); +let op1_limb_9_col89 = memory_id_to_big_value_tmp_723.get_m31(9); trace[89].data[row_index] = op1_limb_9_col89; -let op1_limb_10_col90 = memoryidtobig_value_tmp_728.get_m31(10); +let op1_limb_10_col90 = memory_id_to_big_value_tmp_723.get_m31(10); trace[90].data[row_index] = op1_limb_10_col90; -let op1_limb_11_col91 = memoryidtobig_value_tmp_728.get_m31(11); +let op1_limb_11_col91 = memory_id_to_big_value_tmp_723.get_m31(11); trace[91].data[row_index] = op1_limb_11_col91; -let op1_limb_12_col92 = memoryidtobig_value_tmp_728.get_m31(12); +let op1_limb_12_col92 = memory_id_to_big_value_tmp_723.get_m31(12); trace[92].data[row_index] = op1_limb_12_col92; -let op1_limb_13_col93 = memoryidtobig_value_tmp_728.get_m31(13); +let op1_limb_13_col93 = memory_id_to_big_value_tmp_723.get_m31(13); trace[93].data[row_index] = op1_limb_13_col93; -let op1_limb_14_col94 = memoryidtobig_value_tmp_728.get_m31(14); +let op1_limb_14_col94 = memory_id_to_big_value_tmp_723.get_m31(14); trace[94].data[row_index] = op1_limb_14_col94; -let op1_limb_15_col95 = memoryidtobig_value_tmp_728.get_m31(15); +let op1_limb_15_col95 = memory_id_to_big_value_tmp_723.get_m31(15); trace[95].data[row_index] = op1_limb_15_col95; -let op1_limb_16_col96 = memoryidtobig_value_tmp_728.get_m31(16); +let op1_limb_16_col96 = memory_id_to_big_value_tmp_723.get_m31(16); trace[96].data[row_index] = op1_limb_16_col96; -let op1_limb_17_col97 = memoryidtobig_value_tmp_728.get_m31(17); +let op1_limb_17_col97 = memory_id_to_big_value_tmp_723.get_m31(17); trace[97].data[row_index] = op1_limb_17_col97; -let op1_limb_18_col98 = memoryidtobig_value_tmp_728.get_m31(18); +let op1_limb_18_col98 = memory_id_to_big_value_tmp_723.get_m31(18); trace[98].data[row_index] = op1_limb_18_col98; -let op1_limb_19_col99 = memoryidtobig_value_tmp_728.get_m31(19); +let op1_limb_19_col99 = memory_id_to_big_value_tmp_723.get_m31(19); trace[99].data[row_index] = op1_limb_19_col99; -let op1_limb_20_col100 = memoryidtobig_value_tmp_728.get_m31(20); +let op1_limb_20_col100 = memory_id_to_big_value_tmp_723.get_m31(20); trace[100].data[row_index] = op1_limb_20_col100; -let op1_limb_21_col101 = memoryidtobig_value_tmp_728.get_m31(21); +let op1_limb_21_col101 = memory_id_to_big_value_tmp_723.get_m31(21); trace[101].data[row_index] = op1_limb_21_col101; -let op1_limb_22_col102 = memoryidtobig_value_tmp_728.get_m31(22); +let op1_limb_22_col102 = memory_id_to_big_value_tmp_723.get_m31(22); trace[102].data[row_index] = op1_limb_22_col102; -let op1_limb_23_col103 = memoryidtobig_value_tmp_728.get_m31(23); +let op1_limb_23_col103 = memory_id_to_big_value_tmp_723.get_m31(23); trace[103].data[row_index] = op1_limb_23_col103; -let op1_limb_24_col104 = memoryidtobig_value_tmp_728.get_m31(24); +let op1_limb_24_col104 = memory_id_to_big_value_tmp_723.get_m31(24); trace[104].data[row_index] = op1_limb_24_col104; -let op1_limb_25_col105 = memoryidtobig_value_tmp_728.get_m31(25); +let op1_limb_25_col105 = memory_id_to_big_value_tmp_723.get_m31(25); trace[105].data[row_index] = op1_limb_25_col105; -let op1_limb_26_col106 = memoryidtobig_value_tmp_728.get_m31(26); +let op1_limb_26_col106 = memory_id_to_big_value_tmp_723.get_m31(26); trace[106].data[row_index] = op1_limb_26_col106; -let op1_limb_27_col107 = memoryidtobig_value_tmp_728.get_m31(27); +let op1_limb_27_col107 = memory_id_to_big_value_tmp_723.get_m31(27); trace[107].data[row_index] = op1_limb_27_col107; +sub_components_inputs + .memory_id_to_big_inputs[2] + .extend(op1_id_col79.unpack()); + lookup_data.memoryidtobig[2].push([op1_id_col79, op1_limb_0_col80, op1_limb_1_col81, op1_limb_2_col82, op1_limb_3_col83, op1_limb_4_col84, op1_limb_5_col85, op1_limb_6_col86, op1_limb_7_col87, op1_limb_8_col88, op1_limb_9_col89, op1_limb_10_col90, op1_limb_11_col91, op1_limb_12_col92, op1_limb_13_col93, op1_limb_14_col94, op1_limb_15_col95, op1_limb_16_col96, op1_limb_17_col97, op1_limb_18_col98, op1_limb_19_col99, op1_limb_20_col100, op1_limb_21_col101, op1_limb_22_col102, op1_limb_23_col103, op1_limb_24_col104, op1_limb_25_col105, op1_limb_26_col106, op1_limb_27_col107]); + + //add252. - //Add252. - - -let add_res_tmp_729 = ((PackedFelt252::from_limbs([op0_limb_0_col51, op0_limb_1_col52, op0_limb_2_col53, op0_limb_3_col54, op0_limb_4_col55, op0_limb_5_col56, op0_limb_6_col57, op0_limb_7_col58, op0_limb_8_col59, op0_limb_9_col60, op0_limb_10_col61, op0_limb_11_col62, op0_limb_12_col63, op0_limb_13_col64, op0_limb_14_col65, op0_limb_15_col66, op0_limb_16_col67, op0_limb_17_col68, op0_limb_18_col69, op0_limb_19_col70, op0_limb_20_col71, op0_limb_21_col72, op0_limb_22_col73, op0_limb_23_col74, op0_limb_24_col75, op0_limb_25_col76, op0_limb_26_col77, op0_limb_27_col78])) + (PackedFelt252::from_limbs([op1_limb_0_col80, op1_limb_1_col81, op1_limb_2_col82, op1_limb_3_col83, op1_limb_4_col84, op1_limb_5_col85, op1_limb_6_col86, op1_limb_7_col87, op1_limb_8_col88, op1_limb_9_col89, op1_limb_10_col90, op1_limb_11_col91, op1_limb_12_col92, op1_limb_13_col93, op1_limb_14_col94, op1_limb_15_col95, op1_limb_16_col96, op1_limb_17_col97, op1_limb_18_col98, op1_limb_19_col99, op1_limb_20_col100, op1_limb_21_col101, op1_limb_22_col102, op1_limb_23_col103, op1_limb_24_col104, op1_limb_25_col105, op1_limb_26_col106, op1_limb_27_col107]))); -let add_res_limb_0_col108 = add_res_tmp_729.get_m31(0); + +let add_res_tmp_724 = ((PackedFelt252::from_limbs([op0_limb_0_col51, op0_limb_1_col52, op0_limb_2_col53, op0_limb_3_col54, op0_limb_4_col55, op0_limb_5_col56, op0_limb_6_col57, op0_limb_7_col58, op0_limb_8_col59, op0_limb_9_col60, op0_limb_10_col61, op0_limb_11_col62, op0_limb_12_col63, op0_limb_13_col64, op0_limb_14_col65, op0_limb_15_col66, op0_limb_16_col67, op0_limb_17_col68, op0_limb_18_col69, op0_limb_19_col70, op0_limb_20_col71, op0_limb_21_col72, op0_limb_22_col73, op0_limb_23_col74, op0_limb_24_col75, op0_limb_25_col76, op0_limb_26_col77, op0_limb_27_col78])) + (PackedFelt252::from_limbs([op1_limb_0_col80, op1_limb_1_col81, op1_limb_2_col82, op1_limb_3_col83, op1_limb_4_col84, op1_limb_5_col85, op1_limb_6_col86, op1_limb_7_col87, op1_limb_8_col88, op1_limb_9_col89, op1_limb_10_col90, op1_limb_11_col91, op1_limb_12_col92, op1_limb_13_col93, op1_limb_14_col94, op1_limb_15_col95, op1_limb_16_col96, op1_limb_17_col97, op1_limb_18_col98, op1_limb_19_col99, op1_limb_20_col100, op1_limb_21_col101, op1_limb_22_col102, op1_limb_23_col103, op1_limb_24_col104, op1_limb_25_col105, op1_limb_26_col106, op1_limb_27_col107]))); +let add_res_limb_0_col108 = add_res_tmp_724.get_m31(0); trace[108].data[row_index] = add_res_limb_0_col108; -let add_res_limb_1_col109 = add_res_tmp_729.get_m31(1); +let add_res_limb_1_col109 = add_res_tmp_724.get_m31(1); trace[109].data[row_index] = add_res_limb_1_col109; -let add_res_limb_2_col110 = add_res_tmp_729.get_m31(2); +let add_res_limb_2_col110 = add_res_tmp_724.get_m31(2); trace[110].data[row_index] = add_res_limb_2_col110; -let add_res_limb_3_col111 = add_res_tmp_729.get_m31(3); +let add_res_limb_3_col111 = add_res_tmp_724.get_m31(3); trace[111].data[row_index] = add_res_limb_3_col111; -let add_res_limb_4_col112 = add_res_tmp_729.get_m31(4); +let add_res_limb_4_col112 = add_res_tmp_724.get_m31(4); trace[112].data[row_index] = add_res_limb_4_col112; -let add_res_limb_5_col113 = add_res_tmp_729.get_m31(5); +let add_res_limb_5_col113 = add_res_tmp_724.get_m31(5); trace[113].data[row_index] = add_res_limb_5_col113; -let add_res_limb_6_col114 = add_res_tmp_729.get_m31(6); +let add_res_limb_6_col114 = add_res_tmp_724.get_m31(6); trace[114].data[row_index] = add_res_limb_6_col114; -let add_res_limb_7_col115 = add_res_tmp_729.get_m31(7); +let add_res_limb_7_col115 = add_res_tmp_724.get_m31(7); trace[115].data[row_index] = add_res_limb_7_col115; -let add_res_limb_8_col116 = add_res_tmp_729.get_m31(8); +let add_res_limb_8_col116 = add_res_tmp_724.get_m31(8); trace[116].data[row_index] = add_res_limb_8_col116; -let add_res_limb_9_col117 = add_res_tmp_729.get_m31(9); +let add_res_limb_9_col117 = add_res_tmp_724.get_m31(9); trace[117].data[row_index] = add_res_limb_9_col117; -let add_res_limb_10_col118 = add_res_tmp_729.get_m31(10); +let add_res_limb_10_col118 = add_res_tmp_724.get_m31(10); trace[118].data[row_index] = add_res_limb_10_col118; -let add_res_limb_11_col119 = add_res_tmp_729.get_m31(11); +let add_res_limb_11_col119 = add_res_tmp_724.get_m31(11); trace[119].data[row_index] = add_res_limb_11_col119; -let add_res_limb_12_col120 = add_res_tmp_729.get_m31(12); +let add_res_limb_12_col120 = add_res_tmp_724.get_m31(12); trace[120].data[row_index] = add_res_limb_12_col120; -let add_res_limb_13_col121 = add_res_tmp_729.get_m31(13); +let add_res_limb_13_col121 = add_res_tmp_724.get_m31(13); trace[121].data[row_index] = add_res_limb_13_col121; -let add_res_limb_14_col122 = add_res_tmp_729.get_m31(14); +let add_res_limb_14_col122 = add_res_tmp_724.get_m31(14); trace[122].data[row_index] = add_res_limb_14_col122; -let add_res_limb_15_col123 = add_res_tmp_729.get_m31(15); +let add_res_limb_15_col123 = add_res_tmp_724.get_m31(15); trace[123].data[row_index] = add_res_limb_15_col123; -let add_res_limb_16_col124 = add_res_tmp_729.get_m31(16); +let add_res_limb_16_col124 = add_res_tmp_724.get_m31(16); trace[124].data[row_index] = add_res_limb_16_col124; -let add_res_limb_17_col125 = add_res_tmp_729.get_m31(17); +let add_res_limb_17_col125 = add_res_tmp_724.get_m31(17); trace[125].data[row_index] = add_res_limb_17_col125; -let add_res_limb_18_col126 = add_res_tmp_729.get_m31(18); +let add_res_limb_18_col126 = add_res_tmp_724.get_m31(18); trace[126].data[row_index] = add_res_limb_18_col126; -let add_res_limb_19_col127 = add_res_tmp_729.get_m31(19); +let add_res_limb_19_col127 = add_res_tmp_724.get_m31(19); trace[127].data[row_index] = add_res_limb_19_col127; -let add_res_limb_20_col128 = add_res_tmp_729.get_m31(20); +let add_res_limb_20_col128 = add_res_tmp_724.get_m31(20); trace[128].data[row_index] = add_res_limb_20_col128; -let add_res_limb_21_col129 = add_res_tmp_729.get_m31(21); +let add_res_limb_21_col129 = add_res_tmp_724.get_m31(21); trace[129].data[row_index] = add_res_limb_21_col129; -let add_res_limb_22_col130 = add_res_tmp_729.get_m31(22); +let add_res_limb_22_col130 = add_res_tmp_724.get_m31(22); trace[130].data[row_index] = add_res_limb_22_col130; -let add_res_limb_23_col131 = add_res_tmp_729.get_m31(23); +let add_res_limb_23_col131 = add_res_tmp_724.get_m31(23); trace[131].data[row_index] = add_res_limb_23_col131; -let add_res_limb_24_col132 = add_res_tmp_729.get_m31(24); +let add_res_limb_24_col132 = add_res_tmp_724.get_m31(24); trace[132].data[row_index] = add_res_limb_24_col132; -let add_res_limb_25_col133 = add_res_tmp_729.get_m31(25); +let add_res_limb_25_col133 = add_res_tmp_724.get_m31(25); trace[133].data[row_index] = add_res_limb_25_col133; -let add_res_limb_26_col134 = add_res_tmp_729.get_m31(26); +let add_res_limb_26_col134 = add_res_tmp_724.get_m31(26); trace[134].data[row_index] = add_res_limb_26_col134; -let add_res_limb_27_col135 = add_res_tmp_729.get_m31(27); +let add_res_limb_27_col135 = add_res_tmp_724.get_m31(27); trace[135].data[row_index] = add_res_limb_27_col135; - //RangeCheckBigValue. + //range_check_big_value. + sub_components_inputs .range_check_9_9_inputs[0] .extend([add_res_limb_0_col108, add_res_limb_1_col109].unpack()); + +lookup_data.rangecheck_9_9[0].push([add_res_limb_0_col108, add_res_limb_1_col109]); -lookup_data.range_check_9_9[0].push([add_res_limb_0_col108, add_res_limb_1_col109]); sub_components_inputs .range_check_9_9_inputs[1] .extend([add_res_limb_2_col110, add_res_limb_3_col111].unpack()); + +lookup_data.rangecheck_9_9[1].push([add_res_limb_2_col110, add_res_limb_3_col111]); -lookup_data.range_check_9_9[1].push([add_res_limb_2_col110, add_res_limb_3_col111]); sub_components_inputs .range_check_9_9_inputs[2] .extend([add_res_limb_4_col112, add_res_limb_5_col113].unpack()); + +lookup_data.rangecheck_9_9[2].push([add_res_limb_4_col112, add_res_limb_5_col113]); -lookup_data.range_check_9_9[2].push([add_res_limb_4_col112, add_res_limb_5_col113]); sub_components_inputs .range_check_9_9_inputs[3] .extend([add_res_limb_6_col114, add_res_limb_7_col115].unpack()); + +lookup_data.rangecheck_9_9[3].push([add_res_limb_6_col114, add_res_limb_7_col115]); -lookup_data.range_check_9_9[3].push([add_res_limb_6_col114, add_res_limb_7_col115]); sub_components_inputs .range_check_9_9_inputs[4] .extend([add_res_limb_8_col116, add_res_limb_9_col117].unpack()); + +lookup_data.rangecheck_9_9[4].push([add_res_limb_8_col116, add_res_limb_9_col117]); -lookup_data.range_check_9_9[4].push([add_res_limb_8_col116, add_res_limb_9_col117]); sub_components_inputs .range_check_9_9_inputs[5] .extend([add_res_limb_10_col118, add_res_limb_11_col119].unpack()); + +lookup_data.rangecheck_9_9[5].push([add_res_limb_10_col118, add_res_limb_11_col119]); -lookup_data.range_check_9_9[5].push([add_res_limb_10_col118, add_res_limb_11_col119]); sub_components_inputs .range_check_9_9_inputs[6] .extend([add_res_limb_12_col120, add_res_limb_13_col121].unpack()); + +lookup_data.rangecheck_9_9[6].push([add_res_limb_12_col120, add_res_limb_13_col121]); -lookup_data.range_check_9_9[6].push([add_res_limb_12_col120, add_res_limb_13_col121]); sub_components_inputs .range_check_9_9_inputs[7] .extend([add_res_limb_14_col122, add_res_limb_15_col123].unpack()); + +lookup_data.rangecheck_9_9[7].push([add_res_limb_14_col122, add_res_limb_15_col123]); -lookup_data.range_check_9_9[7].push([add_res_limb_14_col122, add_res_limb_15_col123]); sub_components_inputs .range_check_9_9_inputs[8] .extend([add_res_limb_16_col124, add_res_limb_17_col125].unpack()); + +lookup_data.rangecheck_9_9[8].push([add_res_limb_16_col124, add_res_limb_17_col125]); -lookup_data.range_check_9_9[8].push([add_res_limb_16_col124, add_res_limb_17_col125]); sub_components_inputs .range_check_9_9_inputs[9] .extend([add_res_limb_18_col126, add_res_limb_19_col127].unpack()); + +lookup_data.rangecheck_9_9[9].push([add_res_limb_18_col126, add_res_limb_19_col127]); -lookup_data.range_check_9_9[9].push([add_res_limb_18_col126, add_res_limb_19_col127]); sub_components_inputs .range_check_9_9_inputs[10] .extend([add_res_limb_20_col128, add_res_limb_21_col129].unpack()); + +lookup_data.rangecheck_9_9[10].push([add_res_limb_20_col128, add_res_limb_21_col129]); -lookup_data.range_check_9_9[10].push([add_res_limb_20_col128, add_res_limb_21_col129]); sub_components_inputs .range_check_9_9_inputs[11] .extend([add_res_limb_22_col130, add_res_limb_23_col131].unpack()); + +lookup_data.rangecheck_9_9[11].push([add_res_limb_22_col130, add_res_limb_23_col131]); -lookup_data.range_check_9_9[11].push([add_res_limb_22_col130, add_res_limb_23_col131]); sub_components_inputs .range_check_9_9_inputs[12] .extend([add_res_limb_24_col132, add_res_limb_25_col133].unpack()); + +lookup_data.rangecheck_9_9[12].push([add_res_limb_24_col132, add_res_limb_25_col133]); -lookup_data.range_check_9_9[12].push([add_res_limb_24_col132, add_res_limb_25_col133]); sub_components_inputs .range_check_9_9_inputs[13] .extend([add_res_limb_26_col134, add_res_limb_27_col135].unpack()); - -lookup_data.range_check_9_9[13].push([add_res_limb_26_col134, add_res_limb_27_col135]); - - + +lookup_data.rangecheck_9_9[13].push([add_res_limb_26_col134, add_res_limb_27_col135]); + - //VerifyAdd252. + //verify_add252. -let sub_p_bit_tmp_744 = ((UInt16_1) & (((((PackedUInt16::from_m31(op0_limb_0_col51)) ^ (PackedUInt16::from_m31(op1_limb_0_col80)))) ^ (PackedUInt16::from_m31(add_res_limb_0_col108))))); -let sub_p_bit_col136 = sub_p_bit_tmp_744.as_m31(); + +let sub_p_bit_tmp_739 = ((UInt16_1) & (((((PackedUInt16::from_m31(op0_limb_0_col51)) ^ (PackedUInt16::from_m31(op1_limb_0_col80)))) ^ (PackedUInt16::from_m31(add_res_limb_0_col108))))); +let sub_p_bit_col136 = sub_p_bit_tmp_739.as_m31(); trace[136].data[row_index] = sub_p_bit_col136; + + + //mul252. - - //Mul252. - - -let mul_res_tmp_772 = ((PackedFelt252::from_limbs([op0_limb_0_col51, op0_limb_1_col52, op0_limb_2_col53, op0_limb_3_col54, op0_limb_4_col55, op0_limb_5_col56, op0_limb_6_col57, op0_limb_7_col58, op0_limb_8_col59, op0_limb_9_col60, op0_limb_10_col61, op0_limb_11_col62, op0_limb_12_col63, op0_limb_13_col64, op0_limb_14_col65, op0_limb_15_col66, op0_limb_16_col67, op0_limb_17_col68, op0_limb_18_col69, op0_limb_19_col70, op0_limb_20_col71, op0_limb_21_col72, op0_limb_22_col73, op0_limb_23_col74, op0_limb_24_col75, op0_limb_25_col76, op0_limb_26_col77, op0_limb_27_col78])) * (PackedFelt252::from_limbs([op1_limb_0_col80, op1_limb_1_col81, op1_limb_2_col82, op1_limb_3_col83, op1_limb_4_col84, op1_limb_5_col85, op1_limb_6_col86, op1_limb_7_col87, op1_limb_8_col88, op1_limb_9_col89, op1_limb_10_col90, op1_limb_11_col91, op1_limb_12_col92, op1_limb_13_col93, op1_limb_14_col94, op1_limb_15_col95, op1_limb_16_col96, op1_limb_17_col97, op1_limb_18_col98, op1_limb_19_col99, op1_limb_20_col100, op1_limb_21_col101, op1_limb_22_col102, op1_limb_23_col103, op1_limb_24_col104, op1_limb_25_col105, op1_limb_26_col106, op1_limb_27_col107]))); -let mul_res_limb_0_col137 = mul_res_tmp_772.get_m31(0); + +let mul_res_tmp_767 = ((PackedFelt252::from_limbs([op0_limb_0_col51, op0_limb_1_col52, op0_limb_2_col53, op0_limb_3_col54, op0_limb_4_col55, op0_limb_5_col56, op0_limb_6_col57, op0_limb_7_col58, op0_limb_8_col59, op0_limb_9_col60, op0_limb_10_col61, op0_limb_11_col62, op0_limb_12_col63, op0_limb_13_col64, op0_limb_14_col65, op0_limb_15_col66, op0_limb_16_col67, op0_limb_17_col68, op0_limb_18_col69, op0_limb_19_col70, op0_limb_20_col71, op0_limb_21_col72, op0_limb_22_col73, op0_limb_23_col74, op0_limb_24_col75, op0_limb_25_col76, op0_limb_26_col77, op0_limb_27_col78])) * (PackedFelt252::from_limbs([op1_limb_0_col80, op1_limb_1_col81, op1_limb_2_col82, op1_limb_3_col83, op1_limb_4_col84, op1_limb_5_col85, op1_limb_6_col86, op1_limb_7_col87, op1_limb_8_col88, op1_limb_9_col89, op1_limb_10_col90, op1_limb_11_col91, op1_limb_12_col92, op1_limb_13_col93, op1_limb_14_col94, op1_limb_15_col95, op1_limb_16_col96, op1_limb_17_col97, op1_limb_18_col98, op1_limb_19_col99, op1_limb_20_col100, op1_limb_21_col101, op1_limb_22_col102, op1_limb_23_col103, op1_limb_24_col104, op1_limb_25_col105, op1_limb_26_col106, op1_limb_27_col107]))); +let mul_res_limb_0_col137 = mul_res_tmp_767.get_m31(0); trace[137].data[row_index] = mul_res_limb_0_col137; -let mul_res_limb_1_col138 = mul_res_tmp_772.get_m31(1); +let mul_res_limb_1_col138 = mul_res_tmp_767.get_m31(1); trace[138].data[row_index] = mul_res_limb_1_col138; -let mul_res_limb_2_col139 = mul_res_tmp_772.get_m31(2); +let mul_res_limb_2_col139 = mul_res_tmp_767.get_m31(2); trace[139].data[row_index] = mul_res_limb_2_col139; -let mul_res_limb_3_col140 = mul_res_tmp_772.get_m31(3); +let mul_res_limb_3_col140 = mul_res_tmp_767.get_m31(3); trace[140].data[row_index] = mul_res_limb_3_col140; -let mul_res_limb_4_col141 = mul_res_tmp_772.get_m31(4); +let mul_res_limb_4_col141 = mul_res_tmp_767.get_m31(4); trace[141].data[row_index] = mul_res_limb_4_col141; -let mul_res_limb_5_col142 = mul_res_tmp_772.get_m31(5); +let mul_res_limb_5_col142 = mul_res_tmp_767.get_m31(5); trace[142].data[row_index] = mul_res_limb_5_col142; -let mul_res_limb_6_col143 = mul_res_tmp_772.get_m31(6); +let mul_res_limb_6_col143 = mul_res_tmp_767.get_m31(6); trace[143].data[row_index] = mul_res_limb_6_col143; -let mul_res_limb_7_col144 = mul_res_tmp_772.get_m31(7); +let mul_res_limb_7_col144 = mul_res_tmp_767.get_m31(7); trace[144].data[row_index] = mul_res_limb_7_col144; -let mul_res_limb_8_col145 = mul_res_tmp_772.get_m31(8); +let mul_res_limb_8_col145 = mul_res_tmp_767.get_m31(8); trace[145].data[row_index] = mul_res_limb_8_col145; -let mul_res_limb_9_col146 = mul_res_tmp_772.get_m31(9); +let mul_res_limb_9_col146 = mul_res_tmp_767.get_m31(9); trace[146].data[row_index] = mul_res_limb_9_col146; -let mul_res_limb_10_col147 = mul_res_tmp_772.get_m31(10); +let mul_res_limb_10_col147 = mul_res_tmp_767.get_m31(10); trace[147].data[row_index] = mul_res_limb_10_col147; -let mul_res_limb_11_col148 = mul_res_tmp_772.get_m31(11); +let mul_res_limb_11_col148 = mul_res_tmp_767.get_m31(11); trace[148].data[row_index] = mul_res_limb_11_col148; -let mul_res_limb_12_col149 = mul_res_tmp_772.get_m31(12); +let mul_res_limb_12_col149 = mul_res_tmp_767.get_m31(12); trace[149].data[row_index] = mul_res_limb_12_col149; -let mul_res_limb_13_col150 = mul_res_tmp_772.get_m31(13); +let mul_res_limb_13_col150 = mul_res_tmp_767.get_m31(13); trace[150].data[row_index] = mul_res_limb_13_col150; -let mul_res_limb_14_col151 = mul_res_tmp_772.get_m31(14); +let mul_res_limb_14_col151 = mul_res_tmp_767.get_m31(14); trace[151].data[row_index] = mul_res_limb_14_col151; -let mul_res_limb_15_col152 = mul_res_tmp_772.get_m31(15); +let mul_res_limb_15_col152 = mul_res_tmp_767.get_m31(15); trace[152].data[row_index] = mul_res_limb_15_col152; -let mul_res_limb_16_col153 = mul_res_tmp_772.get_m31(16); +let mul_res_limb_16_col153 = mul_res_tmp_767.get_m31(16); trace[153].data[row_index] = mul_res_limb_16_col153; -let mul_res_limb_17_col154 = mul_res_tmp_772.get_m31(17); +let mul_res_limb_17_col154 = mul_res_tmp_767.get_m31(17); trace[154].data[row_index] = mul_res_limb_17_col154; -let mul_res_limb_18_col155 = mul_res_tmp_772.get_m31(18); +let mul_res_limb_18_col155 = mul_res_tmp_767.get_m31(18); trace[155].data[row_index] = mul_res_limb_18_col155; -let mul_res_limb_19_col156 = mul_res_tmp_772.get_m31(19); +let mul_res_limb_19_col156 = mul_res_tmp_767.get_m31(19); trace[156].data[row_index] = mul_res_limb_19_col156; -let mul_res_limb_20_col157 = mul_res_tmp_772.get_m31(20); +let mul_res_limb_20_col157 = mul_res_tmp_767.get_m31(20); trace[157].data[row_index] = mul_res_limb_20_col157; -let mul_res_limb_21_col158 = mul_res_tmp_772.get_m31(21); +let mul_res_limb_21_col158 = mul_res_tmp_767.get_m31(21); trace[158].data[row_index] = mul_res_limb_21_col158; -let mul_res_limb_22_col159 = mul_res_tmp_772.get_m31(22); +let mul_res_limb_22_col159 = mul_res_tmp_767.get_m31(22); trace[159].data[row_index] = mul_res_limb_22_col159; -let mul_res_limb_23_col160 = mul_res_tmp_772.get_m31(23); +let mul_res_limb_23_col160 = mul_res_tmp_767.get_m31(23); trace[160].data[row_index] = mul_res_limb_23_col160; -let mul_res_limb_24_col161 = mul_res_tmp_772.get_m31(24); +let mul_res_limb_24_col161 = mul_res_tmp_767.get_m31(24); trace[161].data[row_index] = mul_res_limb_24_col161; -let mul_res_limb_25_col162 = mul_res_tmp_772.get_m31(25); +let mul_res_limb_25_col162 = mul_res_tmp_767.get_m31(25); trace[162].data[row_index] = mul_res_limb_25_col162; -let mul_res_limb_26_col163 = mul_res_tmp_772.get_m31(26); +let mul_res_limb_26_col163 = mul_res_tmp_767.get_m31(26); trace[163].data[row_index] = mul_res_limb_26_col163; -let mul_res_limb_27_col164 = mul_res_tmp_772.get_m31(27); +let mul_res_limb_27_col164 = mul_res_tmp_767.get_m31(27); trace[164].data[row_index] = mul_res_limb_27_col164; - //RangeCheckBigValue. + //range_check_big_value. + sub_components_inputs .range_check_9_9_inputs[14] .extend([mul_res_limb_0_col137, mul_res_limb_1_col138].unpack()); + +lookup_data.rangecheck_9_9[14].push([mul_res_limb_0_col137, mul_res_limb_1_col138]); -lookup_data.range_check_9_9[14].push([mul_res_limb_0_col137, mul_res_limb_1_col138]); sub_components_inputs .range_check_9_9_inputs[15] .extend([mul_res_limb_2_col139, mul_res_limb_3_col140].unpack()); + +lookup_data.rangecheck_9_9[15].push([mul_res_limb_2_col139, mul_res_limb_3_col140]); -lookup_data.range_check_9_9[15].push([mul_res_limb_2_col139, mul_res_limb_3_col140]); sub_components_inputs .range_check_9_9_inputs[16] .extend([mul_res_limb_4_col141, mul_res_limb_5_col142].unpack()); + +lookup_data.rangecheck_9_9[16].push([mul_res_limb_4_col141, mul_res_limb_5_col142]); -lookup_data.range_check_9_9[16].push([mul_res_limb_4_col141, mul_res_limb_5_col142]); sub_components_inputs .range_check_9_9_inputs[17] .extend([mul_res_limb_6_col143, mul_res_limb_7_col144].unpack()); + +lookup_data.rangecheck_9_9[17].push([mul_res_limb_6_col143, mul_res_limb_7_col144]); -lookup_data.range_check_9_9[17].push([mul_res_limb_6_col143, mul_res_limb_7_col144]); sub_components_inputs .range_check_9_9_inputs[18] .extend([mul_res_limb_8_col145, mul_res_limb_9_col146].unpack()); + +lookup_data.rangecheck_9_9[18].push([mul_res_limb_8_col145, mul_res_limb_9_col146]); -lookup_data.range_check_9_9[18].push([mul_res_limb_8_col145, mul_res_limb_9_col146]); sub_components_inputs .range_check_9_9_inputs[19] .extend([mul_res_limb_10_col147, mul_res_limb_11_col148].unpack()); + +lookup_data.rangecheck_9_9[19].push([mul_res_limb_10_col147, mul_res_limb_11_col148]); -lookup_data.range_check_9_9[19].push([mul_res_limb_10_col147, mul_res_limb_11_col148]); sub_components_inputs .range_check_9_9_inputs[20] .extend([mul_res_limb_12_col149, mul_res_limb_13_col150].unpack()); + +lookup_data.rangecheck_9_9[20].push([mul_res_limb_12_col149, mul_res_limb_13_col150]); -lookup_data.range_check_9_9[20].push([mul_res_limb_12_col149, mul_res_limb_13_col150]); sub_components_inputs .range_check_9_9_inputs[21] .extend([mul_res_limb_14_col151, mul_res_limb_15_col152].unpack()); + +lookup_data.rangecheck_9_9[21].push([mul_res_limb_14_col151, mul_res_limb_15_col152]); -lookup_data.range_check_9_9[21].push([mul_res_limb_14_col151, mul_res_limb_15_col152]); sub_components_inputs .range_check_9_9_inputs[22] .extend([mul_res_limb_16_col153, mul_res_limb_17_col154].unpack()); + +lookup_data.rangecheck_9_9[22].push([mul_res_limb_16_col153, mul_res_limb_17_col154]); -lookup_data.range_check_9_9[22].push([mul_res_limb_16_col153, mul_res_limb_17_col154]); sub_components_inputs .range_check_9_9_inputs[23] .extend([mul_res_limb_18_col155, mul_res_limb_19_col156].unpack()); + +lookup_data.rangecheck_9_9[23].push([mul_res_limb_18_col155, mul_res_limb_19_col156]); -lookup_data.range_check_9_9[23].push([mul_res_limb_18_col155, mul_res_limb_19_col156]); sub_components_inputs .range_check_9_9_inputs[24] .extend([mul_res_limb_20_col157, mul_res_limb_21_col158].unpack()); + +lookup_data.rangecheck_9_9[24].push([mul_res_limb_20_col157, mul_res_limb_21_col158]); -lookup_data.range_check_9_9[24].push([mul_res_limb_20_col157, mul_res_limb_21_col158]); sub_components_inputs .range_check_9_9_inputs[25] .extend([mul_res_limb_22_col159, mul_res_limb_23_col160].unpack()); + +lookup_data.rangecheck_9_9[25].push([mul_res_limb_22_col159, mul_res_limb_23_col160]); -lookup_data.range_check_9_9[25].push([mul_res_limb_22_col159, mul_res_limb_23_col160]); sub_components_inputs .range_check_9_9_inputs[26] .extend([mul_res_limb_24_col161, mul_res_limb_25_col162].unpack()); + +lookup_data.rangecheck_9_9[26].push([mul_res_limb_24_col161, mul_res_limb_25_col162]); -lookup_data.range_check_9_9[26].push([mul_res_limb_24_col161, mul_res_limb_25_col162]); sub_components_inputs .range_check_9_9_inputs[27] .extend([mul_res_limb_26_col163, mul_res_limb_27_col164].unpack()); - -lookup_data.range_check_9_9[27].push([mul_res_limb_26_col163, mul_res_limb_27_col164]); - - - - - - //VerifyMul252. - - -let conv_tmp_787 = ((((M31_0) - (mul_res_limb_0_col137))) + (((op0_limb_0_col51) * (op1_limb_0_col80)))); -let conv_tmp_788 = ((((((M31_0) - (mul_res_limb_1_col138))) + (((op0_limb_0_col51) * (op1_limb_1_col81))))) + (((op0_limb_1_col52) * (op1_limb_0_col80)))); -let conv_tmp_789 = ((((((((M31_0) - (mul_res_limb_2_col139))) + (((op0_limb_0_col51) * (op1_limb_2_col82))))) + (((op0_limb_1_col52) * (op1_limb_1_col81))))) + (((op0_limb_2_col53) * (op1_limb_0_col80)))); -let conv_tmp_790 = ((((((((((M31_0) - (mul_res_limb_3_col140))) + (((op0_limb_0_col51) * (op1_limb_3_col83))))) + (((op0_limb_1_col52) * (op1_limb_2_col82))))) + (((op0_limb_2_col53) * (op1_limb_1_col81))))) + (((op0_limb_3_col54) * (op1_limb_0_col80)))); -let conv_tmp_791 = ((((((((((((M31_0) - (mul_res_limb_4_col141))) + (((op0_limb_0_col51) * (op1_limb_4_col84))))) + (((op0_limb_1_col52) * (op1_limb_3_col83))))) + (((op0_limb_2_col53) * (op1_limb_2_col82))))) + (((op0_limb_3_col54) * (op1_limb_1_col81))))) + (((op0_limb_4_col55) * (op1_limb_0_col80)))); -let conv_tmp_792 = ((((((((((((((M31_0) - (mul_res_limb_5_col142))) + (((op0_limb_0_col51) * (op1_limb_5_col85))))) + (((op0_limb_1_col52) * (op1_limb_4_col84))))) + (((op0_limb_2_col53) * (op1_limb_3_col83))))) + (((op0_limb_3_col54) * (op1_limb_2_col82))))) + (((op0_limb_4_col55) * (op1_limb_1_col81))))) + (((op0_limb_5_col56) * (op1_limb_0_col80)))); -let conv_tmp_793 = ((((((((((((((((M31_0) - (mul_res_limb_6_col143))) + (((op0_limb_0_col51) * (op1_limb_6_col86))))) + (((op0_limb_1_col52) * (op1_limb_5_col85))))) + (((op0_limb_2_col53) * (op1_limb_4_col84))))) + (((op0_limb_3_col54) * (op1_limb_3_col83))))) + (((op0_limb_4_col55) * (op1_limb_2_col82))))) + (((op0_limb_5_col56) * (op1_limb_1_col81))))) + (((op0_limb_6_col57) * (op1_limb_0_col80)))); -let conv_tmp_794 = ((((((((((((((((((M31_0) - (mul_res_limb_7_col144))) + (((op0_limb_0_col51) * (op1_limb_7_col87))))) + (((op0_limb_1_col52) * (op1_limb_6_col86))))) + (((op0_limb_2_col53) * (op1_limb_5_col85))))) + (((op0_limb_3_col54) * (op1_limb_4_col84))))) + (((op0_limb_4_col55) * (op1_limb_3_col83))))) + (((op0_limb_5_col56) * (op1_limb_2_col82))))) + (((op0_limb_6_col57) * (op1_limb_1_col81))))) + (((op0_limb_7_col58) * (op1_limb_0_col80)))); -let conv_tmp_795 = ((((((((((((((((((((M31_0) - (mul_res_limb_8_col145))) + (((op0_limb_0_col51) * (op1_limb_8_col88))))) + (((op0_limb_1_col52) * (op1_limb_7_col87))))) + (((op0_limb_2_col53) * (op1_limb_6_col86))))) + (((op0_limb_3_col54) * (op1_limb_5_col85))))) + (((op0_limb_4_col55) * (op1_limb_4_col84))))) + (((op0_limb_5_col56) * (op1_limb_3_col83))))) + (((op0_limb_6_col57) * (op1_limb_2_col82))))) + (((op0_limb_7_col58) * (op1_limb_1_col81))))) + (((op0_limb_8_col59) * (op1_limb_0_col80)))); -let conv_tmp_796 = ((((((((((((((((((((((M31_0) - (mul_res_limb_9_col146))) + (((op0_limb_0_col51) * (op1_limb_9_col89))))) + (((op0_limb_1_col52) * (op1_limb_8_col88))))) + (((op0_limb_2_col53) * (op1_limb_7_col87))))) + (((op0_limb_3_col54) * (op1_limb_6_col86))))) + (((op0_limb_4_col55) * (op1_limb_5_col85))))) + (((op0_limb_5_col56) * (op1_limb_4_col84))))) + (((op0_limb_6_col57) * (op1_limb_3_col83))))) + (((op0_limb_7_col58) * (op1_limb_2_col82))))) + (((op0_limb_8_col59) * (op1_limb_1_col81))))) + (((op0_limb_9_col60) * (op1_limb_0_col80)))); -let conv_tmp_797 = ((((((((((((((((((((((((M31_0) - (mul_res_limb_10_col147))) + (((op0_limb_0_col51) * (op1_limb_10_col90))))) + (((op0_limb_1_col52) * (op1_limb_9_col89))))) + (((op0_limb_2_col53) * (op1_limb_8_col88))))) + (((op0_limb_3_col54) * (op1_limb_7_col87))))) + (((op0_limb_4_col55) * (op1_limb_6_col86))))) + (((op0_limb_5_col56) * (op1_limb_5_col85))))) + (((op0_limb_6_col57) * (op1_limb_4_col84))))) + (((op0_limb_7_col58) * (op1_limb_3_col83))))) + (((op0_limb_8_col59) * (op1_limb_2_col82))))) + (((op0_limb_9_col60) * (op1_limb_1_col81))))) + (((op0_limb_10_col61) * (op1_limb_0_col80)))); -let conv_tmp_798 = ((((((((((((((((((((((((((M31_0) - (mul_res_limb_11_col148))) + (((op0_limb_0_col51) * (op1_limb_11_col91))))) + (((op0_limb_1_col52) * (op1_limb_10_col90))))) + (((op0_limb_2_col53) * (op1_limb_9_col89))))) + (((op0_limb_3_col54) * (op1_limb_8_col88))))) + (((op0_limb_4_col55) * (op1_limb_7_col87))))) + (((op0_limb_5_col56) * (op1_limb_6_col86))))) + (((op0_limb_6_col57) * (op1_limb_5_col85))))) + (((op0_limb_7_col58) * (op1_limb_4_col84))))) + (((op0_limb_8_col59) * (op1_limb_3_col83))))) + (((op0_limb_9_col60) * (op1_limb_2_col82))))) + (((op0_limb_10_col61) * (op1_limb_1_col81))))) + (((op0_limb_11_col62) * (op1_limb_0_col80)))); -let conv_tmp_799 = ((((((((((((((((((((((((((((M31_0) - (mul_res_limb_12_col149))) + (((op0_limb_0_col51) * (op1_limb_12_col92))))) + (((op0_limb_1_col52) * (op1_limb_11_col91))))) + (((op0_limb_2_col53) * (op1_limb_10_col90))))) + (((op0_limb_3_col54) * (op1_limb_9_col89))))) + (((op0_limb_4_col55) * (op1_limb_8_col88))))) + (((op0_limb_5_col56) * (op1_limb_7_col87))))) + (((op0_limb_6_col57) * (op1_limb_6_col86))))) + (((op0_limb_7_col58) * (op1_limb_5_col85))))) + (((op0_limb_8_col59) * (op1_limb_4_col84))))) + (((op0_limb_9_col60) * (op1_limb_3_col83))))) + (((op0_limb_10_col61) * (op1_limb_2_col82))))) + (((op0_limb_11_col62) * (op1_limb_1_col81))))) + (((op0_limb_12_col63) * (op1_limb_0_col80)))); -let conv_tmp_800 = ((((((((((((((((((((((((((((((M31_0) - (mul_res_limb_13_col150))) + (((op0_limb_0_col51) * (op1_limb_13_col93))))) + (((op0_limb_1_col52) * (op1_limb_12_col92))))) + (((op0_limb_2_col53) * (op1_limb_11_col91))))) + (((op0_limb_3_col54) * (op1_limb_10_col90))))) + (((op0_limb_4_col55) * (op1_limb_9_col89))))) + (((op0_limb_5_col56) * (op1_limb_8_col88))))) + (((op0_limb_6_col57) * (op1_limb_7_col87))))) + (((op0_limb_7_col58) * (op1_limb_6_col86))))) + (((op0_limb_8_col59) * (op1_limb_5_col85))))) + (((op0_limb_9_col60) * (op1_limb_4_col84))))) + (((op0_limb_10_col61) * (op1_limb_3_col83))))) + (((op0_limb_11_col62) * (op1_limb_2_col82))))) + (((op0_limb_12_col63) * (op1_limb_1_col81))))) + (((op0_limb_13_col64) * (op1_limb_0_col80)))); -let conv_tmp_801 = ((((((((((((((((((((((((((((((((M31_0) - (mul_res_limb_14_col151))) + (((op0_limb_0_col51) * (op1_limb_14_col94))))) + (((op0_limb_1_col52) * (op1_limb_13_col93))))) + (((op0_limb_2_col53) * (op1_limb_12_col92))))) + (((op0_limb_3_col54) * (op1_limb_11_col91))))) + (((op0_limb_4_col55) * (op1_limb_10_col90))))) + (((op0_limb_5_col56) * (op1_limb_9_col89))))) + (((op0_limb_6_col57) * (op1_limb_8_col88))))) + (((op0_limb_7_col58) * (op1_limb_7_col87))))) + (((op0_limb_8_col59) * (op1_limb_6_col86))))) + (((op0_limb_9_col60) * (op1_limb_5_col85))))) + (((op0_limb_10_col61) * (op1_limb_4_col84))))) + (((op0_limb_11_col62) * (op1_limb_3_col83))))) + (((op0_limb_12_col63) * (op1_limb_2_col82))))) + (((op0_limb_13_col64) * (op1_limb_1_col81))))) + (((op0_limb_14_col65) * (op1_limb_0_col80)))); -let conv_tmp_802 = ((((((((((((((((((((((((((((((((((M31_0) - (mul_res_limb_15_col152))) + (((op0_limb_0_col51) * (op1_limb_15_col95))))) + (((op0_limb_1_col52) * (op1_limb_14_col94))))) + (((op0_limb_2_col53) * (op1_limb_13_col93))))) + (((op0_limb_3_col54) * (op1_limb_12_col92))))) + (((op0_limb_4_col55) * (op1_limb_11_col91))))) + (((op0_limb_5_col56) * (op1_limb_10_col90))))) + (((op0_limb_6_col57) * (op1_limb_9_col89))))) + (((op0_limb_7_col58) * (op1_limb_8_col88))))) + (((op0_limb_8_col59) * (op1_limb_7_col87))))) + (((op0_limb_9_col60) * (op1_limb_6_col86))))) + (((op0_limb_10_col61) * (op1_limb_5_col85))))) + (((op0_limb_11_col62) * (op1_limb_4_col84))))) + (((op0_limb_12_col63) * (op1_limb_3_col83))))) + (((op0_limb_13_col64) * (op1_limb_2_col82))))) + (((op0_limb_14_col65) * (op1_limb_1_col81))))) + (((op0_limb_15_col66) * (op1_limb_0_col80)))); -let conv_tmp_803 = ((((((((((((((((((((((((((((((((((((M31_0) - (mul_res_limb_16_col153))) + (((op0_limb_0_col51) * (op1_limb_16_col96))))) + (((op0_limb_1_col52) * (op1_limb_15_col95))))) + (((op0_limb_2_col53) * (op1_limb_14_col94))))) + (((op0_limb_3_col54) * (op1_limb_13_col93))))) + (((op0_limb_4_col55) * (op1_limb_12_col92))))) + (((op0_limb_5_col56) * (op1_limb_11_col91))))) + (((op0_limb_6_col57) * (op1_limb_10_col90))))) + (((op0_limb_7_col58) * (op1_limb_9_col89))))) + (((op0_limb_8_col59) * (op1_limb_8_col88))))) + (((op0_limb_9_col60) * (op1_limb_7_col87))))) + (((op0_limb_10_col61) * (op1_limb_6_col86))))) + (((op0_limb_11_col62) * (op1_limb_5_col85))))) + (((op0_limb_12_col63) * (op1_limb_4_col84))))) + (((op0_limb_13_col64) * (op1_limb_3_col83))))) + (((op0_limb_14_col65) * (op1_limb_2_col82))))) + (((op0_limb_15_col66) * (op1_limb_1_col81))))) + (((op0_limb_16_col67) * (op1_limb_0_col80)))); -let conv_tmp_804 = ((((((((((((((((((((((((((((((((((((((M31_0) - (mul_res_limb_17_col154))) + (((op0_limb_0_col51) * (op1_limb_17_col97))))) + (((op0_limb_1_col52) * (op1_limb_16_col96))))) + (((op0_limb_2_col53) * (op1_limb_15_col95))))) + (((op0_limb_3_col54) * (op1_limb_14_col94))))) + (((op0_limb_4_col55) * (op1_limb_13_col93))))) + (((op0_limb_5_col56) * (op1_limb_12_col92))))) + (((op0_limb_6_col57) * (op1_limb_11_col91))))) + (((op0_limb_7_col58) * (op1_limb_10_col90))))) + (((op0_limb_8_col59) * (op1_limb_9_col89))))) + (((op0_limb_9_col60) * (op1_limb_8_col88))))) + (((op0_limb_10_col61) * (op1_limb_7_col87))))) + (((op0_limb_11_col62) * (op1_limb_6_col86))))) + (((op0_limb_12_col63) * (op1_limb_5_col85))))) + (((op0_limb_13_col64) * (op1_limb_4_col84))))) + (((op0_limb_14_col65) * (op1_limb_3_col83))))) + (((op0_limb_15_col66) * (op1_limb_2_col82))))) + (((op0_limb_16_col67) * (op1_limb_1_col81))))) + (((op0_limb_17_col68) * (op1_limb_0_col80)))); -let conv_tmp_805 = ((((((((((((((((((((((((((((((((((((((((M31_0) - (mul_res_limb_18_col155))) + (((op0_limb_0_col51) * (op1_limb_18_col98))))) + (((op0_limb_1_col52) * (op1_limb_17_col97))))) + (((op0_limb_2_col53) * (op1_limb_16_col96))))) + (((op0_limb_3_col54) * (op1_limb_15_col95))))) + (((op0_limb_4_col55) * (op1_limb_14_col94))))) + (((op0_limb_5_col56) * (op1_limb_13_col93))))) + (((op0_limb_6_col57) * (op1_limb_12_col92))))) + (((op0_limb_7_col58) * (op1_limb_11_col91))))) + (((op0_limb_8_col59) * (op1_limb_10_col90))))) + (((op0_limb_9_col60) * (op1_limb_9_col89))))) + (((op0_limb_10_col61) * (op1_limb_8_col88))))) + (((op0_limb_11_col62) * (op1_limb_7_col87))))) + (((op0_limb_12_col63) * (op1_limb_6_col86))))) + (((op0_limb_13_col64) * (op1_limb_5_col85))))) + (((op0_limb_14_col65) * (op1_limb_4_col84))))) + (((op0_limb_15_col66) * (op1_limb_3_col83))))) + (((op0_limb_16_col67) * (op1_limb_2_col82))))) + (((op0_limb_17_col68) * (op1_limb_1_col81))))) + (((op0_limb_18_col69) * (op1_limb_0_col80)))); -let conv_tmp_806 = ((((((((((((((((((((((((((((((((((((((((((M31_0) - (mul_res_limb_19_col156))) + (((op0_limb_0_col51) * (op1_limb_19_col99))))) + (((op0_limb_1_col52) * (op1_limb_18_col98))))) + (((op0_limb_2_col53) * (op1_limb_17_col97))))) + (((op0_limb_3_col54) * (op1_limb_16_col96))))) + (((op0_limb_4_col55) * (op1_limb_15_col95))))) + (((op0_limb_5_col56) * (op1_limb_14_col94))))) + (((op0_limb_6_col57) * (op1_limb_13_col93))))) + (((op0_limb_7_col58) * (op1_limb_12_col92))))) + (((op0_limb_8_col59) * (op1_limb_11_col91))))) + (((op0_limb_9_col60) * (op1_limb_10_col90))))) + (((op0_limb_10_col61) * (op1_limb_9_col89))))) + (((op0_limb_11_col62) * (op1_limb_8_col88))))) + (((op0_limb_12_col63) * (op1_limb_7_col87))))) + (((op0_limb_13_col64) * (op1_limb_6_col86))))) + (((op0_limb_14_col65) * (op1_limb_5_col85))))) + (((op0_limb_15_col66) * (op1_limb_4_col84))))) + (((op0_limb_16_col67) * (op1_limb_3_col83))))) + (((op0_limb_17_col68) * (op1_limb_2_col82))))) + (((op0_limb_18_col69) * (op1_limb_1_col81))))) + (((op0_limb_19_col70) * (op1_limb_0_col80)))); -let conv_tmp_807 = ((((((((((((((((((((((((((((((((((((((((((((M31_0) - (mul_res_limb_20_col157))) + (((op0_limb_0_col51) * (op1_limb_20_col100))))) + (((op0_limb_1_col52) * (op1_limb_19_col99))))) + (((op0_limb_2_col53) * (op1_limb_18_col98))))) + (((op0_limb_3_col54) * (op1_limb_17_col97))))) + (((op0_limb_4_col55) * (op1_limb_16_col96))))) + (((op0_limb_5_col56) * (op1_limb_15_col95))))) + (((op0_limb_6_col57) * (op1_limb_14_col94))))) + (((op0_limb_7_col58) * (op1_limb_13_col93))))) + (((op0_limb_8_col59) * (op1_limb_12_col92))))) + (((op0_limb_9_col60) * (op1_limb_11_col91))))) + (((op0_limb_10_col61) * (op1_limb_10_col90))))) + (((op0_limb_11_col62) * (op1_limb_9_col89))))) + (((op0_limb_12_col63) * (op1_limb_8_col88))))) + (((op0_limb_13_col64) * (op1_limb_7_col87))))) + (((op0_limb_14_col65) * (op1_limb_6_col86))))) + (((op0_limb_15_col66) * (op1_limb_5_col85))))) + (((op0_limb_16_col67) * (op1_limb_4_col84))))) + (((op0_limb_17_col68) * (op1_limb_3_col83))))) + (((op0_limb_18_col69) * (op1_limb_2_col82))))) + (((op0_limb_19_col70) * (op1_limb_1_col81))))) + (((op0_limb_20_col71) * (op1_limb_0_col80)))); -let conv_tmp_808 = ((((((((((((((((((((((((((((((((((((((((((((((M31_0) - (mul_res_limb_21_col158))) + (((op0_limb_0_col51) * (op1_limb_21_col101))))) + (((op0_limb_1_col52) * (op1_limb_20_col100))))) + (((op0_limb_2_col53) * (op1_limb_19_col99))))) + (((op0_limb_3_col54) * (op1_limb_18_col98))))) + (((op0_limb_4_col55) * (op1_limb_17_col97))))) + (((op0_limb_5_col56) * (op1_limb_16_col96))))) + (((op0_limb_6_col57) * (op1_limb_15_col95))))) + (((op0_limb_7_col58) * (op1_limb_14_col94))))) + (((op0_limb_8_col59) * (op1_limb_13_col93))))) + (((op0_limb_9_col60) * (op1_limb_12_col92))))) + (((op0_limb_10_col61) * (op1_limb_11_col91))))) + (((op0_limb_11_col62) * (op1_limb_10_col90))))) + (((op0_limb_12_col63) * (op1_limb_9_col89))))) + (((op0_limb_13_col64) * (op1_limb_8_col88))))) + (((op0_limb_14_col65) * (op1_limb_7_col87))))) + (((op0_limb_15_col66) * (op1_limb_6_col86))))) + (((op0_limb_16_col67) * (op1_limb_5_col85))))) + (((op0_limb_17_col68) * (op1_limb_4_col84))))) + (((op0_limb_18_col69) * (op1_limb_3_col83))))) + (((op0_limb_19_col70) * (op1_limb_2_col82))))) + (((op0_limb_20_col71) * (op1_limb_1_col81))))) + (((op0_limb_21_col72) * (op1_limb_0_col80)))); -let conv_tmp_809 = ((((((((((((((((((((((((((((((((((((((((((((((((M31_0) - (mul_res_limb_22_col159))) + (((op0_limb_0_col51) * (op1_limb_22_col102))))) + (((op0_limb_1_col52) * (op1_limb_21_col101))))) + (((op0_limb_2_col53) * (op1_limb_20_col100))))) + (((op0_limb_3_col54) * (op1_limb_19_col99))))) + (((op0_limb_4_col55) * (op1_limb_18_col98))))) + (((op0_limb_5_col56) * (op1_limb_17_col97))))) + (((op0_limb_6_col57) * (op1_limb_16_col96))))) + (((op0_limb_7_col58) * (op1_limb_15_col95))))) + (((op0_limb_8_col59) * (op1_limb_14_col94))))) + (((op0_limb_9_col60) * (op1_limb_13_col93))))) + (((op0_limb_10_col61) * (op1_limb_12_col92))))) + (((op0_limb_11_col62) * (op1_limb_11_col91))))) + (((op0_limb_12_col63) * (op1_limb_10_col90))))) + (((op0_limb_13_col64) * (op1_limb_9_col89))))) + (((op0_limb_14_col65) * (op1_limb_8_col88))))) + (((op0_limb_15_col66) * (op1_limb_7_col87))))) + (((op0_limb_16_col67) * (op1_limb_6_col86))))) + (((op0_limb_17_col68) * (op1_limb_5_col85))))) + (((op0_limb_18_col69) * (op1_limb_4_col84))))) + (((op0_limb_19_col70) * (op1_limb_3_col83))))) + (((op0_limb_20_col71) * (op1_limb_2_col82))))) + (((op0_limb_21_col72) * (op1_limb_1_col81))))) + (((op0_limb_22_col73) * (op1_limb_0_col80)))); -let conv_tmp_810 = ((((((((((((((((((((((((((((((((((((((((((((((((((M31_0) - (mul_res_limb_23_col160))) + (((op0_limb_0_col51) * (op1_limb_23_col103))))) + (((op0_limb_1_col52) * (op1_limb_22_col102))))) + (((op0_limb_2_col53) * (op1_limb_21_col101))))) + (((op0_limb_3_col54) * (op1_limb_20_col100))))) + (((op0_limb_4_col55) * (op1_limb_19_col99))))) + (((op0_limb_5_col56) * (op1_limb_18_col98))))) + (((op0_limb_6_col57) * (op1_limb_17_col97))))) + (((op0_limb_7_col58) * (op1_limb_16_col96))))) + (((op0_limb_8_col59) * (op1_limb_15_col95))))) + (((op0_limb_9_col60) * (op1_limb_14_col94))))) + (((op0_limb_10_col61) * (op1_limb_13_col93))))) + (((op0_limb_11_col62) * (op1_limb_12_col92))))) + (((op0_limb_12_col63) * (op1_limb_11_col91))))) + (((op0_limb_13_col64) * (op1_limb_10_col90))))) + (((op0_limb_14_col65) * (op1_limb_9_col89))))) + (((op0_limb_15_col66) * (op1_limb_8_col88))))) + (((op0_limb_16_col67) * (op1_limb_7_col87))))) + (((op0_limb_17_col68) * (op1_limb_6_col86))))) + (((op0_limb_18_col69) * (op1_limb_5_col85))))) + (((op0_limb_19_col70) * (op1_limb_4_col84))))) + (((op0_limb_20_col71) * (op1_limb_3_col83))))) + (((op0_limb_21_col72) * (op1_limb_2_col82))))) + (((op0_limb_22_col73) * (op1_limb_1_col81))))) + (((op0_limb_23_col74) * (op1_limb_0_col80)))); -let conv_tmp_811 = ((((((((((((((((((((((((((((((((((((((((((((((((((((M31_0) - (mul_res_limb_24_col161))) + (((op0_limb_0_col51) * (op1_limb_24_col104))))) + (((op0_limb_1_col52) * (op1_limb_23_col103))))) + (((op0_limb_2_col53) * (op1_limb_22_col102))))) + (((op0_limb_3_col54) * (op1_limb_21_col101))))) + (((op0_limb_4_col55) * (op1_limb_20_col100))))) + (((op0_limb_5_col56) * (op1_limb_19_col99))))) + (((op0_limb_6_col57) * (op1_limb_18_col98))))) + (((op0_limb_7_col58) * (op1_limb_17_col97))))) + (((op0_limb_8_col59) * (op1_limb_16_col96))))) + (((op0_limb_9_col60) * (op1_limb_15_col95))))) + (((op0_limb_10_col61) * (op1_limb_14_col94))))) + (((op0_limb_11_col62) * (op1_limb_13_col93))))) + (((op0_limb_12_col63) * (op1_limb_12_col92))))) + (((op0_limb_13_col64) * (op1_limb_11_col91))))) + (((op0_limb_14_col65) * (op1_limb_10_col90))))) + (((op0_limb_15_col66) * (op1_limb_9_col89))))) + (((op0_limb_16_col67) * (op1_limb_8_col88))))) + (((op0_limb_17_col68) * (op1_limb_7_col87))))) + (((op0_limb_18_col69) * (op1_limb_6_col86))))) + (((op0_limb_19_col70) * (op1_limb_5_col85))))) + (((op0_limb_20_col71) * (op1_limb_4_col84))))) + (((op0_limb_21_col72) * (op1_limb_3_col83))))) + (((op0_limb_22_col73) * (op1_limb_2_col82))))) + (((op0_limb_23_col74) * (op1_limb_1_col81))))) + (((op0_limb_24_col75) * (op1_limb_0_col80)))); -let conv_tmp_812 = ((((((((((((((((((((((((((((((((((((((((((((((((((((((M31_0) - (mul_res_limb_25_col162))) + (((op0_limb_0_col51) * (op1_limb_25_col105))))) + (((op0_limb_1_col52) * (op1_limb_24_col104))))) + (((op0_limb_2_col53) * (op1_limb_23_col103))))) + (((op0_limb_3_col54) * (op1_limb_22_col102))))) + (((op0_limb_4_col55) * (op1_limb_21_col101))))) + (((op0_limb_5_col56) * (op1_limb_20_col100))))) + (((op0_limb_6_col57) * (op1_limb_19_col99))))) + (((op0_limb_7_col58) * (op1_limb_18_col98))))) + (((op0_limb_8_col59) * (op1_limb_17_col97))))) + (((op0_limb_9_col60) * (op1_limb_16_col96))))) + (((op0_limb_10_col61) * (op1_limb_15_col95))))) + (((op0_limb_11_col62) * (op1_limb_14_col94))))) + (((op0_limb_12_col63) * (op1_limb_13_col93))))) + (((op0_limb_13_col64) * (op1_limb_12_col92))))) + (((op0_limb_14_col65) * (op1_limb_11_col91))))) + (((op0_limb_15_col66) * (op1_limb_10_col90))))) + (((op0_limb_16_col67) * (op1_limb_9_col89))))) + (((op0_limb_17_col68) * (op1_limb_8_col88))))) + (((op0_limb_18_col69) * (op1_limb_7_col87))))) + (((op0_limb_19_col70) * (op1_limb_6_col86))))) + (((op0_limb_20_col71) * (op1_limb_5_col85))))) + (((op0_limb_21_col72) * (op1_limb_4_col84))))) + (((op0_limb_22_col73) * (op1_limb_3_col83))))) + (((op0_limb_23_col74) * (op1_limb_2_col82))))) + (((op0_limb_24_col75) * (op1_limb_1_col81))))) + (((op0_limb_25_col76) * (op1_limb_0_col80)))); -let conv_tmp_813 = ((((((((((((((((((((((((((((((((((((((((((((((((((((((((M31_0) - (mul_res_limb_26_col163))) + (((op0_limb_0_col51) * (op1_limb_26_col106))))) + (((op0_limb_1_col52) * (op1_limb_25_col105))))) + (((op0_limb_2_col53) * (op1_limb_24_col104))))) + (((op0_limb_3_col54) * (op1_limb_23_col103))))) + (((op0_limb_4_col55) * (op1_limb_22_col102))))) + (((op0_limb_5_col56) * (op1_limb_21_col101))))) + (((op0_limb_6_col57) * (op1_limb_20_col100))))) + (((op0_limb_7_col58) * (op1_limb_19_col99))))) + (((op0_limb_8_col59) * (op1_limb_18_col98))))) + (((op0_limb_9_col60) * (op1_limb_17_col97))))) + (((op0_limb_10_col61) * (op1_limb_16_col96))))) + (((op0_limb_11_col62) * (op1_limb_15_col95))))) + (((op0_limb_12_col63) * (op1_limb_14_col94))))) + (((op0_limb_13_col64) * (op1_limb_13_col93))))) + (((op0_limb_14_col65) * (op1_limb_12_col92))))) + (((op0_limb_15_col66) * (op1_limb_11_col91))))) + (((op0_limb_16_col67) * (op1_limb_10_col90))))) + (((op0_limb_17_col68) * (op1_limb_9_col89))))) + (((op0_limb_18_col69) * (op1_limb_8_col88))))) + (((op0_limb_19_col70) * (op1_limb_7_col87))))) + (((op0_limb_20_col71) * (op1_limb_6_col86))))) + (((op0_limb_21_col72) * (op1_limb_5_col85))))) + (((op0_limb_22_col73) * (op1_limb_4_col84))))) + (((op0_limb_23_col74) * (op1_limb_3_col83))))) + (((op0_limb_24_col75) * (op1_limb_2_col82))))) + (((op0_limb_25_col76) * (op1_limb_1_col81))))) + (((op0_limb_26_col77) * (op1_limb_0_col80)))); -let conv_tmp_814 = ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((M31_0) - (mul_res_limb_27_col164))) + (((op0_limb_0_col51) * (op1_limb_27_col107))))) + (((op0_limb_1_col52) * (op1_limb_26_col106))))) + (((op0_limb_2_col53) * (op1_limb_25_col105))))) + (((op0_limb_3_col54) * (op1_limb_24_col104))))) + (((op0_limb_4_col55) * (op1_limb_23_col103))))) + (((op0_limb_5_col56) * (op1_limb_22_col102))))) + (((op0_limb_6_col57) * (op1_limb_21_col101))))) + (((op0_limb_7_col58) * (op1_limb_20_col100))))) + (((op0_limb_8_col59) * (op1_limb_19_col99))))) + (((op0_limb_9_col60) * (op1_limb_18_col98))))) + (((op0_limb_10_col61) * (op1_limb_17_col97))))) + (((op0_limb_11_col62) * (op1_limb_16_col96))))) + (((op0_limb_12_col63) * (op1_limb_15_col95))))) + (((op0_limb_13_col64) * (op1_limb_14_col94))))) + (((op0_limb_14_col65) * (op1_limb_13_col93))))) + (((op0_limb_15_col66) * (op1_limb_12_col92))))) + (((op0_limb_16_col67) * (op1_limb_11_col91))))) + (((op0_limb_17_col68) * (op1_limb_10_col90))))) + (((op0_limb_18_col69) * (op1_limb_9_col89))))) + (((op0_limb_19_col70) * (op1_limb_8_col88))))) + (((op0_limb_20_col71) * (op1_limb_7_col87))))) + (((op0_limb_21_col72) * (op1_limb_6_col86))))) + (((op0_limb_22_col73) * (op1_limb_5_col85))))) + (((op0_limb_23_col74) * (op1_limb_4_col84))))) + (((op0_limb_24_col75) * (op1_limb_3_col83))))) + (((op0_limb_25_col76) * (op1_limb_2_col82))))) + (((op0_limb_26_col77) * (op1_limb_1_col81))))) + (((op0_limb_27_col78) * (op1_limb_0_col80)))); -let conv_tmp_815 = ((((((((((((((((((((((((((((((((((((((((((((((((((((((M31_0) + (((op0_limb_1_col52) * (op1_limb_27_col107))))) + (((op0_limb_2_col53) * (op1_limb_26_col106))))) + (((op0_limb_3_col54) * (op1_limb_25_col105))))) + (((op0_limb_4_col55) * (op1_limb_24_col104))))) + (((op0_limb_5_col56) * (op1_limb_23_col103))))) + (((op0_limb_6_col57) * (op1_limb_22_col102))))) + (((op0_limb_7_col58) * (op1_limb_21_col101))))) + (((op0_limb_8_col59) * (op1_limb_20_col100))))) + (((op0_limb_9_col60) * (op1_limb_19_col99))))) + (((op0_limb_10_col61) * (op1_limb_18_col98))))) + (((op0_limb_11_col62) * (op1_limb_17_col97))))) + (((op0_limb_12_col63) * (op1_limb_16_col96))))) + (((op0_limb_13_col64) * (op1_limb_15_col95))))) + (((op0_limb_14_col65) * (op1_limb_14_col94))))) + (((op0_limb_15_col66) * (op1_limb_13_col93))))) + (((op0_limb_16_col67) * (op1_limb_12_col92))))) + (((op0_limb_17_col68) * (op1_limb_11_col91))))) + (((op0_limb_18_col69) * (op1_limb_10_col90))))) + (((op0_limb_19_col70) * (op1_limb_9_col89))))) + (((op0_limb_20_col71) * (op1_limb_8_col88))))) + (((op0_limb_21_col72) * (op1_limb_7_col87))))) + (((op0_limb_22_col73) * (op1_limb_6_col86))))) + (((op0_limb_23_col74) * (op1_limb_5_col85))))) + (((op0_limb_24_col75) * (op1_limb_4_col84))))) + (((op0_limb_25_col76) * (op1_limb_3_col83))))) + (((op0_limb_26_col77) * (op1_limb_2_col82))))) + (((op0_limb_27_col78) * (op1_limb_1_col81)))); -let conv_tmp_816 = ((((((((((((((((((((((((((((((((((((((((((((((((((((M31_0) + (((op0_limb_2_col53) * (op1_limb_27_col107))))) + (((op0_limb_3_col54) * (op1_limb_26_col106))))) + (((op0_limb_4_col55) * (op1_limb_25_col105))))) + (((op0_limb_5_col56) * (op1_limb_24_col104))))) + (((op0_limb_6_col57) * (op1_limb_23_col103))))) + (((op0_limb_7_col58) * (op1_limb_22_col102))))) + (((op0_limb_8_col59) * (op1_limb_21_col101))))) + (((op0_limb_9_col60) * (op1_limb_20_col100))))) + (((op0_limb_10_col61) * (op1_limb_19_col99))))) + (((op0_limb_11_col62) * (op1_limb_18_col98))))) + (((op0_limb_12_col63) * (op1_limb_17_col97))))) + (((op0_limb_13_col64) * (op1_limb_16_col96))))) + (((op0_limb_14_col65) * (op1_limb_15_col95))))) + (((op0_limb_15_col66) * (op1_limb_14_col94))))) + (((op0_limb_16_col67) * (op1_limb_13_col93))))) + (((op0_limb_17_col68) * (op1_limb_12_col92))))) + (((op0_limb_18_col69) * (op1_limb_11_col91))))) + (((op0_limb_19_col70) * (op1_limb_10_col90))))) + (((op0_limb_20_col71) * (op1_limb_9_col89))))) + (((op0_limb_21_col72) * (op1_limb_8_col88))))) + (((op0_limb_22_col73) * (op1_limb_7_col87))))) + (((op0_limb_23_col74) * (op1_limb_6_col86))))) + (((op0_limb_24_col75) * (op1_limb_5_col85))))) + (((op0_limb_25_col76) * (op1_limb_4_col84))))) + (((op0_limb_26_col77) * (op1_limb_3_col83))))) + (((op0_limb_27_col78) * (op1_limb_2_col82)))); -let conv_tmp_817 = ((((((((((((((((((((((((((((((((((((((((((((((((((M31_0) + (((op0_limb_3_col54) * (op1_limb_27_col107))))) + (((op0_limb_4_col55) * (op1_limb_26_col106))))) + (((op0_limb_5_col56) * (op1_limb_25_col105))))) + (((op0_limb_6_col57) * (op1_limb_24_col104))))) + (((op0_limb_7_col58) * (op1_limb_23_col103))))) + (((op0_limb_8_col59) * (op1_limb_22_col102))))) + (((op0_limb_9_col60) * (op1_limb_21_col101))))) + (((op0_limb_10_col61) * (op1_limb_20_col100))))) + (((op0_limb_11_col62) * (op1_limb_19_col99))))) + (((op0_limb_12_col63) * (op1_limb_18_col98))))) + (((op0_limb_13_col64) * (op1_limb_17_col97))))) + (((op0_limb_14_col65) * (op1_limb_16_col96))))) + (((op0_limb_15_col66) * (op1_limb_15_col95))))) + (((op0_limb_16_col67) * (op1_limb_14_col94))))) + (((op0_limb_17_col68) * (op1_limb_13_col93))))) + (((op0_limb_18_col69) * (op1_limb_12_col92))))) + (((op0_limb_19_col70) * (op1_limb_11_col91))))) + (((op0_limb_20_col71) * (op1_limb_10_col90))))) + (((op0_limb_21_col72) * (op1_limb_9_col89))))) + (((op0_limb_22_col73) * (op1_limb_8_col88))))) + (((op0_limb_23_col74) * (op1_limb_7_col87))))) + (((op0_limb_24_col75) * (op1_limb_6_col86))))) + (((op0_limb_25_col76) * (op1_limb_5_col85))))) + (((op0_limb_26_col77) * (op1_limb_4_col84))))) + (((op0_limb_27_col78) * (op1_limb_3_col83)))); -let conv_tmp_818 = ((((((((((((((((((((((((((((((((((((((((((((((((M31_0) + (((op0_limb_4_col55) * (op1_limb_27_col107))))) + (((op0_limb_5_col56) * (op1_limb_26_col106))))) + (((op0_limb_6_col57) * (op1_limb_25_col105))))) + (((op0_limb_7_col58) * (op1_limb_24_col104))))) + (((op0_limb_8_col59) * (op1_limb_23_col103))))) + (((op0_limb_9_col60) * (op1_limb_22_col102))))) + (((op0_limb_10_col61) * (op1_limb_21_col101))))) + (((op0_limb_11_col62) * (op1_limb_20_col100))))) + (((op0_limb_12_col63) * (op1_limb_19_col99))))) + (((op0_limb_13_col64) * (op1_limb_18_col98))))) + (((op0_limb_14_col65) * (op1_limb_17_col97))))) + (((op0_limb_15_col66) * (op1_limb_16_col96))))) + (((op0_limb_16_col67) * (op1_limb_15_col95))))) + (((op0_limb_17_col68) * (op1_limb_14_col94))))) + (((op0_limb_18_col69) * (op1_limb_13_col93))))) + (((op0_limb_19_col70) * (op1_limb_12_col92))))) + (((op0_limb_20_col71) * (op1_limb_11_col91))))) + (((op0_limb_21_col72) * (op1_limb_10_col90))))) + (((op0_limb_22_col73) * (op1_limb_9_col89))))) + (((op0_limb_23_col74) * (op1_limb_8_col88))))) + (((op0_limb_24_col75) * (op1_limb_7_col87))))) + (((op0_limb_25_col76) * (op1_limb_6_col86))))) + (((op0_limb_26_col77) * (op1_limb_5_col85))))) + (((op0_limb_27_col78) * (op1_limb_4_col84)))); -let conv_tmp_819 = ((((((((((((((((((((((((((((((((((((((((((((((M31_0) + (((op0_limb_5_col56) * (op1_limb_27_col107))))) + (((op0_limb_6_col57) * (op1_limb_26_col106))))) + (((op0_limb_7_col58) * (op1_limb_25_col105))))) + (((op0_limb_8_col59) * (op1_limb_24_col104))))) + (((op0_limb_9_col60) * (op1_limb_23_col103))))) + (((op0_limb_10_col61) * (op1_limb_22_col102))))) + (((op0_limb_11_col62) * (op1_limb_21_col101))))) + (((op0_limb_12_col63) * (op1_limb_20_col100))))) + (((op0_limb_13_col64) * (op1_limb_19_col99))))) + (((op0_limb_14_col65) * (op1_limb_18_col98))))) + (((op0_limb_15_col66) * (op1_limb_17_col97))))) + (((op0_limb_16_col67) * (op1_limb_16_col96))))) + (((op0_limb_17_col68) * (op1_limb_15_col95))))) + (((op0_limb_18_col69) * (op1_limb_14_col94))))) + (((op0_limb_19_col70) * (op1_limb_13_col93))))) + (((op0_limb_20_col71) * (op1_limb_12_col92))))) + (((op0_limb_21_col72) * (op1_limb_11_col91))))) + (((op0_limb_22_col73) * (op1_limb_10_col90))))) + (((op0_limb_23_col74) * (op1_limb_9_col89))))) + (((op0_limb_24_col75) * (op1_limb_8_col88))))) + (((op0_limb_25_col76) * (op1_limb_7_col87))))) + (((op0_limb_26_col77) * (op1_limb_6_col86))))) + (((op0_limb_27_col78) * (op1_limb_5_col85)))); -let conv_tmp_820 = ((((((((((((((((((((((((((((((((((((((((((((M31_0) + (((op0_limb_6_col57) * (op1_limb_27_col107))))) + (((op0_limb_7_col58) * (op1_limb_26_col106))))) + (((op0_limb_8_col59) * (op1_limb_25_col105))))) + (((op0_limb_9_col60) * (op1_limb_24_col104))))) + (((op0_limb_10_col61) * (op1_limb_23_col103))))) + (((op0_limb_11_col62) * (op1_limb_22_col102))))) + (((op0_limb_12_col63) * (op1_limb_21_col101))))) + (((op0_limb_13_col64) * (op1_limb_20_col100))))) + (((op0_limb_14_col65) * (op1_limb_19_col99))))) + (((op0_limb_15_col66) * (op1_limb_18_col98))))) + (((op0_limb_16_col67) * (op1_limb_17_col97))))) + (((op0_limb_17_col68) * (op1_limb_16_col96))))) + (((op0_limb_18_col69) * (op1_limb_15_col95))))) + (((op0_limb_19_col70) * (op1_limb_14_col94))))) + (((op0_limb_20_col71) * (op1_limb_13_col93))))) + (((op0_limb_21_col72) * (op1_limb_12_col92))))) + (((op0_limb_22_col73) * (op1_limb_11_col91))))) + (((op0_limb_23_col74) * (op1_limb_10_col90))))) + (((op0_limb_24_col75) * (op1_limb_9_col89))))) + (((op0_limb_25_col76) * (op1_limb_8_col88))))) + (((op0_limb_26_col77) * (op1_limb_7_col87))))) + (((op0_limb_27_col78) * (op1_limb_6_col86)))); -let conv_tmp_821 = ((((((((((((((((((((((((((((((((((((((((((M31_0) + (((op0_limb_7_col58) * (op1_limb_27_col107))))) + (((op0_limb_8_col59) * (op1_limb_26_col106))))) + (((op0_limb_9_col60) * (op1_limb_25_col105))))) + (((op0_limb_10_col61) * (op1_limb_24_col104))))) + (((op0_limb_11_col62) * (op1_limb_23_col103))))) + (((op0_limb_12_col63) * (op1_limb_22_col102))))) + (((op0_limb_13_col64) * (op1_limb_21_col101))))) + (((op0_limb_14_col65) * (op1_limb_20_col100))))) + (((op0_limb_15_col66) * (op1_limb_19_col99))))) + (((op0_limb_16_col67) * (op1_limb_18_col98))))) + (((op0_limb_17_col68) * (op1_limb_17_col97))))) + (((op0_limb_18_col69) * (op1_limb_16_col96))))) + (((op0_limb_19_col70) * (op1_limb_15_col95))))) + (((op0_limb_20_col71) * (op1_limb_14_col94))))) + (((op0_limb_21_col72) * (op1_limb_13_col93))))) + (((op0_limb_22_col73) * (op1_limb_12_col92))))) + (((op0_limb_23_col74) * (op1_limb_11_col91))))) + (((op0_limb_24_col75) * (op1_limb_10_col90))))) + (((op0_limb_25_col76) * (op1_limb_9_col89))))) + (((op0_limb_26_col77) * (op1_limb_8_col88))))) + (((op0_limb_27_col78) * (op1_limb_7_col87)))); -let conv_tmp_822 = ((((((((((((((((((((((((((((((((((((((((M31_0) + (((op0_limb_8_col59) * (op1_limb_27_col107))))) + (((op0_limb_9_col60) * (op1_limb_26_col106))))) + (((op0_limb_10_col61) * (op1_limb_25_col105))))) + (((op0_limb_11_col62) * (op1_limb_24_col104))))) + (((op0_limb_12_col63) * (op1_limb_23_col103))))) + (((op0_limb_13_col64) * (op1_limb_22_col102))))) + (((op0_limb_14_col65) * (op1_limb_21_col101))))) + (((op0_limb_15_col66) * (op1_limb_20_col100))))) + (((op0_limb_16_col67) * (op1_limb_19_col99))))) + (((op0_limb_17_col68) * (op1_limb_18_col98))))) + (((op0_limb_18_col69) * (op1_limb_17_col97))))) + (((op0_limb_19_col70) * (op1_limb_16_col96))))) + (((op0_limb_20_col71) * (op1_limb_15_col95))))) + (((op0_limb_21_col72) * (op1_limb_14_col94))))) + (((op0_limb_22_col73) * (op1_limb_13_col93))))) + (((op0_limb_23_col74) * (op1_limb_12_col92))))) + (((op0_limb_24_col75) * (op1_limb_11_col91))))) + (((op0_limb_25_col76) * (op1_limb_10_col90))))) + (((op0_limb_26_col77) * (op1_limb_9_col89))))) + (((op0_limb_27_col78) * (op1_limb_8_col88)))); -let conv_tmp_823 = ((((((((((((((((((((((((((((((((((((((M31_0) + (((op0_limb_9_col60) * (op1_limb_27_col107))))) + (((op0_limb_10_col61) * (op1_limb_26_col106))))) + (((op0_limb_11_col62) * (op1_limb_25_col105))))) + (((op0_limb_12_col63) * (op1_limb_24_col104))))) + (((op0_limb_13_col64) * (op1_limb_23_col103))))) + (((op0_limb_14_col65) * (op1_limb_22_col102))))) + (((op0_limb_15_col66) * (op1_limb_21_col101))))) + (((op0_limb_16_col67) * (op1_limb_20_col100))))) + (((op0_limb_17_col68) * (op1_limb_19_col99))))) + (((op0_limb_18_col69) * (op1_limb_18_col98))))) + (((op0_limb_19_col70) * (op1_limb_17_col97))))) + (((op0_limb_20_col71) * (op1_limb_16_col96))))) + (((op0_limb_21_col72) * (op1_limb_15_col95))))) + (((op0_limb_22_col73) * (op1_limb_14_col94))))) + (((op0_limb_23_col74) * (op1_limb_13_col93))))) + (((op0_limb_24_col75) * (op1_limb_12_col92))))) + (((op0_limb_25_col76) * (op1_limb_11_col91))))) + (((op0_limb_26_col77) * (op1_limb_10_col90))))) + (((op0_limb_27_col78) * (op1_limb_9_col89)))); -let conv_tmp_824 = ((((((((((((((((((((((((((((((((((((M31_0) + (((op0_limb_10_col61) * (op1_limb_27_col107))))) + (((op0_limb_11_col62) * (op1_limb_26_col106))))) + (((op0_limb_12_col63) * (op1_limb_25_col105))))) + (((op0_limb_13_col64) * (op1_limb_24_col104))))) + (((op0_limb_14_col65) * (op1_limb_23_col103))))) + (((op0_limb_15_col66) * (op1_limb_22_col102))))) + (((op0_limb_16_col67) * (op1_limb_21_col101))))) + (((op0_limb_17_col68) * (op1_limb_20_col100))))) + (((op0_limb_18_col69) * (op1_limb_19_col99))))) + (((op0_limb_19_col70) * (op1_limb_18_col98))))) + (((op0_limb_20_col71) * (op1_limb_17_col97))))) + (((op0_limb_21_col72) * (op1_limb_16_col96))))) + (((op0_limb_22_col73) * (op1_limb_15_col95))))) + (((op0_limb_23_col74) * (op1_limb_14_col94))))) + (((op0_limb_24_col75) * (op1_limb_13_col93))))) + (((op0_limb_25_col76) * (op1_limb_12_col92))))) + (((op0_limb_26_col77) * (op1_limb_11_col91))))) + (((op0_limb_27_col78) * (op1_limb_10_col90)))); -let conv_tmp_825 = ((((((((((((((((((((((((((((((((((M31_0) + (((op0_limb_11_col62) * (op1_limb_27_col107))))) + (((op0_limb_12_col63) * (op1_limb_26_col106))))) + (((op0_limb_13_col64) * (op1_limb_25_col105))))) + (((op0_limb_14_col65) * (op1_limb_24_col104))))) + (((op0_limb_15_col66) * (op1_limb_23_col103))))) + (((op0_limb_16_col67) * (op1_limb_22_col102))))) + (((op0_limb_17_col68) * (op1_limb_21_col101))))) + (((op0_limb_18_col69) * (op1_limb_20_col100))))) + (((op0_limb_19_col70) * (op1_limb_19_col99))))) + (((op0_limb_20_col71) * (op1_limb_18_col98))))) + (((op0_limb_21_col72) * (op1_limb_17_col97))))) + (((op0_limb_22_col73) * (op1_limb_16_col96))))) + (((op0_limb_23_col74) * (op1_limb_15_col95))))) + (((op0_limb_24_col75) * (op1_limb_14_col94))))) + (((op0_limb_25_col76) * (op1_limb_13_col93))))) + (((op0_limb_26_col77) * (op1_limb_12_col92))))) + (((op0_limb_27_col78) * (op1_limb_11_col91)))); -let conv_tmp_826 = ((((((((((((((((((((((((((((((((M31_0) + (((op0_limb_12_col63) * (op1_limb_27_col107))))) + (((op0_limb_13_col64) * (op1_limb_26_col106))))) + (((op0_limb_14_col65) * (op1_limb_25_col105))))) + (((op0_limb_15_col66) * (op1_limb_24_col104))))) + (((op0_limb_16_col67) * (op1_limb_23_col103))))) + (((op0_limb_17_col68) * (op1_limb_22_col102))))) + (((op0_limb_18_col69) * (op1_limb_21_col101))))) + (((op0_limb_19_col70) * (op1_limb_20_col100))))) + (((op0_limb_20_col71) * (op1_limb_19_col99))))) + (((op0_limb_21_col72) * (op1_limb_18_col98))))) + (((op0_limb_22_col73) * (op1_limb_17_col97))))) + (((op0_limb_23_col74) * (op1_limb_16_col96))))) + (((op0_limb_24_col75) * (op1_limb_15_col95))))) + (((op0_limb_25_col76) * (op1_limb_14_col94))))) + (((op0_limb_26_col77) * (op1_limb_13_col93))))) + (((op0_limb_27_col78) * (op1_limb_12_col92)))); -let conv_tmp_827 = ((((((((((((((((((((((((((((((M31_0) + (((op0_limb_13_col64) * (op1_limb_27_col107))))) + (((op0_limb_14_col65) * (op1_limb_26_col106))))) + (((op0_limb_15_col66) * (op1_limb_25_col105))))) + (((op0_limb_16_col67) * (op1_limb_24_col104))))) + (((op0_limb_17_col68) * (op1_limb_23_col103))))) + (((op0_limb_18_col69) * (op1_limb_22_col102))))) + (((op0_limb_19_col70) * (op1_limb_21_col101))))) + (((op0_limb_20_col71) * (op1_limb_20_col100))))) + (((op0_limb_21_col72) * (op1_limb_19_col99))))) + (((op0_limb_22_col73) * (op1_limb_18_col98))))) + (((op0_limb_23_col74) * (op1_limb_17_col97))))) + (((op0_limb_24_col75) * (op1_limb_16_col96))))) + (((op0_limb_25_col76) * (op1_limb_15_col95))))) + (((op0_limb_26_col77) * (op1_limb_14_col94))))) + (((op0_limb_27_col78) * (op1_limb_13_col93)))); -let conv_tmp_828 = ((((((((((((((((((((((((((((M31_0) + (((op0_limb_14_col65) * (op1_limb_27_col107))))) + (((op0_limb_15_col66) * (op1_limb_26_col106))))) + (((op0_limb_16_col67) * (op1_limb_25_col105))))) + (((op0_limb_17_col68) * (op1_limb_24_col104))))) + (((op0_limb_18_col69) * (op1_limb_23_col103))))) + (((op0_limb_19_col70) * (op1_limb_22_col102))))) + (((op0_limb_20_col71) * (op1_limb_21_col101))))) + (((op0_limb_21_col72) * (op1_limb_20_col100))))) + (((op0_limb_22_col73) * (op1_limb_19_col99))))) + (((op0_limb_23_col74) * (op1_limb_18_col98))))) + (((op0_limb_24_col75) * (op1_limb_17_col97))))) + (((op0_limb_25_col76) * (op1_limb_16_col96))))) + (((op0_limb_26_col77) * (op1_limb_15_col95))))) + (((op0_limb_27_col78) * (op1_limb_14_col94)))); -let conv_tmp_829 = ((((((((((((((((((((((((((M31_0) + (((op0_limb_15_col66) * (op1_limb_27_col107))))) + (((op0_limb_16_col67) * (op1_limb_26_col106))))) + (((op0_limb_17_col68) * (op1_limb_25_col105))))) + (((op0_limb_18_col69) * (op1_limb_24_col104))))) + (((op0_limb_19_col70) * (op1_limb_23_col103))))) + (((op0_limb_20_col71) * (op1_limb_22_col102))))) + (((op0_limb_21_col72) * (op1_limb_21_col101))))) + (((op0_limb_22_col73) * (op1_limb_20_col100))))) + (((op0_limb_23_col74) * (op1_limb_19_col99))))) + (((op0_limb_24_col75) * (op1_limb_18_col98))))) + (((op0_limb_25_col76) * (op1_limb_17_col97))))) + (((op0_limb_26_col77) * (op1_limb_16_col96))))) + (((op0_limb_27_col78) * (op1_limb_15_col95)))); -let conv_tmp_830 = ((((((((((((((((((((((((M31_0) + (((op0_limb_16_col67) * (op1_limb_27_col107))))) + (((op0_limb_17_col68) * (op1_limb_26_col106))))) + (((op0_limb_18_col69) * (op1_limb_25_col105))))) + (((op0_limb_19_col70) * (op1_limb_24_col104))))) + (((op0_limb_20_col71) * (op1_limb_23_col103))))) + (((op0_limb_21_col72) * (op1_limb_22_col102))))) + (((op0_limb_22_col73) * (op1_limb_21_col101))))) + (((op0_limb_23_col74) * (op1_limb_20_col100))))) + (((op0_limb_24_col75) * (op1_limb_19_col99))))) + (((op0_limb_25_col76) * (op1_limb_18_col98))))) + (((op0_limb_26_col77) * (op1_limb_17_col97))))) + (((op0_limb_27_col78) * (op1_limb_16_col96)))); -let conv_tmp_831 = ((((((((((((((((((((((M31_0) + (((op0_limb_17_col68) * (op1_limb_27_col107))))) + (((op0_limb_18_col69) * (op1_limb_26_col106))))) + (((op0_limb_19_col70) * (op1_limb_25_col105))))) + (((op0_limb_20_col71) * (op1_limb_24_col104))))) + (((op0_limb_21_col72) * (op1_limb_23_col103))))) + (((op0_limb_22_col73) * (op1_limb_22_col102))))) + (((op0_limb_23_col74) * (op1_limb_21_col101))))) + (((op0_limb_24_col75) * (op1_limb_20_col100))))) + (((op0_limb_25_col76) * (op1_limb_19_col99))))) + (((op0_limb_26_col77) * (op1_limb_18_col98))))) + (((op0_limb_27_col78) * (op1_limb_17_col97)))); -let conv_tmp_832 = ((((((((((((((((((((M31_0) + (((op0_limb_18_col69) * (op1_limb_27_col107))))) + (((op0_limb_19_col70) * (op1_limb_26_col106))))) + (((op0_limb_20_col71) * (op1_limb_25_col105))))) + (((op0_limb_21_col72) * (op1_limb_24_col104))))) + (((op0_limb_22_col73) * (op1_limb_23_col103))))) + (((op0_limb_23_col74) * (op1_limb_22_col102))))) + (((op0_limb_24_col75) * (op1_limb_21_col101))))) + (((op0_limb_25_col76) * (op1_limb_20_col100))))) + (((op0_limb_26_col77) * (op1_limb_19_col99))))) + (((op0_limb_27_col78) * (op1_limb_18_col98)))); -let conv_tmp_833 = ((((((((((((((((((M31_0) + (((op0_limb_19_col70) * (op1_limb_27_col107))))) + (((op0_limb_20_col71) * (op1_limb_26_col106))))) + (((op0_limb_21_col72) * (op1_limb_25_col105))))) + (((op0_limb_22_col73) * (op1_limb_24_col104))))) + (((op0_limb_23_col74) * (op1_limb_23_col103))))) + (((op0_limb_24_col75) * (op1_limb_22_col102))))) + (((op0_limb_25_col76) * (op1_limb_21_col101))))) + (((op0_limb_26_col77) * (op1_limb_20_col100))))) + (((op0_limb_27_col78) * (op1_limb_19_col99)))); -let conv_tmp_834 = ((((((((((((((((M31_0) + (((op0_limb_20_col71) * (op1_limb_27_col107))))) + (((op0_limb_21_col72) * (op1_limb_26_col106))))) + (((op0_limb_22_col73) * (op1_limb_25_col105))))) + (((op0_limb_23_col74) * (op1_limb_24_col104))))) + (((op0_limb_24_col75) * (op1_limb_23_col103))))) + (((op0_limb_25_col76) * (op1_limb_22_col102))))) + (((op0_limb_26_col77) * (op1_limb_21_col101))))) + (((op0_limb_27_col78) * (op1_limb_20_col100)))); -let conv_tmp_835 = ((((((((((((((M31_0) + (((op0_limb_21_col72) * (op1_limb_27_col107))))) + (((op0_limb_22_col73) * (op1_limb_26_col106))))) + (((op0_limb_23_col74) * (op1_limb_25_col105))))) + (((op0_limb_24_col75) * (op1_limb_24_col104))))) + (((op0_limb_25_col76) * (op1_limb_23_col103))))) + (((op0_limb_26_col77) * (op1_limb_22_col102))))) + (((op0_limb_27_col78) * (op1_limb_21_col101)))); -let conv_tmp_836 = ((((((((((((M31_0) + (((op0_limb_22_col73) * (op1_limb_27_col107))))) + (((op0_limb_23_col74) * (op1_limb_26_col106))))) + (((op0_limb_24_col75) * (op1_limb_25_col105))))) + (((op0_limb_25_col76) * (op1_limb_24_col104))))) + (((op0_limb_26_col77) * (op1_limb_23_col103))))) + (((op0_limb_27_col78) * (op1_limb_22_col102)))); -let conv_tmp_837 = ((((((((((M31_0) + (((op0_limb_23_col74) * (op1_limb_27_col107))))) + (((op0_limb_24_col75) * (op1_limb_26_col106))))) + (((op0_limb_25_col76) * (op1_limb_25_col105))))) + (((op0_limb_26_col77) * (op1_limb_24_col104))))) + (((op0_limb_27_col78) * (op1_limb_23_col103)))); -let conv_tmp_838 = ((((((((M31_0) + (((op0_limb_24_col75) * (op1_limb_27_col107))))) + (((op0_limb_25_col76) * (op1_limb_26_col106))))) + (((op0_limb_26_col77) * (op1_limb_25_col105))))) + (((op0_limb_27_col78) * (op1_limb_24_col104)))); -let conv_tmp_839 = ((((((M31_0) + (((op0_limb_25_col76) * (op1_limb_27_col107))))) + (((op0_limb_26_col77) * (op1_limb_26_col106))))) + (((op0_limb_27_col78) * (op1_limb_25_col105)))); -let conv_tmp_840 = ((((M31_0) + (((op0_limb_26_col77) * (op1_limb_27_col107))))) + (((op0_limb_27_col78) * (op1_limb_26_col106)))); -let conv_tmp_841 = ((M31_0) + (((op0_limb_27_col78) * (op1_limb_27_col107)))); -let conv_mod_tmp_842 = ((((((M31_0) + (((M31_32) * (conv_tmp_787))))) - (((M31_4) * (conv_tmp_808))))) + (((M31_8) * (conv_tmp_836)))); -let conv_mod_tmp_843 = ((((((((M31_0) + (((M31_1) * (conv_tmp_787))))) + (((M31_32) * (conv_tmp_788))))) - (((M31_4) * (conv_tmp_809))))) + (((M31_8) * (conv_tmp_837)))); -let conv_mod_tmp_844 = ((((((((M31_0) + (((M31_1) * (conv_tmp_788))))) + (((M31_32) * (conv_tmp_789))))) - (((M31_4) * (conv_tmp_810))))) + (((M31_8) * (conv_tmp_838)))); -let conv_mod_tmp_845 = ((((((((M31_0) + (((M31_1) * (conv_tmp_789))))) + (((M31_32) * (conv_tmp_790))))) - (((M31_4) * (conv_tmp_811))))) + (((M31_8) * (conv_tmp_839)))); -let conv_mod_tmp_846 = ((((((((M31_0) + (((M31_1) * (conv_tmp_790))))) + (((M31_32) * (conv_tmp_791))))) - (((M31_4) * (conv_tmp_812))))) + (((M31_8) * (conv_tmp_840)))); -let conv_mod_tmp_847 = ((((((((M31_0) + (((M31_1) * (conv_tmp_791))))) + (((M31_32) * (conv_tmp_792))))) - (((M31_4) * (conv_tmp_813))))) + (((M31_8) * (conv_tmp_841)))); -let conv_mod_tmp_848 = ((((((M31_0) + (((M31_1) * (conv_tmp_792))))) + (((M31_32) * (conv_tmp_793))))) - (((M31_4) * (conv_tmp_814)))); + +lookup_data.rangecheck_9_9[27].push([mul_res_limb_26_col163, mul_res_limb_27_col164]); + + + + + + //verify_mul252. + + +let conv_tmp_782 = ((((M31_0) - (mul_res_limb_0_col137))) + (((op0_limb_0_col51) * (op1_limb_0_col80)))); +let conv_tmp_783 = ((((((M31_0) - (mul_res_limb_1_col138))) + (((op0_limb_0_col51) * (op1_limb_1_col81))))) + (((op0_limb_1_col52) * (op1_limb_0_col80)))); +let conv_tmp_784 = ((((((((M31_0) - (mul_res_limb_2_col139))) + (((op0_limb_0_col51) * (op1_limb_2_col82))))) + (((op0_limb_1_col52) * (op1_limb_1_col81))))) + (((op0_limb_2_col53) * (op1_limb_0_col80)))); +let conv_tmp_785 = ((((((((((M31_0) - (mul_res_limb_3_col140))) + (((op0_limb_0_col51) * (op1_limb_3_col83))))) + (((op0_limb_1_col52) * (op1_limb_2_col82))))) + (((op0_limb_2_col53) * (op1_limb_1_col81))))) + (((op0_limb_3_col54) * (op1_limb_0_col80)))); +let conv_tmp_786 = ((((((((((((M31_0) - (mul_res_limb_4_col141))) + (((op0_limb_0_col51) * (op1_limb_4_col84))))) + (((op0_limb_1_col52) * (op1_limb_3_col83))))) + (((op0_limb_2_col53) * (op1_limb_2_col82))))) + (((op0_limb_3_col54) * (op1_limb_1_col81))))) + (((op0_limb_4_col55) * (op1_limb_0_col80)))); +let conv_tmp_787 = ((((((((((((((M31_0) - (mul_res_limb_5_col142))) + (((op0_limb_0_col51) * (op1_limb_5_col85))))) + (((op0_limb_1_col52) * (op1_limb_4_col84))))) + (((op0_limb_2_col53) * (op1_limb_3_col83))))) + (((op0_limb_3_col54) * (op1_limb_2_col82))))) + (((op0_limb_4_col55) * (op1_limb_1_col81))))) + (((op0_limb_5_col56) * (op1_limb_0_col80)))); +let conv_tmp_788 = ((((((((((((((((M31_0) - (mul_res_limb_6_col143))) + (((op0_limb_0_col51) * (op1_limb_6_col86))))) + (((op0_limb_1_col52) * (op1_limb_5_col85))))) + (((op0_limb_2_col53) * (op1_limb_4_col84))))) + (((op0_limb_3_col54) * (op1_limb_3_col83))))) + (((op0_limb_4_col55) * (op1_limb_2_col82))))) + (((op0_limb_5_col56) * (op1_limb_1_col81))))) + (((op0_limb_6_col57) * (op1_limb_0_col80)))); +let conv_tmp_789 = ((((((((((((((((((M31_0) - (mul_res_limb_7_col144))) + (((op0_limb_0_col51) * (op1_limb_7_col87))))) + (((op0_limb_1_col52) * (op1_limb_6_col86))))) + (((op0_limb_2_col53) * (op1_limb_5_col85))))) + (((op0_limb_3_col54) * (op1_limb_4_col84))))) + (((op0_limb_4_col55) * (op1_limb_3_col83))))) + (((op0_limb_5_col56) * (op1_limb_2_col82))))) + (((op0_limb_6_col57) * (op1_limb_1_col81))))) + (((op0_limb_7_col58) * (op1_limb_0_col80)))); +let conv_tmp_790 = ((((((((((((((((((((M31_0) - (mul_res_limb_8_col145))) + (((op0_limb_0_col51) * (op1_limb_8_col88))))) + (((op0_limb_1_col52) * (op1_limb_7_col87))))) + (((op0_limb_2_col53) * (op1_limb_6_col86))))) + (((op0_limb_3_col54) * (op1_limb_5_col85))))) + (((op0_limb_4_col55) * (op1_limb_4_col84))))) + (((op0_limb_5_col56) * (op1_limb_3_col83))))) + (((op0_limb_6_col57) * (op1_limb_2_col82))))) + (((op0_limb_7_col58) * (op1_limb_1_col81))))) + (((op0_limb_8_col59) * (op1_limb_0_col80)))); +let conv_tmp_791 = ((((((((((((((((((((((M31_0) - (mul_res_limb_9_col146))) + (((op0_limb_0_col51) * (op1_limb_9_col89))))) + (((op0_limb_1_col52) * (op1_limb_8_col88))))) + (((op0_limb_2_col53) * (op1_limb_7_col87))))) + (((op0_limb_3_col54) * (op1_limb_6_col86))))) + (((op0_limb_4_col55) * (op1_limb_5_col85))))) + (((op0_limb_5_col56) * (op1_limb_4_col84))))) + (((op0_limb_6_col57) * (op1_limb_3_col83))))) + (((op0_limb_7_col58) * (op1_limb_2_col82))))) + (((op0_limb_8_col59) * (op1_limb_1_col81))))) + (((op0_limb_9_col60) * (op1_limb_0_col80)))); +let conv_tmp_792 = ((((((((((((((((((((((((M31_0) - (mul_res_limb_10_col147))) + (((op0_limb_0_col51) * (op1_limb_10_col90))))) + (((op0_limb_1_col52) * (op1_limb_9_col89))))) + (((op0_limb_2_col53) * (op1_limb_8_col88))))) + (((op0_limb_3_col54) * (op1_limb_7_col87))))) + (((op0_limb_4_col55) * (op1_limb_6_col86))))) + (((op0_limb_5_col56) * (op1_limb_5_col85))))) + (((op0_limb_6_col57) * (op1_limb_4_col84))))) + (((op0_limb_7_col58) * (op1_limb_3_col83))))) + (((op0_limb_8_col59) * (op1_limb_2_col82))))) + (((op0_limb_9_col60) * (op1_limb_1_col81))))) + (((op0_limb_10_col61) * (op1_limb_0_col80)))); +let conv_tmp_793 = ((((((((((((((((((((((((((M31_0) - (mul_res_limb_11_col148))) + (((op0_limb_0_col51) * (op1_limb_11_col91))))) + (((op0_limb_1_col52) * (op1_limb_10_col90))))) + (((op0_limb_2_col53) * (op1_limb_9_col89))))) + (((op0_limb_3_col54) * (op1_limb_8_col88))))) + (((op0_limb_4_col55) * (op1_limb_7_col87))))) + (((op0_limb_5_col56) * (op1_limb_6_col86))))) + (((op0_limb_6_col57) * (op1_limb_5_col85))))) + (((op0_limb_7_col58) * (op1_limb_4_col84))))) + (((op0_limb_8_col59) * (op1_limb_3_col83))))) + (((op0_limb_9_col60) * (op1_limb_2_col82))))) + (((op0_limb_10_col61) * (op1_limb_1_col81))))) + (((op0_limb_11_col62) * (op1_limb_0_col80)))); +let conv_tmp_794 = ((((((((((((((((((((((((((((M31_0) - (mul_res_limb_12_col149))) + (((op0_limb_0_col51) * (op1_limb_12_col92))))) + (((op0_limb_1_col52) * (op1_limb_11_col91))))) + (((op0_limb_2_col53) * (op1_limb_10_col90))))) + (((op0_limb_3_col54) * (op1_limb_9_col89))))) + (((op0_limb_4_col55) * (op1_limb_8_col88))))) + (((op0_limb_5_col56) * (op1_limb_7_col87))))) + (((op0_limb_6_col57) * (op1_limb_6_col86))))) + (((op0_limb_7_col58) * (op1_limb_5_col85))))) + (((op0_limb_8_col59) * (op1_limb_4_col84))))) + (((op0_limb_9_col60) * (op1_limb_3_col83))))) + (((op0_limb_10_col61) * (op1_limb_2_col82))))) + (((op0_limb_11_col62) * (op1_limb_1_col81))))) + (((op0_limb_12_col63) * (op1_limb_0_col80)))); +let conv_tmp_795 = ((((((((((((((((((((((((((((((M31_0) - (mul_res_limb_13_col150))) + (((op0_limb_0_col51) * (op1_limb_13_col93))))) + (((op0_limb_1_col52) * (op1_limb_12_col92))))) + (((op0_limb_2_col53) * (op1_limb_11_col91))))) + (((op0_limb_3_col54) * (op1_limb_10_col90))))) + (((op0_limb_4_col55) * (op1_limb_9_col89))))) + (((op0_limb_5_col56) * (op1_limb_8_col88))))) + (((op0_limb_6_col57) * (op1_limb_7_col87))))) + (((op0_limb_7_col58) * (op1_limb_6_col86))))) + (((op0_limb_8_col59) * (op1_limb_5_col85))))) + (((op0_limb_9_col60) * (op1_limb_4_col84))))) + (((op0_limb_10_col61) * (op1_limb_3_col83))))) + (((op0_limb_11_col62) * (op1_limb_2_col82))))) + (((op0_limb_12_col63) * (op1_limb_1_col81))))) + (((op0_limb_13_col64) * (op1_limb_0_col80)))); +let conv_tmp_796 = ((((((((((((((((((((((((((((((((M31_0) - (mul_res_limb_14_col151))) + (((op0_limb_0_col51) * (op1_limb_14_col94))))) + (((op0_limb_1_col52) * (op1_limb_13_col93))))) + (((op0_limb_2_col53) * (op1_limb_12_col92))))) + (((op0_limb_3_col54) * (op1_limb_11_col91))))) + (((op0_limb_4_col55) * (op1_limb_10_col90))))) + (((op0_limb_5_col56) * (op1_limb_9_col89))))) + (((op0_limb_6_col57) * (op1_limb_8_col88))))) + (((op0_limb_7_col58) * (op1_limb_7_col87))))) + (((op0_limb_8_col59) * (op1_limb_6_col86))))) + (((op0_limb_9_col60) * (op1_limb_5_col85))))) + (((op0_limb_10_col61) * (op1_limb_4_col84))))) + (((op0_limb_11_col62) * (op1_limb_3_col83))))) + (((op0_limb_12_col63) * (op1_limb_2_col82))))) + (((op0_limb_13_col64) * (op1_limb_1_col81))))) + (((op0_limb_14_col65) * (op1_limb_0_col80)))); +let conv_tmp_797 = ((((((((((((((((((((((((((((((((((M31_0) - (mul_res_limb_15_col152))) + (((op0_limb_0_col51) * (op1_limb_15_col95))))) + (((op0_limb_1_col52) * (op1_limb_14_col94))))) + (((op0_limb_2_col53) * (op1_limb_13_col93))))) + (((op0_limb_3_col54) * (op1_limb_12_col92))))) + (((op0_limb_4_col55) * (op1_limb_11_col91))))) + (((op0_limb_5_col56) * (op1_limb_10_col90))))) + (((op0_limb_6_col57) * (op1_limb_9_col89))))) + (((op0_limb_7_col58) * (op1_limb_8_col88))))) + (((op0_limb_8_col59) * (op1_limb_7_col87))))) + (((op0_limb_9_col60) * (op1_limb_6_col86))))) + (((op0_limb_10_col61) * (op1_limb_5_col85))))) + (((op0_limb_11_col62) * (op1_limb_4_col84))))) + (((op0_limb_12_col63) * (op1_limb_3_col83))))) + (((op0_limb_13_col64) * (op1_limb_2_col82))))) + (((op0_limb_14_col65) * (op1_limb_1_col81))))) + (((op0_limb_15_col66) * (op1_limb_0_col80)))); +let conv_tmp_798 = ((((((((((((((((((((((((((((((((((((M31_0) - (mul_res_limb_16_col153))) + (((op0_limb_0_col51) * (op1_limb_16_col96))))) + (((op0_limb_1_col52) * (op1_limb_15_col95))))) + (((op0_limb_2_col53) * (op1_limb_14_col94))))) + (((op0_limb_3_col54) * (op1_limb_13_col93))))) + (((op0_limb_4_col55) * (op1_limb_12_col92))))) + (((op0_limb_5_col56) * (op1_limb_11_col91))))) + (((op0_limb_6_col57) * (op1_limb_10_col90))))) + (((op0_limb_7_col58) * (op1_limb_9_col89))))) + (((op0_limb_8_col59) * (op1_limb_8_col88))))) + (((op0_limb_9_col60) * (op1_limb_7_col87))))) + (((op0_limb_10_col61) * (op1_limb_6_col86))))) + (((op0_limb_11_col62) * (op1_limb_5_col85))))) + (((op0_limb_12_col63) * (op1_limb_4_col84))))) + (((op0_limb_13_col64) * (op1_limb_3_col83))))) + (((op0_limb_14_col65) * (op1_limb_2_col82))))) + (((op0_limb_15_col66) * (op1_limb_1_col81))))) + (((op0_limb_16_col67) * (op1_limb_0_col80)))); +let conv_tmp_799 = ((((((((((((((((((((((((((((((((((((((M31_0) - (mul_res_limb_17_col154))) + (((op0_limb_0_col51) * (op1_limb_17_col97))))) + (((op0_limb_1_col52) * (op1_limb_16_col96))))) + (((op0_limb_2_col53) * (op1_limb_15_col95))))) + (((op0_limb_3_col54) * (op1_limb_14_col94))))) + (((op0_limb_4_col55) * (op1_limb_13_col93))))) + (((op0_limb_5_col56) * (op1_limb_12_col92))))) + (((op0_limb_6_col57) * (op1_limb_11_col91))))) + (((op0_limb_7_col58) * (op1_limb_10_col90))))) + (((op0_limb_8_col59) * (op1_limb_9_col89))))) + (((op0_limb_9_col60) * (op1_limb_8_col88))))) + (((op0_limb_10_col61) * (op1_limb_7_col87))))) + (((op0_limb_11_col62) * (op1_limb_6_col86))))) + (((op0_limb_12_col63) * (op1_limb_5_col85))))) + (((op0_limb_13_col64) * (op1_limb_4_col84))))) + (((op0_limb_14_col65) * (op1_limb_3_col83))))) + (((op0_limb_15_col66) * (op1_limb_2_col82))))) + (((op0_limb_16_col67) * (op1_limb_1_col81))))) + (((op0_limb_17_col68) * (op1_limb_0_col80)))); +let conv_tmp_800 = ((((((((((((((((((((((((((((((((((((((((M31_0) - (mul_res_limb_18_col155))) + (((op0_limb_0_col51) * (op1_limb_18_col98))))) + (((op0_limb_1_col52) * (op1_limb_17_col97))))) + (((op0_limb_2_col53) * (op1_limb_16_col96))))) + (((op0_limb_3_col54) * (op1_limb_15_col95))))) + (((op0_limb_4_col55) * (op1_limb_14_col94))))) + (((op0_limb_5_col56) * (op1_limb_13_col93))))) + (((op0_limb_6_col57) * (op1_limb_12_col92))))) + (((op0_limb_7_col58) * (op1_limb_11_col91))))) + (((op0_limb_8_col59) * (op1_limb_10_col90))))) + (((op0_limb_9_col60) * (op1_limb_9_col89))))) + (((op0_limb_10_col61) * (op1_limb_8_col88))))) + (((op0_limb_11_col62) * (op1_limb_7_col87))))) + (((op0_limb_12_col63) * (op1_limb_6_col86))))) + (((op0_limb_13_col64) * (op1_limb_5_col85))))) + (((op0_limb_14_col65) * (op1_limb_4_col84))))) + (((op0_limb_15_col66) * (op1_limb_3_col83))))) + (((op0_limb_16_col67) * (op1_limb_2_col82))))) + (((op0_limb_17_col68) * (op1_limb_1_col81))))) + (((op0_limb_18_col69) * (op1_limb_0_col80)))); +let conv_tmp_801 = ((((((((((((((((((((((((((((((((((((((((((M31_0) - (mul_res_limb_19_col156))) + (((op0_limb_0_col51) * (op1_limb_19_col99))))) + (((op0_limb_1_col52) * (op1_limb_18_col98))))) + (((op0_limb_2_col53) * (op1_limb_17_col97))))) + (((op0_limb_3_col54) * (op1_limb_16_col96))))) + (((op0_limb_4_col55) * (op1_limb_15_col95))))) + (((op0_limb_5_col56) * (op1_limb_14_col94))))) + (((op0_limb_6_col57) * (op1_limb_13_col93))))) + (((op0_limb_7_col58) * (op1_limb_12_col92))))) + (((op0_limb_8_col59) * (op1_limb_11_col91))))) + (((op0_limb_9_col60) * (op1_limb_10_col90))))) + (((op0_limb_10_col61) * (op1_limb_9_col89))))) + (((op0_limb_11_col62) * (op1_limb_8_col88))))) + (((op0_limb_12_col63) * (op1_limb_7_col87))))) + (((op0_limb_13_col64) * (op1_limb_6_col86))))) + (((op0_limb_14_col65) * (op1_limb_5_col85))))) + (((op0_limb_15_col66) * (op1_limb_4_col84))))) + (((op0_limb_16_col67) * (op1_limb_3_col83))))) + (((op0_limb_17_col68) * (op1_limb_2_col82))))) + (((op0_limb_18_col69) * (op1_limb_1_col81))))) + (((op0_limb_19_col70) * (op1_limb_0_col80)))); +let conv_tmp_802 = ((((((((((((((((((((((((((((((((((((((((((((M31_0) - (mul_res_limb_20_col157))) + (((op0_limb_0_col51) * (op1_limb_20_col100))))) + (((op0_limb_1_col52) * (op1_limb_19_col99))))) + (((op0_limb_2_col53) * (op1_limb_18_col98))))) + (((op0_limb_3_col54) * (op1_limb_17_col97))))) + (((op0_limb_4_col55) * (op1_limb_16_col96))))) + (((op0_limb_5_col56) * (op1_limb_15_col95))))) + (((op0_limb_6_col57) * (op1_limb_14_col94))))) + (((op0_limb_7_col58) * (op1_limb_13_col93))))) + (((op0_limb_8_col59) * (op1_limb_12_col92))))) + (((op0_limb_9_col60) * (op1_limb_11_col91))))) + (((op0_limb_10_col61) * (op1_limb_10_col90))))) + (((op0_limb_11_col62) * (op1_limb_9_col89))))) + (((op0_limb_12_col63) * (op1_limb_8_col88))))) + (((op0_limb_13_col64) * (op1_limb_7_col87))))) + (((op0_limb_14_col65) * (op1_limb_6_col86))))) + (((op0_limb_15_col66) * (op1_limb_5_col85))))) + (((op0_limb_16_col67) * (op1_limb_4_col84))))) + (((op0_limb_17_col68) * (op1_limb_3_col83))))) + (((op0_limb_18_col69) * (op1_limb_2_col82))))) + (((op0_limb_19_col70) * (op1_limb_1_col81))))) + (((op0_limb_20_col71) * (op1_limb_0_col80)))); +let conv_tmp_803 = ((((((((((((((((((((((((((((((((((((((((((((((M31_0) - (mul_res_limb_21_col158))) + (((op0_limb_0_col51) * (op1_limb_21_col101))))) + (((op0_limb_1_col52) * (op1_limb_20_col100))))) + (((op0_limb_2_col53) * (op1_limb_19_col99))))) + (((op0_limb_3_col54) * (op1_limb_18_col98))))) + (((op0_limb_4_col55) * (op1_limb_17_col97))))) + (((op0_limb_5_col56) * (op1_limb_16_col96))))) + (((op0_limb_6_col57) * (op1_limb_15_col95))))) + (((op0_limb_7_col58) * (op1_limb_14_col94))))) + (((op0_limb_8_col59) * (op1_limb_13_col93))))) + (((op0_limb_9_col60) * (op1_limb_12_col92))))) + (((op0_limb_10_col61) * (op1_limb_11_col91))))) + (((op0_limb_11_col62) * (op1_limb_10_col90))))) + (((op0_limb_12_col63) * (op1_limb_9_col89))))) + (((op0_limb_13_col64) * (op1_limb_8_col88))))) + (((op0_limb_14_col65) * (op1_limb_7_col87))))) + (((op0_limb_15_col66) * (op1_limb_6_col86))))) + (((op0_limb_16_col67) * (op1_limb_5_col85))))) + (((op0_limb_17_col68) * (op1_limb_4_col84))))) + (((op0_limb_18_col69) * (op1_limb_3_col83))))) + (((op0_limb_19_col70) * (op1_limb_2_col82))))) + (((op0_limb_20_col71) * (op1_limb_1_col81))))) + (((op0_limb_21_col72) * (op1_limb_0_col80)))); +let conv_tmp_804 = ((((((((((((((((((((((((((((((((((((((((((((((((M31_0) - (mul_res_limb_22_col159))) + (((op0_limb_0_col51) * (op1_limb_22_col102))))) + (((op0_limb_1_col52) * (op1_limb_21_col101))))) + (((op0_limb_2_col53) * (op1_limb_20_col100))))) + (((op0_limb_3_col54) * (op1_limb_19_col99))))) + (((op0_limb_4_col55) * (op1_limb_18_col98))))) + (((op0_limb_5_col56) * (op1_limb_17_col97))))) + (((op0_limb_6_col57) * (op1_limb_16_col96))))) + (((op0_limb_7_col58) * (op1_limb_15_col95))))) + (((op0_limb_8_col59) * (op1_limb_14_col94))))) + (((op0_limb_9_col60) * (op1_limb_13_col93))))) + (((op0_limb_10_col61) * (op1_limb_12_col92))))) + (((op0_limb_11_col62) * (op1_limb_11_col91))))) + (((op0_limb_12_col63) * (op1_limb_10_col90))))) + (((op0_limb_13_col64) * (op1_limb_9_col89))))) + (((op0_limb_14_col65) * (op1_limb_8_col88))))) + (((op0_limb_15_col66) * (op1_limb_7_col87))))) + (((op0_limb_16_col67) * (op1_limb_6_col86))))) + (((op0_limb_17_col68) * (op1_limb_5_col85))))) + (((op0_limb_18_col69) * (op1_limb_4_col84))))) + (((op0_limb_19_col70) * (op1_limb_3_col83))))) + (((op0_limb_20_col71) * (op1_limb_2_col82))))) + (((op0_limb_21_col72) * (op1_limb_1_col81))))) + (((op0_limb_22_col73) * (op1_limb_0_col80)))); +let conv_tmp_805 = ((((((((((((((((((((((((((((((((((((((((((((((((((M31_0) - (mul_res_limb_23_col160))) + (((op0_limb_0_col51) * (op1_limb_23_col103))))) + (((op0_limb_1_col52) * (op1_limb_22_col102))))) + (((op0_limb_2_col53) * (op1_limb_21_col101))))) + (((op0_limb_3_col54) * (op1_limb_20_col100))))) + (((op0_limb_4_col55) * (op1_limb_19_col99))))) + (((op0_limb_5_col56) * (op1_limb_18_col98))))) + (((op0_limb_6_col57) * (op1_limb_17_col97))))) + (((op0_limb_7_col58) * (op1_limb_16_col96))))) + (((op0_limb_8_col59) * (op1_limb_15_col95))))) + (((op0_limb_9_col60) * (op1_limb_14_col94))))) + (((op0_limb_10_col61) * (op1_limb_13_col93))))) + (((op0_limb_11_col62) * (op1_limb_12_col92))))) + (((op0_limb_12_col63) * (op1_limb_11_col91))))) + (((op0_limb_13_col64) * (op1_limb_10_col90))))) + (((op0_limb_14_col65) * (op1_limb_9_col89))))) + (((op0_limb_15_col66) * (op1_limb_8_col88))))) + (((op0_limb_16_col67) * (op1_limb_7_col87))))) + (((op0_limb_17_col68) * (op1_limb_6_col86))))) + (((op0_limb_18_col69) * (op1_limb_5_col85))))) + (((op0_limb_19_col70) * (op1_limb_4_col84))))) + (((op0_limb_20_col71) * (op1_limb_3_col83))))) + (((op0_limb_21_col72) * (op1_limb_2_col82))))) + (((op0_limb_22_col73) * (op1_limb_1_col81))))) + (((op0_limb_23_col74) * (op1_limb_0_col80)))); +let conv_tmp_806 = ((((((((((((((((((((((((((((((((((((((((((((((((((((M31_0) - (mul_res_limb_24_col161))) + (((op0_limb_0_col51) * (op1_limb_24_col104))))) + (((op0_limb_1_col52) * (op1_limb_23_col103))))) + (((op0_limb_2_col53) * (op1_limb_22_col102))))) + (((op0_limb_3_col54) * (op1_limb_21_col101))))) + (((op0_limb_4_col55) * (op1_limb_20_col100))))) + (((op0_limb_5_col56) * (op1_limb_19_col99))))) + (((op0_limb_6_col57) * (op1_limb_18_col98))))) + (((op0_limb_7_col58) * (op1_limb_17_col97))))) + (((op0_limb_8_col59) * (op1_limb_16_col96))))) + (((op0_limb_9_col60) * (op1_limb_15_col95))))) + (((op0_limb_10_col61) * (op1_limb_14_col94))))) + (((op0_limb_11_col62) * (op1_limb_13_col93))))) + (((op0_limb_12_col63) * (op1_limb_12_col92))))) + (((op0_limb_13_col64) * (op1_limb_11_col91))))) + (((op0_limb_14_col65) * (op1_limb_10_col90))))) + (((op0_limb_15_col66) * (op1_limb_9_col89))))) + (((op0_limb_16_col67) * (op1_limb_8_col88))))) + (((op0_limb_17_col68) * (op1_limb_7_col87))))) + (((op0_limb_18_col69) * (op1_limb_6_col86))))) + (((op0_limb_19_col70) * (op1_limb_5_col85))))) + (((op0_limb_20_col71) * (op1_limb_4_col84))))) + (((op0_limb_21_col72) * (op1_limb_3_col83))))) + (((op0_limb_22_col73) * (op1_limb_2_col82))))) + (((op0_limb_23_col74) * (op1_limb_1_col81))))) + (((op0_limb_24_col75) * (op1_limb_0_col80)))); +let conv_tmp_807 = ((((((((((((((((((((((((((((((((((((((((((((((((((((((M31_0) - (mul_res_limb_25_col162))) + (((op0_limb_0_col51) * (op1_limb_25_col105))))) + (((op0_limb_1_col52) * (op1_limb_24_col104))))) + (((op0_limb_2_col53) * (op1_limb_23_col103))))) + (((op0_limb_3_col54) * (op1_limb_22_col102))))) + (((op0_limb_4_col55) * (op1_limb_21_col101))))) + (((op0_limb_5_col56) * (op1_limb_20_col100))))) + (((op0_limb_6_col57) * (op1_limb_19_col99))))) + (((op0_limb_7_col58) * (op1_limb_18_col98))))) + (((op0_limb_8_col59) * (op1_limb_17_col97))))) + (((op0_limb_9_col60) * (op1_limb_16_col96))))) + (((op0_limb_10_col61) * (op1_limb_15_col95))))) + (((op0_limb_11_col62) * (op1_limb_14_col94))))) + (((op0_limb_12_col63) * (op1_limb_13_col93))))) + (((op0_limb_13_col64) * (op1_limb_12_col92))))) + (((op0_limb_14_col65) * (op1_limb_11_col91))))) + (((op0_limb_15_col66) * (op1_limb_10_col90))))) + (((op0_limb_16_col67) * (op1_limb_9_col89))))) + (((op0_limb_17_col68) * (op1_limb_8_col88))))) + (((op0_limb_18_col69) * (op1_limb_7_col87))))) + (((op0_limb_19_col70) * (op1_limb_6_col86))))) + (((op0_limb_20_col71) * (op1_limb_5_col85))))) + (((op0_limb_21_col72) * (op1_limb_4_col84))))) + (((op0_limb_22_col73) * (op1_limb_3_col83))))) + (((op0_limb_23_col74) * (op1_limb_2_col82))))) + (((op0_limb_24_col75) * (op1_limb_1_col81))))) + (((op0_limb_25_col76) * (op1_limb_0_col80)))); +let conv_tmp_808 = ((((((((((((((((((((((((((((((((((((((((((((((((((((((((M31_0) - (mul_res_limb_26_col163))) + (((op0_limb_0_col51) * (op1_limb_26_col106))))) + (((op0_limb_1_col52) * (op1_limb_25_col105))))) + (((op0_limb_2_col53) * (op1_limb_24_col104))))) + (((op0_limb_3_col54) * (op1_limb_23_col103))))) + (((op0_limb_4_col55) * (op1_limb_22_col102))))) + (((op0_limb_5_col56) * (op1_limb_21_col101))))) + (((op0_limb_6_col57) * (op1_limb_20_col100))))) + (((op0_limb_7_col58) * (op1_limb_19_col99))))) + (((op0_limb_8_col59) * (op1_limb_18_col98))))) + (((op0_limb_9_col60) * (op1_limb_17_col97))))) + (((op0_limb_10_col61) * (op1_limb_16_col96))))) + (((op0_limb_11_col62) * (op1_limb_15_col95))))) + (((op0_limb_12_col63) * (op1_limb_14_col94))))) + (((op0_limb_13_col64) * (op1_limb_13_col93))))) + (((op0_limb_14_col65) * (op1_limb_12_col92))))) + (((op0_limb_15_col66) * (op1_limb_11_col91))))) + (((op0_limb_16_col67) * (op1_limb_10_col90))))) + (((op0_limb_17_col68) * (op1_limb_9_col89))))) + (((op0_limb_18_col69) * (op1_limb_8_col88))))) + (((op0_limb_19_col70) * (op1_limb_7_col87))))) + (((op0_limb_20_col71) * (op1_limb_6_col86))))) + (((op0_limb_21_col72) * (op1_limb_5_col85))))) + (((op0_limb_22_col73) * (op1_limb_4_col84))))) + (((op0_limb_23_col74) * (op1_limb_3_col83))))) + (((op0_limb_24_col75) * (op1_limb_2_col82))))) + (((op0_limb_25_col76) * (op1_limb_1_col81))))) + (((op0_limb_26_col77) * (op1_limb_0_col80)))); +let conv_tmp_809 = ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((M31_0) - (mul_res_limb_27_col164))) + (((op0_limb_0_col51) * (op1_limb_27_col107))))) + (((op0_limb_1_col52) * (op1_limb_26_col106))))) + (((op0_limb_2_col53) * (op1_limb_25_col105))))) + (((op0_limb_3_col54) * (op1_limb_24_col104))))) + (((op0_limb_4_col55) * (op1_limb_23_col103))))) + (((op0_limb_5_col56) * (op1_limb_22_col102))))) + (((op0_limb_6_col57) * (op1_limb_21_col101))))) + (((op0_limb_7_col58) * (op1_limb_20_col100))))) + (((op0_limb_8_col59) * (op1_limb_19_col99))))) + (((op0_limb_9_col60) * (op1_limb_18_col98))))) + (((op0_limb_10_col61) * (op1_limb_17_col97))))) + (((op0_limb_11_col62) * (op1_limb_16_col96))))) + (((op0_limb_12_col63) * (op1_limb_15_col95))))) + (((op0_limb_13_col64) * (op1_limb_14_col94))))) + (((op0_limb_14_col65) * (op1_limb_13_col93))))) + (((op0_limb_15_col66) * (op1_limb_12_col92))))) + (((op0_limb_16_col67) * (op1_limb_11_col91))))) + (((op0_limb_17_col68) * (op1_limb_10_col90))))) + (((op0_limb_18_col69) * (op1_limb_9_col89))))) + (((op0_limb_19_col70) * (op1_limb_8_col88))))) + (((op0_limb_20_col71) * (op1_limb_7_col87))))) + (((op0_limb_21_col72) * (op1_limb_6_col86))))) + (((op0_limb_22_col73) * (op1_limb_5_col85))))) + (((op0_limb_23_col74) * (op1_limb_4_col84))))) + (((op0_limb_24_col75) * (op1_limb_3_col83))))) + (((op0_limb_25_col76) * (op1_limb_2_col82))))) + (((op0_limb_26_col77) * (op1_limb_1_col81))))) + (((op0_limb_27_col78) * (op1_limb_0_col80)))); +let conv_tmp_810 = ((((((((((((((((((((((((((((((((((((((((((((((((((((((M31_0) + (((op0_limb_1_col52) * (op1_limb_27_col107))))) + (((op0_limb_2_col53) * (op1_limb_26_col106))))) + (((op0_limb_3_col54) * (op1_limb_25_col105))))) + (((op0_limb_4_col55) * (op1_limb_24_col104))))) + (((op0_limb_5_col56) * (op1_limb_23_col103))))) + (((op0_limb_6_col57) * (op1_limb_22_col102))))) + (((op0_limb_7_col58) * (op1_limb_21_col101))))) + (((op0_limb_8_col59) * (op1_limb_20_col100))))) + (((op0_limb_9_col60) * (op1_limb_19_col99))))) + (((op0_limb_10_col61) * (op1_limb_18_col98))))) + (((op0_limb_11_col62) * (op1_limb_17_col97))))) + (((op0_limb_12_col63) * (op1_limb_16_col96))))) + (((op0_limb_13_col64) * (op1_limb_15_col95))))) + (((op0_limb_14_col65) * (op1_limb_14_col94))))) + (((op0_limb_15_col66) * (op1_limb_13_col93))))) + (((op0_limb_16_col67) * (op1_limb_12_col92))))) + (((op0_limb_17_col68) * (op1_limb_11_col91))))) + (((op0_limb_18_col69) * (op1_limb_10_col90))))) + (((op0_limb_19_col70) * (op1_limb_9_col89))))) + (((op0_limb_20_col71) * (op1_limb_8_col88))))) + (((op0_limb_21_col72) * (op1_limb_7_col87))))) + (((op0_limb_22_col73) * (op1_limb_6_col86))))) + (((op0_limb_23_col74) * (op1_limb_5_col85))))) + (((op0_limb_24_col75) * (op1_limb_4_col84))))) + (((op0_limb_25_col76) * (op1_limb_3_col83))))) + (((op0_limb_26_col77) * (op1_limb_2_col82))))) + (((op0_limb_27_col78) * (op1_limb_1_col81)))); +let conv_tmp_811 = ((((((((((((((((((((((((((((((((((((((((((((((((((((M31_0) + (((op0_limb_2_col53) * (op1_limb_27_col107))))) + (((op0_limb_3_col54) * (op1_limb_26_col106))))) + (((op0_limb_4_col55) * (op1_limb_25_col105))))) + (((op0_limb_5_col56) * (op1_limb_24_col104))))) + (((op0_limb_6_col57) * (op1_limb_23_col103))))) + (((op0_limb_7_col58) * (op1_limb_22_col102))))) + (((op0_limb_8_col59) * (op1_limb_21_col101))))) + (((op0_limb_9_col60) * (op1_limb_20_col100))))) + (((op0_limb_10_col61) * (op1_limb_19_col99))))) + (((op0_limb_11_col62) * (op1_limb_18_col98))))) + (((op0_limb_12_col63) * (op1_limb_17_col97))))) + (((op0_limb_13_col64) * (op1_limb_16_col96))))) + (((op0_limb_14_col65) * (op1_limb_15_col95))))) + (((op0_limb_15_col66) * (op1_limb_14_col94))))) + (((op0_limb_16_col67) * (op1_limb_13_col93))))) + (((op0_limb_17_col68) * (op1_limb_12_col92))))) + (((op0_limb_18_col69) * (op1_limb_11_col91))))) + (((op0_limb_19_col70) * (op1_limb_10_col90))))) + (((op0_limb_20_col71) * (op1_limb_9_col89))))) + (((op0_limb_21_col72) * (op1_limb_8_col88))))) + (((op0_limb_22_col73) * (op1_limb_7_col87))))) + (((op0_limb_23_col74) * (op1_limb_6_col86))))) + (((op0_limb_24_col75) * (op1_limb_5_col85))))) + (((op0_limb_25_col76) * (op1_limb_4_col84))))) + (((op0_limb_26_col77) * (op1_limb_3_col83))))) + (((op0_limb_27_col78) * (op1_limb_2_col82)))); +let conv_tmp_812 = ((((((((((((((((((((((((((((((((((((((((((((((((((M31_0) + (((op0_limb_3_col54) * (op1_limb_27_col107))))) + (((op0_limb_4_col55) * (op1_limb_26_col106))))) + (((op0_limb_5_col56) * (op1_limb_25_col105))))) + (((op0_limb_6_col57) * (op1_limb_24_col104))))) + (((op0_limb_7_col58) * (op1_limb_23_col103))))) + (((op0_limb_8_col59) * (op1_limb_22_col102))))) + (((op0_limb_9_col60) * (op1_limb_21_col101))))) + (((op0_limb_10_col61) * (op1_limb_20_col100))))) + (((op0_limb_11_col62) * (op1_limb_19_col99))))) + (((op0_limb_12_col63) * (op1_limb_18_col98))))) + (((op0_limb_13_col64) * (op1_limb_17_col97))))) + (((op0_limb_14_col65) * (op1_limb_16_col96))))) + (((op0_limb_15_col66) * (op1_limb_15_col95))))) + (((op0_limb_16_col67) * (op1_limb_14_col94))))) + (((op0_limb_17_col68) * (op1_limb_13_col93))))) + (((op0_limb_18_col69) * (op1_limb_12_col92))))) + (((op0_limb_19_col70) * (op1_limb_11_col91))))) + (((op0_limb_20_col71) * (op1_limb_10_col90))))) + (((op0_limb_21_col72) * (op1_limb_9_col89))))) + (((op0_limb_22_col73) * (op1_limb_8_col88))))) + (((op0_limb_23_col74) * (op1_limb_7_col87))))) + (((op0_limb_24_col75) * (op1_limb_6_col86))))) + (((op0_limb_25_col76) * (op1_limb_5_col85))))) + (((op0_limb_26_col77) * (op1_limb_4_col84))))) + (((op0_limb_27_col78) * (op1_limb_3_col83)))); +let conv_tmp_813 = ((((((((((((((((((((((((((((((((((((((((((((((((M31_0) + (((op0_limb_4_col55) * (op1_limb_27_col107))))) + (((op0_limb_5_col56) * (op1_limb_26_col106))))) + (((op0_limb_6_col57) * (op1_limb_25_col105))))) + (((op0_limb_7_col58) * (op1_limb_24_col104))))) + (((op0_limb_8_col59) * (op1_limb_23_col103))))) + (((op0_limb_9_col60) * (op1_limb_22_col102))))) + (((op0_limb_10_col61) * (op1_limb_21_col101))))) + (((op0_limb_11_col62) * (op1_limb_20_col100))))) + (((op0_limb_12_col63) * (op1_limb_19_col99))))) + (((op0_limb_13_col64) * (op1_limb_18_col98))))) + (((op0_limb_14_col65) * (op1_limb_17_col97))))) + (((op0_limb_15_col66) * (op1_limb_16_col96))))) + (((op0_limb_16_col67) * (op1_limb_15_col95))))) + (((op0_limb_17_col68) * (op1_limb_14_col94))))) + (((op0_limb_18_col69) * (op1_limb_13_col93))))) + (((op0_limb_19_col70) * (op1_limb_12_col92))))) + (((op0_limb_20_col71) * (op1_limb_11_col91))))) + (((op0_limb_21_col72) * (op1_limb_10_col90))))) + (((op0_limb_22_col73) * (op1_limb_9_col89))))) + (((op0_limb_23_col74) * (op1_limb_8_col88))))) + (((op0_limb_24_col75) * (op1_limb_7_col87))))) + (((op0_limb_25_col76) * (op1_limb_6_col86))))) + (((op0_limb_26_col77) * (op1_limb_5_col85))))) + (((op0_limb_27_col78) * (op1_limb_4_col84)))); +let conv_tmp_814 = ((((((((((((((((((((((((((((((((((((((((((((((M31_0) + (((op0_limb_5_col56) * (op1_limb_27_col107))))) + (((op0_limb_6_col57) * (op1_limb_26_col106))))) + (((op0_limb_7_col58) * (op1_limb_25_col105))))) + (((op0_limb_8_col59) * (op1_limb_24_col104))))) + (((op0_limb_9_col60) * (op1_limb_23_col103))))) + (((op0_limb_10_col61) * (op1_limb_22_col102))))) + (((op0_limb_11_col62) * (op1_limb_21_col101))))) + (((op0_limb_12_col63) * (op1_limb_20_col100))))) + (((op0_limb_13_col64) * (op1_limb_19_col99))))) + (((op0_limb_14_col65) * (op1_limb_18_col98))))) + (((op0_limb_15_col66) * (op1_limb_17_col97))))) + (((op0_limb_16_col67) * (op1_limb_16_col96))))) + (((op0_limb_17_col68) * (op1_limb_15_col95))))) + (((op0_limb_18_col69) * (op1_limb_14_col94))))) + (((op0_limb_19_col70) * (op1_limb_13_col93))))) + (((op0_limb_20_col71) * (op1_limb_12_col92))))) + (((op0_limb_21_col72) * (op1_limb_11_col91))))) + (((op0_limb_22_col73) * (op1_limb_10_col90))))) + (((op0_limb_23_col74) * (op1_limb_9_col89))))) + (((op0_limb_24_col75) * (op1_limb_8_col88))))) + (((op0_limb_25_col76) * (op1_limb_7_col87))))) + (((op0_limb_26_col77) * (op1_limb_6_col86))))) + (((op0_limb_27_col78) * (op1_limb_5_col85)))); +let conv_tmp_815 = ((((((((((((((((((((((((((((((((((((((((((((M31_0) + (((op0_limb_6_col57) * (op1_limb_27_col107))))) + (((op0_limb_7_col58) * (op1_limb_26_col106))))) + (((op0_limb_8_col59) * (op1_limb_25_col105))))) + (((op0_limb_9_col60) * (op1_limb_24_col104))))) + (((op0_limb_10_col61) * (op1_limb_23_col103))))) + (((op0_limb_11_col62) * (op1_limb_22_col102))))) + (((op0_limb_12_col63) * (op1_limb_21_col101))))) + (((op0_limb_13_col64) * (op1_limb_20_col100))))) + (((op0_limb_14_col65) * (op1_limb_19_col99))))) + (((op0_limb_15_col66) * (op1_limb_18_col98))))) + (((op0_limb_16_col67) * (op1_limb_17_col97))))) + (((op0_limb_17_col68) * (op1_limb_16_col96))))) + (((op0_limb_18_col69) * (op1_limb_15_col95))))) + (((op0_limb_19_col70) * (op1_limb_14_col94))))) + (((op0_limb_20_col71) * (op1_limb_13_col93))))) + (((op0_limb_21_col72) * (op1_limb_12_col92))))) + (((op0_limb_22_col73) * (op1_limb_11_col91))))) + (((op0_limb_23_col74) * (op1_limb_10_col90))))) + (((op0_limb_24_col75) * (op1_limb_9_col89))))) + (((op0_limb_25_col76) * (op1_limb_8_col88))))) + (((op0_limb_26_col77) * (op1_limb_7_col87))))) + (((op0_limb_27_col78) * (op1_limb_6_col86)))); +let conv_tmp_816 = ((((((((((((((((((((((((((((((((((((((((((M31_0) + (((op0_limb_7_col58) * (op1_limb_27_col107))))) + (((op0_limb_8_col59) * (op1_limb_26_col106))))) + (((op0_limb_9_col60) * (op1_limb_25_col105))))) + (((op0_limb_10_col61) * (op1_limb_24_col104))))) + (((op0_limb_11_col62) * (op1_limb_23_col103))))) + (((op0_limb_12_col63) * (op1_limb_22_col102))))) + (((op0_limb_13_col64) * (op1_limb_21_col101))))) + (((op0_limb_14_col65) * (op1_limb_20_col100))))) + (((op0_limb_15_col66) * (op1_limb_19_col99))))) + (((op0_limb_16_col67) * (op1_limb_18_col98))))) + (((op0_limb_17_col68) * (op1_limb_17_col97))))) + (((op0_limb_18_col69) * (op1_limb_16_col96))))) + (((op0_limb_19_col70) * (op1_limb_15_col95))))) + (((op0_limb_20_col71) * (op1_limb_14_col94))))) + (((op0_limb_21_col72) * (op1_limb_13_col93))))) + (((op0_limb_22_col73) * (op1_limb_12_col92))))) + (((op0_limb_23_col74) * (op1_limb_11_col91))))) + (((op0_limb_24_col75) * (op1_limb_10_col90))))) + (((op0_limb_25_col76) * (op1_limb_9_col89))))) + (((op0_limb_26_col77) * (op1_limb_8_col88))))) + (((op0_limb_27_col78) * (op1_limb_7_col87)))); +let conv_tmp_817 = ((((((((((((((((((((((((((((((((((((((((M31_0) + (((op0_limb_8_col59) * (op1_limb_27_col107))))) + (((op0_limb_9_col60) * (op1_limb_26_col106))))) + (((op0_limb_10_col61) * (op1_limb_25_col105))))) + (((op0_limb_11_col62) * (op1_limb_24_col104))))) + (((op0_limb_12_col63) * (op1_limb_23_col103))))) + (((op0_limb_13_col64) * (op1_limb_22_col102))))) + (((op0_limb_14_col65) * (op1_limb_21_col101))))) + (((op0_limb_15_col66) * (op1_limb_20_col100))))) + (((op0_limb_16_col67) * (op1_limb_19_col99))))) + (((op0_limb_17_col68) * (op1_limb_18_col98))))) + (((op0_limb_18_col69) * (op1_limb_17_col97))))) + (((op0_limb_19_col70) * (op1_limb_16_col96))))) + (((op0_limb_20_col71) * (op1_limb_15_col95))))) + (((op0_limb_21_col72) * (op1_limb_14_col94))))) + (((op0_limb_22_col73) * (op1_limb_13_col93))))) + (((op0_limb_23_col74) * (op1_limb_12_col92))))) + (((op0_limb_24_col75) * (op1_limb_11_col91))))) + (((op0_limb_25_col76) * (op1_limb_10_col90))))) + (((op0_limb_26_col77) * (op1_limb_9_col89))))) + (((op0_limb_27_col78) * (op1_limb_8_col88)))); +let conv_tmp_818 = ((((((((((((((((((((((((((((((((((((((M31_0) + (((op0_limb_9_col60) * (op1_limb_27_col107))))) + (((op0_limb_10_col61) * (op1_limb_26_col106))))) + (((op0_limb_11_col62) * (op1_limb_25_col105))))) + (((op0_limb_12_col63) * (op1_limb_24_col104))))) + (((op0_limb_13_col64) * (op1_limb_23_col103))))) + (((op0_limb_14_col65) * (op1_limb_22_col102))))) + (((op0_limb_15_col66) * (op1_limb_21_col101))))) + (((op0_limb_16_col67) * (op1_limb_20_col100))))) + (((op0_limb_17_col68) * (op1_limb_19_col99))))) + (((op0_limb_18_col69) * (op1_limb_18_col98))))) + (((op0_limb_19_col70) * (op1_limb_17_col97))))) + (((op0_limb_20_col71) * (op1_limb_16_col96))))) + (((op0_limb_21_col72) * (op1_limb_15_col95))))) + (((op0_limb_22_col73) * (op1_limb_14_col94))))) + (((op0_limb_23_col74) * (op1_limb_13_col93))))) + (((op0_limb_24_col75) * (op1_limb_12_col92))))) + (((op0_limb_25_col76) * (op1_limb_11_col91))))) + (((op0_limb_26_col77) * (op1_limb_10_col90))))) + (((op0_limb_27_col78) * (op1_limb_9_col89)))); +let conv_tmp_819 = ((((((((((((((((((((((((((((((((((((M31_0) + (((op0_limb_10_col61) * (op1_limb_27_col107))))) + (((op0_limb_11_col62) * (op1_limb_26_col106))))) + (((op0_limb_12_col63) * (op1_limb_25_col105))))) + (((op0_limb_13_col64) * (op1_limb_24_col104))))) + (((op0_limb_14_col65) * (op1_limb_23_col103))))) + (((op0_limb_15_col66) * (op1_limb_22_col102))))) + (((op0_limb_16_col67) * (op1_limb_21_col101))))) + (((op0_limb_17_col68) * (op1_limb_20_col100))))) + (((op0_limb_18_col69) * (op1_limb_19_col99))))) + (((op0_limb_19_col70) * (op1_limb_18_col98))))) + (((op0_limb_20_col71) * (op1_limb_17_col97))))) + (((op0_limb_21_col72) * (op1_limb_16_col96))))) + (((op0_limb_22_col73) * (op1_limb_15_col95))))) + (((op0_limb_23_col74) * (op1_limb_14_col94))))) + (((op0_limb_24_col75) * (op1_limb_13_col93))))) + (((op0_limb_25_col76) * (op1_limb_12_col92))))) + (((op0_limb_26_col77) * (op1_limb_11_col91))))) + (((op0_limb_27_col78) * (op1_limb_10_col90)))); +let conv_tmp_820 = ((((((((((((((((((((((((((((((((((M31_0) + (((op0_limb_11_col62) * (op1_limb_27_col107))))) + (((op0_limb_12_col63) * (op1_limb_26_col106))))) + (((op0_limb_13_col64) * (op1_limb_25_col105))))) + (((op0_limb_14_col65) * (op1_limb_24_col104))))) + (((op0_limb_15_col66) * (op1_limb_23_col103))))) + (((op0_limb_16_col67) * (op1_limb_22_col102))))) + (((op0_limb_17_col68) * (op1_limb_21_col101))))) + (((op0_limb_18_col69) * (op1_limb_20_col100))))) + (((op0_limb_19_col70) * (op1_limb_19_col99))))) + (((op0_limb_20_col71) * (op1_limb_18_col98))))) + (((op0_limb_21_col72) * (op1_limb_17_col97))))) + (((op0_limb_22_col73) * (op1_limb_16_col96))))) + (((op0_limb_23_col74) * (op1_limb_15_col95))))) + (((op0_limb_24_col75) * (op1_limb_14_col94))))) + (((op0_limb_25_col76) * (op1_limb_13_col93))))) + (((op0_limb_26_col77) * (op1_limb_12_col92))))) + (((op0_limb_27_col78) * (op1_limb_11_col91)))); +let conv_tmp_821 = ((((((((((((((((((((((((((((((((M31_0) + (((op0_limb_12_col63) * (op1_limb_27_col107))))) + (((op0_limb_13_col64) * (op1_limb_26_col106))))) + (((op0_limb_14_col65) * (op1_limb_25_col105))))) + (((op0_limb_15_col66) * (op1_limb_24_col104))))) + (((op0_limb_16_col67) * (op1_limb_23_col103))))) + (((op0_limb_17_col68) * (op1_limb_22_col102))))) + (((op0_limb_18_col69) * (op1_limb_21_col101))))) + (((op0_limb_19_col70) * (op1_limb_20_col100))))) + (((op0_limb_20_col71) * (op1_limb_19_col99))))) + (((op0_limb_21_col72) * (op1_limb_18_col98))))) + (((op0_limb_22_col73) * (op1_limb_17_col97))))) + (((op0_limb_23_col74) * (op1_limb_16_col96))))) + (((op0_limb_24_col75) * (op1_limb_15_col95))))) + (((op0_limb_25_col76) * (op1_limb_14_col94))))) + (((op0_limb_26_col77) * (op1_limb_13_col93))))) + (((op0_limb_27_col78) * (op1_limb_12_col92)))); +let conv_tmp_822 = ((((((((((((((((((((((((((((((M31_0) + (((op0_limb_13_col64) * (op1_limb_27_col107))))) + (((op0_limb_14_col65) * (op1_limb_26_col106))))) + (((op0_limb_15_col66) * (op1_limb_25_col105))))) + (((op0_limb_16_col67) * (op1_limb_24_col104))))) + (((op0_limb_17_col68) * (op1_limb_23_col103))))) + (((op0_limb_18_col69) * (op1_limb_22_col102))))) + (((op0_limb_19_col70) * (op1_limb_21_col101))))) + (((op0_limb_20_col71) * (op1_limb_20_col100))))) + (((op0_limb_21_col72) * (op1_limb_19_col99))))) + (((op0_limb_22_col73) * (op1_limb_18_col98))))) + (((op0_limb_23_col74) * (op1_limb_17_col97))))) + (((op0_limb_24_col75) * (op1_limb_16_col96))))) + (((op0_limb_25_col76) * (op1_limb_15_col95))))) + (((op0_limb_26_col77) * (op1_limb_14_col94))))) + (((op0_limb_27_col78) * (op1_limb_13_col93)))); +let conv_tmp_823 = ((((((((((((((((((((((((((((M31_0) + (((op0_limb_14_col65) * (op1_limb_27_col107))))) + (((op0_limb_15_col66) * (op1_limb_26_col106))))) + (((op0_limb_16_col67) * (op1_limb_25_col105))))) + (((op0_limb_17_col68) * (op1_limb_24_col104))))) + (((op0_limb_18_col69) * (op1_limb_23_col103))))) + (((op0_limb_19_col70) * (op1_limb_22_col102))))) + (((op0_limb_20_col71) * (op1_limb_21_col101))))) + (((op0_limb_21_col72) * (op1_limb_20_col100))))) + (((op0_limb_22_col73) * (op1_limb_19_col99))))) + (((op0_limb_23_col74) * (op1_limb_18_col98))))) + (((op0_limb_24_col75) * (op1_limb_17_col97))))) + (((op0_limb_25_col76) * (op1_limb_16_col96))))) + (((op0_limb_26_col77) * (op1_limb_15_col95))))) + (((op0_limb_27_col78) * (op1_limb_14_col94)))); +let conv_tmp_824 = ((((((((((((((((((((((((((M31_0) + (((op0_limb_15_col66) * (op1_limb_27_col107))))) + (((op0_limb_16_col67) * (op1_limb_26_col106))))) + (((op0_limb_17_col68) * (op1_limb_25_col105))))) + (((op0_limb_18_col69) * (op1_limb_24_col104))))) + (((op0_limb_19_col70) * (op1_limb_23_col103))))) + (((op0_limb_20_col71) * (op1_limb_22_col102))))) + (((op0_limb_21_col72) * (op1_limb_21_col101))))) + (((op0_limb_22_col73) * (op1_limb_20_col100))))) + (((op0_limb_23_col74) * (op1_limb_19_col99))))) + (((op0_limb_24_col75) * (op1_limb_18_col98))))) + (((op0_limb_25_col76) * (op1_limb_17_col97))))) + (((op0_limb_26_col77) * (op1_limb_16_col96))))) + (((op0_limb_27_col78) * (op1_limb_15_col95)))); +let conv_tmp_825 = ((((((((((((((((((((((((M31_0) + (((op0_limb_16_col67) * (op1_limb_27_col107))))) + (((op0_limb_17_col68) * (op1_limb_26_col106))))) + (((op0_limb_18_col69) * (op1_limb_25_col105))))) + (((op0_limb_19_col70) * (op1_limb_24_col104))))) + (((op0_limb_20_col71) * (op1_limb_23_col103))))) + (((op0_limb_21_col72) * (op1_limb_22_col102))))) + (((op0_limb_22_col73) * (op1_limb_21_col101))))) + (((op0_limb_23_col74) * (op1_limb_20_col100))))) + (((op0_limb_24_col75) * (op1_limb_19_col99))))) + (((op0_limb_25_col76) * (op1_limb_18_col98))))) + (((op0_limb_26_col77) * (op1_limb_17_col97))))) + (((op0_limb_27_col78) * (op1_limb_16_col96)))); +let conv_tmp_826 = ((((((((((((((((((((((M31_0) + (((op0_limb_17_col68) * (op1_limb_27_col107))))) + (((op0_limb_18_col69) * (op1_limb_26_col106))))) + (((op0_limb_19_col70) * (op1_limb_25_col105))))) + (((op0_limb_20_col71) * (op1_limb_24_col104))))) + (((op0_limb_21_col72) * (op1_limb_23_col103))))) + (((op0_limb_22_col73) * (op1_limb_22_col102))))) + (((op0_limb_23_col74) * (op1_limb_21_col101))))) + (((op0_limb_24_col75) * (op1_limb_20_col100))))) + (((op0_limb_25_col76) * (op1_limb_19_col99))))) + (((op0_limb_26_col77) * (op1_limb_18_col98))))) + (((op0_limb_27_col78) * (op1_limb_17_col97)))); +let conv_tmp_827 = ((((((((((((((((((((M31_0) + (((op0_limb_18_col69) * (op1_limb_27_col107))))) + (((op0_limb_19_col70) * (op1_limb_26_col106))))) + (((op0_limb_20_col71) * (op1_limb_25_col105))))) + (((op0_limb_21_col72) * (op1_limb_24_col104))))) + (((op0_limb_22_col73) * (op1_limb_23_col103))))) + (((op0_limb_23_col74) * (op1_limb_22_col102))))) + (((op0_limb_24_col75) * (op1_limb_21_col101))))) + (((op0_limb_25_col76) * (op1_limb_20_col100))))) + (((op0_limb_26_col77) * (op1_limb_19_col99))))) + (((op0_limb_27_col78) * (op1_limb_18_col98)))); +let conv_tmp_828 = ((((((((((((((((((M31_0) + (((op0_limb_19_col70) * (op1_limb_27_col107))))) + (((op0_limb_20_col71) * (op1_limb_26_col106))))) + (((op0_limb_21_col72) * (op1_limb_25_col105))))) + (((op0_limb_22_col73) * (op1_limb_24_col104))))) + (((op0_limb_23_col74) * (op1_limb_23_col103))))) + (((op0_limb_24_col75) * (op1_limb_22_col102))))) + (((op0_limb_25_col76) * (op1_limb_21_col101))))) + (((op0_limb_26_col77) * (op1_limb_20_col100))))) + (((op0_limb_27_col78) * (op1_limb_19_col99)))); +let conv_tmp_829 = ((((((((((((((((M31_0) + (((op0_limb_20_col71) * (op1_limb_27_col107))))) + (((op0_limb_21_col72) * (op1_limb_26_col106))))) + (((op0_limb_22_col73) * (op1_limb_25_col105))))) + (((op0_limb_23_col74) * (op1_limb_24_col104))))) + (((op0_limb_24_col75) * (op1_limb_23_col103))))) + (((op0_limb_25_col76) * (op1_limb_22_col102))))) + (((op0_limb_26_col77) * (op1_limb_21_col101))))) + (((op0_limb_27_col78) * (op1_limb_20_col100)))); +let conv_tmp_830 = ((((((((((((((M31_0) + (((op0_limb_21_col72) * (op1_limb_27_col107))))) + (((op0_limb_22_col73) * (op1_limb_26_col106))))) + (((op0_limb_23_col74) * (op1_limb_25_col105))))) + (((op0_limb_24_col75) * (op1_limb_24_col104))))) + (((op0_limb_25_col76) * (op1_limb_23_col103))))) + (((op0_limb_26_col77) * (op1_limb_22_col102))))) + (((op0_limb_27_col78) * (op1_limb_21_col101)))); +let conv_tmp_831 = ((((((((((((M31_0) + (((op0_limb_22_col73) * (op1_limb_27_col107))))) + (((op0_limb_23_col74) * (op1_limb_26_col106))))) + (((op0_limb_24_col75) * (op1_limb_25_col105))))) + (((op0_limb_25_col76) * (op1_limb_24_col104))))) + (((op0_limb_26_col77) * (op1_limb_23_col103))))) + (((op0_limb_27_col78) * (op1_limb_22_col102)))); +let conv_tmp_832 = ((((((((((M31_0) + (((op0_limb_23_col74) * (op1_limb_27_col107))))) + (((op0_limb_24_col75) * (op1_limb_26_col106))))) + (((op0_limb_25_col76) * (op1_limb_25_col105))))) + (((op0_limb_26_col77) * (op1_limb_24_col104))))) + (((op0_limb_27_col78) * (op1_limb_23_col103)))); +let conv_tmp_833 = ((((((((M31_0) + (((op0_limb_24_col75) * (op1_limb_27_col107))))) + (((op0_limb_25_col76) * (op1_limb_26_col106))))) + (((op0_limb_26_col77) * (op1_limb_25_col105))))) + (((op0_limb_27_col78) * (op1_limb_24_col104)))); +let conv_tmp_834 = ((((((M31_0) + (((op0_limb_25_col76) * (op1_limb_27_col107))))) + (((op0_limb_26_col77) * (op1_limb_26_col106))))) + (((op0_limb_27_col78) * (op1_limb_25_col105)))); +let conv_tmp_835 = ((((M31_0) + (((op0_limb_26_col77) * (op1_limb_27_col107))))) + (((op0_limb_27_col78) * (op1_limb_26_col106)))); +let conv_tmp_836 = ((M31_0) + (((op0_limb_27_col78) * (op1_limb_27_col107)))); +let conv_mod_tmp_837 = ((((((M31_0) + (((M31_32) * (conv_tmp_782))))) - (((M31_4) * (conv_tmp_803))))) + (((M31_8) * (conv_tmp_831)))); +let conv_mod_tmp_838 = ((((((((M31_0) + (((M31_1) * (conv_tmp_782))))) + (((M31_32) * (conv_tmp_783))))) - (((M31_4) * (conv_tmp_804))))) + (((M31_8) * (conv_tmp_832)))); +let conv_mod_tmp_839 = ((((((((M31_0) + (((M31_1) * (conv_tmp_783))))) + (((M31_32) * (conv_tmp_784))))) - (((M31_4) * (conv_tmp_805))))) + (((M31_8) * (conv_tmp_833)))); +let conv_mod_tmp_840 = ((((((((M31_0) + (((M31_1) * (conv_tmp_784))))) + (((M31_32) * (conv_tmp_785))))) - (((M31_4) * (conv_tmp_806))))) + (((M31_8) * (conv_tmp_834)))); +let conv_mod_tmp_841 = ((((((((M31_0) + (((M31_1) * (conv_tmp_785))))) + (((M31_32) * (conv_tmp_786))))) - (((M31_4) * (conv_tmp_807))))) + (((M31_8) * (conv_tmp_835)))); +let conv_mod_tmp_842 = ((((((((M31_0) + (((M31_1) * (conv_tmp_786))))) + (((M31_32) * (conv_tmp_787))))) - (((M31_4) * (conv_tmp_808))))) + (((M31_8) * (conv_tmp_836)))); +let conv_mod_tmp_843 = ((((((M31_0) + (((M31_1) * (conv_tmp_787))))) + (((M31_32) * (conv_tmp_788))))) - (((M31_4) * (conv_tmp_809)))); +let conv_mod_tmp_844 = ((((((((M31_0) + (((M31_2) * (conv_tmp_782))))) + (((M31_1) * (conv_tmp_788))))) + (((M31_32) * (conv_tmp_789))))) - (((M31_4) * (conv_tmp_810)))); +let conv_mod_tmp_845 = ((((((((M31_0) + (((M31_2) * (conv_tmp_783))))) + (((M31_1) * (conv_tmp_789))))) + (((M31_32) * (conv_tmp_790))))) - (((M31_4) * (conv_tmp_811)))); +let conv_mod_tmp_846 = ((((((((M31_0) + (((M31_2) * (conv_tmp_784))))) + (((M31_1) * (conv_tmp_790))))) + (((M31_32) * (conv_tmp_791))))) - (((M31_4) * (conv_tmp_812)))); +let conv_mod_tmp_847 = ((((((((M31_0) + (((M31_2) * (conv_tmp_785))))) + (((M31_1) * (conv_tmp_791))))) + (((M31_32) * (conv_tmp_792))))) - (((M31_4) * (conv_tmp_813)))); +let conv_mod_tmp_848 = ((((((((M31_0) + (((M31_2) * (conv_tmp_786))))) + (((M31_1) * (conv_tmp_792))))) + (((M31_32) * (conv_tmp_793))))) - (((M31_4) * (conv_tmp_814)))); let conv_mod_tmp_849 = ((((((((M31_0) + (((M31_2) * (conv_tmp_787))))) + (((M31_1) * (conv_tmp_793))))) + (((M31_32) * (conv_tmp_794))))) - (((M31_4) * (conv_tmp_815)))); let conv_mod_tmp_850 = ((((((((M31_0) + (((M31_2) * (conv_tmp_788))))) + (((M31_1) * (conv_tmp_794))))) + (((M31_32) * (conv_tmp_795))))) - (((M31_4) * (conv_tmp_816)))); let conv_mod_tmp_851 = ((((((((M31_0) + (((M31_2) * (conv_tmp_789))))) + (((M31_1) * (conv_tmp_795))))) + (((M31_32) * (conv_tmp_796))))) - (((M31_4) * (conv_tmp_817)))); @@ -882,410 +912,432 @@ let conv_mod_tmp_854 = ((((((((M31_0) + (((M31_2) * (conv_tmp_792))))) + (((M31_ let conv_mod_tmp_855 = ((((((((M31_0) + (((M31_2) * (conv_tmp_793))))) + (((M31_1) * (conv_tmp_799))))) + (((M31_32) * (conv_tmp_800))))) - (((M31_4) * (conv_tmp_821)))); let conv_mod_tmp_856 = ((((((((M31_0) + (((M31_2) * (conv_tmp_794))))) + (((M31_1) * (conv_tmp_800))))) + (((M31_32) * (conv_tmp_801))))) - (((M31_4) * (conv_tmp_822)))); let conv_mod_tmp_857 = ((((((((M31_0) + (((M31_2) * (conv_tmp_795))))) + (((M31_1) * (conv_tmp_801))))) + (((M31_32) * (conv_tmp_802))))) - (((M31_4) * (conv_tmp_823)))); -let conv_mod_tmp_858 = ((((((((M31_0) + (((M31_2) * (conv_tmp_796))))) + (((M31_1) * (conv_tmp_802))))) + (((M31_32) * (conv_tmp_803))))) - (((M31_4) * (conv_tmp_824)))); -let conv_mod_tmp_859 = ((((((((M31_0) + (((M31_2) * (conv_tmp_797))))) + (((M31_1) * (conv_tmp_803))))) + (((M31_32) * (conv_tmp_804))))) - (((M31_4) * (conv_tmp_825)))); -let conv_mod_tmp_860 = ((((((((M31_0) + (((M31_2) * (conv_tmp_798))))) + (((M31_1) * (conv_tmp_804))))) + (((M31_32) * (conv_tmp_805))))) - (((M31_4) * (conv_tmp_826)))); -let conv_mod_tmp_861 = ((((((((M31_0) + (((M31_2) * (conv_tmp_799))))) + (((M31_1) * (conv_tmp_805))))) + (((M31_32) * (conv_tmp_806))))) - (((M31_4) * (conv_tmp_827)))); -let conv_mod_tmp_862 = ((((((((M31_0) + (((M31_2) * (conv_tmp_800))))) + (((M31_1) * (conv_tmp_806))))) + (((M31_32) * (conv_tmp_807))))) - (((M31_4) * (conv_tmp_828)))); -let conv_mod_tmp_863 = ((((((((M31_0) + (((M31_2) * (conv_tmp_801))))) + (((M31_1) * (conv_tmp_807))))) - (((M31_4) * (conv_tmp_829))))) + (((M31_64) * (conv_tmp_836)))); -let conv_mod_tmp_864 = ((((((((M31_0) + (((M31_2) * (conv_tmp_802))))) - (((M31_4) * (conv_tmp_830))))) + (((M31_2) * (conv_tmp_836))))) + (((M31_64) * (conv_tmp_837)))); -let conv_mod_tmp_865 = ((((((((M31_0) + (((M31_2) * (conv_tmp_803))))) - (((M31_4) * (conv_tmp_831))))) + (((M31_2) * (conv_tmp_837))))) + (((M31_64) * (conv_tmp_838)))); -let conv_mod_tmp_866 = ((((((((M31_0) + (((M31_2) * (conv_tmp_804))))) - (((M31_4) * (conv_tmp_832))))) + (((M31_2) * (conv_tmp_838))))) + (((M31_64) * (conv_tmp_839)))); -let conv_mod_tmp_867 = ((((((((M31_0) + (((M31_2) * (conv_tmp_805))))) - (((M31_4) * (conv_tmp_833))))) + (((M31_2) * (conv_tmp_839))))) + (((M31_64) * (conv_tmp_840)))); -let conv_mod_tmp_868 = ((((((((M31_0) + (((M31_2) * (conv_tmp_806))))) - (((M31_4) * (conv_tmp_834))))) + (((M31_2) * (conv_tmp_840))))) + (((M31_64) * (conv_tmp_841)))); -let conv_mod_tmp_869 = ((((((M31_0) + (((M31_2) * (conv_tmp_807))))) - (((M31_4) * (conv_tmp_835))))) + (((M31_2) * (conv_tmp_841)))); -let k_mod_2_18_biased_tmp_870 = ((((((PackedUInt32::from_m31(((conv_mod_tmp_842) + (M31_134217728)))) + (((((PackedUInt32::from_m31(((conv_mod_tmp_843) + (M31_134217728)))) & (UInt32_511))) << (UInt32_9))))) + (UInt32_65536))) & (UInt32_262143)); -let k_col165 = ((k_mod_2_18_biased_tmp_870.low().as_m31()) + (((((k_mod_2_18_biased_tmp_870.high().as_m31()) - (M31_1))) * (M31_65536)))); +let conv_mod_tmp_858 = ((((((((M31_0) + (((M31_2) * (conv_tmp_796))))) + (((M31_1) * (conv_tmp_802))))) - (((M31_4) * (conv_tmp_824))))) + (((M31_64) * (conv_tmp_831)))); +let conv_mod_tmp_859 = ((((((((M31_0) + (((M31_2) * (conv_tmp_797))))) - (((M31_4) * (conv_tmp_825))))) + (((M31_2) * (conv_tmp_831))))) + (((M31_64) * (conv_tmp_832)))); +let conv_mod_tmp_860 = ((((((((M31_0) + (((M31_2) * (conv_tmp_798))))) - (((M31_4) * (conv_tmp_826))))) + (((M31_2) * (conv_tmp_832))))) + (((M31_64) * (conv_tmp_833)))); +let conv_mod_tmp_861 = ((((((((M31_0) + (((M31_2) * (conv_tmp_799))))) - (((M31_4) * (conv_tmp_827))))) + (((M31_2) * (conv_tmp_833))))) + (((M31_64) * (conv_tmp_834)))); +let conv_mod_tmp_862 = ((((((((M31_0) + (((M31_2) * (conv_tmp_800))))) - (((M31_4) * (conv_tmp_828))))) + (((M31_2) * (conv_tmp_834))))) + (((M31_64) * (conv_tmp_835)))); +let conv_mod_tmp_863 = ((((((((M31_0) + (((M31_2) * (conv_tmp_801))))) - (((M31_4) * (conv_tmp_829))))) + (((M31_2) * (conv_tmp_835))))) + (((M31_64) * (conv_tmp_836)))); +let conv_mod_tmp_864 = ((((((M31_0) + (((M31_2) * (conv_tmp_802))))) - (((M31_4) * (conv_tmp_830))))) + (((M31_2) * (conv_tmp_836)))); +let k_mod_2_18_biased_tmp_865 = ((((((PackedUInt32::from_m31(((conv_mod_tmp_837) + (M31_134217728)))) + (((((PackedUInt32::from_m31(((conv_mod_tmp_838) + (M31_134217728)))) & (UInt32_511))) << (UInt32_9))))) + (UInt32_65536))) & (UInt32_262143)); +let k_col165 = ((k_mod_2_18_biased_tmp_865.low().as_m31()) + (((((k_mod_2_18_biased_tmp_865.high().as_m31()) - (M31_1))) * (M31_65536)))); trace[165].data[row_index] = k_col165; + sub_components_inputs .range_check_19_inputs[0] .extend([((k_col165) + (M31_262144))].unpack()); - -lookup_data.range_check_19[0].push([((k_col165) + (M31_262144))]); -let carry_0_col166 = ((((((conv_mod_tmp_842) - (((M31_1) * (k_col165))))) + (M31_0))) * (M31_4194304)); + +lookup_data.rangecheck_19[0].push([((k_col165) + (M31_262144))]); +let carry_0_col166 = ((((((conv_mod_tmp_837) - (((M31_1) * (k_col165))))) + (M31_0))) * (M31_4194304)); trace[166].data[row_index] = carry_0_col166; + sub_components_inputs .range_check_19_inputs[1] .extend([((carry_0_col166) + (M31_131072))].unpack()); - -lookup_data.range_check_19[1].push([((carry_0_col166) + (M31_131072))]); -let carry_1_col167 = ((((conv_mod_tmp_843) + (carry_0_col166))) * (M31_4194304)); + +lookup_data.rangecheck_19[1].push([((carry_0_col166) + (M31_131072))]); +let carry_1_col167 = ((((conv_mod_tmp_838) + (carry_0_col166))) * (M31_4194304)); trace[167].data[row_index] = carry_1_col167; + sub_components_inputs .range_check_19_inputs[2] .extend([((carry_1_col167) + (M31_131072))].unpack()); - -lookup_data.range_check_19[2].push([((carry_1_col167) + (M31_131072))]); -let carry_2_col168 = ((((conv_mod_tmp_844) + (carry_1_col167))) * (M31_4194304)); + +lookup_data.rangecheck_19[2].push([((carry_1_col167) + (M31_131072))]); +let carry_2_col168 = ((((conv_mod_tmp_839) + (carry_1_col167))) * (M31_4194304)); trace[168].data[row_index] = carry_2_col168; + sub_components_inputs .range_check_19_inputs[3] .extend([((carry_2_col168) + (M31_131072))].unpack()); - -lookup_data.range_check_19[3].push([((carry_2_col168) + (M31_131072))]); -let carry_3_col169 = ((((conv_mod_tmp_845) + (carry_2_col168))) * (M31_4194304)); + +lookup_data.rangecheck_19[3].push([((carry_2_col168) + (M31_131072))]); +let carry_3_col169 = ((((conv_mod_tmp_840) + (carry_2_col168))) * (M31_4194304)); trace[169].data[row_index] = carry_3_col169; + sub_components_inputs .range_check_19_inputs[4] .extend([((carry_3_col169) + (M31_131072))].unpack()); - -lookup_data.range_check_19[4].push([((carry_3_col169) + (M31_131072))]); -let carry_4_col170 = ((((conv_mod_tmp_846) + (carry_3_col169))) * (M31_4194304)); + +lookup_data.rangecheck_19[4].push([((carry_3_col169) + (M31_131072))]); +let carry_4_col170 = ((((conv_mod_tmp_841) + (carry_3_col169))) * (M31_4194304)); trace[170].data[row_index] = carry_4_col170; + sub_components_inputs .range_check_19_inputs[5] .extend([((carry_4_col170) + (M31_131072))].unpack()); - -lookup_data.range_check_19[5].push([((carry_4_col170) + (M31_131072))]); -let carry_5_col171 = ((((conv_mod_tmp_847) + (carry_4_col170))) * (M31_4194304)); + +lookup_data.rangecheck_19[5].push([((carry_4_col170) + (M31_131072))]); +let carry_5_col171 = ((((conv_mod_tmp_842) + (carry_4_col170))) * (M31_4194304)); trace[171].data[row_index] = carry_5_col171; + sub_components_inputs .range_check_19_inputs[6] .extend([((carry_5_col171) + (M31_131072))].unpack()); - -lookup_data.range_check_19[6].push([((carry_5_col171) + (M31_131072))]); -let carry_6_col172 = ((((conv_mod_tmp_848) + (carry_5_col171))) * (M31_4194304)); + +lookup_data.rangecheck_19[6].push([((carry_5_col171) + (M31_131072))]); +let carry_6_col172 = ((((conv_mod_tmp_843) + (carry_5_col171))) * (M31_4194304)); trace[172].data[row_index] = carry_6_col172; + sub_components_inputs .range_check_19_inputs[7] .extend([((carry_6_col172) + (M31_131072))].unpack()); - -lookup_data.range_check_19[7].push([((carry_6_col172) + (M31_131072))]); -let carry_7_col173 = ((((conv_mod_tmp_849) + (carry_6_col172))) * (M31_4194304)); + +lookup_data.rangecheck_19[7].push([((carry_6_col172) + (M31_131072))]); +let carry_7_col173 = ((((conv_mod_tmp_844) + (carry_6_col172))) * (M31_4194304)); trace[173].data[row_index] = carry_7_col173; + sub_components_inputs .range_check_19_inputs[8] .extend([((carry_7_col173) + (M31_131072))].unpack()); - -lookup_data.range_check_19[8].push([((carry_7_col173) + (M31_131072))]); -let carry_8_col174 = ((((conv_mod_tmp_850) + (carry_7_col173))) * (M31_4194304)); + +lookup_data.rangecheck_19[8].push([((carry_7_col173) + (M31_131072))]); +let carry_8_col174 = ((((conv_mod_tmp_845) + (carry_7_col173))) * (M31_4194304)); trace[174].data[row_index] = carry_8_col174; + sub_components_inputs .range_check_19_inputs[9] .extend([((carry_8_col174) + (M31_131072))].unpack()); - -lookup_data.range_check_19[9].push([((carry_8_col174) + (M31_131072))]); -let carry_9_col175 = ((((conv_mod_tmp_851) + (carry_8_col174))) * (M31_4194304)); + +lookup_data.rangecheck_19[9].push([((carry_8_col174) + (M31_131072))]); +let carry_9_col175 = ((((conv_mod_tmp_846) + (carry_8_col174))) * (M31_4194304)); trace[175].data[row_index] = carry_9_col175; + sub_components_inputs .range_check_19_inputs[10] .extend([((carry_9_col175) + (M31_131072))].unpack()); - -lookup_data.range_check_19[10].push([((carry_9_col175) + (M31_131072))]); -let carry_10_col176 = ((((conv_mod_tmp_852) + (carry_9_col175))) * (M31_4194304)); + +lookup_data.rangecheck_19[10].push([((carry_9_col175) + (M31_131072))]); +let carry_10_col176 = ((((conv_mod_tmp_847) + (carry_9_col175))) * (M31_4194304)); trace[176].data[row_index] = carry_10_col176; + sub_components_inputs .range_check_19_inputs[11] .extend([((carry_10_col176) + (M31_131072))].unpack()); - -lookup_data.range_check_19[11].push([((carry_10_col176) + (M31_131072))]); -let carry_11_col177 = ((((conv_mod_tmp_853) + (carry_10_col176))) * (M31_4194304)); + +lookup_data.rangecheck_19[11].push([((carry_10_col176) + (M31_131072))]); +let carry_11_col177 = ((((conv_mod_tmp_848) + (carry_10_col176))) * (M31_4194304)); trace[177].data[row_index] = carry_11_col177; + sub_components_inputs .range_check_19_inputs[12] .extend([((carry_11_col177) + (M31_131072))].unpack()); - -lookup_data.range_check_19[12].push([((carry_11_col177) + (M31_131072))]); -let carry_12_col178 = ((((conv_mod_tmp_854) + (carry_11_col177))) * (M31_4194304)); + +lookup_data.rangecheck_19[12].push([((carry_11_col177) + (M31_131072))]); +let carry_12_col178 = ((((conv_mod_tmp_849) + (carry_11_col177))) * (M31_4194304)); trace[178].data[row_index] = carry_12_col178; + sub_components_inputs .range_check_19_inputs[13] .extend([((carry_12_col178) + (M31_131072))].unpack()); - -lookup_data.range_check_19[13].push([((carry_12_col178) + (M31_131072))]); -let carry_13_col179 = ((((conv_mod_tmp_855) + (carry_12_col178))) * (M31_4194304)); + +lookup_data.rangecheck_19[13].push([((carry_12_col178) + (M31_131072))]); +let carry_13_col179 = ((((conv_mod_tmp_850) + (carry_12_col178))) * (M31_4194304)); trace[179].data[row_index] = carry_13_col179; + sub_components_inputs .range_check_19_inputs[14] .extend([((carry_13_col179) + (M31_131072))].unpack()); - -lookup_data.range_check_19[14].push([((carry_13_col179) + (M31_131072))]); -let carry_14_col180 = ((((conv_mod_tmp_856) + (carry_13_col179))) * (M31_4194304)); + +lookup_data.rangecheck_19[14].push([((carry_13_col179) + (M31_131072))]); +let carry_14_col180 = ((((conv_mod_tmp_851) + (carry_13_col179))) * (M31_4194304)); trace[180].data[row_index] = carry_14_col180; + sub_components_inputs .range_check_19_inputs[15] .extend([((carry_14_col180) + (M31_131072))].unpack()); - -lookup_data.range_check_19[15].push([((carry_14_col180) + (M31_131072))]); -let carry_15_col181 = ((((conv_mod_tmp_857) + (carry_14_col180))) * (M31_4194304)); + +lookup_data.rangecheck_19[15].push([((carry_14_col180) + (M31_131072))]); +let carry_15_col181 = ((((conv_mod_tmp_852) + (carry_14_col180))) * (M31_4194304)); trace[181].data[row_index] = carry_15_col181; + sub_components_inputs .range_check_19_inputs[16] .extend([((carry_15_col181) + (M31_131072))].unpack()); - -lookup_data.range_check_19[16].push([((carry_15_col181) + (M31_131072))]); -let carry_16_col182 = ((((conv_mod_tmp_858) + (carry_15_col181))) * (M31_4194304)); + +lookup_data.rangecheck_19[16].push([((carry_15_col181) + (M31_131072))]); +let carry_16_col182 = ((((conv_mod_tmp_853) + (carry_15_col181))) * (M31_4194304)); trace[182].data[row_index] = carry_16_col182; + sub_components_inputs .range_check_19_inputs[17] .extend([((carry_16_col182) + (M31_131072))].unpack()); - -lookup_data.range_check_19[17].push([((carry_16_col182) + (M31_131072))]); -let carry_17_col183 = ((((conv_mod_tmp_859) + (carry_16_col182))) * (M31_4194304)); + +lookup_data.rangecheck_19[17].push([((carry_16_col182) + (M31_131072))]); +let carry_17_col183 = ((((conv_mod_tmp_854) + (carry_16_col182))) * (M31_4194304)); trace[183].data[row_index] = carry_17_col183; + sub_components_inputs .range_check_19_inputs[18] .extend([((carry_17_col183) + (M31_131072))].unpack()); - -lookup_data.range_check_19[18].push([((carry_17_col183) + (M31_131072))]); -let carry_18_col184 = ((((conv_mod_tmp_860) + (carry_17_col183))) * (M31_4194304)); + +lookup_data.rangecheck_19[18].push([((carry_17_col183) + (M31_131072))]); +let carry_18_col184 = ((((conv_mod_tmp_855) + (carry_17_col183))) * (M31_4194304)); trace[184].data[row_index] = carry_18_col184; + sub_components_inputs .range_check_19_inputs[19] .extend([((carry_18_col184) + (M31_131072))].unpack()); - -lookup_data.range_check_19[19].push([((carry_18_col184) + (M31_131072))]); -let carry_19_col185 = ((((conv_mod_tmp_861) + (carry_18_col184))) * (M31_4194304)); + +lookup_data.rangecheck_19[19].push([((carry_18_col184) + (M31_131072))]); +let carry_19_col185 = ((((conv_mod_tmp_856) + (carry_18_col184))) * (M31_4194304)); trace[185].data[row_index] = carry_19_col185; + sub_components_inputs .range_check_19_inputs[20] .extend([((carry_19_col185) + (M31_131072))].unpack()); - -lookup_data.range_check_19[20].push([((carry_19_col185) + (M31_131072))]); -let carry_20_col186 = ((((conv_mod_tmp_862) + (carry_19_col185))) * (M31_4194304)); + +lookup_data.rangecheck_19[20].push([((carry_19_col185) + (M31_131072))]); +let carry_20_col186 = ((((conv_mod_tmp_857) + (carry_19_col185))) * (M31_4194304)); trace[186].data[row_index] = carry_20_col186; + sub_components_inputs .range_check_19_inputs[21] .extend([((carry_20_col186) + (M31_131072))].unpack()); - -lookup_data.range_check_19[21].push([((carry_20_col186) + (M31_131072))]); -let carry_21_col187 = ((((((conv_mod_tmp_863) - (((M31_136) * (k_col165))))) + (carry_20_col186))) * (M31_4194304)); + +lookup_data.rangecheck_19[21].push([((carry_20_col186) + (M31_131072))]); +let carry_21_col187 = ((((((conv_mod_tmp_858) - (((M31_136) * (k_col165))))) + (carry_20_col186))) * (M31_4194304)); trace[187].data[row_index] = carry_21_col187; + sub_components_inputs .range_check_19_inputs[22] .extend([((carry_21_col187) + (M31_131072))].unpack()); - -lookup_data.range_check_19[22].push([((carry_21_col187) + (M31_131072))]); -let carry_22_col188 = ((((conv_mod_tmp_864) + (carry_21_col187))) * (M31_4194304)); + +lookup_data.rangecheck_19[22].push([((carry_21_col187) + (M31_131072))]); +let carry_22_col188 = ((((conv_mod_tmp_859) + (carry_21_col187))) * (M31_4194304)); trace[188].data[row_index] = carry_22_col188; + sub_components_inputs .range_check_19_inputs[23] .extend([((carry_22_col188) + (M31_131072))].unpack()); - -lookup_data.range_check_19[23].push([((carry_22_col188) + (M31_131072))]); -let carry_23_col189 = ((((conv_mod_tmp_865) + (carry_22_col188))) * (M31_4194304)); + +lookup_data.rangecheck_19[23].push([((carry_22_col188) + (M31_131072))]); +let carry_23_col189 = ((((conv_mod_tmp_860) + (carry_22_col188))) * (M31_4194304)); trace[189].data[row_index] = carry_23_col189; + sub_components_inputs .range_check_19_inputs[24] .extend([((carry_23_col189) + (M31_131072))].unpack()); - -lookup_data.range_check_19[24].push([((carry_23_col189) + (M31_131072))]); -let carry_24_col190 = ((((conv_mod_tmp_866) + (carry_23_col189))) * (M31_4194304)); + +lookup_data.rangecheck_19[24].push([((carry_23_col189) + (M31_131072))]); +let carry_24_col190 = ((((conv_mod_tmp_861) + (carry_23_col189))) * (M31_4194304)); trace[190].data[row_index] = carry_24_col190; + sub_components_inputs .range_check_19_inputs[25] .extend([((carry_24_col190) + (M31_131072))].unpack()); - -lookup_data.range_check_19[25].push([((carry_24_col190) + (M31_131072))]); -let carry_25_col191 = ((((conv_mod_tmp_867) + (carry_24_col190))) * (M31_4194304)); + +lookup_data.rangecheck_19[25].push([((carry_24_col190) + (M31_131072))]); +let carry_25_col191 = ((((conv_mod_tmp_862) + (carry_24_col190))) * (M31_4194304)); trace[191].data[row_index] = carry_25_col191; + sub_components_inputs .range_check_19_inputs[26] .extend([((carry_25_col191) + (M31_131072))].unpack()); - -lookup_data.range_check_19[26].push([((carry_25_col191) + (M31_131072))]); -let carry_26_col192 = ((((conv_mod_tmp_868) + (carry_25_col191))) * (M31_4194304)); + +lookup_data.rangecheck_19[26].push([((carry_25_col191) + (M31_131072))]); +let carry_26_col192 = ((((conv_mod_tmp_863) + (carry_25_col191))) * (M31_4194304)); trace[192].data[row_index] = carry_26_col192; + sub_components_inputs .range_check_19_inputs[27] .extend([((carry_26_col192) + (M31_131072))].unpack()); - -lookup_data.range_check_19[27].push([((carry_26_col192) + (M31_131072))]); + +lookup_data.rangecheck_19[27].push([((carry_26_col192) + (M31_131072))]); + - - -let res_tmp_899 = ((((((PackedFelt252::from_m31(res_op1_tmp_231)) * (PackedFelt252::from_limbs([op1_limb_0_col80, op1_limb_1_col81, op1_limb_2_col82, op1_limb_3_col83, op1_limb_4_col84, op1_limb_5_col85, op1_limb_6_col86, op1_limb_7_col87, op1_limb_8_col88, op1_limb_9_col89, op1_limb_10_col90, op1_limb_11_col91, op1_limb_12_col92, op1_limb_13_col93, op1_limb_14_col94, op1_limb_15_col95, op1_limb_16_col96, op1_limb_17_col97, op1_limb_18_col98, op1_limb_19_col99, op1_limb_20_col100, op1_limb_21_col101, op1_limb_22_col102, op1_limb_23_col103, op1_limb_24_col104, op1_limb_25_col105, op1_limb_26_col106, op1_limb_27_col107])))) + (((PackedFelt252::from_m31(res_mul_col12)) * (mul_res_tmp_772))))) + (((PackedFelt252::from_m31(res_add_col11)) * (add_res_tmp_729)))); -let res_limb_0_col193 = res_tmp_899.get_m31(0); + +let res_tmp_894 = ((((((PackedFelt252::from_m31(res_op1_tmp_226)) * (PackedFelt252::from_limbs([op1_limb_0_col80, op1_limb_1_col81, op1_limb_2_col82, op1_limb_3_col83, op1_limb_4_col84, op1_limb_5_col85, op1_limb_6_col86, op1_limb_7_col87, op1_limb_8_col88, op1_limb_9_col89, op1_limb_10_col90, op1_limb_11_col91, op1_limb_12_col92, op1_limb_13_col93, op1_limb_14_col94, op1_limb_15_col95, op1_limb_16_col96, op1_limb_17_col97, op1_limb_18_col98, op1_limb_19_col99, op1_limb_20_col100, op1_limb_21_col101, op1_limb_22_col102, op1_limb_23_col103, op1_limb_24_col104, op1_limb_25_col105, op1_limb_26_col106, op1_limb_27_col107])))) + (((PackedFelt252::from_m31(res_mul_col12)) * (mul_res_tmp_767))))) + (((PackedFelt252::from_m31(res_add_col11)) * (add_res_tmp_724)))); +let res_limb_0_col193 = res_tmp_894.get_m31(0); trace[193].data[row_index] = res_limb_0_col193; -let res_limb_1_col194 = res_tmp_899.get_m31(1); +let res_limb_1_col194 = res_tmp_894.get_m31(1); trace[194].data[row_index] = res_limb_1_col194; -let res_limb_2_col195 = res_tmp_899.get_m31(2); +let res_limb_2_col195 = res_tmp_894.get_m31(2); trace[195].data[row_index] = res_limb_2_col195; -let res_limb_3_col196 = res_tmp_899.get_m31(3); +let res_limb_3_col196 = res_tmp_894.get_m31(3); trace[196].data[row_index] = res_limb_3_col196; -let res_limb_4_col197 = res_tmp_899.get_m31(4); +let res_limb_4_col197 = res_tmp_894.get_m31(4); trace[197].data[row_index] = res_limb_4_col197; -let res_limb_5_col198 = res_tmp_899.get_m31(5); +let res_limb_5_col198 = res_tmp_894.get_m31(5); trace[198].data[row_index] = res_limb_5_col198; -let res_limb_6_col199 = res_tmp_899.get_m31(6); +let res_limb_6_col199 = res_tmp_894.get_m31(6); trace[199].data[row_index] = res_limb_6_col199; -let res_limb_7_col200 = res_tmp_899.get_m31(7); +let res_limb_7_col200 = res_tmp_894.get_m31(7); trace[200].data[row_index] = res_limb_7_col200; -let res_limb_8_col201 = res_tmp_899.get_m31(8); +let res_limb_8_col201 = res_tmp_894.get_m31(8); trace[201].data[row_index] = res_limb_8_col201; -let res_limb_9_col202 = res_tmp_899.get_m31(9); +let res_limb_9_col202 = res_tmp_894.get_m31(9); trace[202].data[row_index] = res_limb_9_col202; -let res_limb_10_col203 = res_tmp_899.get_m31(10); +let res_limb_10_col203 = res_tmp_894.get_m31(10); trace[203].data[row_index] = res_limb_10_col203; -let res_limb_11_col204 = res_tmp_899.get_m31(11); +let res_limb_11_col204 = res_tmp_894.get_m31(11); trace[204].data[row_index] = res_limb_11_col204; -let res_limb_12_col205 = res_tmp_899.get_m31(12); +let res_limb_12_col205 = res_tmp_894.get_m31(12); trace[205].data[row_index] = res_limb_12_col205; -let res_limb_13_col206 = res_tmp_899.get_m31(13); +let res_limb_13_col206 = res_tmp_894.get_m31(13); trace[206].data[row_index] = res_limb_13_col206; -let res_limb_14_col207 = res_tmp_899.get_m31(14); +let res_limb_14_col207 = res_tmp_894.get_m31(14); trace[207].data[row_index] = res_limb_14_col207; -let res_limb_15_col208 = res_tmp_899.get_m31(15); +let res_limb_15_col208 = res_tmp_894.get_m31(15); trace[208].data[row_index] = res_limb_15_col208; -let res_limb_16_col209 = res_tmp_899.get_m31(16); +let res_limb_16_col209 = res_tmp_894.get_m31(16); trace[209].data[row_index] = res_limb_16_col209; -let res_limb_17_col210 = res_tmp_899.get_m31(17); +let res_limb_17_col210 = res_tmp_894.get_m31(17); trace[210].data[row_index] = res_limb_17_col210; -let res_limb_18_col211 = res_tmp_899.get_m31(18); +let res_limb_18_col211 = res_tmp_894.get_m31(18); trace[211].data[row_index] = res_limb_18_col211; -let res_limb_19_col212 = res_tmp_899.get_m31(19); +let res_limb_19_col212 = res_tmp_894.get_m31(19); trace[212].data[row_index] = res_limb_19_col212; -let res_limb_20_col213 = res_tmp_899.get_m31(20); +let res_limb_20_col213 = res_tmp_894.get_m31(20); trace[213].data[row_index] = res_limb_20_col213; -let res_limb_21_col214 = res_tmp_899.get_m31(21); +let res_limb_21_col214 = res_tmp_894.get_m31(21); trace[214].data[row_index] = res_limb_21_col214; -let res_limb_22_col215 = res_tmp_899.get_m31(22); +let res_limb_22_col215 = res_tmp_894.get_m31(22); trace[215].data[row_index] = res_limb_22_col215; -let res_limb_23_col216 = res_tmp_899.get_m31(23); +let res_limb_23_col216 = res_tmp_894.get_m31(23); trace[216].data[row_index] = res_limb_23_col216; -let res_limb_24_col217 = res_tmp_899.get_m31(24); +let res_limb_24_col217 = res_tmp_894.get_m31(24); trace[217].data[row_index] = res_limb_24_col217; -let res_limb_25_col218 = res_tmp_899.get_m31(25); +let res_limb_25_col218 = res_tmp_894.get_m31(25); trace[218].data[row_index] = res_limb_25_col218; -let res_limb_26_col219 = res_tmp_899.get_m31(26); +let res_limb_26_col219 = res_tmp_894.get_m31(26); trace[219].data[row_index] = res_limb_26_col219; -let res_limb_27_col220 = res_tmp_899.get_m31(27); +let res_limb_27_col220 = res_tmp_894.get_m31(27); trace[220].data[row_index] = res_limb_27_col220; + + //handle_opcodes. - //HandleOpcodes. - - - - - //CondFelt252AsAddr. - - - - - - - - //CondFelt252AsAddr. - + + //cond_felt252_as_addr. + + + //cond_felt252_as_addr. + - //UpdateRegisters. + + - //CondFelt252AsAddr. + //update_registers. + + //cond_felt252_as_addr. + - //CondFelt252AsAddr. + + //cond_felt252_as_addr. + + - //CondFelt252AsRelImm. + //cond_felt252_as_rel_imm. + + //cond_decode_small_sign. - //CondDecodeSmallSign. - - -let msb_tmp_913 = res_limb_27_col220.eq(M31_256); -let msb_col221 = msb_tmp_913.as_m31(); + +let msb_tmp_908 = res_limb_27_col220.eq(M31_256); +let msb_col221 = msb_tmp_908.as_m31(); trace[221].data[row_index] = msb_col221; -let mid_limbs_set_tmp_914 = res_limb_20_col213.eq(M31_511); -let mid_limbs_set_col222 = mid_limbs_set_tmp_914.as_m31(); +let mid_limbs_set_tmp_909 = res_limb_20_col213.eq(M31_511); +let mid_limbs_set_col222 = mid_limbs_set_tmp_909.as_m31(); trace[222].data[row_index] = mid_limbs_set_col222; + - - -let diff_from_p_tmp_915 = ((dst_limb_0_col22) - (M31_1)); -let diff_from_p_tmp_916 = ((dst_limb_21_col43) - (M31_136)); -let diff_from_p_tmp_917 = ((dst_limb_27_col49) - (M31_256)); -let dst_sum_squares_inv_col223 = ((M31_1).div(((((((((((((((((((((((((((((((((((((((((((((((((((((((((M31_0) + (((diff_from_p_tmp_915) * (diff_from_p_tmp_915))))) + (dst_limb_1_col23))) + (dst_limb_2_col24))) + (dst_limb_3_col25))) + (dst_limb_4_col26))) + (dst_limb_5_col27))) + (dst_limb_6_col28))) + (dst_limb_7_col29))) + (dst_limb_8_col30))) + (dst_limb_9_col31))) + (dst_limb_10_col32))) + (dst_limb_11_col33))) + (dst_limb_12_col34))) + (dst_limb_13_col35))) + (dst_limb_14_col36))) + (dst_limb_15_col37))) + (dst_limb_16_col38))) + (dst_limb_17_col39))) + (dst_limb_18_col40))) + (dst_limb_19_col41))) + (dst_limb_20_col42))) + (((diff_from_p_tmp_916) * (diff_from_p_tmp_916))))) + (dst_limb_22_col44))) + (dst_limb_23_col45))) + (dst_limb_24_col46))) + (dst_limb_25_col47))) + (dst_limb_26_col48))) + (((diff_from_p_tmp_917) * (diff_from_p_tmp_917)))))); + +let diff_from_p_tmp_910 = ((dst_limb_0_col22) - (M31_1)); +let diff_from_p_tmp_911 = ((dst_limb_21_col43) - (M31_136)); +let diff_from_p_tmp_912 = ((dst_limb_27_col49) - (M31_256)); +let dst_sum_squares_inv_col223 = ((M31_1) .div (((((((((((((((((((((((((((((((((((((((((((((((((((((((((M31_0) + (((diff_from_p_tmp_910) * (diff_from_p_tmp_910))))) + (dst_limb_1_col23))) + (dst_limb_2_col24))) + (dst_limb_3_col25))) + (dst_limb_4_col26))) + (dst_limb_5_col27))) + (dst_limb_6_col28))) + (dst_limb_7_col29))) + (dst_limb_8_col30))) + (dst_limb_9_col31))) + (dst_limb_10_col32))) + (dst_limb_11_col33))) + (dst_limb_12_col34))) + (dst_limb_13_col35))) + (dst_limb_14_col36))) + (dst_limb_15_col37))) + (dst_limb_16_col38))) + (dst_limb_17_col39))) + (dst_limb_18_col40))) + (dst_limb_19_col41))) + (dst_limb_20_col42))) + (((diff_from_p_tmp_911) * (diff_from_p_tmp_911))))) + (dst_limb_22_col44))) + (dst_limb_23_col45))) + (dst_limb_24_col46))) + (dst_limb_25_col47))) + (dst_limb_26_col48))) + (((diff_from_p_tmp_912) * (diff_from_p_tmp_912)))))); trace[223].data[row_index] = dst_sum_squares_inv_col223; -let dst_is_zero_tmp_918 = ((((((((((((((((((((((((((((((((((((((((((((((((((((((((M31_0) + (dst_limb_0_col22))) + (dst_limb_1_col23))) + (dst_limb_2_col24))) + (dst_limb_3_col25))) + (dst_limb_4_col26))) + (dst_limb_5_col27))) + (dst_limb_6_col28))) + (dst_limb_7_col29))) + (dst_limb_8_col30))) + (dst_limb_9_col31))) + (dst_limb_10_col32))) + (dst_limb_11_col33))) + (dst_limb_12_col34))) + (dst_limb_13_col35))) + (dst_limb_14_col36))) + (dst_limb_15_col37))) + (dst_limb_16_col38))) + (dst_limb_17_col39))) + (dst_limb_18_col40))) + (dst_limb_19_col41))) + (dst_limb_20_col42))) + (dst_limb_21_col43))) + (dst_limb_22_col44))) + (dst_limb_23_col45))) + (dst_limb_24_col46))) + (dst_limb_25_col47))) + (dst_limb_26_col48))) + (dst_limb_27_col49)).eq(M31_0); -let dst_sum_inv_col224 = ((M31_1).div(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((M31_0) + (dst_limb_0_col22))) + (dst_limb_1_col23))) + (dst_limb_2_col24))) + (dst_limb_3_col25))) + (dst_limb_4_col26))) + (dst_limb_5_col27))) + (dst_limb_6_col28))) + (dst_limb_7_col29))) + (dst_limb_8_col30))) + (dst_limb_9_col31))) + (dst_limb_10_col32))) + (dst_limb_11_col33))) + (dst_limb_12_col34))) + (dst_limb_13_col35))) + (dst_limb_14_col36))) + (dst_limb_15_col37))) + (dst_limb_16_col38))) + (dst_limb_17_col39))) + (dst_limb_18_col40))) + (dst_limb_19_col41))) + (dst_limb_20_col42))) + (dst_limb_21_col43))) + (dst_limb_22_col44))) + (dst_limb_23_col45))) + (dst_limb_24_col46))) + (dst_limb_25_col47))) + (dst_limb_26_col48))) + (dst_limb_27_col49))) + (dst_is_zero_tmp_918.as_m31())))); +let dst_is_zero_tmp_913 = ((((((((((((((((((((((((((((((((((((((((((((((((((((((((M31_0) + (dst_limb_0_col22))) + (dst_limb_1_col23))) + (dst_limb_2_col24))) + (dst_limb_3_col25))) + (dst_limb_4_col26))) + (dst_limb_5_col27))) + (dst_limb_6_col28))) + (dst_limb_7_col29))) + (dst_limb_8_col30))) + (dst_limb_9_col31))) + (dst_limb_10_col32))) + (dst_limb_11_col33))) + (dst_limb_12_col34))) + (dst_limb_13_col35))) + (dst_limb_14_col36))) + (dst_limb_15_col37))) + (dst_limb_16_col38))) + (dst_limb_17_col39))) + (dst_limb_18_col40))) + (dst_limb_19_col41))) + (dst_limb_20_col42))) + (dst_limb_21_col43))) + (dst_limb_22_col44))) + (dst_limb_23_col45))) + (dst_limb_24_col46))) + (dst_limb_25_col47))) + (dst_limb_26_col48))) + (dst_limb_27_col49)).eq(M31_0); +let dst_sum_inv_col224 = ((M31_1) .div (((((((((((((((((((((((((((((((((((((((((((((((((((((((((((M31_0) + (dst_limb_0_col22))) + (dst_limb_1_col23))) + (dst_limb_2_col24))) + (dst_limb_3_col25))) + (dst_limb_4_col26))) + (dst_limb_5_col27))) + (dst_limb_6_col28))) + (dst_limb_7_col29))) + (dst_limb_8_col30))) + (dst_limb_9_col31))) + (dst_limb_10_col32))) + (dst_limb_11_col33))) + (dst_limb_12_col34))) + (dst_limb_13_col35))) + (dst_limb_14_col36))) + (dst_limb_15_col37))) + (dst_limb_16_col38))) + (dst_limb_17_col39))) + (dst_limb_18_col40))) + (dst_limb_19_col41))) + (dst_limb_20_col42))) + (dst_limb_21_col43))) + (dst_limb_22_col44))) + (dst_limb_23_col45))) + (dst_limb_24_col46))) + (dst_limb_25_col47))) + (dst_limb_26_col48))) + (dst_limb_27_col49))) + (dst_is_zero_tmp_913.as_m31())))); trace[224].data[row_index] = dst_sum_inv_col224; let op1_as_rel_imm_cond_col225 = ((pc_update_jnz_col15) * (((((((((((((((((((((((((((((((((((((((((((((((((((((((((M31_0) + (dst_limb_0_col22))) + (dst_limb_1_col23))) + (dst_limb_2_col24))) + (dst_limb_3_col25))) + (dst_limb_4_col26))) + (dst_limb_5_col27))) + (dst_limb_6_col28))) + (dst_limb_7_col29))) + (dst_limb_8_col30))) + (dst_limb_9_col31))) + (dst_limb_10_col32))) + (dst_limb_11_col33))) + (dst_limb_12_col34))) + (dst_limb_13_col35))) + (dst_limb_14_col36))) + (dst_limb_15_col37))) + (dst_limb_16_col38))) + (dst_limb_17_col39))) + (dst_limb_18_col40))) + (dst_limb_19_col41))) + (dst_limb_20_col42))) + (dst_limb_21_col43))) + (dst_limb_22_col44))) + (dst_limb_23_col45))) + (dst_limb_24_col46))) + (dst_limb_25_col47))) + (dst_limb_26_col48))) + (dst_limb_27_col49)))); trace[225].data[row_index] = op1_as_rel_imm_cond_col225; - //CondFelt252AsRelImm. - + //cond_felt252_as_rel_imm. + - //CondDecodeSmallSign. + //cond_decode_small_sign. - -let msb_tmp_919 = op1_limb_27_col107.eq(M31_256); -let msb_col226 = msb_tmp_919.as_m31(); + +let msb_tmp_914 = op1_limb_27_col107.eq(M31_256); +let msb_col226 = msb_tmp_914.as_m31(); trace[226].data[row_index] = msb_col226; -let mid_limbs_set_tmp_920 = op1_limb_20_col100.eq(M31_511); -let mid_limbs_set_col227 = mid_limbs_set_tmp_920.as_m31(); +let mid_limbs_set_tmp_915 = op1_limb_20_col100.eq(M31_511); +let mid_limbs_set_col227 = mid_limbs_set_tmp_915.as_m31(); trace[227].data[row_index] = mid_limbs_set_col227; + - - -let next_pc_jnz_col228 = ((((dst_is_zero_tmp_918.as_m31()) * (((input_pc_col0) + (((M31_1) + (op1_imm_col8))))))) + (((((M31_1) - (dst_is_zero_tmp_918.as_m31()))) * (((input_pc_col0) + (((((((((op1_limb_0_col80) + (((op1_limb_1_col81) * (M31_512))))) + (((op1_limb_2_col82) * (M31_262144))))) - (msb_col226))) - (((M31_134217728) * (mid_limbs_set_col227)))))))))); + +let next_pc_jnz_col228 = ((((dst_is_zero_tmp_913.as_m31()) * (((input_pc_col0) + (((M31_1) + (op1_imm_col8))))))) + (((((M31_1) - (dst_is_zero_tmp_913.as_m31()))) * (((input_pc_col0) + (((((((((op1_limb_0_col80) + (((op1_limb_1_col81) * (M31_512))))) + (((op1_limb_2_col82) * (M31_262144))))) - (msb_col226))) - (((M31_134217728) * (mid_limbs_set_col227)))))))))); trace[228].data[row_index] = next_pc_jnz_col228; - + lookup_data.opcodes[0].push([input_pc_col0, input_ap_col1, input_fp_col2]); -lookup_data.opcodes[1].push([((((((((pc_update_regular_tmp_232) * (((input_pc_col0) + (((M31_1) + (op1_imm_col8))))))) + (((pc_update_jump_col13) * (((((res_limb_0_col193) + (((res_limb_1_col194) * (M31_512))))) + (((res_limb_2_col195) * (M31_262144))))))))) + (((pc_update_jump_rel_col14) * (((input_pc_col0) + (((((((((res_limb_0_col193) + (((res_limb_1_col194) * (M31_512))))) + (((res_limb_2_col195) * (M31_262144))))) - (msb_col221))) - (((M31_134217728) * (mid_limbs_set_col222))))))))))) + (((pc_update_jnz_col15) * (next_pc_jnz_col228)))), ((((((input_ap_col1) + (((ap_update_add_col16) * (((((((((res_limb_0_col193) + (((res_limb_1_col194) * (M31_512))))) + (((res_limb_2_col195) * (M31_262144))))) - (msb_col221))) - (((M31_134217728) * (mid_limbs_set_col222))))))))) + (((ap_update_add_1_col17) * (M31_1))))) + (((opcode_call_col18) * (M31_2)))), ((((((fp_update_regular_tmp_234) * (input_fp_col2))) + (((opcode_ret_col19) * (((((dst_limb_0_col22) + (((dst_limb_1_col23) * (M31_512))))) + (((dst_limb_2_col24) * (M31_262144))))))))) + (((opcode_call_col18) * (((input_ap_col1) + (M31_2))))))]); +lookup_data.opcodes[1].push([((((((((pc_update_regular_tmp_227) * (((input_pc_col0) + (((M31_1) + (op1_imm_col8))))))) + (((pc_update_jump_col13) * (((((res_limb_0_col193) + (((res_limb_1_col194) * (M31_512))))) + (((res_limb_2_col195) * (M31_262144))))))))) + (((pc_update_jump_rel_col14) * (((input_pc_col0) + (((((((((res_limb_0_col193) + (((res_limb_1_col194) * (M31_512))))) + (((res_limb_2_col195) * (M31_262144))))) - (msb_col221))) - (((M31_134217728) * (mid_limbs_set_col222))))))))))) + (((pc_update_jnz_col15) * (next_pc_jnz_col228)))), ((((((input_ap_col1) + (((ap_update_add_col16) * (((((((((res_limb_0_col193) + (((res_limb_1_col194) * (M31_512))))) + (((res_limb_2_col195) * (M31_262144))))) - (msb_col221))) - (((M31_134217728) * (mid_limbs_set_col222))))))))) + (((ap_update_add_1_col17) * (M31_1))))) + (((opcode_call_col18) * (M31_2)))), ((((((fp_update_regular_tmp_229) * (input_fp_col2))) + (((opcode_ret_col19) * (((((dst_limb_0_col22) + (((dst_limb_1_col23) * (M31_512))))) + (((dst_limb_2_col24) * (M31_262144))))))))) + (((opcode_call_col18) * (((input_ap_col1) + (M31_2))))))]); }); (trace, sub_components_inputs, lookup_data) } -#[derive(Default)] pub struct LookupData -{pub memoryaddresstoid: [Vec<[PackedM31; 2]>; 3],pub memoryidtobig: [Vec<[PackedM31; 29]>; 3],pub range_check_19: [Vec<[PackedM31; 1]>; 28],pub range_check_9_9: [Vec<[PackedM31; 2]>; 28],pub verify_instruction: [Vec<[PackedM31; 19]>; 1],pub opcodes: [Vec<[PackedM31; 3]>; 2],} +{pub memoryaddresstoid: [Vec<[PackedM31; 2]>; 3],pub memoryidtobig: [Vec<[PackedM31; 29]>; 3],pub opcodes: [Vec<[PackedM31; 3]>; 2],pub rangecheck_19: [Vec<[PackedM31; 1]>; 28],pub rangecheck_9_9: [Vec<[PackedM31; 2]>; 28],pub verifyinstruction: [Vec<[PackedM31; 19]>; 1],} impl LookupData { #[allow(unused_variables)] fn with_capacity(capacity: usize) -> Self { - Self {memoryaddresstoid: [Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),],memoryidtobig: [Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),],range_check_19: [Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),],range_check_9_9: [Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),],verify_instruction: [Vec::with_capacity(capacity),],opcodes: [Vec::with_capacity(capacity),Vec::with_capacity(capacity),],} + Self {memoryaddresstoid: [Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),],memoryidtobig: [Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),],opcodes: [Vec::with_capacity(capacity),Vec::with_capacity(capacity),],rangecheck_19: [Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),],rangecheck_9_9: [Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),Vec::with_capacity(capacity),],verifyinstruction: [Vec::with_capacity(capacity),],} } } -#[derive(Default)] pub struct InteractionClaimGenerator { pub n_calls: usize, pub lookup_data: LookupData, } impl InteractionClaimGenerator { + pub fn write_interaction_trace( self, tree_builder: &mut TreeBuilder<'_, '_, SimdBackend, Blake2sMerkleChannel>, @@ -1293,24 +1345,24 @@ impl InteractionClaimGenerator { &relations::MemoryAddressToId, memoryidtobig_lookup_elements: &relations::MemoryIdToBig, - range_check_19_lookup_elements: + opcodes_lookup_elements: + &relations::Opcodes, + rangecheck_19_lookup_elements: &relations::RangeCheck_19, - range_check_9_9_lookup_elements: + rangecheck_9_9_lookup_elements: &relations::RangeCheck_9_9, - verify_instruction_lookup_elements: + verifyinstruction_lookup_elements: &relations::VerifyInstruction, - opcodes_lookup_elements: - &relations::Opcodes, ) -> InteractionClaim { let log_size = std::cmp::max(self.n_calls.next_power_of_two().ilog2(), LOG_N_LANES); let mut logup_gen = LogupTraceGenerator::new(log_size); let mut col_gen = logup_gen.new_col(); let lookup_row = &self.lookup_data - .verify_instruction[0]; + .verifyinstruction[0]; for (i, lookup_values) in lookup_row.iter().enumerate() { let denom = - verify_instruction_lookup_elements.combine(lookup_values); + verifyinstruction_lookup_elements.combine(lookup_values); col_gen.write_frac(i, PackedQM31::one(), denom); } col_gen.finalize_col(); @@ -1377,560 +1429,560 @@ impl InteractionClaimGenerator { let mut col_gen = logup_gen.new_col(); let lookup_row = &self.lookup_data - .range_check_9_9[0]; + .rangecheck_9_9[0]; for (i, lookup_values) in lookup_row.iter().enumerate() { let denom = - range_check_9_9_lookup_elements.combine(lookup_values); + rangecheck_9_9_lookup_elements.combine(lookup_values); col_gen.write_frac(i, PackedQM31::one(), denom); } col_gen.finalize_col(); let mut col_gen = logup_gen.new_col(); let lookup_row = &self.lookup_data - .range_check_9_9[1]; + .rangecheck_9_9[1]; for (i, lookup_values) in lookup_row.iter().enumerate() { let denom = - range_check_9_9_lookup_elements.combine(lookup_values); + rangecheck_9_9_lookup_elements.combine(lookup_values); col_gen.write_frac(i, PackedQM31::one(), denom); } col_gen.finalize_col(); let mut col_gen = logup_gen.new_col(); let lookup_row = &self.lookup_data - .range_check_9_9[2]; + .rangecheck_9_9[2]; for (i, lookup_values) in lookup_row.iter().enumerate() { let denom = - range_check_9_9_lookup_elements.combine(lookup_values); + rangecheck_9_9_lookup_elements.combine(lookup_values); col_gen.write_frac(i, PackedQM31::one(), denom); } col_gen.finalize_col(); let mut col_gen = logup_gen.new_col(); let lookup_row = &self.lookup_data - .range_check_9_9[3]; + .rangecheck_9_9[3]; for (i, lookup_values) in lookup_row.iter().enumerate() { let denom = - range_check_9_9_lookup_elements.combine(lookup_values); + rangecheck_9_9_lookup_elements.combine(lookup_values); col_gen.write_frac(i, PackedQM31::one(), denom); } col_gen.finalize_col(); let mut col_gen = logup_gen.new_col(); let lookup_row = &self.lookup_data - .range_check_9_9[4]; + .rangecheck_9_9[4]; for (i, lookup_values) in lookup_row.iter().enumerate() { let denom = - range_check_9_9_lookup_elements.combine(lookup_values); + rangecheck_9_9_lookup_elements.combine(lookup_values); col_gen.write_frac(i, PackedQM31::one(), denom); } col_gen.finalize_col(); let mut col_gen = logup_gen.new_col(); let lookup_row = &self.lookup_data - .range_check_9_9[5]; + .rangecheck_9_9[5]; for (i, lookup_values) in lookup_row.iter().enumerate() { let denom = - range_check_9_9_lookup_elements.combine(lookup_values); + rangecheck_9_9_lookup_elements.combine(lookup_values); col_gen.write_frac(i, PackedQM31::one(), denom); } col_gen.finalize_col(); let mut col_gen = logup_gen.new_col(); let lookup_row = &self.lookup_data - .range_check_9_9[6]; + .rangecheck_9_9[6]; for (i, lookup_values) in lookup_row.iter().enumerate() { let denom = - range_check_9_9_lookup_elements.combine(lookup_values); + rangecheck_9_9_lookup_elements.combine(lookup_values); col_gen.write_frac(i, PackedQM31::one(), denom); } col_gen.finalize_col(); let mut col_gen = logup_gen.new_col(); let lookup_row = &self.lookup_data - .range_check_9_9[7]; + .rangecheck_9_9[7]; for (i, lookup_values) in lookup_row.iter().enumerate() { let denom = - range_check_9_9_lookup_elements.combine(lookup_values); + rangecheck_9_9_lookup_elements.combine(lookup_values); col_gen.write_frac(i, PackedQM31::one(), denom); } col_gen.finalize_col(); let mut col_gen = logup_gen.new_col(); let lookup_row = &self.lookup_data - .range_check_9_9[8]; + .rangecheck_9_9[8]; for (i, lookup_values) in lookup_row.iter().enumerate() { let denom = - range_check_9_9_lookup_elements.combine(lookup_values); + rangecheck_9_9_lookup_elements.combine(lookup_values); col_gen.write_frac(i, PackedQM31::one(), denom); } col_gen.finalize_col(); let mut col_gen = logup_gen.new_col(); let lookup_row = &self.lookup_data - .range_check_9_9[9]; + .rangecheck_9_9[9]; for (i, lookup_values) in lookup_row.iter().enumerate() { let denom = - range_check_9_9_lookup_elements.combine(lookup_values); + rangecheck_9_9_lookup_elements.combine(lookup_values); col_gen.write_frac(i, PackedQM31::one(), denom); } col_gen.finalize_col(); let mut col_gen = logup_gen.new_col(); let lookup_row = &self.lookup_data - .range_check_9_9[10]; + .rangecheck_9_9[10]; for (i, lookup_values) in lookup_row.iter().enumerate() { let denom = - range_check_9_9_lookup_elements.combine(lookup_values); + rangecheck_9_9_lookup_elements.combine(lookup_values); col_gen.write_frac(i, PackedQM31::one(), denom); } col_gen.finalize_col(); let mut col_gen = logup_gen.new_col(); let lookup_row = &self.lookup_data - .range_check_9_9[11]; + .rangecheck_9_9[11]; for (i, lookup_values) in lookup_row.iter().enumerate() { let denom = - range_check_9_9_lookup_elements.combine(lookup_values); + rangecheck_9_9_lookup_elements.combine(lookup_values); col_gen.write_frac(i, PackedQM31::one(), denom); } col_gen.finalize_col(); let mut col_gen = logup_gen.new_col(); let lookup_row = &self.lookup_data - .range_check_9_9[12]; + .rangecheck_9_9[12]; for (i, lookup_values) in lookup_row.iter().enumerate() { let denom = - range_check_9_9_lookup_elements.combine(lookup_values); + rangecheck_9_9_lookup_elements.combine(lookup_values); col_gen.write_frac(i, PackedQM31::one(), denom); } col_gen.finalize_col(); let mut col_gen = logup_gen.new_col(); let lookup_row = &self.lookup_data - .range_check_9_9[13]; + .rangecheck_9_9[13]; for (i, lookup_values) in lookup_row.iter().enumerate() { let denom = - range_check_9_9_lookup_elements.combine(lookup_values); + rangecheck_9_9_lookup_elements.combine(lookup_values); col_gen.write_frac(i, PackedQM31::one(), denom); } col_gen.finalize_col(); let mut col_gen = logup_gen.new_col(); let lookup_row = &self.lookup_data - .range_check_9_9[14]; + .rangecheck_9_9[14]; for (i, lookup_values) in lookup_row.iter().enumerate() { let denom = - range_check_9_9_lookup_elements.combine(lookup_values); + rangecheck_9_9_lookup_elements.combine(lookup_values); col_gen.write_frac(i, PackedQM31::one(), denom); } col_gen.finalize_col(); let mut col_gen = logup_gen.new_col(); let lookup_row = &self.lookup_data - .range_check_9_9[15]; + .rangecheck_9_9[15]; for (i, lookup_values) in lookup_row.iter().enumerate() { let denom = - range_check_9_9_lookup_elements.combine(lookup_values); + rangecheck_9_9_lookup_elements.combine(lookup_values); col_gen.write_frac(i, PackedQM31::one(), denom); } col_gen.finalize_col(); let mut col_gen = logup_gen.new_col(); let lookup_row = &self.lookup_data - .range_check_9_9[16]; + .rangecheck_9_9[16]; for (i, lookup_values) in lookup_row.iter().enumerate() { let denom = - range_check_9_9_lookup_elements.combine(lookup_values); + rangecheck_9_9_lookup_elements.combine(lookup_values); col_gen.write_frac(i, PackedQM31::one(), denom); } col_gen.finalize_col(); let mut col_gen = logup_gen.new_col(); let lookup_row = &self.lookup_data - .range_check_9_9[17]; + .rangecheck_9_9[17]; for (i, lookup_values) in lookup_row.iter().enumerate() { let denom = - range_check_9_9_lookup_elements.combine(lookup_values); + rangecheck_9_9_lookup_elements.combine(lookup_values); col_gen.write_frac(i, PackedQM31::one(), denom); } col_gen.finalize_col(); let mut col_gen = logup_gen.new_col(); let lookup_row = &self.lookup_data - .range_check_9_9[18]; + .rangecheck_9_9[18]; for (i, lookup_values) in lookup_row.iter().enumerate() { let denom = - range_check_9_9_lookup_elements.combine(lookup_values); + rangecheck_9_9_lookup_elements.combine(lookup_values); col_gen.write_frac(i, PackedQM31::one(), denom); } col_gen.finalize_col(); let mut col_gen = logup_gen.new_col(); let lookup_row = &self.lookup_data - .range_check_9_9[19]; + .rangecheck_9_9[19]; for (i, lookup_values) in lookup_row.iter().enumerate() { let denom = - range_check_9_9_lookup_elements.combine(lookup_values); + rangecheck_9_9_lookup_elements.combine(lookup_values); col_gen.write_frac(i, PackedQM31::one(), denom); } col_gen.finalize_col(); let mut col_gen = logup_gen.new_col(); let lookup_row = &self.lookup_data - .range_check_9_9[20]; + .rangecheck_9_9[20]; for (i, lookup_values) in lookup_row.iter().enumerate() { let denom = - range_check_9_9_lookup_elements.combine(lookup_values); + rangecheck_9_9_lookup_elements.combine(lookup_values); col_gen.write_frac(i, PackedQM31::one(), denom); } col_gen.finalize_col(); let mut col_gen = logup_gen.new_col(); let lookup_row = &self.lookup_data - .range_check_9_9[21]; + .rangecheck_9_9[21]; for (i, lookup_values) in lookup_row.iter().enumerate() { let denom = - range_check_9_9_lookup_elements.combine(lookup_values); + rangecheck_9_9_lookup_elements.combine(lookup_values); col_gen.write_frac(i, PackedQM31::one(), denom); } col_gen.finalize_col(); let mut col_gen = logup_gen.new_col(); let lookup_row = &self.lookup_data - .range_check_9_9[22]; + .rangecheck_9_9[22]; for (i, lookup_values) in lookup_row.iter().enumerate() { let denom = - range_check_9_9_lookup_elements.combine(lookup_values); + rangecheck_9_9_lookup_elements.combine(lookup_values); col_gen.write_frac(i, PackedQM31::one(), denom); } col_gen.finalize_col(); let mut col_gen = logup_gen.new_col(); let lookup_row = &self.lookup_data - .range_check_9_9[23]; + .rangecheck_9_9[23]; for (i, lookup_values) in lookup_row.iter().enumerate() { let denom = - range_check_9_9_lookup_elements.combine(lookup_values); + rangecheck_9_9_lookup_elements.combine(lookup_values); col_gen.write_frac(i, PackedQM31::one(), denom); } col_gen.finalize_col(); let mut col_gen = logup_gen.new_col(); let lookup_row = &self.lookup_data - .range_check_9_9[24]; + .rangecheck_9_9[24]; for (i, lookup_values) in lookup_row.iter().enumerate() { let denom = - range_check_9_9_lookup_elements.combine(lookup_values); + rangecheck_9_9_lookup_elements.combine(lookup_values); col_gen.write_frac(i, PackedQM31::one(), denom); } col_gen.finalize_col(); let mut col_gen = logup_gen.new_col(); let lookup_row = &self.lookup_data - .range_check_9_9[25]; + .rangecheck_9_9[25]; for (i, lookup_values) in lookup_row.iter().enumerate() { let denom = - range_check_9_9_lookup_elements.combine(lookup_values); + rangecheck_9_9_lookup_elements.combine(lookup_values); col_gen.write_frac(i, PackedQM31::one(), denom); } col_gen.finalize_col(); let mut col_gen = logup_gen.new_col(); let lookup_row = &self.lookup_data - .range_check_9_9[26]; + .rangecheck_9_9[26]; for (i, lookup_values) in lookup_row.iter().enumerate() { let denom = - range_check_9_9_lookup_elements.combine(lookup_values); + rangecheck_9_9_lookup_elements.combine(lookup_values); col_gen.write_frac(i, PackedQM31::one(), denom); } col_gen.finalize_col(); let mut col_gen = logup_gen.new_col(); let lookup_row = &self.lookup_data - .range_check_9_9[27]; + .rangecheck_9_9[27]; for (i, lookup_values) in lookup_row.iter().enumerate() { let denom = - range_check_9_9_lookup_elements.combine(lookup_values); + rangecheck_9_9_lookup_elements.combine(lookup_values); col_gen.write_frac(i, PackedQM31::one(), denom); } col_gen.finalize_col(); let mut col_gen = logup_gen.new_col(); let lookup_row = &self.lookup_data - .range_check_19[0]; + .rangecheck_19[0]; for (i, lookup_values) in lookup_row.iter().enumerate() { let denom = - range_check_19_lookup_elements.combine(lookup_values); + rangecheck_19_lookup_elements.combine(lookup_values); col_gen.write_frac(i, PackedQM31::one(), denom); } col_gen.finalize_col(); let mut col_gen = logup_gen.new_col(); let lookup_row = &self.lookup_data - .range_check_19[1]; + .rangecheck_19[1]; for (i, lookup_values) in lookup_row.iter().enumerate() { let denom = - range_check_19_lookup_elements.combine(lookup_values); + rangecheck_19_lookup_elements.combine(lookup_values); col_gen.write_frac(i, PackedQM31::one(), denom); } col_gen.finalize_col(); let mut col_gen = logup_gen.new_col(); let lookup_row = &self.lookup_data - .range_check_19[2]; + .rangecheck_19[2]; for (i, lookup_values) in lookup_row.iter().enumerate() { let denom = - range_check_19_lookup_elements.combine(lookup_values); + rangecheck_19_lookup_elements.combine(lookup_values); col_gen.write_frac(i, PackedQM31::one(), denom); } col_gen.finalize_col(); let mut col_gen = logup_gen.new_col(); let lookup_row = &self.lookup_data - .range_check_19[3]; + .rangecheck_19[3]; for (i, lookup_values) in lookup_row.iter().enumerate() { let denom = - range_check_19_lookup_elements.combine(lookup_values); + rangecheck_19_lookup_elements.combine(lookup_values); col_gen.write_frac(i, PackedQM31::one(), denom); } col_gen.finalize_col(); let mut col_gen = logup_gen.new_col(); let lookup_row = &self.lookup_data - .range_check_19[4]; + .rangecheck_19[4]; for (i, lookup_values) in lookup_row.iter().enumerate() { let denom = - range_check_19_lookup_elements.combine(lookup_values); + rangecheck_19_lookup_elements.combine(lookup_values); col_gen.write_frac(i, PackedQM31::one(), denom); } col_gen.finalize_col(); let mut col_gen = logup_gen.new_col(); let lookup_row = &self.lookup_data - .range_check_19[5]; + .rangecheck_19[5]; for (i, lookup_values) in lookup_row.iter().enumerate() { let denom = - range_check_19_lookup_elements.combine(lookup_values); + rangecheck_19_lookup_elements.combine(lookup_values); col_gen.write_frac(i, PackedQM31::one(), denom); } col_gen.finalize_col(); let mut col_gen = logup_gen.new_col(); let lookup_row = &self.lookup_data - .range_check_19[6]; + .rangecheck_19[6]; for (i, lookup_values) in lookup_row.iter().enumerate() { let denom = - range_check_19_lookup_elements.combine(lookup_values); + rangecheck_19_lookup_elements.combine(lookup_values); col_gen.write_frac(i, PackedQM31::one(), denom); } col_gen.finalize_col(); let mut col_gen = logup_gen.new_col(); let lookup_row = &self.lookup_data - .range_check_19[7]; + .rangecheck_19[7]; for (i, lookup_values) in lookup_row.iter().enumerate() { let denom = - range_check_19_lookup_elements.combine(lookup_values); + rangecheck_19_lookup_elements.combine(lookup_values); col_gen.write_frac(i, PackedQM31::one(), denom); } col_gen.finalize_col(); let mut col_gen = logup_gen.new_col(); let lookup_row = &self.lookup_data - .range_check_19[8]; + .rangecheck_19[8]; for (i, lookup_values) in lookup_row.iter().enumerate() { let denom = - range_check_19_lookup_elements.combine(lookup_values); + rangecheck_19_lookup_elements.combine(lookup_values); col_gen.write_frac(i, PackedQM31::one(), denom); } col_gen.finalize_col(); let mut col_gen = logup_gen.new_col(); let lookup_row = &self.lookup_data - .range_check_19[9]; + .rangecheck_19[9]; for (i, lookup_values) in lookup_row.iter().enumerate() { let denom = - range_check_19_lookup_elements.combine(lookup_values); + rangecheck_19_lookup_elements.combine(lookup_values); col_gen.write_frac(i, PackedQM31::one(), denom); } col_gen.finalize_col(); let mut col_gen = logup_gen.new_col(); let lookup_row = &self.lookup_data - .range_check_19[10]; + .rangecheck_19[10]; for (i, lookup_values) in lookup_row.iter().enumerate() { let denom = - range_check_19_lookup_elements.combine(lookup_values); + rangecheck_19_lookup_elements.combine(lookup_values); col_gen.write_frac(i, PackedQM31::one(), denom); } col_gen.finalize_col(); let mut col_gen = logup_gen.new_col(); let lookup_row = &self.lookup_data - .range_check_19[11]; + .rangecheck_19[11]; for (i, lookup_values) in lookup_row.iter().enumerate() { let denom = - range_check_19_lookup_elements.combine(lookup_values); + rangecheck_19_lookup_elements.combine(lookup_values); col_gen.write_frac(i, PackedQM31::one(), denom); } col_gen.finalize_col(); let mut col_gen = logup_gen.new_col(); let lookup_row = &self.lookup_data - .range_check_19[12]; + .rangecheck_19[12]; for (i, lookup_values) in lookup_row.iter().enumerate() { let denom = - range_check_19_lookup_elements.combine(lookup_values); + rangecheck_19_lookup_elements.combine(lookup_values); col_gen.write_frac(i, PackedQM31::one(), denom); } col_gen.finalize_col(); let mut col_gen = logup_gen.new_col(); let lookup_row = &self.lookup_data - .range_check_19[13]; + .rangecheck_19[13]; for (i, lookup_values) in lookup_row.iter().enumerate() { let denom = - range_check_19_lookup_elements.combine(lookup_values); + rangecheck_19_lookup_elements.combine(lookup_values); col_gen.write_frac(i, PackedQM31::one(), denom); } col_gen.finalize_col(); let mut col_gen = logup_gen.new_col(); let lookup_row = &self.lookup_data - .range_check_19[14]; + .rangecheck_19[14]; for (i, lookup_values) in lookup_row.iter().enumerate() { let denom = - range_check_19_lookup_elements.combine(lookup_values); + rangecheck_19_lookup_elements.combine(lookup_values); col_gen.write_frac(i, PackedQM31::one(), denom); } col_gen.finalize_col(); let mut col_gen = logup_gen.new_col(); let lookup_row = &self.lookup_data - .range_check_19[15]; + .rangecheck_19[15]; for (i, lookup_values) in lookup_row.iter().enumerate() { let denom = - range_check_19_lookup_elements.combine(lookup_values); + rangecheck_19_lookup_elements.combine(lookup_values); col_gen.write_frac(i, PackedQM31::one(), denom); } col_gen.finalize_col(); let mut col_gen = logup_gen.new_col(); let lookup_row = &self.lookup_data - .range_check_19[16]; + .rangecheck_19[16]; for (i, lookup_values) in lookup_row.iter().enumerate() { let denom = - range_check_19_lookup_elements.combine(lookup_values); + rangecheck_19_lookup_elements.combine(lookup_values); col_gen.write_frac(i, PackedQM31::one(), denom); } col_gen.finalize_col(); let mut col_gen = logup_gen.new_col(); let lookup_row = &self.lookup_data - .range_check_19[17]; + .rangecheck_19[17]; for (i, lookup_values) in lookup_row.iter().enumerate() { let denom = - range_check_19_lookup_elements.combine(lookup_values); + rangecheck_19_lookup_elements.combine(lookup_values); col_gen.write_frac(i, PackedQM31::one(), denom); } col_gen.finalize_col(); let mut col_gen = logup_gen.new_col(); let lookup_row = &self.lookup_data - .range_check_19[18]; + .rangecheck_19[18]; for (i, lookup_values) in lookup_row.iter().enumerate() { let denom = - range_check_19_lookup_elements.combine(lookup_values); + rangecheck_19_lookup_elements.combine(lookup_values); col_gen.write_frac(i, PackedQM31::one(), denom); } col_gen.finalize_col(); let mut col_gen = logup_gen.new_col(); let lookup_row = &self.lookup_data - .range_check_19[19]; + .rangecheck_19[19]; for (i, lookup_values) in lookup_row.iter().enumerate() { let denom = - range_check_19_lookup_elements.combine(lookup_values); + rangecheck_19_lookup_elements.combine(lookup_values); col_gen.write_frac(i, PackedQM31::one(), denom); } col_gen.finalize_col(); let mut col_gen = logup_gen.new_col(); let lookup_row = &self.lookup_data - .range_check_19[20]; + .rangecheck_19[20]; for (i, lookup_values) in lookup_row.iter().enumerate() { let denom = - range_check_19_lookup_elements.combine(lookup_values); + rangecheck_19_lookup_elements.combine(lookup_values); col_gen.write_frac(i, PackedQM31::one(), denom); } col_gen.finalize_col(); let mut col_gen = logup_gen.new_col(); let lookup_row = &self.lookup_data - .range_check_19[21]; + .rangecheck_19[21]; for (i, lookup_values) in lookup_row.iter().enumerate() { let denom = - range_check_19_lookup_elements.combine(lookup_values); + rangecheck_19_lookup_elements.combine(lookup_values); col_gen.write_frac(i, PackedQM31::one(), denom); } col_gen.finalize_col(); let mut col_gen = logup_gen.new_col(); let lookup_row = &self.lookup_data - .range_check_19[22]; + .rangecheck_19[22]; for (i, lookup_values) in lookup_row.iter().enumerate() { let denom = - range_check_19_lookup_elements.combine(lookup_values); + rangecheck_19_lookup_elements.combine(lookup_values); col_gen.write_frac(i, PackedQM31::one(), denom); } col_gen.finalize_col(); let mut col_gen = logup_gen.new_col(); let lookup_row = &self.lookup_data - .range_check_19[23]; + .rangecheck_19[23]; for (i, lookup_values) in lookup_row.iter().enumerate() { let denom = - range_check_19_lookup_elements.combine(lookup_values); + rangecheck_19_lookup_elements.combine(lookup_values); col_gen.write_frac(i, PackedQM31::one(), denom); } col_gen.finalize_col(); let mut col_gen = logup_gen.new_col(); let lookup_row = &self.lookup_data - .range_check_19[24]; + .rangecheck_19[24]; for (i, lookup_values) in lookup_row.iter().enumerate() { let denom = - range_check_19_lookup_elements.combine(lookup_values); + rangecheck_19_lookup_elements.combine(lookup_values); col_gen.write_frac(i, PackedQM31::one(), denom); } col_gen.finalize_col(); let mut col_gen = logup_gen.new_col(); let lookup_row = &self.lookup_data - .range_check_19[25]; + .rangecheck_19[25]; for (i, lookup_values) in lookup_row.iter().enumerate() { let denom = - range_check_19_lookup_elements.combine(lookup_values); + rangecheck_19_lookup_elements.combine(lookup_values); col_gen.write_frac(i, PackedQM31::one(), denom); } col_gen.finalize_col(); let mut col_gen = logup_gen.new_col(); let lookup_row = &self.lookup_data - .range_check_19[26]; + .rangecheck_19[26]; for (i, lookup_values) in lookup_row.iter().enumerate() { let denom = - range_check_19_lookup_elements.combine(lookup_values); + rangecheck_19_lookup_elements.combine(lookup_values); col_gen.write_frac(i, PackedQM31::one(), denom); } col_gen.finalize_col(); let mut col_gen = logup_gen.new_col(); let lookup_row = &self.lookup_data - .range_check_19[27]; + .rangecheck_19[27]; for (i, lookup_values) in lookup_row.iter().enumerate() { let denom = - range_check_19_lookup_elements.combine(lookup_values); + rangecheck_19_lookup_elements.combine(lookup_values); col_gen.write_frac(i, PackedQM31::one(), denom); } col_gen.finalize_col(); @@ -1952,7 +2004,6 @@ impl InteractionClaimGenerator { let denom = opcodes_lookup_elements.combine(lookup_values); col_gen.write_frac(i, -PackedQM31::one(), denom); - } col_gen.finalize_col(); @@ -1967,8 +2018,7 @@ impl InteractionClaimGenerator { tree_builder.extend_evals(trace); InteractionClaim { - claimed_sum, - total_sum, + logup_sums: (total_sum,claimed_sum) } } -} \ No newline at end of file +} diff --git a/stwo_cairo_prover/crates/prover/src/components/mod.rs b/stwo_cairo_prover/crates/prover/src/components/mod.rs index daaf9dd6..9556b2fb 100644 --- a/stwo_cairo_prover/crates/prover/src/components/mod.rs +++ b/stwo_cairo_prover/crates/prover/src/components/mod.rs @@ -10,6 +10,13 @@ pub mod verify_instruction; pub use memory::{memory_address_to_id, memory_id_to_big}; pub use range_check_vector::{range_check_19, range_check_4_3, range_check_7_2_5, range_check_9_9}; +// When padding is needed, the inputs must be arranged in order defined by the neighbor +// function. his order allows using the partial sum mechanism to sum only the first n_call inputs. +// [`SubComponentInputs::bit_reverse_coset_to_circle_domain_order`] permutes the +// bit-reversed-circle-domain ordered values to the natural order. Used to ignore padded values at +// the tail of the natural ordered vector. +// TODO(Ohad): generalize the padding logic, and move above doc to the relevant function. + pub fn pack_values(values: &[T]) -> Vec { values .array_chunks::() diff --git a/stwo_cairo_prover/crates/prover/src/components/ret_opcode/component.rs b/stwo_cairo_prover/crates/prover/src/components/ret_opcode/component.rs index 02b03505..a739ed46 100644 --- a/stwo_cairo_prover/crates/prover/src/components/ret_opcode/component.rs +++ b/stwo_cairo_prover/crates/prover/src/components/ret_opcode/component.rs @@ -1,46 +1,26 @@ #![allow(non_camel_case_types)] #![allow(unused_imports)] -use std::ops::{Mul, Sub}; - use num_traits::{One, Zero}; use serde::{Deserialize, Serialize}; -use stwo_prover::constraint_framework::logup::{ClaimedPrefixSum, LogupAtRow, LookupElements}; -use stwo_prover::constraint_framework::preprocessed_columns::PreprocessedColumn; +use stwo_prover::constraint_framework::logup::{LogupAtRow, LogupSums, LookupElements}; use stwo_prover::constraint_framework::{ - EvalAtRow, FrameworkComponent, FrameworkEval, RelationEntry, INTERACTION_TRACE_IDX, + EvalAtRow, FrameworkComponent, FrameworkEval, RelationEntry, }; -use stwo_prover::core::backend::simd::m31::PackedM31; +use stwo_prover::core::backend::simd::m31::LOG_N_LANES; use stwo_prover::core::channel::Channel; use stwo_prover::core::fields::m31::M31; use stwo_prover::core::fields::qm31::SecureField; use stwo_prover::core::fields::secure_column::SECURE_EXTENSION_DEGREE; -use stwo_prover::core::lookups::utils::Fraction; use stwo_prover::core::pcs::TreeVec; -use crate::components::memory::{memory_address_to_id, memory_id_to_big}; -use crate::components::{memory, verify_instruction}; use crate::relations; -#[derive(Clone, Debug, PartialEq, Eq)] -pub struct RelationElements(LookupElements<4>); -impl RelationElements { - pub fn draw(channel: &mut impl Channel) -> Self { - Self(LookupElements::<4>::draw(channel)) - } - pub fn combine(&self, values: &[F]) -> EF - where - EF: Clone + Zero + From + From + Mul + Sub, - { - self.0.combine(values) - } -} - pub struct Eval { pub claim: Claim, pub memoryaddresstoid_lookup_elements: relations::MemoryAddressToId, pub memoryidtobig_lookup_elements: relations::MemoryIdToBig, - pub verify_instruction_lookup_elements: relations::VerifyInstruction, pub opcodes_lookup_elements: relations::Opcodes, + pub verifyinstruction_lookup_elements: relations::VerifyInstruction, } #[derive(Copy, Clone, Serialize, Deserialize)] @@ -49,7 +29,7 @@ pub struct Claim { } impl Claim { pub fn log_sizes(&self) -> TreeVec> { - let log_size = self.n_calls.next_power_of_two().ilog2(); + let log_size = std::cmp::max(self.n_calls.next_power_of_two().ilog2(), LOG_N_LANES); let trace_log_sizes = vec![log_size; 11]; let interaction_log_sizes = vec![log_size; SECURE_EXTENSION_DEGREE * 7]; let preprocessed_log_sizes = vec![log_size]; @@ -67,16 +47,15 @@ impl Claim { #[derive(Copy, Clone, Serialize, Deserialize)] pub struct InteractionClaim { - pub total_sum: SecureField, - pub claimed_sum: Option, + pub logup_sums: LogupSums, } impl InteractionClaim { pub fn mix_into(&self, channel: &mut impl Channel) { - if let Some((claimed_sum, idx)) = self.claimed_sum { - channel.mix_felts(&[self.total_sum, claimed_sum]); - channel.mix_u64(idx as u64); - } else { - channel.mix_felts(&[self.total_sum]); + let (total_sum, claimed_sum) = self.logup_sums; + channel.mix_felts(&[total_sum]); + if let Some(claimed_sum) = claimed_sum { + channel.mix_felts(&[claimed_sum.0]); + channel.mix_u64(claimed_sum.1 as u64); } } } @@ -85,7 +64,7 @@ pub type Component = FrameworkComponent; impl FrameworkEval for Eval { fn log_size(&self) -> u32 { - self.claim.n_calls.next_power_of_two().ilog2() + std::cmp::max(self.claim.n_calls.next_power_of_two().ilog2(), LOG_N_LANES) } fn max_constraint_log_degree_bound(&self) -> u32 { @@ -95,7 +74,6 @@ impl FrameworkEval for Eval { #[allow(unused_parens)] #[allow(clippy::double_parens)] #[allow(non_snake_case)] - #[allow(unused_variables)] fn evaluate(&self, mut eval: E) -> E { let M31_0 = E::F::from(M31::from(0)); let M31_1 = E::F::from(M31::from(1)); @@ -116,8 +94,10 @@ impl FrameworkEval for Eval { let next_fp_limb_1_col9 = eval.next_trace_mask(); let next_fp_limb_2_col10 = eval.next_trace_mask(); + // decode_instruction_c94bba24192ecf68. + eval.add_to_relation(&[RelationEntry::new( - &self.verify_instruction_lookup_elements, + &self.verifyinstruction_lookup_elements, E::EF::one(), &[ input_pc_col0.clone(), @@ -141,7 +121,7 @@ impl FrameworkEval for Eval { ], )]); - // ReadPositive_num_bits_27. + // read_positive_num_bits_27. eval.add_to_relation(&[RelationEntry::new( &self.memoryaddresstoid_lookup_elements, @@ -163,7 +143,7 @@ impl FrameworkEval for Eval { ], )]); - // ReadPositive_num_bits_27. + // read_positive_num_bits_27. eval.add_to_relation(&[RelationEntry::new( &self.memoryaddresstoid_lookup_elements, diff --git a/stwo_cairo_prover/crates/prover/src/components/ret_opcode/mod.rs b/stwo_cairo_prover/crates/prover/src/components/ret_opcode/mod.rs index 74f11375..effad944 100644 --- a/stwo_cairo_prover/crates/prover/src/components/ret_opcode/mod.rs +++ b/stwo_cairo_prover/crates/prover/src/components/ret_opcode/mod.rs @@ -1,5 +1,5 @@ pub mod component; pub mod prover; -pub use component::{Claim, Component, Eval, InteractionClaim, RelationElements}; +pub use component::{Claim, Component, Eval, InteractionClaim}; pub use prover::{ClaimGenerator, InputType, InteractionClaimGenerator, PackedInputType}; diff --git a/stwo_cairo_prover/crates/prover/src/components/ret_opcode/prover.rs b/stwo_cairo_prover/crates/prover/src/components/ret_opcode/prover.rs index 1c79a690..10971535 100644 --- a/stwo_cairo_prover/crates/prover/src/components/ret_opcode/prover.rs +++ b/stwo_cairo_prover/crates/prover/src/components/ret_opcode/prover.rs @@ -1,7 +1,5 @@ #![allow(unused_parens)] #![allow(unused_imports)] -use std::default; - use itertools::{chain, zip_eq, Itertools}; use num_traits::{One, Zero}; use prover_types::cpu::*; @@ -16,20 +14,18 @@ use stwo_prover::core::backend::simd::qm31::PackedQM31; use stwo_prover::core::backend::simd::SimdBackend; use stwo_prover::core::backend::{Col, Column}; use stwo_prover::core::fields::m31::M31; -use stwo_prover::core::fields::qm31::QM31; use stwo_prover::core::pcs::TreeBuilder; use stwo_prover::core::poly::circle::{CanonicCoset, CircleEvaluation}; use stwo_prover::core::poly::BitReversedOrder; -use stwo_prover::core::utils::{bit_reverse, bit_reverse_coset_to_circle_domain_order}; +use stwo_prover::core::utils::bit_reverse_coset_to_circle_domain_order; use stwo_prover::core::vcs::blake2_merkle::{Blake2sMerkleChannel, Blake2sMerkleHasher}; -use super::component::{Claim, InteractionClaim, RelationElements}; -use crate::components::{memory, pack_values, verify_instruction}; +use super::component::{Claim, InteractionClaim}; +use crate::components::{memory_address_to_id, memory_id_to_big, pack_values, verify_instruction}; use crate::relations; -pub type PackedInputType = PackedCasmState; pub type InputType = CasmState; - +pub type PackedInputType = PackedCasmState; const N_TRACE_COLUMNS: usize = 11; #[derive(Default)] @@ -37,15 +33,15 @@ pub struct ClaimGenerator { pub inputs: Vec, } impl ClaimGenerator { - pub fn new(cpu_inputs: Vec) -> Self { - Self { inputs: cpu_inputs } + pub fn new(inputs: Vec) -> Self { + Self { inputs } } pub fn write_trace( mut self, tree_builder: &mut TreeBuilder<'_, '_, SimdBackend, Blake2sMerkleChannel>, - memoryaddresstoid_state: &mut memory::memory_address_to_id::ClaimGenerator, - memoryidtobig_state: &mut memory::memory_id_to_big::ClaimGenerator, + memory_address_to_id_state: &mut memory_address_to_id::ClaimGenerator, + memory_id_to_big_state: &mut memory_id_to_big::ClaimGenerator, verify_instruction_state: &mut verify_instruction::ClaimGenerator, ) -> (Claim, InteractionClaimGenerator) { let n_calls = self.inputs.len(); @@ -58,26 +54,34 @@ impl ClaimGenerator { bit_reverse_coset_to_circle_domain_order(&mut self.inputs); } - let simd_inputs = pack_values(&self.inputs); - let (trace, mut sub_components_inputs, lookup_data) = - write_trace_simd(simd_inputs, memoryaddresstoid_state, memoryidtobig_state); + let packed_inputs = pack_values(&self.inputs); + let (trace, mut sub_components_inputs, lookup_data) = write_trace_simd( + packed_inputs, + memory_address_to_id_state, + memory_id_to_big_state, + ); if need_padding { sub_components_inputs.bit_reverse_coset_to_circle_domain_order(); } - - // Add inputs. - memoryaddresstoid_state - .add_inputs(&sub_components_inputs.memoryaddresstoid_inputs[0][..n_calls]); - memoryaddresstoid_state - .add_inputs(&sub_components_inputs.memoryaddresstoid_inputs[1][..n_calls]); - memoryaddresstoid_state - .add_inputs(&sub_components_inputs.memoryaddresstoid_inputs[2][..n_calls]); - memoryidtobig_state.add_inputs(&sub_components_inputs.memoryidtobig_inputs[0][..n_calls]); - memoryidtobig_state.add_inputs(&sub_components_inputs.memoryidtobig_inputs[1][..n_calls]); - memoryidtobig_state.add_inputs(&sub_components_inputs.memoryidtobig_inputs[2][..n_calls]); - verify_instruction_state - .add_inputs(&sub_components_inputs.verify_instruction_inputs[0][..n_calls]); + sub_components_inputs + .memory_address_to_id_inputs + .iter() + .for_each(|inputs| { + memory_address_to_id_state.add_inputs(&inputs[..n_calls]); + }); + sub_components_inputs + .memory_id_to_big_inputs + .iter() + .for_each(|inputs| { + memory_id_to_big_state.add_inputs(&inputs[..n_calls]); + }); + sub_components_inputs + .verify_instruction_inputs + .iter() + .for_each(|inputs| { + verify_instruction_state.add_inputs(&inputs[..n_calls]); + }); tree_builder.extend_evals( trace @@ -102,33 +106,40 @@ impl ClaimGenerator { }, ) } + + pub fn add_inputs(&mut self, inputs: &[InputType]) { + self.inputs.extend(inputs); + } } pub struct SubComponentInputs { - pub memoryaddresstoid_inputs: [Vec; 3], - pub memoryidtobig_inputs: [Vec; 3], + pub memory_address_to_id_inputs: [Vec; 2], + pub memory_id_to_big_inputs: [Vec; 2], pub verify_instruction_inputs: [Vec; 1], } impl SubComponentInputs { #[allow(unused_variables)] fn with_capacity(capacity: usize) -> Self { Self { - memoryaddresstoid_inputs: std::array::from_fn(|_| Vec::with_capacity(capacity)), - memoryidtobig_inputs: std::array::from_fn(|_| Vec::with_capacity(capacity)), - verify_instruction_inputs: std::array::from_fn(|_| Vec::with_capacity(capacity)), + memory_address_to_id_inputs: [ + Vec::with_capacity(capacity), + Vec::with_capacity(capacity), + ], + memory_id_to_big_inputs: [Vec::with_capacity(capacity), Vec::with_capacity(capacity)], + verify_instruction_inputs: [Vec::with_capacity(capacity)], } } fn bit_reverse_coset_to_circle_domain_order(&mut self) { - for vec in self.memoryaddresstoid_inputs.iter_mut() { - bit_reverse_coset_to_circle_domain_order(vec); - } - for vec in self.memoryidtobig_inputs.iter_mut() { - bit_reverse_coset_to_circle_domain_order(vec); - } - for vec in self.verify_instruction_inputs.iter_mut() { - bit_reverse_coset_to_circle_domain_order(vec); - } + self.memory_address_to_id_inputs + .iter_mut() + .for_each(|vec| bit_reverse_coset_to_circle_domain_order(vec)); + self.memory_id_to_big_inputs + .iter_mut() + .for_each(|vec| bit_reverse_coset_to_circle_domain_order(vec)); + self.verify_instruction_inputs + .iter_mut() + .for_each(|vec| bit_reverse_coset_to_circle_domain_order(vec)); } } @@ -138,14 +149,14 @@ impl SubComponentInputs { #[allow(non_snake_case)] pub fn write_trace_simd( inputs: Vec, - memoryaddresstoid_state: &mut memory::memory_address_to_id::ClaimGenerator, - memoryidtobig_state: &mut memory::memory_id_to_big::ClaimGenerator, + memory_address_to_id_state: &mut memory_address_to_id::ClaimGenerator, + memory_id_to_big_state: &mut memory_id_to_big::ClaimGenerator, ) -> ( [BaseColumn; N_TRACE_COLUMNS], SubComponentInputs, LookupData, ) { - let capacity = (inputs.len() * N_LANES).next_power_of_two(); + const N_TRACE_COLUMNS: usize = 11; let mut trace: [_; N_TRACE_COLUMNS] = std::array::from_fn(|_| Col::::zeros(inputs.len() * N_LANES)); @@ -164,47 +175,35 @@ pub fn write_trace_simd( inputs .into_iter() .enumerate() - .for_each(|(row_index, retopcode_input)| { - let tmp_0 = retopcode_input; - let input_pc_col0 = tmp_0.pc; + .for_each(|(row_index, ret_opcode_input)| { + let input_tmp_1655 = ret_opcode_input; + let input_pc_col0 = input_tmp_1655.pc; trace[0].data[row_index] = input_pc_col0; - let input_ap_col1 = tmp_0.ap; + let input_ap_col1 = input_tmp_1655.ap; trace[1].data[row_index] = input_ap_col1; - let input_fp_col2 = tmp_0.fp; + let input_fp_col2 = input_tmp_1655.fp; trace[2].data[row_index] = input_fp_col2; - sub_components_inputs.memoryaddresstoid_inputs[0].extend(input_pc_col0.to_array()); - let tmp_55 = memoryaddresstoid_state.deduce_output(input_pc_col0); - sub_components_inputs.memoryidtobig_inputs[0].extend(tmp_55.to_array()); - let tmp_56 = memoryidtobig_state.deduce_output(tmp_55); + + // decode_instruction_c94bba24192ecf68. + + let memory_address_to_id_value_tmp_1659 = + memory_address_to_id_state.deduce_output(input_pc_col0); + let memory_id_to_big_value_tmp_1660 = + memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_1659); + sub_components_inputs.verify_instruction_inputs[0].extend( ( input_pc_col0, + [M31_32766, M31_32767, M31_32767], [ - PackedM31::broadcast(M31(32766)), - PackedM31::broadcast(M31(32767)), - PackedM31::broadcast(M31(32767)), - ], - [ - PackedM31::broadcast(M31(1)), - PackedM31::broadcast(M31(1)), - PackedM31::broadcast(M31(0)), - PackedM31::broadcast(M31(1)), - PackedM31::broadcast(M31(0)), - PackedM31::broadcast(M31(0)), - PackedM31::broadcast(M31(0)), - PackedM31::broadcast(M31(1)), - PackedM31::broadcast(M31(0)), - PackedM31::broadcast(M31(0)), - PackedM31::broadcast(M31(0)), - PackedM31::broadcast(M31(0)), - PackedM31::broadcast(M31(0)), - PackedM31::broadcast(M31(1)), - PackedM31::broadcast(M31(0)), + M31_1, M31_1, M31_0, M31_1, M31_0, M31_0, M31_0, M31_1, M31_0, M31_0, + M31_0, M31_0, M31_0, M31_1, M31_0, ], ) .unpack(), ); - lookup_data.verify_instruction[0].push([ + + lookup_data.verifyinstruction[0].push([ input_pc_col0, M31_32766, M31_32767, @@ -225,20 +224,27 @@ pub fn write_trace_simd( M31_1, M31_0, ]); - sub_components_inputs.memoryaddresstoid_inputs[1] - .extend(((input_fp_col2) - (M31_1)).to_array()); - let tmp_60 = memoryaddresstoid_state.deduce_output(((input_fp_col2) - (M31_1))); - let next_pc_id_col3 = tmp_60; + + // read_positive_num_bits_27. + + let memory_address_to_id_value_tmp_1662 = + memory_address_to_id_state.deduce_output(((input_fp_col2) - (M31_1))); + let memory_id_to_big_value_tmp_1663 = + memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_1662); + let next_pc_id_col3 = memory_address_to_id_value_tmp_1662; trace[3].data[row_index] = next_pc_id_col3; + sub_components_inputs.memory_address_to_id_inputs[0] + .extend(((input_fp_col2) - (M31_1)).unpack()); + lookup_data.memoryaddresstoid[0].push([((input_fp_col2) - (M31_1)), next_pc_id_col3]); - sub_components_inputs.memoryidtobig_inputs[1].extend(next_pc_id_col3.to_array()); - let tmp_61 = memoryidtobig_state.deduce_output(next_pc_id_col3); - let next_pc_limb_0_col4 = tmp_61.get_m31(0); + let next_pc_limb_0_col4 = memory_id_to_big_value_tmp_1663.get_m31(0); trace[4].data[row_index] = next_pc_limb_0_col4; - let next_pc_limb_1_col5 = tmp_61.get_m31(1); + let next_pc_limb_1_col5 = memory_id_to_big_value_tmp_1663.get_m31(1); trace[5].data[row_index] = next_pc_limb_1_col5; - let next_pc_limb_2_col6 = tmp_61.get_m31(2); + let next_pc_limb_2_col6 = memory_id_to_big_value_tmp_1663.get_m31(2); trace[6].data[row_index] = next_pc_limb_2_col6; + sub_components_inputs.memory_id_to_big_inputs[0].extend(next_pc_id_col3.unpack()); + lookup_data.memoryidtobig[0].push([ next_pc_id_col3, next_pc_limb_0_col4, @@ -270,20 +276,27 @@ pub fn write_trace_simd( M31_0, M31_0, ]); - sub_components_inputs.memoryaddresstoid_inputs[2] - .extend(((input_fp_col2) - (M31_2)).to_array()); - let tmp_62 = memoryaddresstoid_state.deduce_output(((input_fp_col2) - (M31_2))); - let next_fp_id_col7 = tmp_62; + + // read_positive_num_bits_27. + + let memory_address_to_id_value_tmp_1664 = + memory_address_to_id_state.deduce_output(((input_fp_col2) - (M31_2))); + let memory_id_to_big_value_tmp_1665 = + memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_1664); + let next_fp_id_col7 = memory_address_to_id_value_tmp_1664; trace[7].data[row_index] = next_fp_id_col7; + sub_components_inputs.memory_address_to_id_inputs[1] + .extend(((input_fp_col2) - (M31_2)).unpack()); + lookup_data.memoryaddresstoid[1].push([((input_fp_col2) - (M31_2)), next_fp_id_col7]); - sub_components_inputs.memoryidtobig_inputs[2].extend(next_fp_id_col7.to_array()); - let tmp_63 = memoryidtobig_state.deduce_output(next_fp_id_col7); - let next_fp_limb_0_col8 = tmp_63.get_m31(0); + let next_fp_limb_0_col8 = memory_id_to_big_value_tmp_1665.get_m31(0); trace[8].data[row_index] = next_fp_limb_0_col8; - let next_fp_limb_1_col9 = tmp_63.get_m31(1); + let next_fp_limb_1_col9 = memory_id_to_big_value_tmp_1665.get_m31(1); trace[9].data[row_index] = next_fp_limb_1_col9; - let next_fp_limb_2_col10 = tmp_63.get_m31(2); + let next_fp_limb_2_col10 = memory_id_to_big_value_tmp_1665.get_m31(2); trace[10].data[row_index] = next_fp_limb_2_col10; + sub_components_inputs.memory_id_to_big_inputs[1].extend(next_fp_id_col7.unpack()); + lookup_data.memoryidtobig[1].push([ next_fp_id_col7, next_fp_limb_0_col8, @@ -315,6 +328,7 @@ pub fn write_trace_simd( M31_0, M31_0, ]); + lookup_data.opcodes[0].push([input_pc_col0, input_ap_col1, input_fp_col2]); lookup_data.opcodes[1].push([ (((next_pc_limb_0_col4) + ((next_pc_limb_1_col5) * (M31_512))) @@ -328,12 +342,11 @@ pub fn write_trace_simd( (trace, sub_components_inputs, lookup_data) } -#[derive(Default)] pub struct LookupData { pub memoryaddresstoid: [Vec<[PackedM31; 2]>; 2], pub memoryidtobig: [Vec<[PackedM31; 29]>; 2], - pub verify_instruction: [Vec<[PackedM31; 19]>; 1], pub opcodes: [Vec<[PackedM31; 3]>; 2], + pub verifyinstruction: [Vec<[PackedM31; 19]>; 1], } impl LookupData { #[allow(unused_variables)] @@ -341,13 +354,12 @@ impl LookupData { Self { memoryaddresstoid: [Vec::with_capacity(capacity), Vec::with_capacity(capacity)], memoryidtobig: [Vec::with_capacity(capacity), Vec::with_capacity(capacity)], - verify_instruction: [Vec::with_capacity(capacity)], opcodes: [Vec::with_capacity(capacity), Vec::with_capacity(capacity)], + verifyinstruction: [Vec::with_capacity(capacity)], } } } -#[derive(Default)] pub struct InteractionClaimGenerator { pub n_calls: usize, pub lookup_data: LookupData, @@ -358,16 +370,16 @@ impl InteractionClaimGenerator { tree_builder: &mut TreeBuilder<'_, '_, SimdBackend, Blake2sMerkleChannel>, memoryaddresstoid_lookup_elements: &relations::MemoryAddressToId, memoryidtobig_lookup_elements: &relations::MemoryIdToBig, - verify_instruction_lookup_elements: &relations::VerifyInstruction, opcodes_lookup_elements: &relations::Opcodes, + verifyinstruction_lookup_elements: &relations::VerifyInstruction, ) -> InteractionClaim { let log_size = std::cmp::max(self.n_calls.next_power_of_two().ilog2(), LOG_N_LANES); let mut logup_gen = LogupTraceGenerator::new(log_size); let mut col_gen = logup_gen.new_col(); - let lookup_row = &self.lookup_data.verify_instruction[0]; + let lookup_row = &self.lookup_data.verifyinstruction[0]; for (i, lookup_values) in lookup_row.iter().enumerate() { - let denom = verify_instruction_lookup_elements.combine(lookup_values); + let denom = verifyinstruction_lookup_elements.combine(lookup_values); col_gen.write_frac(i, PackedQM31::one(), denom); } col_gen.finalize_col(); @@ -404,8 +416,6 @@ impl InteractionClaimGenerator { } col_gen.finalize_col(); - // VM Constraint. - let mut col_gen = logup_gen.new_col(); let lookup_row = &self.lookup_data.opcodes[0]; for (i, lookup_values) in lookup_row.iter().enumerate() { @@ -422,13 +432,18 @@ impl InteractionClaimGenerator { } col_gen.finalize_col(); - let (trace, [total_sum, claimed_sum]) = - logup_gen.finalize_at([(1 << log_size) - 1, self.n_calls - 1]); + let (trace, total_sum, claimed_sum) = if self.n_calls == 1 << log_size { + let (trace, claimed_sum) = logup_gen.finalize_last(); + (trace, claimed_sum, None) + } else { + let (trace, [total_sum, claimed_sum]) = + logup_gen.finalize_at([(1 << log_size) - 1, self.n_calls - 1]); + (trace, total_sum, Some((claimed_sum, self.n_calls - 1))) + }; tree_builder.extend_evals(trace); InteractionClaim { - total_sum, - claimed_sum: Some((claimed_sum, self.n_calls - 1)), + logup_sums: (total_sum, claimed_sum), } } } diff --git a/stwo_cairo_prover/crates/prover/src/components/verify_instruction/component.rs b/stwo_cairo_prover/crates/prover/src/components/verify_instruction/component.rs index d3605443..102d8b70 100644 --- a/stwo_cairo_prover/crates/prover/src/components/verify_instruction/component.rs +++ b/stwo_cairo_prover/crates/prover/src/components/verify_instruction/component.rs @@ -1,55 +1,27 @@ #![allow(non_camel_case_types)] #![allow(unused_imports)] -use std::ops::{Mul, Sub}; - use num_traits::{One, Zero}; use serde::{Deserialize, Serialize}; -use stwo_prover::constraint_framework::logup::{ClaimedPrefixSum, LogupAtRow, LookupElements}; -use stwo_prover::constraint_framework::preprocessed_columns::PreprocessedColumn; +use stwo_prover::constraint_framework::logup::{LogupAtRow, LogupSums, LookupElements}; use stwo_prover::constraint_framework::{ - EvalAtRow, FrameworkComponent, FrameworkEval, RelationEntry, INTERACTION_TRACE_IDX, + EvalAtRow, FrameworkComponent, FrameworkEval, RelationEntry, }; -use stwo_prover::core::backend::simd::m31::PackedM31; +use stwo_prover::core::backend::simd::m31::LOG_N_LANES; use stwo_prover::core::channel::Channel; use stwo_prover::core::fields::m31::M31; use stwo_prover::core::fields::qm31::SecureField; use stwo_prover::core::fields::secure_column::SECURE_EXTENSION_DEGREE; -use stwo_prover::core::lookups::utils::Fraction; use stwo_prover::core::pcs::TreeVec; -use stwo_prover::relation; -use crate::components::range_check_vector::{range_check_4_3, range_check_7_2_5}; -use crate::components::{memory, verify_instruction}; use crate::relations; -relation!(RelationElements, 30); - pub struct Eval { pub claim: Claim, pub memoryaddresstoid_lookup_elements: relations::MemoryAddressToId, pub memoryidtobig_lookup_elements: relations::MemoryIdToBig, pub rangecheck_4_3_lookup_elements: relations::RangeCheck_4_3, - pub range_check_7_2_5_lookup_elements: relations::RangeCheck_7_2_5, - pub verify_instruction_lookup_elements: relations::VerifyInstruction, -} -impl Eval { - pub fn new( - claim: Claim, - memoryaddresstoid_lookup_elements: relations::MemoryAddressToId, - memoryidtobig_lookup_elements: relations::MemoryIdToBig, - rangecheck_4_3_lookup_elements: relations::RangeCheck_4_3, - range_check_7_2_5_lookup_elements: relations::RangeCheck_7_2_5, - verify_instruction_lookup_elements: relations::VerifyInstruction, - ) -> Self { - Self { - claim, - memoryaddresstoid_lookup_elements, - memoryidtobig_lookup_elements, - rangecheck_4_3_lookup_elements, - range_check_7_2_5_lookup_elements, - verify_instruction_lookup_elements, - } - } + pub rangecheck_7_2_5_lookup_elements: relations::RangeCheck_7_2_5, + pub verifyinstruction_lookup_elements: relations::VerifyInstruction, } #[derive(Copy, Clone, Serialize, Deserialize)] @@ -58,12 +30,12 @@ pub struct Claim { } impl Claim { pub fn log_sizes(&self) -> TreeVec> { - let log_size = self.n_calls.next_power_of_two().ilog2(); - let preprocesed_trace_log_sizes = vec![log_size]; + let log_size = std::cmp::max(self.n_calls.next_power_of_two().ilog2(), LOG_N_LANES); let trace_log_sizes = vec![log_size; 28]; let interaction_log_sizes = vec![log_size; SECURE_EXTENSION_DEGREE * 5]; + let preprocessed_log_sizes = vec![log_size]; TreeVec::new(vec![ - preprocesed_trace_log_sizes, + preprocessed_log_sizes, trace_log_sizes, interaction_log_sizes, ]) @@ -76,12 +48,16 @@ impl Claim { #[derive(Copy, Clone, Serialize, Deserialize)] pub struct InteractionClaim { - pub total_sum: SecureField, - pub claimed_sum: Option, + pub logup_sums: LogupSums, } impl InteractionClaim { pub fn mix_into(&self, channel: &mut impl Channel) { - channel.mix_felts(&[self.total_sum]); + let (total_sum, claimed_sum) = self.logup_sums; + channel.mix_felts(&[total_sum]); + if let Some(claimed_sum) = claimed_sum { + channel.mix_felts(&[claimed_sum.0]); + channel.mix_u64(claimed_sum.1 as u64); + } } } @@ -89,7 +65,7 @@ pub type Component = FrameworkComponent; impl FrameworkEval for Eval { fn log_size(&self) -> u32 { - self.claim.n_calls.next_power_of_two().ilog2() + std::cmp::max(self.claim.n_calls.next_power_of_two().ilog2(), LOG_N_LANES) } fn max_constraint_log_degree_bound(&self) -> u32 { @@ -141,22 +117,28 @@ impl FrameworkEval for Eval { let offset2_mid_col25 = eval.next_trace_mask(); let offset2_high_col26 = eval.next_trace_mask(); let instruction_id_col27 = eval.next_trace_mask(); + + // encode_offsets. + + // Reconstructed offset0 is correct. eval.add_constraint( ((offset0_low_col19.clone() + (offset0_mid_col20.clone() * M31_512.clone())) - input_col1.clone()), ); + // Reconstructed offset1 is correct. eval.add_constraint( (((offset1_low_col21.clone() + (offset1_mid_col22.clone() * M31_4.clone())) + (offset1_high_col23.clone() * M31_2048.clone())) - input_col2.clone()), ); + // Reconstructed offset2 is correct. eval.add_constraint( (((offset2_low_col24.clone() + (offset2_mid_col25.clone() * M31_16.clone())) + (offset2_high_col26.clone() * M31_8192.clone())) - input_col3.clone()), ); eval.add_to_relation(&[RelationEntry::new( - &self.range_check_7_2_5_lookup_elements, + &self.rangecheck_7_2_5_lookup_elements, E::EF::one(), &[ offset0_mid_col20.clone(), @@ -170,21 +152,42 @@ impl FrameworkEval for Eval { E::EF::one(), &[offset2_low_col24.clone(), offset2_high_col26.clone()], )]); + + // encode_flags. + + // Flag dst_base_fp is a bit. eval.add_constraint((input_col4.clone() * (M31_1.clone() - input_col4.clone()))); + // Flag op0_base_fp is a bit. eval.add_constraint((input_col5.clone() * (M31_1.clone() - input_col5.clone()))); + // Flag op1_imm is a bit. eval.add_constraint((input_col6.clone() * (M31_1.clone() - input_col6.clone()))); + // Flag op1_base_fp is a bit. eval.add_constraint((input_col7.clone() * (M31_1.clone() - input_col7.clone()))); + // Flag op1_base_ap is a bit. eval.add_constraint((input_col8.clone() * (M31_1.clone() - input_col8.clone()))); + // Flag res_add is a bit. eval.add_constraint((input_col9.clone() * (M31_1.clone() - input_col9.clone()))); + // Flag res_mul is a bit. eval.add_constraint((input_col10.clone() * (M31_1.clone() - input_col10.clone()))); + // Flag pc_update_jump is a bit. eval.add_constraint((input_col11.clone() * (M31_1.clone() - input_col11.clone()))); + // Flag pc_update_jump_rel is a bit. eval.add_constraint((input_col12.clone() * (M31_1.clone() - input_col12.clone()))); + // Flag pc_update_jnz is a bit. eval.add_constraint((input_col13.clone() * (M31_1.clone() - input_col13.clone()))); + // Flag ap_update_add is a bit. eval.add_constraint((input_col14.clone() * (M31_1.clone() - input_col14.clone()))); + // Flag ap_update_add_1 is a bit. eval.add_constraint((input_col15.clone() * (M31_1.clone() - input_col15.clone()))); + // Flag opcode_call is a bit. eval.add_constraint((input_col16.clone() * (M31_1.clone() - input_col16.clone()))); + // Flag opcode_ret is a bit. eval.add_constraint((input_col17.clone() * (M31_1.clone() - input_col17.clone()))); + // Flag opcode_assert_eq is a bit. eval.add_constraint((input_col18.clone() * (M31_1.clone() - input_col18.clone()))); + + // mem_verify. + eval.add_to_relation(&[RelationEntry::new( &self.memoryaddresstoid_lookup_elements, E::EF::one(), @@ -221,7 +224,7 @@ impl FrameworkEval for Eval { )]); eval.add_to_relation(&[RelationEntry::new( - &self.verify_instruction_lookup_elements, + &self.verifyinstruction_lookup_elements, -E::EF::one(), &[ input_col0.clone(), diff --git a/stwo_cairo_prover/crates/prover/src/components/verify_instruction/mod.rs b/stwo_cairo_prover/crates/prover/src/components/verify_instruction/mod.rs index 74f11375..effad944 100644 --- a/stwo_cairo_prover/crates/prover/src/components/verify_instruction/mod.rs +++ b/stwo_cairo_prover/crates/prover/src/components/verify_instruction/mod.rs @@ -1,5 +1,5 @@ pub mod component; pub mod prover; -pub use component::{Claim, Component, Eval, InteractionClaim, RelationElements}; +pub use component::{Claim, Component, Eval, InteractionClaim}; pub use prover::{ClaimGenerator, InputType, InteractionClaimGenerator, PackedInputType}; diff --git a/stwo_cairo_prover/crates/prover/src/components/verify_instruction/prover.rs b/stwo_cairo_prover/crates/prover/src/components/verify_instruction/prover.rs index c8f98233..f9930f58 100644 --- a/stwo_cairo_prover/crates/prover/src/components/verify_instruction/prover.rs +++ b/stwo_cairo_prover/crates/prover/src/components/verify_instruction/prover.rs @@ -10,35 +10,41 @@ use stwo_prover::core::air::Component; use stwo_prover::core::backend::simd::column::BaseColumn; use stwo_prover::core::backend::simd::conversion::Unpack; use stwo_prover::core::backend::simd::m31::{PackedM31, LOG_N_LANES, N_LANES}; -use stwo_prover::core::backend::simd::qm31::{PackedQM31, PackedSecureField}; +use stwo_prover::core::backend::simd::qm31::PackedQM31; use stwo_prover::core::backend::simd::SimdBackend; use stwo_prover::core::backend::{Col, Column}; use stwo_prover::core::fields::m31::M31; -use stwo_prover::core::fields::qm31::{SecureField, QM31}; use stwo_prover::core::pcs::TreeBuilder; use stwo_prover::core::poly::circle::{CanonicCoset, CircleEvaluation}; use stwo_prover::core::poly::BitReversedOrder; -use stwo_prover::core::utils::{bit_reverse, bit_reverse_coset_to_circle_domain_order}; +use stwo_prover::core::utils::bit_reverse_coset_to_circle_domain_order; use stwo_prover::core::vcs::blake2_merkle::{Blake2sMerkleChannel, Blake2sMerkleHasher}; -use super::component::{Claim, InteractionClaim, RelationElements}; -use crate::components::range_check_vector::{range_check_4_3, range_check_7_2_5}; -use crate::components::{memory, pack_values, verify_instruction}; +use super::component::{Claim, InteractionClaim}; +use crate::components::{ + memory_address_to_id, memory_id_to_big, pack_values, range_check_4_3, range_check_7_2_5, +}; use crate::relations; -pub type PackedInputType = (PackedM31, [PackedM31; 3], [PackedM31; 15]); pub type InputType = (M31, [M31; 3], [M31; 15]); +pub type PackedInputType = (PackedM31, [PackedM31; 3], [PackedM31; 15]); +const N_TRACE_COLUMNS: usize = 28; #[derive(Default)] pub struct ClaimGenerator { pub inputs: Vec, } impl ClaimGenerator { + pub fn new(inputs: Vec) -> Self { + Self { inputs } + } + pub fn write_trace( mut self, tree_builder: &mut TreeBuilder<'_, '_, SimdBackend, Blake2sMerkleChannel>, - memoryaddresstoid_state: &mut memory::memory_address_to_id::ClaimGenerator, - rangecheck_4_3_state: &mut range_check_4_3::ClaimGenerator, + memory_address_to_id_state: &mut memory_address_to_id::ClaimGenerator, + memory_id_to_big_state: &mut memory_id_to_big::ClaimGenerator, + range_check_4_3_state: &mut range_check_4_3::ClaimGenerator, range_check_7_2_5_state: &mut range_check_7_2_5::ClaimGenerator, ) -> (Claim, InteractionClaimGenerator) { let n_calls = self.inputs.len(); @@ -51,32 +57,52 @@ impl ClaimGenerator { bit_reverse_coset_to_circle_domain_order(&mut self.inputs); } - let simd_inputs = pack_values(&self.inputs); + let packed_inputs = pack_values(&self.inputs); let (trace, mut sub_components_inputs, lookup_data) = - write_trace_simd(simd_inputs, memoryaddresstoid_state); + write_trace_simd(packed_inputs, memory_address_to_id_state); if need_padding { sub_components_inputs.bit_reverse_coset_to_circle_domain_order(); } + sub_components_inputs + .range_check_4_3_inputs + .iter() + .for_each(|inputs| { + range_check_4_3_state.add_inputs(&inputs[..n_calls]); + }); + sub_components_inputs + .range_check_7_2_5_inputs + .iter() + .for_each(|inputs| { + range_check_7_2_5_state.add_inputs(&inputs[..n_calls]); + }); + sub_components_inputs + .memory_address_to_id_inputs + .iter() + .for_each(|inputs| { + memory_address_to_id_state.add_inputs(&inputs[..n_calls]); + }); + sub_components_inputs + .memory_id_to_big_inputs + .iter() + .for_each(|inputs| { + memory_id_to_big_state.add_inputs(&inputs[..n_calls]); + }); - rangecheck_4_3_state.add_inputs(&sub_components_inputs.rangecheck_4_3_inputs[..n_calls]); - range_check_7_2_5_state - .add_inputs(&sub_components_inputs.range_check_7_2_5_inputs[..n_calls]); - - let trace = trace - .into_iter() - .map(|eval| { - let domain = CanonicCoset::new( - eval.len() - .checked_ilog2() - .expect("Input is not a power of 2!"), - ) - .circle_domain(); - CircleEvaluation::::new(domain, eval) - }) - .collect_vec(); - - tree_builder.extend_evals(trace); + tree_builder.extend_evals( + trace + .into_iter() + .map(|eval| { + let domain = CanonicCoset::new( + eval.len() + .checked_ilog2() + .expect("Input is not a power of 2!"), + ) + .circle_domain(); + CircleEvaluation::::new(domain, eval) + }) + .collect_vec(), + ); ( Claim { n_calls }, @@ -88,33 +114,40 @@ impl ClaimGenerator { } pub fn add_inputs(&mut self, inputs: &[InputType]) { - inputs.iter().for_each(|input| self.inputs.push(*input)); - } - - pub fn add_single_input(&mut self, input: InputType) { - self.inputs.push(input); + self.inputs.extend(inputs); } } pub struct SubComponentInputs { - pub memoryaddresstoid_inputs: Vec, - pub rangecheck_4_3_inputs: Vec, - pub range_check_7_2_5_inputs: Vec, + pub range_check_4_3_inputs: [Vec; 1], + pub range_check_7_2_5_inputs: [Vec; 1], + pub memory_address_to_id_inputs: [Vec; 1], + pub memory_id_to_big_inputs: [Vec; 1], } impl SubComponentInputs { #[allow(unused_variables)] fn with_capacity(capacity: usize) -> Self { Self { - memoryaddresstoid_inputs: Vec::with_capacity(capacity), - rangecheck_4_3_inputs: Vec::with_capacity(capacity), - range_check_7_2_5_inputs: Vec::with_capacity(capacity), + range_check_4_3_inputs: [Vec::with_capacity(capacity)], + range_check_7_2_5_inputs: [Vec::with_capacity(capacity)], + memory_address_to_id_inputs: [Vec::with_capacity(capacity)], + memory_id_to_big_inputs: [Vec::with_capacity(capacity)], } } fn bit_reverse_coset_to_circle_domain_order(&mut self) { - bit_reverse_coset_to_circle_domain_order(&mut self.memoryaddresstoid_inputs); - bit_reverse_coset_to_circle_domain_order(&mut self.rangecheck_4_3_inputs); - bit_reverse_coset_to_circle_domain_order(&mut self.range_check_7_2_5_inputs); + self.range_check_4_3_inputs + .iter_mut() + .for_each(|vec| bit_reverse_coset_to_circle_domain_order(vec)); + self.range_check_7_2_5_inputs + .iter_mut() + .for_each(|vec| bit_reverse_coset_to_circle_domain_order(vec)); + self.memory_address_to_id_inputs + .iter_mut() + .for_each(|vec| bit_reverse_coset_to_circle_domain_order(vec)); + self.memory_id_to_big_inputs + .iter_mut() + .for_each(|vec| bit_reverse_coset_to_circle_domain_order(vec)); } } @@ -124,10 +157,14 @@ impl SubComponentInputs { #[allow(non_snake_case)] pub fn write_trace_simd( inputs: Vec, - memoryaddresstoid_state: &mut memory::memory_address_to_id::ClaimGenerator, -) -> (Vec, SubComponentInputs, LookupData) { + memory_address_to_id_state: &mut memory_address_to_id::ClaimGenerator, +) -> ( + [BaseColumn; N_TRACE_COLUMNS], + SubComponentInputs, + LookupData, +) { const N_TRACE_COLUMNS: usize = 28; - let mut trace_values: [_; N_TRACE_COLUMNS] = + let mut trace: [_; N_TRACE_COLUMNS] = std::array::from_fn(|_| Col::::zeros(inputs.len() * N_LANES)); let mut lookup_data = LookupData::with_capacity(inputs.len()); @@ -157,7 +194,7 @@ pub fn write_trace_simd( .into_iter() .enumerate() .for_each(|(row_index, verify_instruction_input)| { - let tmp_0 = ( + let input_tmp_155 = ( verify_instruction_input.0, [ verify_instruction_input.1[0], @@ -182,87 +219,101 @@ pub fn write_trace_simd( verify_instruction_input.2[14], ], ); - let input_col0 = tmp_0.0; - trace_values[0].data[row_index] = input_col0; - let input_col1 = tmp_0.1[0]; - trace_values[1].data[row_index] = input_col1; - let input_col2 = tmp_0.1[1]; - trace_values[2].data[row_index] = input_col2; - let input_col3 = tmp_0.1[2]; - trace_values[3].data[row_index] = input_col3; - let input_col4 = tmp_0.2[0]; - trace_values[4].data[row_index] = input_col4; - let input_col5 = tmp_0.2[1]; - trace_values[5].data[row_index] = input_col5; - let input_col6 = tmp_0.2[2]; - trace_values[6].data[row_index] = input_col6; - let input_col7 = tmp_0.2[3]; - trace_values[7].data[row_index] = input_col7; - let input_col8 = tmp_0.2[4]; - trace_values[8].data[row_index] = input_col8; - let input_col9 = tmp_0.2[5]; - trace_values[9].data[row_index] = input_col9; - let input_col10 = tmp_0.2[6]; - trace_values[10].data[row_index] = input_col10; - let input_col11 = tmp_0.2[7]; - trace_values[11].data[row_index] = input_col11; - let input_col12 = tmp_0.2[8]; - trace_values[12].data[row_index] = input_col12; - let input_col13 = tmp_0.2[9]; - trace_values[13].data[row_index] = input_col13; - let input_col14 = tmp_0.2[10]; - trace_values[14].data[row_index] = input_col14; - let input_col15 = tmp_0.2[11]; - trace_values[15].data[row_index] = input_col15; - let input_col16 = tmp_0.2[12]; - trace_values[16].data[row_index] = input_col16; - let input_col17 = tmp_0.2[13]; - trace_values[17].data[row_index] = input_col17; - let input_col18 = tmp_0.2[14]; - trace_values[18].data[row_index] = input_col18; - let tmp_11 = ((PackedUInt16::from_m31(input_col1)) & (UInt16_511)); - let offset0_low_col19 = tmp_11.as_m31(); - trace_values[19].data[row_index] = offset0_low_col19; - let tmp_12 = ((PackedUInt16::from_m31(input_col1)) >> (UInt16_9)); - let offset0_mid_col20 = tmp_12.as_m31(); - trace_values[20].data[row_index] = offset0_mid_col20; - let tmp_13 = ((PackedUInt16::from_m31(input_col2)) & (UInt16_3)); - let offset1_low_col21 = tmp_13.as_m31(); - trace_values[21].data[row_index] = offset1_low_col21; - let tmp_14 = (((PackedUInt16::from_m31(input_col2)) >> (UInt16_2)) & (UInt16_511)); - let offset1_mid_col22 = tmp_14.as_m31(); - trace_values[22].data[row_index] = offset1_mid_col22; - let tmp_15 = ((PackedUInt16::from_m31(input_col2)) >> (UInt16_11)); - let offset1_high_col23 = tmp_15.as_m31(); - trace_values[23].data[row_index] = offset1_high_col23; - let tmp_16 = ((PackedUInt16::from_m31(input_col3)) & (UInt16_15)); - let offset2_low_col24 = tmp_16.as_m31(); - trace_values[24].data[row_index] = offset2_low_col24; - let tmp_17 = (((PackedUInt16::from_m31(input_col3)) >> (UInt16_4)) & (UInt16_511)); - let offset2_mid_col25 = tmp_17.as_m31(); - trace_values[25].data[row_index] = offset2_mid_col25; - let tmp_18 = ((PackedUInt16::from_m31(input_col3)) >> (UInt16_13)); - let offset2_high_col26 = tmp_18.as_m31(); - trace_values[26].data[row_index] = offset2_high_col26; - sub_components_inputs - .range_check_7_2_5_inputs + let input_col0 = input_tmp_155.0; + trace[0].data[row_index] = input_col0; + let input_col1 = input_tmp_155.1[0]; + trace[1].data[row_index] = input_col1; + let input_col2 = input_tmp_155.1[1]; + trace[2].data[row_index] = input_col2; + let input_col3 = input_tmp_155.1[2]; + trace[3].data[row_index] = input_col3; + let input_col4 = input_tmp_155.2[0]; + trace[4].data[row_index] = input_col4; + let input_col5 = input_tmp_155.2[1]; + trace[5].data[row_index] = input_col5; + let input_col6 = input_tmp_155.2[2]; + trace[6].data[row_index] = input_col6; + let input_col7 = input_tmp_155.2[3]; + trace[7].data[row_index] = input_col7; + let input_col8 = input_tmp_155.2[4]; + trace[8].data[row_index] = input_col8; + let input_col9 = input_tmp_155.2[5]; + trace[9].data[row_index] = input_col9; + let input_col10 = input_tmp_155.2[6]; + trace[10].data[row_index] = input_col10; + let input_col11 = input_tmp_155.2[7]; + trace[11].data[row_index] = input_col11; + let input_col12 = input_tmp_155.2[8]; + trace[12].data[row_index] = input_col12; + let input_col13 = input_tmp_155.2[9]; + trace[13].data[row_index] = input_col13; + let input_col14 = input_tmp_155.2[10]; + trace[14].data[row_index] = input_col14; + let input_col15 = input_tmp_155.2[11]; + trace[15].data[row_index] = input_col15; + let input_col16 = input_tmp_155.2[12]; + trace[16].data[row_index] = input_col16; + let input_col17 = input_tmp_155.2[13]; + trace[17].data[row_index] = input_col17; + let input_col18 = input_tmp_155.2[14]; + trace[18].data[row_index] = input_col18; + + // encode_offsets. + + let offset0_low_tmp_166 = ((PackedUInt16::from_m31(input_col1)) & (UInt16_511)); + let offset0_low_col19 = offset0_low_tmp_166.as_m31(); + trace[19].data[row_index] = offset0_low_col19; + let offset0_mid_tmp_167 = ((PackedUInt16::from_m31(input_col1)) >> (UInt16_9)); + let offset0_mid_col20 = offset0_mid_tmp_167.as_m31(); + trace[20].data[row_index] = offset0_mid_col20; + let offset1_low_tmp_168 = ((PackedUInt16::from_m31(input_col2)) & (UInt16_3)); + let offset1_low_col21 = offset1_low_tmp_168.as_m31(); + trace[21].data[row_index] = offset1_low_col21; + let offset1_mid_tmp_169 = + (((PackedUInt16::from_m31(input_col2)) >> (UInt16_2)) & (UInt16_511)); + let offset1_mid_col22 = offset1_mid_tmp_169.as_m31(); + trace[22].data[row_index] = offset1_mid_col22; + let offset1_high_tmp_170 = ((PackedUInt16::from_m31(input_col2)) >> (UInt16_11)); + let offset1_high_col23 = offset1_high_tmp_170.as_m31(); + trace[23].data[row_index] = offset1_high_col23; + let offset2_low_tmp_171 = ((PackedUInt16::from_m31(input_col3)) & (UInt16_15)); + let offset2_low_col24 = offset2_low_tmp_171.as_m31(); + trace[24].data[row_index] = offset2_low_col24; + let offset2_mid_tmp_172 = + (((PackedUInt16::from_m31(input_col3)) >> (UInt16_4)) & (UInt16_511)); + let offset2_mid_col25 = offset2_mid_tmp_172.as_m31(); + trace[25].data[row_index] = offset2_mid_col25; + let offset2_high_tmp_173 = ((PackedUInt16::from_m31(input_col3)) >> (UInt16_13)); + let offset2_high_col26 = offset2_high_tmp_173.as_m31(); + trace[26].data[row_index] = offset2_high_col26; + + sub_components_inputs.range_check_7_2_5_inputs[0] .extend([offset0_mid_col20, offset1_low_col21, offset1_high_col23].unpack()); - lookup_data.range_check_7_2_5[0].push([ + + lookup_data.rangecheck_7_2_5[0].push([ offset0_mid_col20, offset1_low_col21, offset1_high_col23, ]); - sub_components_inputs - .rangecheck_4_3_inputs + + sub_components_inputs.range_check_4_3_inputs[0] .extend([offset2_low_col24, offset2_high_col26].unpack()); + lookup_data.rangecheck_4_3[0].push([offset2_low_col24, offset2_high_col26]); - sub_components_inputs - .memoryaddresstoid_inputs - .extend(input_col0.unpack()); - let tmp_50 = memoryaddresstoid_state.deduce_output(input_col0); - let instruction_id_col27 = tmp_50; - trace_values[27].data[row_index] = instruction_id_col27; + + // encode_flags. + + // mem_verify. + + let memory_address_to_id_value_tmp_176 = + memory_address_to_id_state.deduce_output(input_col0); + let instruction_id_col27 = memory_address_to_id_value_tmp_176; + trace[27].data[row_index] = instruction_id_col27; + sub_components_inputs.memory_address_to_id_inputs[0].extend(input_col0.unpack()); + lookup_data.memoryaddresstoid[0].push([input_col0, instruction_id_col27]); + sub_components_inputs.memory_id_to_big_inputs[0].extend(instruction_id_col27.unpack()); + lookup_data.memoryidtobig[0].push([ instruction_id_col27, offset0_low_col19, @@ -306,7 +357,8 @@ pub fn write_trace_simd( M31_0, M31_0, ]); - lookup_data.verify_instruction[0].push([ + + lookup_data.verifyinstruction[0].push([ input_col0, input_col1, input_col2, @@ -329,16 +381,15 @@ pub fn write_trace_simd( ]); }); - (trace_values.to_vec(), sub_components_inputs, lookup_data) + (trace, sub_components_inputs, lookup_data) } -#[derive(Default)] pub struct LookupData { pub memoryaddresstoid: [Vec<[PackedM31; 2]>; 1], pub memoryidtobig: [Vec<[PackedM31; 29]>; 1], pub rangecheck_4_3: [Vec<[PackedM31; 2]>; 1], - pub range_check_7_2_5: [Vec<[PackedM31; 3]>; 1], - pub verify_instruction: [Vec<[PackedM31; 19]>; 1], + pub rangecheck_7_2_5: [Vec<[PackedM31; 3]>; 1], + pub verifyinstruction: [Vec<[PackedM31; 19]>; 1], } impl LookupData { #[allow(unused_variables)] @@ -347,13 +398,12 @@ impl LookupData { memoryaddresstoid: [Vec::with_capacity(capacity)], memoryidtobig: [Vec::with_capacity(capacity)], rangecheck_4_3: [Vec::with_capacity(capacity)], - range_check_7_2_5: [Vec::with_capacity(capacity)], - verify_instruction: [Vec::with_capacity(capacity)], + rangecheck_7_2_5: [Vec::with_capacity(capacity)], + verifyinstruction: [Vec::with_capacity(capacity)], } } } -#[derive(Default)] pub struct InteractionClaimGenerator { pub n_calls: usize, pub lookup_data: LookupData, @@ -365,16 +415,16 @@ impl InteractionClaimGenerator { memoryaddresstoid_lookup_elements: &relations::MemoryAddressToId, memoryidtobig_lookup_elements: &relations::MemoryIdToBig, rangecheck_4_3_lookup_elements: &relations::RangeCheck_4_3, - range_check_7_2_5_lookup_elements: &relations::RangeCheck_7_2_5, - verify_instruction_lookup_elements: &relations::VerifyInstruction, + rangecheck_7_2_5_lookup_elements: &relations::RangeCheck_7_2_5, + verifyinstruction_lookup_elements: &relations::VerifyInstruction, ) -> InteractionClaim { let log_size = std::cmp::max(self.n_calls.next_power_of_two().ilog2(), LOG_N_LANES); let mut logup_gen = LogupTraceGenerator::new(log_size); let mut col_gen = logup_gen.new_col(); - let lookup_row = &self.lookup_data.range_check_7_2_5[0]; + let lookup_row = &self.lookup_data.rangecheck_7_2_5[0]; for (i, lookup_values) in lookup_row.iter().enumerate() { - let denom = range_check_7_2_5_lookup_elements.combine(lookup_values); + let denom = rangecheck_7_2_5_lookup_elements.combine(lookup_values); col_gen.write_frac(i, PackedQM31::one(), denom); } col_gen.finalize_col(); @@ -404,20 +454,25 @@ impl InteractionClaimGenerator { col_gen.finalize_col(); let mut col_gen = logup_gen.new_col(); - let lookup_row = &self.lookup_data.verify_instruction[0]; + let lookup_row = &self.lookup_data.verifyinstruction[0]; for (i, lookup_values) in lookup_row.iter().enumerate() { - let denom = verify_instruction_lookup_elements.combine(lookup_values); + let denom = verifyinstruction_lookup_elements.combine(lookup_values); col_gen.write_frac(i, -PackedQM31::one(), denom); } col_gen.finalize_col(); - let (trace, [total_sum, claimed_sum]) = - logup_gen.finalize_at([(1 << log_size) - 1, self.n_calls - 1]); + let (trace, total_sum, claimed_sum) = if self.n_calls == 1 << log_size { + let (trace, claimed_sum) = logup_gen.finalize_last(); + (trace, claimed_sum, None) + } else { + let (trace, [total_sum, claimed_sum]) = + logup_gen.finalize_at([(1 << log_size) - 1, self.n_calls - 1]); + (trace, total_sum, Some((claimed_sum, self.n_calls - 1))) + }; tree_builder.extend_evals(trace); InteractionClaim { - total_sum, - claimed_sum: Some((claimed_sum, self.n_calls - 1)), + logup_sums: (total_sum, claimed_sum), } } }