From ab85e9e2c25046c8b967bcf3c4ff0a3c4e7bbf8f Mon Sep 17 00:00:00 2001 From: Ohad Agadi Date: Tue, 3 Dec 2024 13:27:14 +0200 Subject: [PATCH] mul --- .../prover/src/cairo_air/opcodes_air.rs | 180 +- .../crates/prover/src/components/mod.rs | 9 +- .../component.rs | 1669 ++++++++++++ .../mul_opcode_is_small_f_is_imm_f/mod.rs | 5 + .../mul_opcode_is_small_f_is_imm_f/prover.rs | 2280 +++++++++++++++++ .../component.rs | 1660 ++++++++++++ .../mul_opcode_is_small_f_is_imm_t/mod.rs | 5 + .../mul_opcode_is_small_f_is_imm_t/prover.rs | 2241 ++++++++++++++++ .../src/components/range_check_vector/mod.rs | 2 + .../prover/src/input/state_transitions.rs | 64 +- stwo_cairo_prover/crates/prover/src/lib.rs | 5 + .../crates/prover/src/relations/mod.rs | 2 + 12 files changed, 8091 insertions(+), 31 deletions(-) create mode 100644 stwo_cairo_prover/crates/prover/src/components/mul_opcode_is_small_f_is_imm_f/component.rs create mode 100644 stwo_cairo_prover/crates/prover/src/components/mul_opcode_is_small_f_is_imm_f/mod.rs create mode 100644 stwo_cairo_prover/crates/prover/src/components/mul_opcode_is_small_f_is_imm_f/prover.rs create mode 100644 stwo_cairo_prover/crates/prover/src/components/mul_opcode_is_small_f_is_imm_t/component.rs create mode 100644 stwo_cairo_prover/crates/prover/src/components/mul_opcode_is_small_f_is_imm_t/mod.rs create mode 100644 stwo_cairo_prover/crates/prover/src/components/mul_opcode_is_small_f_is_imm_t/prover.rs diff --git a/stwo_cairo_prover/crates/prover/src/cairo_air/opcodes_air.rs b/stwo_cairo_prover/crates/prover/src/cairo_air/opcodes_air.rs index 2bfeb660..4139e5a5 100644 --- a/stwo_cairo_prover/crates/prover/src/cairo_air/opcodes_air.rs +++ b/stwo_cairo_prover/crates/prover/src/cairo_air/opcodes_air.rs @@ -16,7 +16,8 @@ use crate::components::{ assert_eq_opcode_is_double_deref_f_is_imm_t, assert_eq_opcode_is_double_deref_t_is_imm_f, generic_opcode, jnz_opcode_is_taken_f_dst_base_fp_f, jnz_opcode_is_taken_f_dst_base_fp_t, jnz_opcode_is_taken_t_dst_base_fp_f, jnz_opcode_is_taken_t_dst_base_fp_t, memory_address_to_id, - memory_id_to_big, range_check_19, range_check_9_9, ret_opcode, verify_instruction, + memory_id_to_big, mul_opcode_is_small_f_is_imm_f, mul_opcode_is_small_f_is_imm_t, + range_check_19, range_check_9_9, ret_opcode, verify_instruction, }; use crate::input::state_transitions::StateTransitions; @@ -33,6 +34,8 @@ pub struct OpcodeClaim { jnz_f_t: Vec, jnz_t_f: Vec, jnz_t_t: Vec, + mul_f_f: Vec, + mul_f_t: Vec, ret: Vec, } impl OpcodeClaim { @@ -48,6 +51,8 @@ impl OpcodeClaim { self.jnz_f_t.iter().for_each(|c| c.mix_into(channel)); self.jnz_t_f.iter().for_each(|c| c.mix_into(channel)); self.jnz_t_t.iter().for_each(|c| c.mix_into(channel)); + self.mul_f_f.iter().for_each(|c| c.mix_into(channel)); + self.mul_f_t.iter().for_each(|c| c.mix_into(channel)); self.ret.iter().for_each(|c| c.mix_into(channel)); } @@ -64,6 +69,8 @@ impl OpcodeClaim { self.jnz_f_t.iter().map(|c| c.log_sizes()), self.jnz_t_f.iter().map(|c| c.log_sizes()), self.jnz_t_t.iter().map(|c| c.log_sizes()), + self.mul_f_f.iter().map(|c| c.log_sizes()), + self.mul_f_t.iter().map(|c| c.log_sizes()), self.ret.iter().map(|c| c.log_sizes()), )) } @@ -81,6 +88,8 @@ pub struct OpcodesClaimGenerator { jnz_f_t: Vec, jnz_t_f: Vec, jnz_t_t: Vec, + mul_f_f: Vec, + mul_f_t: Vec, ret: Vec, } impl OpcodesClaimGenerator { @@ -97,6 +106,8 @@ impl OpcodesClaimGenerator { let mut jnz_f_t = vec![]; let mut jnz_t_f = vec![]; let mut jnz_t_t = vec![]; + let mut mul_f_f = vec![]; + let mut mul_f_t = vec![]; let mut ret = vec![]; if !input .casm_states_by_opcode @@ -219,6 +230,26 @@ impl OpcodesClaimGenerator { .jnz_opcode_is_taken_t_dst_base_fp_t, )); } + // Handle small mul in big mul component. Temporary until airs are written with Rc_3_6_6. + // TODO(Ohad): mul small. + if !input + .casm_states_by_opcode + .mul_opcode_is_small_f_is_imm_f + .is_empty() + { + mul_f_f.push(mul_opcode_is_small_f_is_imm_f::ClaimGenerator::new( + input.casm_states_by_opcode.mul_opcode_is_small_f_is_imm_f, + )); + } + if !input + .casm_states_by_opcode + .mul_opcode_is_small_f_is_imm_t + .is_empty() + { + mul_f_t.push(mul_opcode_is_small_f_is_imm_t::ClaimGenerator::new( + input.casm_states_by_opcode.mul_opcode_is_small_f_is_imm_t, + )); + } if !input.casm_states_by_opcode.ret_opcode.is_empty() { ret.push(ret_opcode::ClaimGenerator::new( input.casm_states_by_opcode.ret_opcode, @@ -236,6 +267,8 @@ impl OpcodesClaimGenerator { jnz_f_t, jnz_t_f, jnz_t_t, + mul_f_f, + mul_f_t, ret, } } @@ -383,7 +416,32 @@ impl OpcodesClaimGenerator { ) }) .unzip(); - + let (mul_f_f_claims, mul_f_f_interaction_gens) = self + .mul_f_f + .into_iter() + .map(|gen| { + gen.write_trace( + tree_builder, + memory_address_to_id_trace_generator, + memory_id_to_value_trace_generator, + range_check_19_trace_generator, + verify_instruction_trace_generator, + ) + }) + .unzip(); + let (mul_f_t_claims, mul_f_t_interaction_gens) = self + .mul_f_t + .into_iter() + .map(|gen| { + gen.write_trace( + tree_builder, + memory_address_to_id_trace_generator, + memory_id_to_value_trace_generator, + range_check_19_trace_generator, + verify_instruction_trace_generator, + ) + }) + .unzip(); let (ret_claims, ret_interaction_gens) = self .ret .into_iter() @@ -409,6 +467,8 @@ impl OpcodesClaimGenerator { jnz_f_t: jnz_f_t_claims, jnz_t_f: jnz_t_f_claims, jnz_t_t: jnz_t_t_claims, + mul_f_f: mul_f_f_claims, + mul_f_t: mul_f_t_claims, ret: ret_claims, }, OpcodesInteractionClaimGenerator { @@ -423,6 +483,8 @@ impl OpcodesClaimGenerator { jnz_f_t: jnz_f_t_interaction_gens, jnz_t_f: jnz_t_f_interaction_gens, jnz_t_t: jnz_t_t_interaction_gens, + mul_f_f: mul_f_f_interaction_gens, + mul_f_t: mul_f_t_interaction_gens, ret_interaction_gens, }, ) @@ -442,6 +504,8 @@ pub struct OpcodeInteractionClaim { jnz_f_t: Vec, jnz_t_f: Vec, jnz_t_t: Vec, + mul_f_f: Vec, + mul_f_t: Vec, ret: Vec, } impl OpcodeInteractionClaim { @@ -457,6 +521,8 @@ impl OpcodeInteractionClaim { self.jnz_f_t.iter().for_each(|c| c.mix_into(channel)); self.jnz_t_f.iter().for_each(|c| c.mix_into(channel)); self.jnz_t_t.iter().for_each(|c| c.mix_into(channel)); + self.mul_f_f.iter().for_each(|c| c.mix_into(channel)); + self.mul_f_t.iter().for_each(|c| c.mix_into(channel)); self.ret.iter().for_each(|c| c.mix_into(channel)); } @@ -539,6 +605,20 @@ impl OpcodeInteractionClaim { None => total_sum, }; } + for interaction_claim in &self.mul_f_f { + let (total_sum, claimed_sum) = interaction_claim.logup_sums; + sum += match claimed_sum { + Some((claimed_sum, ..)) => claimed_sum, + None => total_sum, + }; + } + for interaction_claim in &self.mul_f_t { + let (total_sum, claimed_sum) = interaction_claim.logup_sums; + sum += match claimed_sum { + Some((claimed_sum, ..)) => claimed_sum, + None => total_sum, + }; + } for interaction_claim in &self.ret { let (total_sum, claimed_sum) = interaction_claim.logup_sums; sum += match claimed_sum { @@ -562,6 +642,8 @@ pub struct OpcodesInteractionClaimGenerator { jnz_f_t: Vec, jnz_t_f: Vec, jnz_t_t: Vec, + mul_f_f: Vec, + mul_f_t: Vec, ret_interaction_gens: Vec, } impl OpcodesInteractionClaimGenerator { @@ -713,6 +795,34 @@ impl OpcodesInteractionClaimGenerator { ) }) .collect(); + let mul_f_f_interaction_claims = self + .mul_f_f + .into_iter() + .map(|gen| { + gen.write_interaction_trace( + tree_builder, + &interaction_elements.memory_address_to_id, + &interaction_elements.memory_id_to_value, + &interaction_elements.opcodes, + &interaction_elements.range_check_19, + &interaction_elements.verify_instruction, + ) + }) + .collect(); + let mul_f_t_interaction_claims = self + .mul_f_t + .into_iter() + .map(|gen| { + gen.write_interaction_trace( + tree_builder, + &interaction_elements.memory_address_to_id, + &interaction_elements.memory_id_to_value, + &interaction_elements.opcodes, + &interaction_elements.range_check_19, + &interaction_elements.verify_instruction, + ) + }) + .collect(); let ret_interaction_claims = self .ret_interaction_gens .into_iter() @@ -738,6 +848,8 @@ impl OpcodesInteractionClaimGenerator { jnz_f_t: jnz_f_t_interaction_claims, jnz_t_f: jnz_t_f_interaction_claims, jnz_t_t: jnz_t_t_interaction_claims, + mul_f_f: mul_f_f_interaction_claims, + mul_f_t: mul_f_t_interaction_claims, ret: ret_interaction_claims, } } @@ -755,6 +867,8 @@ pub struct OpcodeComponents { jnz_f_t: Vec, jnz_t_f: Vec, jnz_t_t: Vec, + mul_f_f: Vec, + mul_f_t: Vec, ret: Vec, } impl OpcodeComponents { @@ -1026,6 +1140,56 @@ impl OpcodeComponents { ) }) .collect_vec(); + let mul_f_f_components = claim + .mul_f_f + .iter() + .zip(interaction_claim.mul_f_f.iter()) + .map(|(&claim, &interaction_claim)| { + mul_opcode_is_small_f_is_imm_f::Component::new( + tree_span_provider, + mul_opcode_is_small_f_is_imm_f::Eval { + claim, + memoryaddresstoid_lookup_elements: interaction_elements + .memory_address_to_id + .clone(), + memoryidtobig_lookup_elements: interaction_elements + .memory_id_to_value + .clone(), + opcodes_lookup_elements: interaction_elements.opcodes.clone(), + rangecheck_19_lookup_elements: interaction_elements.range_check_19.clone(), + verifyinstruction_lookup_elements: interaction_elements + .verify_instruction + .clone(), + }, + interaction_claim.logup_sums, + ) + }) + .collect_vec(); + let mul_f_t_components = claim + .mul_f_t + .iter() + .zip(interaction_claim.mul_f_t.iter()) + .map(|(&claim, &interaction_claim)| { + mul_opcode_is_small_f_is_imm_t::Component::new( + tree_span_provider, + mul_opcode_is_small_f_is_imm_t::Eval { + claim, + memoryaddresstoid_lookup_elements: interaction_elements + .memory_address_to_id + .clone(), + memoryidtobig_lookup_elements: interaction_elements + .memory_id_to_value + .clone(), + opcodes_lookup_elements: interaction_elements.opcodes.clone(), + rangecheck_19_lookup_elements: interaction_elements.range_check_19.clone(), + verifyinstruction_lookup_elements: interaction_elements + .verify_instruction + .clone(), + }, + interaction_claim.logup_sums, + ) + }) + .collect_vec(); let ret_components = claim .ret .iter() @@ -1062,6 +1226,8 @@ impl OpcodeComponents { jnz_f_t: jnz_f_t_components, jnz_t_f: jnz_t_f_components, jnz_t_t: jnz_t_t_components, + mul_f_f: mul_f_f_components, + mul_f_t: mul_f_t_components, ret: ret_components, } } @@ -1123,6 +1289,16 @@ impl OpcodeComponents { .iter() .map(|component| component as &dyn ComponentProver), ); + vec.extend( + self.mul_f_f + .iter() + .map(|component| component as &dyn ComponentProver), + ); + vec.extend( + self.mul_f_t + .iter() + .map(|component| component as &dyn ComponentProver), + ); vec.extend( self.ret .iter() diff --git a/stwo_cairo_prover/crates/prover/src/components/mod.rs b/stwo_cairo_prover/crates/prover/src/components/mod.rs index f90af834..85c1a11d 100644 --- a/stwo_cairo_prover/crates/prover/src/components/mod.rs +++ b/stwo_cairo_prover/crates/prover/src/components/mod.rs @@ -17,8 +17,15 @@ pub mod range_check_vector; pub mod ret_opcode; pub mod verify_instruction; +// TODO(Ohad): mul small. +pub mod mul_opcode_is_small_f_is_imm_f; +pub mod mul_opcode_is_small_f_is_imm_t; + 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}; +pub use range_check_vector::{ + range_check_19, range_check_3, range_check_4_3, range_check_6, range_check_7_2_5, + range_check_9_9, +}; // When padding is needed, the inputs must be arranged in the order defined by the neighbor // function. This order allows using the partial sum mechanism to sum only the first n_call inputs. diff --git a/stwo_cairo_prover/crates/prover/src/components/mul_opcode_is_small_f_is_imm_f/component.rs b/stwo_cairo_prover/crates/prover/src/components/mul_opcode_is_small_f_is_imm_f/component.rs new file mode 100644 index 00000000..6283f26c --- /dev/null +++ b/stwo_cairo_prover/crates/prover/src/components/mul_opcode_is_small_f_is_imm_f/component.rs @@ -0,0 +1,1669 @@ +#![allow(non_camel_case_types)] +#![allow(unused_imports)] +use num_traits::{One, Zero}; +use serde::{Deserialize, Serialize}; +use stwo_prover::constraint_framework::logup::{LogupAtRow, LogupSums, LookupElements}; +use stwo_prover::constraint_framework::{ + EvalAtRow, FrameworkComponent, FrameworkEval, RelationEntry, +}; +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::pcs::TreeVec; + +use crate::relations; + +pub struct Eval { + pub claim: Claim, + pub memoryaddresstoid_lookup_elements: relations::MemoryAddressToId, + pub memoryidtobig_lookup_elements: relations::MemoryIdToBig, + pub opcodes_lookup_elements: relations::Opcodes, + pub rangecheck_19_lookup_elements: relations::RangeCheck_19, + pub verifyinstruction_lookup_elements: relations::VerifyInstruction, +} + +#[derive(Copy, Clone, Serialize, Deserialize)] +pub struct Claim { + pub n_calls: usize, +} +impl Claim { + pub fn log_sizes(&self) -> TreeVec> { + let log_size = std::cmp::max(self.n_calls.next_power_of_two().ilog2(), LOG_N_LANES); + let trace_log_sizes = vec![log_size; 126]; + let interaction_log_sizes = vec![log_size; SECURE_EXTENSION_DEGREE * 37]; + let preprocessed_log_sizes = vec![log_size]; + TreeVec::new(vec![ + preprocessed_log_sizes, + trace_log_sizes, + interaction_log_sizes, + ]) + } + + pub fn mix_into(&self, channel: &mut impl Channel) { + channel.mix_u64(self.n_calls as u64); + } +} + +#[derive(Copy, Clone, Serialize, Deserialize)] +pub struct InteractionClaim { + pub logup_sums: LogupSums, +} +impl InteractionClaim { + pub fn mix_into(&self, channel: &mut impl Channel) { + 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); + } + } +} + +pub type Component = FrameworkComponent; + +impl FrameworkEval for Eval { + fn log_size(&self) -> u32 { + std::cmp::max(self.claim.n_calls.next_power_of_two().ilog2(), LOG_N_LANES) + } + + fn max_constraint_log_degree_bound(&self) -> u32 { + self.log_size() + 1 + } + + #[allow(unused_parens)] + #[allow(clippy::double_parens)] + #[allow(non_snake_case)] + 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)); + let M31_131072 = E::F::from(M31::from(131072)); + let M31_136 = E::F::from(M31::from(136)); + let M31_2 = E::F::from(M31::from(2)); + let M31_256 = E::F::from(M31::from(256)); + let M31_262144 = E::F::from(M31::from(262144)); + let M31_32 = E::F::from(M31::from(32)); + let M31_32768 = E::F::from(M31::from(32768)); + let M31_4 = E::F::from(M31::from(4)); + let M31_512 = E::F::from(M31::from(512)); + let M31_64 = E::F::from(M31::from(64)); + let M31_8 = E::F::from(M31::from(8)); + let input_pc_col0 = eval.next_trace_mask(); + let input_ap_col1 = eval.next_trace_mask(); + let input_fp_col2 = eval.next_trace_mask(); + let offset0_col3 = eval.next_trace_mask(); + let offset1_col4 = eval.next_trace_mask(); + let offset2_col5 = eval.next_trace_mask(); + let dst_base_fp_col6 = eval.next_trace_mask(); + let op0_base_fp_col7 = eval.next_trace_mask(); + let op1_base_fp_col8 = eval.next_trace_mask(); + let op1_base_ap_col9 = eval.next_trace_mask(); + let ap_update_add_1_col10 = eval.next_trace_mask(); + let dst_id_col11 = eval.next_trace_mask(); + let dst_limb_0_col12 = eval.next_trace_mask(); + let dst_limb_1_col13 = eval.next_trace_mask(); + let dst_limb_2_col14 = eval.next_trace_mask(); + let dst_limb_3_col15 = eval.next_trace_mask(); + let dst_limb_4_col16 = eval.next_trace_mask(); + let dst_limb_5_col17 = eval.next_trace_mask(); + let dst_limb_6_col18 = eval.next_trace_mask(); + let dst_limb_7_col19 = eval.next_trace_mask(); + let dst_limb_8_col20 = eval.next_trace_mask(); + let dst_limb_9_col21 = eval.next_trace_mask(); + let dst_limb_10_col22 = eval.next_trace_mask(); + let dst_limb_11_col23 = eval.next_trace_mask(); + let dst_limb_12_col24 = eval.next_trace_mask(); + let dst_limb_13_col25 = eval.next_trace_mask(); + let dst_limb_14_col26 = eval.next_trace_mask(); + let dst_limb_15_col27 = eval.next_trace_mask(); + let dst_limb_16_col28 = eval.next_trace_mask(); + let dst_limb_17_col29 = eval.next_trace_mask(); + let dst_limb_18_col30 = eval.next_trace_mask(); + let dst_limb_19_col31 = eval.next_trace_mask(); + let dst_limb_20_col32 = eval.next_trace_mask(); + let dst_limb_21_col33 = eval.next_trace_mask(); + let dst_limb_22_col34 = eval.next_trace_mask(); + let dst_limb_23_col35 = eval.next_trace_mask(); + let dst_limb_24_col36 = eval.next_trace_mask(); + let dst_limb_25_col37 = eval.next_trace_mask(); + let dst_limb_26_col38 = eval.next_trace_mask(); + let dst_limb_27_col39 = eval.next_trace_mask(); + let op0_id_col40 = eval.next_trace_mask(); + let op0_limb_0_col41 = eval.next_trace_mask(); + let op0_limb_1_col42 = eval.next_trace_mask(); + let op0_limb_2_col43 = eval.next_trace_mask(); + let op0_limb_3_col44 = eval.next_trace_mask(); + let op0_limb_4_col45 = eval.next_trace_mask(); + let op0_limb_5_col46 = eval.next_trace_mask(); + let op0_limb_6_col47 = eval.next_trace_mask(); + let op0_limb_7_col48 = eval.next_trace_mask(); + let op0_limb_8_col49 = eval.next_trace_mask(); + let op0_limb_9_col50 = eval.next_trace_mask(); + let op0_limb_10_col51 = eval.next_trace_mask(); + let op0_limb_11_col52 = eval.next_trace_mask(); + let op0_limb_12_col53 = eval.next_trace_mask(); + let op0_limb_13_col54 = eval.next_trace_mask(); + let op0_limb_14_col55 = eval.next_trace_mask(); + let op0_limb_15_col56 = eval.next_trace_mask(); + let op0_limb_16_col57 = eval.next_trace_mask(); + let op0_limb_17_col58 = eval.next_trace_mask(); + let op0_limb_18_col59 = eval.next_trace_mask(); + let op0_limb_19_col60 = eval.next_trace_mask(); + let op0_limb_20_col61 = eval.next_trace_mask(); + let op0_limb_21_col62 = eval.next_trace_mask(); + let op0_limb_22_col63 = eval.next_trace_mask(); + let op0_limb_23_col64 = eval.next_trace_mask(); + let op0_limb_24_col65 = eval.next_trace_mask(); + let op0_limb_25_col66 = eval.next_trace_mask(); + let op0_limb_26_col67 = eval.next_trace_mask(); + let op0_limb_27_col68 = eval.next_trace_mask(); + let op1_id_col69 = eval.next_trace_mask(); + let op1_limb_0_col70 = eval.next_trace_mask(); + let op1_limb_1_col71 = eval.next_trace_mask(); + let op1_limb_2_col72 = eval.next_trace_mask(); + let op1_limb_3_col73 = eval.next_trace_mask(); + let op1_limb_4_col74 = eval.next_trace_mask(); + let op1_limb_5_col75 = eval.next_trace_mask(); + let op1_limb_6_col76 = eval.next_trace_mask(); + let op1_limb_7_col77 = eval.next_trace_mask(); + let op1_limb_8_col78 = eval.next_trace_mask(); + let op1_limb_9_col79 = eval.next_trace_mask(); + let op1_limb_10_col80 = eval.next_trace_mask(); + let op1_limb_11_col81 = eval.next_trace_mask(); + let op1_limb_12_col82 = eval.next_trace_mask(); + let op1_limb_13_col83 = eval.next_trace_mask(); + let op1_limb_14_col84 = eval.next_trace_mask(); + let op1_limb_15_col85 = eval.next_trace_mask(); + let op1_limb_16_col86 = eval.next_trace_mask(); + let op1_limb_17_col87 = eval.next_trace_mask(); + let op1_limb_18_col88 = eval.next_trace_mask(); + let op1_limb_19_col89 = eval.next_trace_mask(); + let op1_limb_20_col90 = eval.next_trace_mask(); + let op1_limb_21_col91 = eval.next_trace_mask(); + let op1_limb_22_col92 = eval.next_trace_mask(); + let op1_limb_23_col93 = eval.next_trace_mask(); + let op1_limb_24_col94 = eval.next_trace_mask(); + let op1_limb_25_col95 = eval.next_trace_mask(); + let op1_limb_26_col96 = eval.next_trace_mask(); + let op1_limb_27_col97 = eval.next_trace_mask(); + let k_col98 = eval.next_trace_mask(); + let carry_0_col99 = eval.next_trace_mask(); + let carry_1_col100 = eval.next_trace_mask(); + let carry_2_col101 = eval.next_trace_mask(); + let carry_3_col102 = eval.next_trace_mask(); + let carry_4_col103 = eval.next_trace_mask(); + let carry_5_col104 = eval.next_trace_mask(); + let carry_6_col105 = eval.next_trace_mask(); + let carry_7_col106 = eval.next_trace_mask(); + let carry_8_col107 = eval.next_trace_mask(); + let carry_9_col108 = eval.next_trace_mask(); + let carry_10_col109 = eval.next_trace_mask(); + let carry_11_col110 = eval.next_trace_mask(); + let carry_12_col111 = eval.next_trace_mask(); + let carry_13_col112 = eval.next_trace_mask(); + let carry_14_col113 = eval.next_trace_mask(); + let carry_15_col114 = eval.next_trace_mask(); + let carry_16_col115 = eval.next_trace_mask(); + let carry_17_col116 = eval.next_trace_mask(); + let carry_18_col117 = eval.next_trace_mask(); + let carry_19_col118 = eval.next_trace_mask(); + let carry_20_col119 = eval.next_trace_mask(); + let carry_21_col120 = eval.next_trace_mask(); + let carry_22_col121 = eval.next_trace_mask(); + let carry_23_col122 = eval.next_trace_mask(); + let carry_24_col123 = eval.next_trace_mask(); + let carry_25_col124 = eval.next_trace_mask(); + let carry_26_col125 = eval.next_trace_mask(); + + // decode_instruction_15f7159a39884cc. + + eval.add_to_relation(&[RelationEntry::new( + &self.verifyinstruction_lookup_elements, + E::EF::one(), + &[ + input_pc_col0.clone(), + offset0_col3.clone(), + offset1_col4.clone(), + offset2_col5.clone(), + dst_base_fp_col6.clone(), + op0_base_fp_col7.clone(), + M31_0.clone(), + op1_base_fp_col8.clone(), + op1_base_ap_col9.clone(), + M31_0.clone(), + M31_1.clone(), + M31_0.clone(), + M31_0.clone(), + M31_0.clone(), + M31_0.clone(), + ap_update_add_1_col10.clone(), + M31_0.clone(), + M31_0.clone(), + M31_1.clone(), + ], + )]); + + // Either flag op1_base_fp is on or flag op1_base_ap is on. + eval.add_constraint( + ((op1_base_fp_col8.clone() + op1_base_ap_col9.clone()) - M31_1.clone()), + ); + + // read_positive_num_bits_252. + + eval.add_to_relation(&[RelationEntry::new( + &self.memoryaddresstoid_lookup_elements, + E::EF::one(), + &[ + (((dst_base_fp_col6.clone() * input_fp_col2.clone()) + + ((M31_1.clone() - dst_base_fp_col6.clone()) * input_ap_col1.clone())) + + (offset0_col3.clone() - M31_32768.clone())), + dst_id_col11.clone(), + ], + )]); + + eval.add_to_relation(&[RelationEntry::new( + &self.memoryidtobig_lookup_elements, + E::EF::one(), + &[ + dst_id_col11.clone(), + dst_limb_0_col12.clone(), + dst_limb_1_col13.clone(), + dst_limb_2_col14.clone(), + dst_limb_3_col15.clone(), + dst_limb_4_col16.clone(), + dst_limb_5_col17.clone(), + dst_limb_6_col18.clone(), + dst_limb_7_col19.clone(), + dst_limb_8_col20.clone(), + dst_limb_9_col21.clone(), + dst_limb_10_col22.clone(), + dst_limb_11_col23.clone(), + dst_limb_12_col24.clone(), + dst_limb_13_col25.clone(), + dst_limb_14_col26.clone(), + dst_limb_15_col27.clone(), + dst_limb_16_col28.clone(), + dst_limb_17_col29.clone(), + dst_limb_18_col30.clone(), + dst_limb_19_col31.clone(), + dst_limb_20_col32.clone(), + dst_limb_21_col33.clone(), + dst_limb_22_col34.clone(), + dst_limb_23_col35.clone(), + dst_limb_24_col36.clone(), + dst_limb_25_col37.clone(), + dst_limb_26_col38.clone(), + dst_limb_27_col39.clone(), + ], + )]); + + // read_positive_num_bits_252. + + eval.add_to_relation(&[RelationEntry::new( + &self.memoryaddresstoid_lookup_elements, + E::EF::one(), + &[ + (((op0_base_fp_col7.clone() * input_fp_col2.clone()) + + ((M31_1.clone() - op0_base_fp_col7.clone()) * input_ap_col1.clone())) + + (offset1_col4.clone() - M31_32768.clone())), + op0_id_col40.clone(), + ], + )]); + + eval.add_to_relation(&[RelationEntry::new( + &self.memoryidtobig_lookup_elements, + E::EF::one(), + &[ + op0_id_col40.clone(), + op0_limb_0_col41.clone(), + op0_limb_1_col42.clone(), + op0_limb_2_col43.clone(), + op0_limb_3_col44.clone(), + op0_limb_4_col45.clone(), + op0_limb_5_col46.clone(), + op0_limb_6_col47.clone(), + op0_limb_7_col48.clone(), + op0_limb_8_col49.clone(), + op0_limb_9_col50.clone(), + op0_limb_10_col51.clone(), + op0_limb_11_col52.clone(), + op0_limb_12_col53.clone(), + op0_limb_13_col54.clone(), + op0_limb_14_col55.clone(), + op0_limb_15_col56.clone(), + op0_limb_16_col57.clone(), + op0_limb_17_col58.clone(), + op0_limb_18_col59.clone(), + op0_limb_19_col60.clone(), + op0_limb_20_col61.clone(), + op0_limb_21_col62.clone(), + op0_limb_22_col63.clone(), + op0_limb_23_col64.clone(), + op0_limb_24_col65.clone(), + op0_limb_25_col66.clone(), + op0_limb_26_col67.clone(), + op0_limb_27_col68.clone(), + ], + )]); + + // read_positive_num_bits_252. + + eval.add_to_relation(&[RelationEntry::new( + &self.memoryaddresstoid_lookup_elements, + E::EF::one(), + &[ + (((op1_base_fp_col8.clone() * input_fp_col2.clone()) + + (op1_base_ap_col9.clone() * input_ap_col1.clone())) + + (offset2_col5.clone() - M31_32768.clone())), + op1_id_col69.clone(), + ], + )]); + + eval.add_to_relation(&[RelationEntry::new( + &self.memoryidtobig_lookup_elements, + E::EF::one(), + &[ + op1_id_col69.clone(), + op1_limb_0_col70.clone(), + op1_limb_1_col71.clone(), + op1_limb_2_col72.clone(), + op1_limb_3_col73.clone(), + op1_limb_4_col74.clone(), + op1_limb_5_col75.clone(), + op1_limb_6_col76.clone(), + op1_limb_7_col77.clone(), + op1_limb_8_col78.clone(), + op1_limb_9_col79.clone(), + op1_limb_10_col80.clone(), + op1_limb_11_col81.clone(), + op1_limb_12_col82.clone(), + op1_limb_13_col83.clone(), + op1_limb_14_col84.clone(), + op1_limb_15_col85.clone(), + op1_limb_16_col86.clone(), + op1_limb_17_col87.clone(), + op1_limb_18_col88.clone(), + op1_limb_19_col89.clone(), + op1_limb_20_col90.clone(), + op1_limb_21_col91.clone(), + op1_limb_22_col92.clone(), + op1_limb_23_col93.clone(), + op1_limb_24_col94.clone(), + op1_limb_25_col95.clone(), + op1_limb_26_col96.clone(), + op1_limb_27_col97.clone(), + ], + )]); + + // verify_mul252. + + let conv_tmp_1416 = ((M31_0.clone() - dst_limb_0_col12.clone()) + + (op0_limb_0_col41.clone() * op1_limb_0_col70.clone())); + let conv_tmp_1417 = (((M31_0.clone() - dst_limb_1_col13.clone()) + + (op0_limb_0_col41.clone() * op1_limb_1_col71.clone())) + + (op0_limb_1_col42.clone() * op1_limb_0_col70.clone())); + let conv_tmp_1418 = ((((M31_0.clone() - dst_limb_2_col14.clone()) + + (op0_limb_0_col41.clone() * op1_limb_2_col72.clone())) + + (op0_limb_1_col42.clone() * op1_limb_1_col71.clone())) + + (op0_limb_2_col43.clone() * op1_limb_0_col70.clone())); + let conv_tmp_1419 = (((((M31_0.clone() - dst_limb_3_col15.clone()) + + (op0_limb_0_col41.clone() * op1_limb_3_col73.clone())) + + (op0_limb_1_col42.clone() * op1_limb_2_col72.clone())) + + (op0_limb_2_col43.clone() * op1_limb_1_col71.clone())) + + (op0_limb_3_col44.clone() * op1_limb_0_col70.clone())); + let conv_tmp_1420 = ((((((M31_0.clone() - dst_limb_4_col16.clone()) + + (op0_limb_0_col41.clone() * op1_limb_4_col74.clone())) + + (op0_limb_1_col42.clone() * op1_limb_3_col73.clone())) + + (op0_limb_2_col43.clone() * op1_limb_2_col72.clone())) + + (op0_limb_3_col44.clone() * op1_limb_1_col71.clone())) + + (op0_limb_4_col45.clone() * op1_limb_0_col70.clone())); + let conv_tmp_1421 = (((((((M31_0.clone() - dst_limb_5_col17.clone()) + + (op0_limb_0_col41.clone() * op1_limb_5_col75.clone())) + + (op0_limb_1_col42.clone() * op1_limb_4_col74.clone())) + + (op0_limb_2_col43.clone() * op1_limb_3_col73.clone())) + + (op0_limb_3_col44.clone() * op1_limb_2_col72.clone())) + + (op0_limb_4_col45.clone() * op1_limb_1_col71.clone())) + + (op0_limb_5_col46.clone() * op1_limb_0_col70.clone())); + let conv_tmp_1422 = ((((((((M31_0.clone() - dst_limb_6_col18.clone()) + + (op0_limb_0_col41.clone() * op1_limb_6_col76.clone())) + + (op0_limb_1_col42.clone() * op1_limb_5_col75.clone())) + + (op0_limb_2_col43.clone() * op1_limb_4_col74.clone())) + + (op0_limb_3_col44.clone() * op1_limb_3_col73.clone())) + + (op0_limb_4_col45.clone() * op1_limb_2_col72.clone())) + + (op0_limb_5_col46.clone() * op1_limb_1_col71.clone())) + + (op0_limb_6_col47.clone() * op1_limb_0_col70.clone())); + let conv_tmp_1423 = (((((((((M31_0.clone() - dst_limb_7_col19.clone()) + + (op0_limb_0_col41.clone() * op1_limb_7_col77.clone())) + + (op0_limb_1_col42.clone() * op1_limb_6_col76.clone())) + + (op0_limb_2_col43.clone() * op1_limb_5_col75.clone())) + + (op0_limb_3_col44.clone() * op1_limb_4_col74.clone())) + + (op0_limb_4_col45.clone() * op1_limb_3_col73.clone())) + + (op0_limb_5_col46.clone() * op1_limb_2_col72.clone())) + + (op0_limb_6_col47.clone() * op1_limb_1_col71.clone())) + + (op0_limb_7_col48.clone() * op1_limb_0_col70.clone())); + let conv_tmp_1424 = ((((((((((M31_0.clone() - dst_limb_8_col20.clone()) + + (op0_limb_0_col41.clone() * op1_limb_8_col78.clone())) + + (op0_limb_1_col42.clone() * op1_limb_7_col77.clone())) + + (op0_limb_2_col43.clone() * op1_limb_6_col76.clone())) + + (op0_limb_3_col44.clone() * op1_limb_5_col75.clone())) + + (op0_limb_4_col45.clone() * op1_limb_4_col74.clone())) + + (op0_limb_5_col46.clone() * op1_limb_3_col73.clone())) + + (op0_limb_6_col47.clone() * op1_limb_2_col72.clone())) + + (op0_limb_7_col48.clone() * op1_limb_1_col71.clone())) + + (op0_limb_8_col49.clone() * op1_limb_0_col70.clone())); + let conv_tmp_1425 = (((((((((((M31_0.clone() - dst_limb_9_col21.clone()) + + (op0_limb_0_col41.clone() * op1_limb_9_col79.clone())) + + (op0_limb_1_col42.clone() * op1_limb_8_col78.clone())) + + (op0_limb_2_col43.clone() * op1_limb_7_col77.clone())) + + (op0_limb_3_col44.clone() * op1_limb_6_col76.clone())) + + (op0_limb_4_col45.clone() * op1_limb_5_col75.clone())) + + (op0_limb_5_col46.clone() * op1_limb_4_col74.clone())) + + (op0_limb_6_col47.clone() * op1_limb_3_col73.clone())) + + (op0_limb_7_col48.clone() * op1_limb_2_col72.clone())) + + (op0_limb_8_col49.clone() * op1_limb_1_col71.clone())) + + (op0_limb_9_col50.clone() * op1_limb_0_col70.clone())); + let conv_tmp_1426 = ((((((((((((M31_0.clone() - dst_limb_10_col22.clone()) + + (op0_limb_0_col41.clone() * op1_limb_10_col80.clone())) + + (op0_limb_1_col42.clone() * op1_limb_9_col79.clone())) + + (op0_limb_2_col43.clone() * op1_limb_8_col78.clone())) + + (op0_limb_3_col44.clone() * op1_limb_7_col77.clone())) + + (op0_limb_4_col45.clone() * op1_limb_6_col76.clone())) + + (op0_limb_5_col46.clone() * op1_limb_5_col75.clone())) + + (op0_limb_6_col47.clone() * op1_limb_4_col74.clone())) + + (op0_limb_7_col48.clone() * op1_limb_3_col73.clone())) + + (op0_limb_8_col49.clone() * op1_limb_2_col72.clone())) + + (op0_limb_9_col50.clone() * op1_limb_1_col71.clone())) + + (op0_limb_10_col51.clone() * op1_limb_0_col70.clone())); + let conv_tmp_1427 = (((((((((((((M31_0.clone() - dst_limb_11_col23.clone()) + + (op0_limb_0_col41.clone() * op1_limb_11_col81.clone())) + + (op0_limb_1_col42.clone() * op1_limb_10_col80.clone())) + + (op0_limb_2_col43.clone() * op1_limb_9_col79.clone())) + + (op0_limb_3_col44.clone() * op1_limb_8_col78.clone())) + + (op0_limb_4_col45.clone() * op1_limb_7_col77.clone())) + + (op0_limb_5_col46.clone() * op1_limb_6_col76.clone())) + + (op0_limb_6_col47.clone() * op1_limb_5_col75.clone())) + + (op0_limb_7_col48.clone() * op1_limb_4_col74.clone())) + + (op0_limb_8_col49.clone() * op1_limb_3_col73.clone())) + + (op0_limb_9_col50.clone() * op1_limb_2_col72.clone())) + + (op0_limb_10_col51.clone() * op1_limb_1_col71.clone())) + + (op0_limb_11_col52.clone() * op1_limb_0_col70.clone())); + let conv_tmp_1428 = ((((((((((((((M31_0.clone() - dst_limb_12_col24.clone()) + + (op0_limb_0_col41.clone() * op1_limb_12_col82.clone())) + + (op0_limb_1_col42.clone() * op1_limb_11_col81.clone())) + + (op0_limb_2_col43.clone() * op1_limb_10_col80.clone())) + + (op0_limb_3_col44.clone() * op1_limb_9_col79.clone())) + + (op0_limb_4_col45.clone() * op1_limb_8_col78.clone())) + + (op0_limb_5_col46.clone() * op1_limb_7_col77.clone())) + + (op0_limb_6_col47.clone() * op1_limb_6_col76.clone())) + + (op0_limb_7_col48.clone() * op1_limb_5_col75.clone())) + + (op0_limb_8_col49.clone() * op1_limb_4_col74.clone())) + + (op0_limb_9_col50.clone() * op1_limb_3_col73.clone())) + + (op0_limb_10_col51.clone() * op1_limb_2_col72.clone())) + + (op0_limb_11_col52.clone() * op1_limb_1_col71.clone())) + + (op0_limb_12_col53.clone() * op1_limb_0_col70.clone())); + let conv_tmp_1429 = (((((((((((((((M31_0.clone() - dst_limb_13_col25.clone()) + + (op0_limb_0_col41.clone() * op1_limb_13_col83.clone())) + + (op0_limb_1_col42.clone() * op1_limb_12_col82.clone())) + + (op0_limb_2_col43.clone() * op1_limb_11_col81.clone())) + + (op0_limb_3_col44.clone() * op1_limb_10_col80.clone())) + + (op0_limb_4_col45.clone() * op1_limb_9_col79.clone())) + + (op0_limb_5_col46.clone() * op1_limb_8_col78.clone())) + + (op0_limb_6_col47.clone() * op1_limb_7_col77.clone())) + + (op0_limb_7_col48.clone() * op1_limb_6_col76.clone())) + + (op0_limb_8_col49.clone() * op1_limb_5_col75.clone())) + + (op0_limb_9_col50.clone() * op1_limb_4_col74.clone())) + + (op0_limb_10_col51.clone() * op1_limb_3_col73.clone())) + + (op0_limb_11_col52.clone() * op1_limb_2_col72.clone())) + + (op0_limb_12_col53.clone() * op1_limb_1_col71.clone())) + + (op0_limb_13_col54.clone() * op1_limb_0_col70.clone())); + let conv_tmp_1430 = ((((((((((((((((M31_0.clone() + - dst_limb_14_col26.clone()) + + (op0_limb_0_col41.clone() * op1_limb_14_col84.clone())) + + (op0_limb_1_col42.clone() * op1_limb_13_col83.clone())) + + (op0_limb_2_col43.clone() * op1_limb_12_col82.clone())) + + (op0_limb_3_col44.clone() * op1_limb_11_col81.clone())) + + (op0_limb_4_col45.clone() * op1_limb_10_col80.clone())) + + (op0_limb_5_col46.clone() * op1_limb_9_col79.clone())) + + (op0_limb_6_col47.clone() * op1_limb_8_col78.clone())) + + (op0_limb_7_col48.clone() * op1_limb_7_col77.clone())) + + (op0_limb_8_col49.clone() * op1_limb_6_col76.clone())) + + (op0_limb_9_col50.clone() * op1_limb_5_col75.clone())) + + (op0_limb_10_col51.clone() * op1_limb_4_col74.clone())) + + (op0_limb_11_col52.clone() * op1_limb_3_col73.clone())) + + (op0_limb_12_col53.clone() * op1_limb_2_col72.clone())) + + (op0_limb_13_col54.clone() * op1_limb_1_col71.clone())) + + (op0_limb_14_col55.clone() * op1_limb_0_col70.clone())); + let conv_tmp_1431 = (((((((((((((((((M31_0.clone() + - dst_limb_15_col27.clone()) + + (op0_limb_0_col41.clone() * op1_limb_15_col85.clone())) + + (op0_limb_1_col42.clone() * op1_limb_14_col84.clone())) + + (op0_limb_2_col43.clone() * op1_limb_13_col83.clone())) + + (op0_limb_3_col44.clone() * op1_limb_12_col82.clone())) + + (op0_limb_4_col45.clone() * op1_limb_11_col81.clone())) + + (op0_limb_5_col46.clone() * op1_limb_10_col80.clone())) + + (op0_limb_6_col47.clone() * op1_limb_9_col79.clone())) + + (op0_limb_7_col48.clone() * op1_limb_8_col78.clone())) + + (op0_limb_8_col49.clone() * op1_limb_7_col77.clone())) + + (op0_limb_9_col50.clone() * op1_limb_6_col76.clone())) + + (op0_limb_10_col51.clone() * op1_limb_5_col75.clone())) + + (op0_limb_11_col52.clone() * op1_limb_4_col74.clone())) + + (op0_limb_12_col53.clone() * op1_limb_3_col73.clone())) + + (op0_limb_13_col54.clone() * op1_limb_2_col72.clone())) + + (op0_limb_14_col55.clone() * op1_limb_1_col71.clone())) + + (op0_limb_15_col56.clone() * op1_limb_0_col70.clone())); + let conv_tmp_1432 = ((((((((((((((((((M31_0.clone() + - dst_limb_16_col28.clone()) + + (op0_limb_0_col41.clone() * op1_limb_16_col86.clone())) + + (op0_limb_1_col42.clone() * op1_limb_15_col85.clone())) + + (op0_limb_2_col43.clone() * op1_limb_14_col84.clone())) + + (op0_limb_3_col44.clone() * op1_limb_13_col83.clone())) + + (op0_limb_4_col45.clone() * op1_limb_12_col82.clone())) + + (op0_limb_5_col46.clone() * op1_limb_11_col81.clone())) + + (op0_limb_6_col47.clone() * op1_limb_10_col80.clone())) + + (op0_limb_7_col48.clone() * op1_limb_9_col79.clone())) + + (op0_limb_8_col49.clone() * op1_limb_8_col78.clone())) + + (op0_limb_9_col50.clone() * op1_limb_7_col77.clone())) + + (op0_limb_10_col51.clone() * op1_limb_6_col76.clone())) + + (op0_limb_11_col52.clone() * op1_limb_5_col75.clone())) + + (op0_limb_12_col53.clone() * op1_limb_4_col74.clone())) + + (op0_limb_13_col54.clone() * op1_limb_3_col73.clone())) + + (op0_limb_14_col55.clone() * op1_limb_2_col72.clone())) + + (op0_limb_15_col56.clone() * op1_limb_1_col71.clone())) + + (op0_limb_16_col57.clone() * op1_limb_0_col70.clone())); + let conv_tmp_1433 = (((((((((((((((((((M31_0.clone() + - dst_limb_17_col29.clone()) + + (op0_limb_0_col41.clone() * op1_limb_17_col87.clone())) + + (op0_limb_1_col42.clone() * op1_limb_16_col86.clone())) + + (op0_limb_2_col43.clone() * op1_limb_15_col85.clone())) + + (op0_limb_3_col44.clone() * op1_limb_14_col84.clone())) + + (op0_limb_4_col45.clone() * op1_limb_13_col83.clone())) + + (op0_limb_5_col46.clone() * op1_limb_12_col82.clone())) + + (op0_limb_6_col47.clone() * op1_limb_11_col81.clone())) + + (op0_limb_7_col48.clone() * op1_limb_10_col80.clone())) + + (op0_limb_8_col49.clone() * op1_limb_9_col79.clone())) + + (op0_limb_9_col50.clone() * op1_limb_8_col78.clone())) + + (op0_limb_10_col51.clone() * op1_limb_7_col77.clone())) + + (op0_limb_11_col52.clone() * op1_limb_6_col76.clone())) + + (op0_limb_12_col53.clone() * op1_limb_5_col75.clone())) + + (op0_limb_13_col54.clone() * op1_limb_4_col74.clone())) + + (op0_limb_14_col55.clone() * op1_limb_3_col73.clone())) + + (op0_limb_15_col56.clone() * op1_limb_2_col72.clone())) + + (op0_limb_16_col57.clone() * op1_limb_1_col71.clone())) + + (op0_limb_17_col58.clone() * op1_limb_0_col70.clone())); + let conv_tmp_1434 = ((((((((((((((((((((M31_0.clone() + - dst_limb_18_col30.clone()) + + (op0_limb_0_col41.clone() * op1_limb_18_col88.clone())) + + (op0_limb_1_col42.clone() * op1_limb_17_col87.clone())) + + (op0_limb_2_col43.clone() * op1_limb_16_col86.clone())) + + (op0_limb_3_col44.clone() * op1_limb_15_col85.clone())) + + (op0_limb_4_col45.clone() * op1_limb_14_col84.clone())) + + (op0_limb_5_col46.clone() * op1_limb_13_col83.clone())) + + (op0_limb_6_col47.clone() * op1_limb_12_col82.clone())) + + (op0_limb_7_col48.clone() * op1_limb_11_col81.clone())) + + (op0_limb_8_col49.clone() * op1_limb_10_col80.clone())) + + (op0_limb_9_col50.clone() * op1_limb_9_col79.clone())) + + (op0_limb_10_col51.clone() * op1_limb_8_col78.clone())) + + (op0_limb_11_col52.clone() * op1_limb_7_col77.clone())) + + (op0_limb_12_col53.clone() * op1_limb_6_col76.clone())) + + (op0_limb_13_col54.clone() * op1_limb_5_col75.clone())) + + (op0_limb_14_col55.clone() * op1_limb_4_col74.clone())) + + (op0_limb_15_col56.clone() * op1_limb_3_col73.clone())) + + (op0_limb_16_col57.clone() * op1_limb_2_col72.clone())) + + (op0_limb_17_col58.clone() * op1_limb_1_col71.clone())) + + (op0_limb_18_col59.clone() * op1_limb_0_col70.clone())); + let conv_tmp_1435 = (((((((((((((((((((((M31_0.clone() + - dst_limb_19_col31.clone()) + + (op0_limb_0_col41.clone() * op1_limb_19_col89.clone())) + + (op0_limb_1_col42.clone() * op1_limb_18_col88.clone())) + + (op0_limb_2_col43.clone() * op1_limb_17_col87.clone())) + + (op0_limb_3_col44.clone() * op1_limb_16_col86.clone())) + + (op0_limb_4_col45.clone() * op1_limb_15_col85.clone())) + + (op0_limb_5_col46.clone() * op1_limb_14_col84.clone())) + + (op0_limb_6_col47.clone() * op1_limb_13_col83.clone())) + + (op0_limb_7_col48.clone() * op1_limb_12_col82.clone())) + + (op0_limb_8_col49.clone() * op1_limb_11_col81.clone())) + + (op0_limb_9_col50.clone() * op1_limb_10_col80.clone())) + + (op0_limb_10_col51.clone() * op1_limb_9_col79.clone())) + + (op0_limb_11_col52.clone() * op1_limb_8_col78.clone())) + + (op0_limb_12_col53.clone() * op1_limb_7_col77.clone())) + + (op0_limb_13_col54.clone() * op1_limb_6_col76.clone())) + + (op0_limb_14_col55.clone() * op1_limb_5_col75.clone())) + + (op0_limb_15_col56.clone() * op1_limb_4_col74.clone())) + + (op0_limb_16_col57.clone() * op1_limb_3_col73.clone())) + + (op0_limb_17_col58.clone() * op1_limb_2_col72.clone())) + + (op0_limb_18_col59.clone() * op1_limb_1_col71.clone())) + + (op0_limb_19_col60.clone() * op1_limb_0_col70.clone())); + let conv_tmp_1436 = ((((((((((((((((((((((M31_0.clone() + - dst_limb_20_col32.clone()) + + (op0_limb_0_col41.clone() * op1_limb_20_col90.clone())) + + (op0_limb_1_col42.clone() * op1_limb_19_col89.clone())) + + (op0_limb_2_col43.clone() * op1_limb_18_col88.clone())) + + (op0_limb_3_col44.clone() * op1_limb_17_col87.clone())) + + (op0_limb_4_col45.clone() * op1_limb_16_col86.clone())) + + (op0_limb_5_col46.clone() * op1_limb_15_col85.clone())) + + (op0_limb_6_col47.clone() * op1_limb_14_col84.clone())) + + (op0_limb_7_col48.clone() * op1_limb_13_col83.clone())) + + (op0_limb_8_col49.clone() * op1_limb_12_col82.clone())) + + (op0_limb_9_col50.clone() * op1_limb_11_col81.clone())) + + (op0_limb_10_col51.clone() * op1_limb_10_col80.clone())) + + (op0_limb_11_col52.clone() * op1_limb_9_col79.clone())) + + (op0_limb_12_col53.clone() * op1_limb_8_col78.clone())) + + (op0_limb_13_col54.clone() * op1_limb_7_col77.clone())) + + (op0_limb_14_col55.clone() * op1_limb_6_col76.clone())) + + (op0_limb_15_col56.clone() * op1_limb_5_col75.clone())) + + (op0_limb_16_col57.clone() * op1_limb_4_col74.clone())) + + (op0_limb_17_col58.clone() * op1_limb_3_col73.clone())) + + (op0_limb_18_col59.clone() * op1_limb_2_col72.clone())) + + (op0_limb_19_col60.clone() * op1_limb_1_col71.clone())) + + (op0_limb_20_col61.clone() * op1_limb_0_col70.clone())); + let conv_tmp_1437 = (((((((((((((((((((((((M31_0.clone() + - dst_limb_21_col33.clone()) + + (op0_limb_0_col41.clone() * op1_limb_21_col91.clone())) + + (op0_limb_1_col42.clone() * op1_limb_20_col90.clone())) + + (op0_limb_2_col43.clone() * op1_limb_19_col89.clone())) + + (op0_limb_3_col44.clone() * op1_limb_18_col88.clone())) + + (op0_limb_4_col45.clone() * op1_limb_17_col87.clone())) + + (op0_limb_5_col46.clone() * op1_limb_16_col86.clone())) + + (op0_limb_6_col47.clone() * op1_limb_15_col85.clone())) + + (op0_limb_7_col48.clone() * op1_limb_14_col84.clone())) + + (op0_limb_8_col49.clone() * op1_limb_13_col83.clone())) + + (op0_limb_9_col50.clone() * op1_limb_12_col82.clone())) + + (op0_limb_10_col51.clone() * op1_limb_11_col81.clone())) + + (op0_limb_11_col52.clone() * op1_limb_10_col80.clone())) + + (op0_limb_12_col53.clone() * op1_limb_9_col79.clone())) + + (op0_limb_13_col54.clone() * op1_limb_8_col78.clone())) + + (op0_limb_14_col55.clone() * op1_limb_7_col77.clone())) + + (op0_limb_15_col56.clone() * op1_limb_6_col76.clone())) + + (op0_limb_16_col57.clone() * op1_limb_5_col75.clone())) + + (op0_limb_17_col58.clone() * op1_limb_4_col74.clone())) + + (op0_limb_18_col59.clone() * op1_limb_3_col73.clone())) + + (op0_limb_19_col60.clone() * op1_limb_2_col72.clone())) + + (op0_limb_20_col61.clone() * op1_limb_1_col71.clone())) + + (op0_limb_21_col62.clone() * op1_limb_0_col70.clone())); + let conv_tmp_1438 = ((((((((((((((((((((((((M31_0.clone() + - dst_limb_22_col34.clone()) + + (op0_limb_0_col41.clone() * op1_limb_22_col92.clone())) + + (op0_limb_1_col42.clone() * op1_limb_21_col91.clone())) + + (op0_limb_2_col43.clone() * op1_limb_20_col90.clone())) + + (op0_limb_3_col44.clone() * op1_limb_19_col89.clone())) + + (op0_limb_4_col45.clone() * op1_limb_18_col88.clone())) + + (op0_limb_5_col46.clone() * op1_limb_17_col87.clone())) + + (op0_limb_6_col47.clone() * op1_limb_16_col86.clone())) + + (op0_limb_7_col48.clone() * op1_limb_15_col85.clone())) + + (op0_limb_8_col49.clone() * op1_limb_14_col84.clone())) + + (op0_limb_9_col50.clone() * op1_limb_13_col83.clone())) + + (op0_limb_10_col51.clone() * op1_limb_12_col82.clone())) + + (op0_limb_11_col52.clone() * op1_limb_11_col81.clone())) + + (op0_limb_12_col53.clone() * op1_limb_10_col80.clone())) + + (op0_limb_13_col54.clone() * op1_limb_9_col79.clone())) + + (op0_limb_14_col55.clone() * op1_limb_8_col78.clone())) + + (op0_limb_15_col56.clone() * op1_limb_7_col77.clone())) + + (op0_limb_16_col57.clone() * op1_limb_6_col76.clone())) + + (op0_limb_17_col58.clone() * op1_limb_5_col75.clone())) + + (op0_limb_18_col59.clone() * op1_limb_4_col74.clone())) + + (op0_limb_19_col60.clone() * op1_limb_3_col73.clone())) + + (op0_limb_20_col61.clone() * op1_limb_2_col72.clone())) + + (op0_limb_21_col62.clone() * op1_limb_1_col71.clone())) + + (op0_limb_22_col63.clone() * op1_limb_0_col70.clone())); + let conv_tmp_1439 = (((((((((((((((((((((((((M31_0.clone() + - dst_limb_23_col35.clone()) + + (op0_limb_0_col41.clone() * op1_limb_23_col93.clone())) + + (op0_limb_1_col42.clone() * op1_limb_22_col92.clone())) + + (op0_limb_2_col43.clone() * op1_limb_21_col91.clone())) + + (op0_limb_3_col44.clone() * op1_limb_20_col90.clone())) + + (op0_limb_4_col45.clone() * op1_limb_19_col89.clone())) + + (op0_limb_5_col46.clone() * op1_limb_18_col88.clone())) + + (op0_limb_6_col47.clone() * op1_limb_17_col87.clone())) + + (op0_limb_7_col48.clone() * op1_limb_16_col86.clone())) + + (op0_limb_8_col49.clone() * op1_limb_15_col85.clone())) + + (op0_limb_9_col50.clone() * op1_limb_14_col84.clone())) + + (op0_limb_10_col51.clone() * op1_limb_13_col83.clone())) + + (op0_limb_11_col52.clone() * op1_limb_12_col82.clone())) + + (op0_limb_12_col53.clone() * op1_limb_11_col81.clone())) + + (op0_limb_13_col54.clone() * op1_limb_10_col80.clone())) + + (op0_limb_14_col55.clone() * op1_limb_9_col79.clone())) + + (op0_limb_15_col56.clone() * op1_limb_8_col78.clone())) + + (op0_limb_16_col57.clone() * op1_limb_7_col77.clone())) + + (op0_limb_17_col58.clone() * op1_limb_6_col76.clone())) + + (op0_limb_18_col59.clone() * op1_limb_5_col75.clone())) + + (op0_limb_19_col60.clone() * op1_limb_4_col74.clone())) + + (op0_limb_20_col61.clone() * op1_limb_3_col73.clone())) + + (op0_limb_21_col62.clone() * op1_limb_2_col72.clone())) + + (op0_limb_22_col63.clone() * op1_limb_1_col71.clone())) + + (op0_limb_23_col64.clone() * op1_limb_0_col70.clone())); + let conv_tmp_1440 = ((((((((((((((((((((((((((M31_0.clone() + - dst_limb_24_col36.clone()) + + (op0_limb_0_col41.clone() * op1_limb_24_col94.clone())) + + (op0_limb_1_col42.clone() * op1_limb_23_col93.clone())) + + (op0_limb_2_col43.clone() * op1_limb_22_col92.clone())) + + (op0_limb_3_col44.clone() * op1_limb_21_col91.clone())) + + (op0_limb_4_col45.clone() * op1_limb_20_col90.clone())) + + (op0_limb_5_col46.clone() * op1_limb_19_col89.clone())) + + (op0_limb_6_col47.clone() * op1_limb_18_col88.clone())) + + (op0_limb_7_col48.clone() * op1_limb_17_col87.clone())) + + (op0_limb_8_col49.clone() * op1_limb_16_col86.clone())) + + (op0_limb_9_col50.clone() * op1_limb_15_col85.clone())) + + (op0_limb_10_col51.clone() * op1_limb_14_col84.clone())) + + (op0_limb_11_col52.clone() * op1_limb_13_col83.clone())) + + (op0_limb_12_col53.clone() * op1_limb_12_col82.clone())) + + (op0_limb_13_col54.clone() * op1_limb_11_col81.clone())) + + (op0_limb_14_col55.clone() * op1_limb_10_col80.clone())) + + (op0_limb_15_col56.clone() * op1_limb_9_col79.clone())) + + (op0_limb_16_col57.clone() * op1_limb_8_col78.clone())) + + (op0_limb_17_col58.clone() * op1_limb_7_col77.clone())) + + (op0_limb_18_col59.clone() * op1_limb_6_col76.clone())) + + (op0_limb_19_col60.clone() * op1_limb_5_col75.clone())) + + (op0_limb_20_col61.clone() * op1_limb_4_col74.clone())) + + (op0_limb_21_col62.clone() * op1_limb_3_col73.clone())) + + (op0_limb_22_col63.clone() * op1_limb_2_col72.clone())) + + (op0_limb_23_col64.clone() * op1_limb_1_col71.clone())) + + (op0_limb_24_col65.clone() * op1_limb_0_col70.clone())); + let conv_tmp_1441 = (((((((((((((((((((((((((((M31_0.clone() + - dst_limb_25_col37.clone()) + + (op0_limb_0_col41.clone() * op1_limb_25_col95.clone())) + + (op0_limb_1_col42.clone() * op1_limb_24_col94.clone())) + + (op0_limb_2_col43.clone() * op1_limb_23_col93.clone())) + + (op0_limb_3_col44.clone() * op1_limb_22_col92.clone())) + + (op0_limb_4_col45.clone() * op1_limb_21_col91.clone())) + + (op0_limb_5_col46.clone() * op1_limb_20_col90.clone())) + + (op0_limb_6_col47.clone() * op1_limb_19_col89.clone())) + + (op0_limb_7_col48.clone() * op1_limb_18_col88.clone())) + + (op0_limb_8_col49.clone() * op1_limb_17_col87.clone())) + + (op0_limb_9_col50.clone() * op1_limb_16_col86.clone())) + + (op0_limb_10_col51.clone() * op1_limb_15_col85.clone())) + + (op0_limb_11_col52.clone() * op1_limb_14_col84.clone())) + + (op0_limb_12_col53.clone() * op1_limb_13_col83.clone())) + + (op0_limb_13_col54.clone() * op1_limb_12_col82.clone())) + + (op0_limb_14_col55.clone() * op1_limb_11_col81.clone())) + + (op0_limb_15_col56.clone() * op1_limb_10_col80.clone())) + + (op0_limb_16_col57.clone() * op1_limb_9_col79.clone())) + + (op0_limb_17_col58.clone() * op1_limb_8_col78.clone())) + + (op0_limb_18_col59.clone() * op1_limb_7_col77.clone())) + + (op0_limb_19_col60.clone() * op1_limb_6_col76.clone())) + + (op0_limb_20_col61.clone() * op1_limb_5_col75.clone())) + + (op0_limb_21_col62.clone() * op1_limb_4_col74.clone())) + + (op0_limb_22_col63.clone() * op1_limb_3_col73.clone())) + + (op0_limb_23_col64.clone() * op1_limb_2_col72.clone())) + + (op0_limb_24_col65.clone() * op1_limb_1_col71.clone())) + + (op0_limb_25_col66.clone() * op1_limb_0_col70.clone())); + let conv_tmp_1442 = ((((((((((((((((((((((((((((M31_0.clone() + - dst_limb_26_col38.clone()) + + (op0_limb_0_col41.clone() * op1_limb_26_col96.clone())) + + (op0_limb_1_col42.clone() * op1_limb_25_col95.clone())) + + (op0_limb_2_col43.clone() * op1_limb_24_col94.clone())) + + (op0_limb_3_col44.clone() * op1_limb_23_col93.clone())) + + (op0_limb_4_col45.clone() * op1_limb_22_col92.clone())) + + (op0_limb_5_col46.clone() * op1_limb_21_col91.clone())) + + (op0_limb_6_col47.clone() * op1_limb_20_col90.clone())) + + (op0_limb_7_col48.clone() * op1_limb_19_col89.clone())) + + (op0_limb_8_col49.clone() * op1_limb_18_col88.clone())) + + (op0_limb_9_col50.clone() * op1_limb_17_col87.clone())) + + (op0_limb_10_col51.clone() * op1_limb_16_col86.clone())) + + (op0_limb_11_col52.clone() * op1_limb_15_col85.clone())) + + (op0_limb_12_col53.clone() * op1_limb_14_col84.clone())) + + (op0_limb_13_col54.clone() * op1_limb_13_col83.clone())) + + (op0_limb_14_col55.clone() * op1_limb_12_col82.clone())) + + (op0_limb_15_col56.clone() * op1_limb_11_col81.clone())) + + (op0_limb_16_col57.clone() * op1_limb_10_col80.clone())) + + (op0_limb_17_col58.clone() * op1_limb_9_col79.clone())) + + (op0_limb_18_col59.clone() * op1_limb_8_col78.clone())) + + (op0_limb_19_col60.clone() * op1_limb_7_col77.clone())) + + (op0_limb_20_col61.clone() * op1_limb_6_col76.clone())) + + (op0_limb_21_col62.clone() * op1_limb_5_col75.clone())) + + (op0_limb_22_col63.clone() * op1_limb_4_col74.clone())) + + (op0_limb_23_col64.clone() * op1_limb_3_col73.clone())) + + (op0_limb_24_col65.clone() * op1_limb_2_col72.clone())) + + (op0_limb_25_col66.clone() * op1_limb_1_col71.clone())) + + (op0_limb_26_col67.clone() * op1_limb_0_col70.clone())); + let conv_tmp_1443 = (((((((((((((((((((((((((((((M31_0.clone() + - dst_limb_27_col39.clone()) + + (op0_limb_0_col41.clone() * op1_limb_27_col97.clone())) + + (op0_limb_1_col42.clone() * op1_limb_26_col96.clone())) + + (op0_limb_2_col43.clone() * op1_limb_25_col95.clone())) + + (op0_limb_3_col44.clone() * op1_limb_24_col94.clone())) + + (op0_limb_4_col45.clone() * op1_limb_23_col93.clone())) + + (op0_limb_5_col46.clone() * op1_limb_22_col92.clone())) + + (op0_limb_6_col47.clone() * op1_limb_21_col91.clone())) + + (op0_limb_7_col48.clone() * op1_limb_20_col90.clone())) + + (op0_limb_8_col49.clone() * op1_limb_19_col89.clone())) + + (op0_limb_9_col50.clone() * op1_limb_18_col88.clone())) + + (op0_limb_10_col51.clone() * op1_limb_17_col87.clone())) + + (op0_limb_11_col52.clone() * op1_limb_16_col86.clone())) + + (op0_limb_12_col53.clone() * op1_limb_15_col85.clone())) + + (op0_limb_13_col54.clone() * op1_limb_14_col84.clone())) + + (op0_limb_14_col55.clone() * op1_limb_13_col83.clone())) + + (op0_limb_15_col56.clone() * op1_limb_12_col82.clone())) + + (op0_limb_16_col57.clone() * op1_limb_11_col81.clone())) + + (op0_limb_17_col58.clone() * op1_limb_10_col80.clone())) + + (op0_limb_18_col59.clone() * op1_limb_9_col79.clone())) + + (op0_limb_19_col60.clone() * op1_limb_8_col78.clone())) + + (op0_limb_20_col61.clone() * op1_limb_7_col77.clone())) + + (op0_limb_21_col62.clone() * op1_limb_6_col76.clone())) + + (op0_limb_22_col63.clone() * op1_limb_5_col75.clone())) + + (op0_limb_23_col64.clone() * op1_limb_4_col74.clone())) + + (op0_limb_24_col65.clone() * op1_limb_3_col73.clone())) + + (op0_limb_25_col66.clone() * op1_limb_2_col72.clone())) + + (op0_limb_26_col67.clone() * op1_limb_1_col71.clone())) + + (op0_limb_27_col68.clone() * op1_limb_0_col70.clone())); + let conv_tmp_1444 = (((((((((((((((((((((((((((M31_0.clone() + + (op0_limb_1_col42.clone() * op1_limb_27_col97.clone())) + + (op0_limb_2_col43.clone() * op1_limb_26_col96.clone())) + + (op0_limb_3_col44.clone() * op1_limb_25_col95.clone())) + + (op0_limb_4_col45.clone() * op1_limb_24_col94.clone())) + + (op0_limb_5_col46.clone() * op1_limb_23_col93.clone())) + + (op0_limb_6_col47.clone() * op1_limb_22_col92.clone())) + + (op0_limb_7_col48.clone() * op1_limb_21_col91.clone())) + + (op0_limb_8_col49.clone() * op1_limb_20_col90.clone())) + + (op0_limb_9_col50.clone() * op1_limb_19_col89.clone())) + + (op0_limb_10_col51.clone() * op1_limb_18_col88.clone())) + + (op0_limb_11_col52.clone() * op1_limb_17_col87.clone())) + + (op0_limb_12_col53.clone() * op1_limb_16_col86.clone())) + + (op0_limb_13_col54.clone() * op1_limb_15_col85.clone())) + + (op0_limb_14_col55.clone() * op1_limb_14_col84.clone())) + + (op0_limb_15_col56.clone() * op1_limb_13_col83.clone())) + + (op0_limb_16_col57.clone() * op1_limb_12_col82.clone())) + + (op0_limb_17_col58.clone() * op1_limb_11_col81.clone())) + + (op0_limb_18_col59.clone() * op1_limb_10_col80.clone())) + + (op0_limb_19_col60.clone() * op1_limb_9_col79.clone())) + + (op0_limb_20_col61.clone() * op1_limb_8_col78.clone())) + + (op0_limb_21_col62.clone() * op1_limb_7_col77.clone())) + + (op0_limb_22_col63.clone() * op1_limb_6_col76.clone())) + + (op0_limb_23_col64.clone() * op1_limb_5_col75.clone())) + + (op0_limb_24_col65.clone() * op1_limb_4_col74.clone())) + + (op0_limb_25_col66.clone() * op1_limb_3_col73.clone())) + + (op0_limb_26_col67.clone() * op1_limb_2_col72.clone())) + + (op0_limb_27_col68.clone() * op1_limb_1_col71.clone())); + let conv_tmp_1445 = ((((((((((((((((((((((((((M31_0.clone() + + (op0_limb_2_col43.clone() * op1_limb_27_col97.clone())) + + (op0_limb_3_col44.clone() * op1_limb_26_col96.clone())) + + (op0_limb_4_col45.clone() * op1_limb_25_col95.clone())) + + (op0_limb_5_col46.clone() * op1_limb_24_col94.clone())) + + (op0_limb_6_col47.clone() * op1_limb_23_col93.clone())) + + (op0_limb_7_col48.clone() * op1_limb_22_col92.clone())) + + (op0_limb_8_col49.clone() * op1_limb_21_col91.clone())) + + (op0_limb_9_col50.clone() * op1_limb_20_col90.clone())) + + (op0_limb_10_col51.clone() * op1_limb_19_col89.clone())) + + (op0_limb_11_col52.clone() * op1_limb_18_col88.clone())) + + (op0_limb_12_col53.clone() * op1_limb_17_col87.clone())) + + (op0_limb_13_col54.clone() * op1_limb_16_col86.clone())) + + (op0_limb_14_col55.clone() * op1_limb_15_col85.clone())) + + (op0_limb_15_col56.clone() * op1_limb_14_col84.clone())) + + (op0_limb_16_col57.clone() * op1_limb_13_col83.clone())) + + (op0_limb_17_col58.clone() * op1_limb_12_col82.clone())) + + (op0_limb_18_col59.clone() * op1_limb_11_col81.clone())) + + (op0_limb_19_col60.clone() * op1_limb_10_col80.clone())) + + (op0_limb_20_col61.clone() * op1_limb_9_col79.clone())) + + (op0_limb_21_col62.clone() * op1_limb_8_col78.clone())) + + (op0_limb_22_col63.clone() * op1_limb_7_col77.clone())) + + (op0_limb_23_col64.clone() * op1_limb_6_col76.clone())) + + (op0_limb_24_col65.clone() * op1_limb_5_col75.clone())) + + (op0_limb_25_col66.clone() * op1_limb_4_col74.clone())) + + (op0_limb_26_col67.clone() * op1_limb_3_col73.clone())) + + (op0_limb_27_col68.clone() * op1_limb_2_col72.clone())); + let conv_tmp_1446 = (((((((((((((((((((((((((M31_0.clone() + + (op0_limb_3_col44.clone() * op1_limb_27_col97.clone())) + + (op0_limb_4_col45.clone() * op1_limb_26_col96.clone())) + + (op0_limb_5_col46.clone() * op1_limb_25_col95.clone())) + + (op0_limb_6_col47.clone() * op1_limb_24_col94.clone())) + + (op0_limb_7_col48.clone() * op1_limb_23_col93.clone())) + + (op0_limb_8_col49.clone() * op1_limb_22_col92.clone())) + + (op0_limb_9_col50.clone() * op1_limb_21_col91.clone())) + + (op0_limb_10_col51.clone() * op1_limb_20_col90.clone())) + + (op0_limb_11_col52.clone() * op1_limb_19_col89.clone())) + + (op0_limb_12_col53.clone() * op1_limb_18_col88.clone())) + + (op0_limb_13_col54.clone() * op1_limb_17_col87.clone())) + + (op0_limb_14_col55.clone() * op1_limb_16_col86.clone())) + + (op0_limb_15_col56.clone() * op1_limb_15_col85.clone())) + + (op0_limb_16_col57.clone() * op1_limb_14_col84.clone())) + + (op0_limb_17_col58.clone() * op1_limb_13_col83.clone())) + + (op0_limb_18_col59.clone() * op1_limb_12_col82.clone())) + + (op0_limb_19_col60.clone() * op1_limb_11_col81.clone())) + + (op0_limb_20_col61.clone() * op1_limb_10_col80.clone())) + + (op0_limb_21_col62.clone() * op1_limb_9_col79.clone())) + + (op0_limb_22_col63.clone() * op1_limb_8_col78.clone())) + + (op0_limb_23_col64.clone() * op1_limb_7_col77.clone())) + + (op0_limb_24_col65.clone() * op1_limb_6_col76.clone())) + + (op0_limb_25_col66.clone() * op1_limb_5_col75.clone())) + + (op0_limb_26_col67.clone() * op1_limb_4_col74.clone())) + + (op0_limb_27_col68.clone() * op1_limb_3_col73.clone())); + let conv_tmp_1447 = ((((((((((((((((((((((((M31_0.clone() + + (op0_limb_4_col45.clone() * op1_limb_27_col97.clone())) + + (op0_limb_5_col46.clone() * op1_limb_26_col96.clone())) + + (op0_limb_6_col47.clone() * op1_limb_25_col95.clone())) + + (op0_limb_7_col48.clone() * op1_limb_24_col94.clone())) + + (op0_limb_8_col49.clone() * op1_limb_23_col93.clone())) + + (op0_limb_9_col50.clone() * op1_limb_22_col92.clone())) + + (op0_limb_10_col51.clone() * op1_limb_21_col91.clone())) + + (op0_limb_11_col52.clone() * op1_limb_20_col90.clone())) + + (op0_limb_12_col53.clone() * op1_limb_19_col89.clone())) + + (op0_limb_13_col54.clone() * op1_limb_18_col88.clone())) + + (op0_limb_14_col55.clone() * op1_limb_17_col87.clone())) + + (op0_limb_15_col56.clone() * op1_limb_16_col86.clone())) + + (op0_limb_16_col57.clone() * op1_limb_15_col85.clone())) + + (op0_limb_17_col58.clone() * op1_limb_14_col84.clone())) + + (op0_limb_18_col59.clone() * op1_limb_13_col83.clone())) + + (op0_limb_19_col60.clone() * op1_limb_12_col82.clone())) + + (op0_limb_20_col61.clone() * op1_limb_11_col81.clone())) + + (op0_limb_21_col62.clone() * op1_limb_10_col80.clone())) + + (op0_limb_22_col63.clone() * op1_limb_9_col79.clone())) + + (op0_limb_23_col64.clone() * op1_limb_8_col78.clone())) + + (op0_limb_24_col65.clone() * op1_limb_7_col77.clone())) + + (op0_limb_25_col66.clone() * op1_limb_6_col76.clone())) + + (op0_limb_26_col67.clone() * op1_limb_5_col75.clone())) + + (op0_limb_27_col68.clone() * op1_limb_4_col74.clone())); + let conv_tmp_1448 = (((((((((((((((((((((((M31_0.clone() + + (op0_limb_5_col46.clone() * op1_limb_27_col97.clone())) + + (op0_limb_6_col47.clone() * op1_limb_26_col96.clone())) + + (op0_limb_7_col48.clone() * op1_limb_25_col95.clone())) + + (op0_limb_8_col49.clone() * op1_limb_24_col94.clone())) + + (op0_limb_9_col50.clone() * op1_limb_23_col93.clone())) + + (op0_limb_10_col51.clone() * op1_limb_22_col92.clone())) + + (op0_limb_11_col52.clone() * op1_limb_21_col91.clone())) + + (op0_limb_12_col53.clone() * op1_limb_20_col90.clone())) + + (op0_limb_13_col54.clone() * op1_limb_19_col89.clone())) + + (op0_limb_14_col55.clone() * op1_limb_18_col88.clone())) + + (op0_limb_15_col56.clone() * op1_limb_17_col87.clone())) + + (op0_limb_16_col57.clone() * op1_limb_16_col86.clone())) + + (op0_limb_17_col58.clone() * op1_limb_15_col85.clone())) + + (op0_limb_18_col59.clone() * op1_limb_14_col84.clone())) + + (op0_limb_19_col60.clone() * op1_limb_13_col83.clone())) + + (op0_limb_20_col61.clone() * op1_limb_12_col82.clone())) + + (op0_limb_21_col62.clone() * op1_limb_11_col81.clone())) + + (op0_limb_22_col63.clone() * op1_limb_10_col80.clone())) + + (op0_limb_23_col64.clone() * op1_limb_9_col79.clone())) + + (op0_limb_24_col65.clone() * op1_limb_8_col78.clone())) + + (op0_limb_25_col66.clone() * op1_limb_7_col77.clone())) + + (op0_limb_26_col67.clone() * op1_limb_6_col76.clone())) + + (op0_limb_27_col68.clone() * op1_limb_5_col75.clone())); + let conv_tmp_1449 = ((((((((((((((((((((((M31_0.clone() + + (op0_limb_6_col47.clone() * op1_limb_27_col97.clone())) + + (op0_limb_7_col48.clone() * op1_limb_26_col96.clone())) + + (op0_limb_8_col49.clone() * op1_limb_25_col95.clone())) + + (op0_limb_9_col50.clone() * op1_limb_24_col94.clone())) + + (op0_limb_10_col51.clone() * op1_limb_23_col93.clone())) + + (op0_limb_11_col52.clone() * op1_limb_22_col92.clone())) + + (op0_limb_12_col53.clone() * op1_limb_21_col91.clone())) + + (op0_limb_13_col54.clone() * op1_limb_20_col90.clone())) + + (op0_limb_14_col55.clone() * op1_limb_19_col89.clone())) + + (op0_limb_15_col56.clone() * op1_limb_18_col88.clone())) + + (op0_limb_16_col57.clone() * op1_limb_17_col87.clone())) + + (op0_limb_17_col58.clone() * op1_limb_16_col86.clone())) + + (op0_limb_18_col59.clone() * op1_limb_15_col85.clone())) + + (op0_limb_19_col60.clone() * op1_limb_14_col84.clone())) + + (op0_limb_20_col61.clone() * op1_limb_13_col83.clone())) + + (op0_limb_21_col62.clone() * op1_limb_12_col82.clone())) + + (op0_limb_22_col63.clone() * op1_limb_11_col81.clone())) + + (op0_limb_23_col64.clone() * op1_limb_10_col80.clone())) + + (op0_limb_24_col65.clone() * op1_limb_9_col79.clone())) + + (op0_limb_25_col66.clone() * op1_limb_8_col78.clone())) + + (op0_limb_26_col67.clone() * op1_limb_7_col77.clone())) + + (op0_limb_27_col68.clone() * op1_limb_6_col76.clone())); + let conv_tmp_1450 = (((((((((((((((((((((M31_0.clone() + + (op0_limb_7_col48.clone() * op1_limb_27_col97.clone())) + + (op0_limb_8_col49.clone() * op1_limb_26_col96.clone())) + + (op0_limb_9_col50.clone() * op1_limb_25_col95.clone())) + + (op0_limb_10_col51.clone() * op1_limb_24_col94.clone())) + + (op0_limb_11_col52.clone() * op1_limb_23_col93.clone())) + + (op0_limb_12_col53.clone() * op1_limb_22_col92.clone())) + + (op0_limb_13_col54.clone() * op1_limb_21_col91.clone())) + + (op0_limb_14_col55.clone() * op1_limb_20_col90.clone())) + + (op0_limb_15_col56.clone() * op1_limb_19_col89.clone())) + + (op0_limb_16_col57.clone() * op1_limb_18_col88.clone())) + + (op0_limb_17_col58.clone() * op1_limb_17_col87.clone())) + + (op0_limb_18_col59.clone() * op1_limb_16_col86.clone())) + + (op0_limb_19_col60.clone() * op1_limb_15_col85.clone())) + + (op0_limb_20_col61.clone() * op1_limb_14_col84.clone())) + + (op0_limb_21_col62.clone() * op1_limb_13_col83.clone())) + + (op0_limb_22_col63.clone() * op1_limb_12_col82.clone())) + + (op0_limb_23_col64.clone() * op1_limb_11_col81.clone())) + + (op0_limb_24_col65.clone() * op1_limb_10_col80.clone())) + + (op0_limb_25_col66.clone() * op1_limb_9_col79.clone())) + + (op0_limb_26_col67.clone() * op1_limb_8_col78.clone())) + + (op0_limb_27_col68.clone() * op1_limb_7_col77.clone())); + let conv_tmp_1451 = ((((((((((((((((((((M31_0.clone() + + (op0_limb_8_col49.clone() * op1_limb_27_col97.clone())) + + (op0_limb_9_col50.clone() * op1_limb_26_col96.clone())) + + (op0_limb_10_col51.clone() * op1_limb_25_col95.clone())) + + (op0_limb_11_col52.clone() * op1_limb_24_col94.clone())) + + (op0_limb_12_col53.clone() * op1_limb_23_col93.clone())) + + (op0_limb_13_col54.clone() * op1_limb_22_col92.clone())) + + (op0_limb_14_col55.clone() * op1_limb_21_col91.clone())) + + (op0_limb_15_col56.clone() * op1_limb_20_col90.clone())) + + (op0_limb_16_col57.clone() * op1_limb_19_col89.clone())) + + (op0_limb_17_col58.clone() * op1_limb_18_col88.clone())) + + (op0_limb_18_col59.clone() * op1_limb_17_col87.clone())) + + (op0_limb_19_col60.clone() * op1_limb_16_col86.clone())) + + (op0_limb_20_col61.clone() * op1_limb_15_col85.clone())) + + (op0_limb_21_col62.clone() * op1_limb_14_col84.clone())) + + (op0_limb_22_col63.clone() * op1_limb_13_col83.clone())) + + (op0_limb_23_col64.clone() * op1_limb_12_col82.clone())) + + (op0_limb_24_col65.clone() * op1_limb_11_col81.clone())) + + (op0_limb_25_col66.clone() * op1_limb_10_col80.clone())) + + (op0_limb_26_col67.clone() * op1_limb_9_col79.clone())) + + (op0_limb_27_col68.clone() * op1_limb_8_col78.clone())); + let conv_tmp_1452 = (((((((((((((((((((M31_0.clone() + + (op0_limb_9_col50.clone() * op1_limb_27_col97.clone())) + + (op0_limb_10_col51.clone() * op1_limb_26_col96.clone())) + + (op0_limb_11_col52.clone() * op1_limb_25_col95.clone())) + + (op0_limb_12_col53.clone() * op1_limb_24_col94.clone())) + + (op0_limb_13_col54.clone() * op1_limb_23_col93.clone())) + + (op0_limb_14_col55.clone() * op1_limb_22_col92.clone())) + + (op0_limb_15_col56.clone() * op1_limb_21_col91.clone())) + + (op0_limb_16_col57.clone() * op1_limb_20_col90.clone())) + + (op0_limb_17_col58.clone() * op1_limb_19_col89.clone())) + + (op0_limb_18_col59.clone() * op1_limb_18_col88.clone())) + + (op0_limb_19_col60.clone() * op1_limb_17_col87.clone())) + + (op0_limb_20_col61.clone() * op1_limb_16_col86.clone())) + + (op0_limb_21_col62.clone() * op1_limb_15_col85.clone())) + + (op0_limb_22_col63.clone() * op1_limb_14_col84.clone())) + + (op0_limb_23_col64.clone() * op1_limb_13_col83.clone())) + + (op0_limb_24_col65.clone() * op1_limb_12_col82.clone())) + + (op0_limb_25_col66.clone() * op1_limb_11_col81.clone())) + + (op0_limb_26_col67.clone() * op1_limb_10_col80.clone())) + + (op0_limb_27_col68.clone() * op1_limb_9_col79.clone())); + let conv_tmp_1453 = ((((((((((((((((((M31_0.clone() + + (op0_limb_10_col51.clone() * op1_limb_27_col97.clone())) + + (op0_limb_11_col52.clone() * op1_limb_26_col96.clone())) + + (op0_limb_12_col53.clone() * op1_limb_25_col95.clone())) + + (op0_limb_13_col54.clone() * op1_limb_24_col94.clone())) + + (op0_limb_14_col55.clone() * op1_limb_23_col93.clone())) + + (op0_limb_15_col56.clone() * op1_limb_22_col92.clone())) + + (op0_limb_16_col57.clone() * op1_limb_21_col91.clone())) + + (op0_limb_17_col58.clone() * op1_limb_20_col90.clone())) + + (op0_limb_18_col59.clone() * op1_limb_19_col89.clone())) + + (op0_limb_19_col60.clone() * op1_limb_18_col88.clone())) + + (op0_limb_20_col61.clone() * op1_limb_17_col87.clone())) + + (op0_limb_21_col62.clone() * op1_limb_16_col86.clone())) + + (op0_limb_22_col63.clone() * op1_limb_15_col85.clone())) + + (op0_limb_23_col64.clone() * op1_limb_14_col84.clone())) + + (op0_limb_24_col65.clone() * op1_limb_13_col83.clone())) + + (op0_limb_25_col66.clone() * op1_limb_12_col82.clone())) + + (op0_limb_26_col67.clone() * op1_limb_11_col81.clone())) + + (op0_limb_27_col68.clone() * op1_limb_10_col80.clone())); + let conv_tmp_1454 = (((((((((((((((((M31_0.clone() + + (op0_limb_11_col52.clone() * op1_limb_27_col97.clone())) + + (op0_limb_12_col53.clone() * op1_limb_26_col96.clone())) + + (op0_limb_13_col54.clone() * op1_limb_25_col95.clone())) + + (op0_limb_14_col55.clone() * op1_limb_24_col94.clone())) + + (op0_limb_15_col56.clone() * op1_limb_23_col93.clone())) + + (op0_limb_16_col57.clone() * op1_limb_22_col92.clone())) + + (op0_limb_17_col58.clone() * op1_limb_21_col91.clone())) + + (op0_limb_18_col59.clone() * op1_limb_20_col90.clone())) + + (op0_limb_19_col60.clone() * op1_limb_19_col89.clone())) + + (op0_limb_20_col61.clone() * op1_limb_18_col88.clone())) + + (op0_limb_21_col62.clone() * op1_limb_17_col87.clone())) + + (op0_limb_22_col63.clone() * op1_limb_16_col86.clone())) + + (op0_limb_23_col64.clone() * op1_limb_15_col85.clone())) + + (op0_limb_24_col65.clone() * op1_limb_14_col84.clone())) + + (op0_limb_25_col66.clone() * op1_limb_13_col83.clone())) + + (op0_limb_26_col67.clone() * op1_limb_12_col82.clone())) + + (op0_limb_27_col68.clone() * op1_limb_11_col81.clone())); + let conv_tmp_1455 = ((((((((((((((((M31_0.clone() + + (op0_limb_12_col53.clone() * op1_limb_27_col97.clone())) + + (op0_limb_13_col54.clone() * op1_limb_26_col96.clone())) + + (op0_limb_14_col55.clone() * op1_limb_25_col95.clone())) + + (op0_limb_15_col56.clone() * op1_limb_24_col94.clone())) + + (op0_limb_16_col57.clone() * op1_limb_23_col93.clone())) + + (op0_limb_17_col58.clone() * op1_limb_22_col92.clone())) + + (op0_limb_18_col59.clone() * op1_limb_21_col91.clone())) + + (op0_limb_19_col60.clone() * op1_limb_20_col90.clone())) + + (op0_limb_20_col61.clone() * op1_limb_19_col89.clone())) + + (op0_limb_21_col62.clone() * op1_limb_18_col88.clone())) + + (op0_limb_22_col63.clone() * op1_limb_17_col87.clone())) + + (op0_limb_23_col64.clone() * op1_limb_16_col86.clone())) + + (op0_limb_24_col65.clone() * op1_limb_15_col85.clone())) + + (op0_limb_25_col66.clone() * op1_limb_14_col84.clone())) + + (op0_limb_26_col67.clone() * op1_limb_13_col83.clone())) + + (op0_limb_27_col68.clone() * op1_limb_12_col82.clone())); + let conv_tmp_1456 = (((((((((((((((M31_0.clone() + + (op0_limb_13_col54.clone() * op1_limb_27_col97.clone())) + + (op0_limb_14_col55.clone() * op1_limb_26_col96.clone())) + + (op0_limb_15_col56.clone() * op1_limb_25_col95.clone())) + + (op0_limb_16_col57.clone() * op1_limb_24_col94.clone())) + + (op0_limb_17_col58.clone() * op1_limb_23_col93.clone())) + + (op0_limb_18_col59.clone() * op1_limb_22_col92.clone())) + + (op0_limb_19_col60.clone() * op1_limb_21_col91.clone())) + + (op0_limb_20_col61.clone() * op1_limb_20_col90.clone())) + + (op0_limb_21_col62.clone() * op1_limb_19_col89.clone())) + + (op0_limb_22_col63.clone() * op1_limb_18_col88.clone())) + + (op0_limb_23_col64.clone() * op1_limb_17_col87.clone())) + + (op0_limb_24_col65.clone() * op1_limb_16_col86.clone())) + + (op0_limb_25_col66.clone() * op1_limb_15_col85.clone())) + + (op0_limb_26_col67.clone() * op1_limb_14_col84.clone())) + + (op0_limb_27_col68.clone() * op1_limb_13_col83.clone())); + let conv_tmp_1457 = ((((((((((((((M31_0.clone() + + (op0_limb_14_col55.clone() * op1_limb_27_col97.clone())) + + (op0_limb_15_col56.clone() * op1_limb_26_col96.clone())) + + (op0_limb_16_col57.clone() * op1_limb_25_col95.clone())) + + (op0_limb_17_col58.clone() * op1_limb_24_col94.clone())) + + (op0_limb_18_col59.clone() * op1_limb_23_col93.clone())) + + (op0_limb_19_col60.clone() * op1_limb_22_col92.clone())) + + (op0_limb_20_col61.clone() * op1_limb_21_col91.clone())) + + (op0_limb_21_col62.clone() * op1_limb_20_col90.clone())) + + (op0_limb_22_col63.clone() * op1_limb_19_col89.clone())) + + (op0_limb_23_col64.clone() * op1_limb_18_col88.clone())) + + (op0_limb_24_col65.clone() * op1_limb_17_col87.clone())) + + (op0_limb_25_col66.clone() * op1_limb_16_col86.clone())) + + (op0_limb_26_col67.clone() * op1_limb_15_col85.clone())) + + (op0_limb_27_col68.clone() * op1_limb_14_col84.clone())); + let conv_tmp_1458 = (((((((((((((M31_0.clone() + + (op0_limb_15_col56.clone() * op1_limb_27_col97.clone())) + + (op0_limb_16_col57.clone() * op1_limb_26_col96.clone())) + + (op0_limb_17_col58.clone() * op1_limb_25_col95.clone())) + + (op0_limb_18_col59.clone() * op1_limb_24_col94.clone())) + + (op0_limb_19_col60.clone() * op1_limb_23_col93.clone())) + + (op0_limb_20_col61.clone() * op1_limb_22_col92.clone())) + + (op0_limb_21_col62.clone() * op1_limb_21_col91.clone())) + + (op0_limb_22_col63.clone() * op1_limb_20_col90.clone())) + + (op0_limb_23_col64.clone() * op1_limb_19_col89.clone())) + + (op0_limb_24_col65.clone() * op1_limb_18_col88.clone())) + + (op0_limb_25_col66.clone() * op1_limb_17_col87.clone())) + + (op0_limb_26_col67.clone() * op1_limb_16_col86.clone())) + + (op0_limb_27_col68.clone() * op1_limb_15_col85.clone())); + let conv_tmp_1459 = ((((((((((((M31_0.clone() + + (op0_limb_16_col57.clone() * op1_limb_27_col97.clone())) + + (op0_limb_17_col58.clone() * op1_limb_26_col96.clone())) + + (op0_limb_18_col59.clone() * op1_limb_25_col95.clone())) + + (op0_limb_19_col60.clone() * op1_limb_24_col94.clone())) + + (op0_limb_20_col61.clone() * op1_limb_23_col93.clone())) + + (op0_limb_21_col62.clone() * op1_limb_22_col92.clone())) + + (op0_limb_22_col63.clone() * op1_limb_21_col91.clone())) + + (op0_limb_23_col64.clone() * op1_limb_20_col90.clone())) + + (op0_limb_24_col65.clone() * op1_limb_19_col89.clone())) + + (op0_limb_25_col66.clone() * op1_limb_18_col88.clone())) + + (op0_limb_26_col67.clone() * op1_limb_17_col87.clone())) + + (op0_limb_27_col68.clone() * op1_limb_16_col86.clone())); + let conv_tmp_1460 = (((((((((((M31_0.clone() + + (op0_limb_17_col58.clone() * op1_limb_27_col97.clone())) + + (op0_limb_18_col59.clone() * op1_limb_26_col96.clone())) + + (op0_limb_19_col60.clone() * op1_limb_25_col95.clone())) + + (op0_limb_20_col61.clone() * op1_limb_24_col94.clone())) + + (op0_limb_21_col62.clone() * op1_limb_23_col93.clone())) + + (op0_limb_22_col63.clone() * op1_limb_22_col92.clone())) + + (op0_limb_23_col64.clone() * op1_limb_21_col91.clone())) + + (op0_limb_24_col65.clone() * op1_limb_20_col90.clone())) + + (op0_limb_25_col66.clone() * op1_limb_19_col89.clone())) + + (op0_limb_26_col67.clone() * op1_limb_18_col88.clone())) + + (op0_limb_27_col68.clone() * op1_limb_17_col87.clone())); + let conv_tmp_1461 = ((((((((((M31_0.clone() + + (op0_limb_18_col59.clone() * op1_limb_27_col97.clone())) + + (op0_limb_19_col60.clone() * op1_limb_26_col96.clone())) + + (op0_limb_20_col61.clone() * op1_limb_25_col95.clone())) + + (op0_limb_21_col62.clone() * op1_limb_24_col94.clone())) + + (op0_limb_22_col63.clone() * op1_limb_23_col93.clone())) + + (op0_limb_23_col64.clone() * op1_limb_22_col92.clone())) + + (op0_limb_24_col65.clone() * op1_limb_21_col91.clone())) + + (op0_limb_25_col66.clone() * op1_limb_20_col90.clone())) + + (op0_limb_26_col67.clone() * op1_limb_19_col89.clone())) + + (op0_limb_27_col68.clone() * op1_limb_18_col88.clone())); + let conv_tmp_1462 = (((((((((M31_0.clone() + + (op0_limb_19_col60.clone() * op1_limb_27_col97.clone())) + + (op0_limb_20_col61.clone() * op1_limb_26_col96.clone())) + + (op0_limb_21_col62.clone() * op1_limb_25_col95.clone())) + + (op0_limb_22_col63.clone() * op1_limb_24_col94.clone())) + + (op0_limb_23_col64.clone() * op1_limb_23_col93.clone())) + + (op0_limb_24_col65.clone() * op1_limb_22_col92.clone())) + + (op0_limb_25_col66.clone() * op1_limb_21_col91.clone())) + + (op0_limb_26_col67.clone() * op1_limb_20_col90.clone())) + + (op0_limb_27_col68.clone() * op1_limb_19_col89.clone())); + let conv_tmp_1463 = ((((((((M31_0.clone() + + (op0_limb_20_col61.clone() * op1_limb_27_col97.clone())) + + (op0_limb_21_col62.clone() * op1_limb_26_col96.clone())) + + (op0_limb_22_col63.clone() * op1_limb_25_col95.clone())) + + (op0_limb_23_col64.clone() * op1_limb_24_col94.clone())) + + (op0_limb_24_col65.clone() * op1_limb_23_col93.clone())) + + (op0_limb_25_col66.clone() * op1_limb_22_col92.clone())) + + (op0_limb_26_col67.clone() * op1_limb_21_col91.clone())) + + (op0_limb_27_col68.clone() * op1_limb_20_col90.clone())); + let conv_tmp_1464 = (((((((M31_0.clone() + + (op0_limb_21_col62.clone() * op1_limb_27_col97.clone())) + + (op0_limb_22_col63.clone() * op1_limb_26_col96.clone())) + + (op0_limb_23_col64.clone() * op1_limb_25_col95.clone())) + + (op0_limb_24_col65.clone() * op1_limb_24_col94.clone())) + + (op0_limb_25_col66.clone() * op1_limb_23_col93.clone())) + + (op0_limb_26_col67.clone() * op1_limb_22_col92.clone())) + + (op0_limb_27_col68.clone() * op1_limb_21_col91.clone())); + let conv_tmp_1465 = ((((((M31_0.clone() + + (op0_limb_22_col63.clone() * op1_limb_27_col97.clone())) + + (op0_limb_23_col64.clone() * op1_limb_26_col96.clone())) + + (op0_limb_24_col65.clone() * op1_limb_25_col95.clone())) + + (op0_limb_25_col66.clone() * op1_limb_24_col94.clone())) + + (op0_limb_26_col67.clone() * op1_limb_23_col93.clone())) + + (op0_limb_27_col68.clone() * op1_limb_22_col92.clone())); + let conv_tmp_1466 = (((((M31_0.clone() + + (op0_limb_23_col64.clone() * op1_limb_27_col97.clone())) + + (op0_limb_24_col65.clone() * op1_limb_26_col96.clone())) + + (op0_limb_25_col66.clone() * op1_limb_25_col95.clone())) + + (op0_limb_26_col67.clone() * op1_limb_24_col94.clone())) + + (op0_limb_27_col68.clone() * op1_limb_23_col93.clone())); + let conv_tmp_1467 = ((((M31_0.clone() + + (op0_limb_24_col65.clone() * op1_limb_27_col97.clone())) + + (op0_limb_25_col66.clone() * op1_limb_26_col96.clone())) + + (op0_limb_26_col67.clone() * op1_limb_25_col95.clone())) + + (op0_limb_27_col68.clone() * op1_limb_24_col94.clone())); + let conv_tmp_1468 = (((M31_0.clone() + + (op0_limb_25_col66.clone() * op1_limb_27_col97.clone())) + + (op0_limb_26_col67.clone() * op1_limb_26_col96.clone())) + + (op0_limb_27_col68.clone() * op1_limb_25_col95.clone())); + let conv_tmp_1469 = ((M31_0.clone() + + (op0_limb_26_col67.clone() * op1_limb_27_col97.clone())) + + (op0_limb_27_col68.clone() * op1_limb_26_col96.clone())); + let conv_tmp_1470 = + (M31_0.clone() + (op0_limb_27_col68.clone() * op1_limb_27_col97.clone())); + let conv_mod_tmp_1471 = (((M31_0.clone() + (M31_32.clone() * conv_tmp_1416.clone())) + - (M31_4.clone() * conv_tmp_1437.clone())) + + (M31_8.clone() * conv_tmp_1465.clone())); + let conv_mod_tmp_1472 = ((((M31_0.clone() + (M31_1.clone() * conv_tmp_1416.clone())) + + (M31_32.clone() * conv_tmp_1417.clone())) + - (M31_4.clone() * conv_tmp_1438.clone())) + + (M31_8.clone() * conv_tmp_1466.clone())); + let conv_mod_tmp_1473 = ((((M31_0.clone() + (M31_1.clone() * conv_tmp_1417.clone())) + + (M31_32.clone() * conv_tmp_1418.clone())) + - (M31_4.clone() * conv_tmp_1439.clone())) + + (M31_8.clone() * conv_tmp_1467.clone())); + let conv_mod_tmp_1474 = ((((M31_0.clone() + (M31_1.clone() * conv_tmp_1418.clone())) + + (M31_32.clone() * conv_tmp_1419.clone())) + - (M31_4.clone() * conv_tmp_1440.clone())) + + (M31_8.clone() * conv_tmp_1468.clone())); + let conv_mod_tmp_1475 = ((((M31_0.clone() + (M31_1.clone() * conv_tmp_1419.clone())) + + (M31_32.clone() * conv_tmp_1420.clone())) + - (M31_4.clone() * conv_tmp_1441.clone())) + + (M31_8.clone() * conv_tmp_1469.clone())); + let conv_mod_tmp_1476 = ((((M31_0.clone() + (M31_1.clone() * conv_tmp_1420.clone())) + + (M31_32.clone() * conv_tmp_1421.clone())) + - (M31_4.clone() * conv_tmp_1442.clone())) + + (M31_8.clone() * conv_tmp_1470.clone())); + let conv_mod_tmp_1477 = (((M31_0.clone() + (M31_1.clone() * conv_tmp_1421.clone())) + + (M31_32.clone() * conv_tmp_1422.clone())) + - (M31_4.clone() * conv_tmp_1443.clone())); + let conv_mod_tmp_1478 = ((((M31_0.clone() + (M31_2.clone() * conv_tmp_1416.clone())) + + (M31_1.clone() * conv_tmp_1422.clone())) + + (M31_32.clone() * conv_tmp_1423.clone())) + - (M31_4.clone() * conv_tmp_1444.clone())); + let conv_mod_tmp_1479 = ((((M31_0.clone() + (M31_2.clone() * conv_tmp_1417.clone())) + + (M31_1.clone() * conv_tmp_1423.clone())) + + (M31_32.clone() * conv_tmp_1424.clone())) + - (M31_4.clone() * conv_tmp_1445.clone())); + let conv_mod_tmp_1480 = ((((M31_0.clone() + (M31_2.clone() * conv_tmp_1418.clone())) + + (M31_1.clone() * conv_tmp_1424.clone())) + + (M31_32.clone() * conv_tmp_1425.clone())) + - (M31_4.clone() * conv_tmp_1446.clone())); + let conv_mod_tmp_1481 = ((((M31_0.clone() + (M31_2.clone() * conv_tmp_1419.clone())) + + (M31_1.clone() * conv_tmp_1425.clone())) + + (M31_32.clone() * conv_tmp_1426.clone())) + - (M31_4.clone() * conv_tmp_1447.clone())); + let conv_mod_tmp_1482 = ((((M31_0.clone() + (M31_2.clone() * conv_tmp_1420.clone())) + + (M31_1.clone() * conv_tmp_1426.clone())) + + (M31_32.clone() * conv_tmp_1427.clone())) + - (M31_4.clone() * conv_tmp_1448.clone())); + let conv_mod_tmp_1483 = ((((M31_0.clone() + (M31_2.clone() * conv_tmp_1421.clone())) + + (M31_1.clone() * conv_tmp_1427.clone())) + + (M31_32.clone() * conv_tmp_1428.clone())) + - (M31_4.clone() * conv_tmp_1449.clone())); + let conv_mod_tmp_1484 = ((((M31_0.clone() + (M31_2.clone() * conv_tmp_1422.clone())) + + (M31_1.clone() * conv_tmp_1428.clone())) + + (M31_32.clone() * conv_tmp_1429.clone())) + - (M31_4.clone() * conv_tmp_1450.clone())); + let conv_mod_tmp_1485 = ((((M31_0.clone() + (M31_2.clone() * conv_tmp_1423.clone())) + + (M31_1.clone() * conv_tmp_1429.clone())) + + (M31_32.clone() * conv_tmp_1430.clone())) + - (M31_4.clone() * conv_tmp_1451.clone())); + let conv_mod_tmp_1486 = ((((M31_0.clone() + (M31_2.clone() * conv_tmp_1424.clone())) + + (M31_1.clone() * conv_tmp_1430.clone())) + + (M31_32.clone() * conv_tmp_1431.clone())) + - (M31_4.clone() * conv_tmp_1452.clone())); + let conv_mod_tmp_1487 = ((((M31_0.clone() + (M31_2.clone() * conv_tmp_1425.clone())) + + (M31_1.clone() * conv_tmp_1431.clone())) + + (M31_32.clone() * conv_tmp_1432.clone())) + - (M31_4.clone() * conv_tmp_1453.clone())); + let conv_mod_tmp_1488 = ((((M31_0.clone() + (M31_2.clone() * conv_tmp_1426.clone())) + + (M31_1.clone() * conv_tmp_1432.clone())) + + (M31_32.clone() * conv_tmp_1433.clone())) + - (M31_4.clone() * conv_tmp_1454.clone())); + let conv_mod_tmp_1489 = ((((M31_0.clone() + (M31_2.clone() * conv_tmp_1427.clone())) + + (M31_1.clone() * conv_tmp_1433.clone())) + + (M31_32.clone() * conv_tmp_1434.clone())) + - (M31_4.clone() * conv_tmp_1455.clone())); + let conv_mod_tmp_1490 = ((((M31_0.clone() + (M31_2.clone() * conv_tmp_1428.clone())) + + (M31_1.clone() * conv_tmp_1434.clone())) + + (M31_32.clone() * conv_tmp_1435.clone())) + - (M31_4.clone() * conv_tmp_1456.clone())); + let conv_mod_tmp_1491 = ((((M31_0.clone() + (M31_2.clone() * conv_tmp_1429.clone())) + + (M31_1.clone() * conv_tmp_1435.clone())) + + (M31_32.clone() * conv_tmp_1436.clone())) + - (M31_4.clone() * conv_tmp_1457.clone())); + let conv_mod_tmp_1492 = ((((M31_0.clone() + (M31_2.clone() * conv_tmp_1430.clone())) + + (M31_1.clone() * conv_tmp_1436.clone())) + - (M31_4.clone() * conv_tmp_1458.clone())) + + (M31_64.clone() * conv_tmp_1465.clone())); + let conv_mod_tmp_1493 = ((((M31_0.clone() + (M31_2.clone() * conv_tmp_1431.clone())) + - (M31_4.clone() * conv_tmp_1459.clone())) + + (M31_2.clone() * conv_tmp_1465.clone())) + + (M31_64.clone() * conv_tmp_1466.clone())); + let conv_mod_tmp_1494 = ((((M31_0.clone() + (M31_2.clone() * conv_tmp_1432.clone())) + - (M31_4.clone() * conv_tmp_1460.clone())) + + (M31_2.clone() * conv_tmp_1466.clone())) + + (M31_64.clone() * conv_tmp_1467.clone())); + let conv_mod_tmp_1495 = ((((M31_0.clone() + (M31_2.clone() * conv_tmp_1433.clone())) + - (M31_4.clone() * conv_tmp_1461.clone())) + + (M31_2.clone() * conv_tmp_1467.clone())) + + (M31_64.clone() * conv_tmp_1468.clone())); + let conv_mod_tmp_1496 = ((((M31_0.clone() + (M31_2.clone() * conv_tmp_1434.clone())) + - (M31_4.clone() * conv_tmp_1462.clone())) + + (M31_2.clone() * conv_tmp_1468.clone())) + + (M31_64.clone() * conv_tmp_1469.clone())); + let conv_mod_tmp_1497 = ((((M31_0.clone() + (M31_2.clone() * conv_tmp_1435.clone())) + - (M31_4.clone() * conv_tmp_1463.clone())) + + (M31_2.clone() * conv_tmp_1469.clone())) + + (M31_64.clone() * conv_tmp_1470.clone())); + let conv_mod_tmp_1498 = (((M31_0.clone() + (M31_2.clone() * conv_tmp_1436.clone())) + - (M31_4.clone() * conv_tmp_1464.clone())) + + (M31_2.clone() * conv_tmp_1470.clone())); + eval.add_to_relation(&[RelationEntry::new( + &self.rangecheck_19_lookup_elements, + E::EF::one(), + &[(k_col98.clone() + M31_262144.clone())], + )]); + + eval.add_constraint( + ((carry_0_col99.clone() * M31_512.clone()) + - ((conv_mod_tmp_1471.clone() - (M31_1.clone() * k_col98.clone())) + + M31_0.clone())), + ); + eval.add_to_relation(&[RelationEntry::new( + &self.rangecheck_19_lookup_elements, + E::EF::one(), + &[(carry_0_col99.clone() + M31_131072.clone())], + )]); + + eval.add_constraint( + ((carry_1_col100.clone() * M31_512.clone()) + - (conv_mod_tmp_1472.clone() + carry_0_col99.clone())), + ); + eval.add_to_relation(&[RelationEntry::new( + &self.rangecheck_19_lookup_elements, + E::EF::one(), + &[(carry_1_col100.clone() + M31_131072.clone())], + )]); + + eval.add_constraint( + ((carry_2_col101.clone() * M31_512.clone()) + - (conv_mod_tmp_1473.clone() + carry_1_col100.clone())), + ); + eval.add_to_relation(&[RelationEntry::new( + &self.rangecheck_19_lookup_elements, + E::EF::one(), + &[(carry_2_col101.clone() + M31_131072.clone())], + )]); + + eval.add_constraint( + ((carry_3_col102.clone() * M31_512.clone()) + - (conv_mod_tmp_1474.clone() + carry_2_col101.clone())), + ); + eval.add_to_relation(&[RelationEntry::new( + &self.rangecheck_19_lookup_elements, + E::EF::one(), + &[(carry_3_col102.clone() + M31_131072.clone())], + )]); + + eval.add_constraint( + ((carry_4_col103.clone() * M31_512.clone()) + - (conv_mod_tmp_1475.clone() + carry_3_col102.clone())), + ); + eval.add_to_relation(&[RelationEntry::new( + &self.rangecheck_19_lookup_elements, + E::EF::one(), + &[(carry_4_col103.clone() + M31_131072.clone())], + )]); + + eval.add_constraint( + ((carry_5_col104.clone() * M31_512.clone()) + - (conv_mod_tmp_1476.clone() + carry_4_col103.clone())), + ); + eval.add_to_relation(&[RelationEntry::new( + &self.rangecheck_19_lookup_elements, + E::EF::one(), + &[(carry_5_col104.clone() + M31_131072.clone())], + )]); + + eval.add_constraint( + ((carry_6_col105.clone() * M31_512.clone()) + - (conv_mod_tmp_1477.clone() + carry_5_col104.clone())), + ); + eval.add_to_relation(&[RelationEntry::new( + &self.rangecheck_19_lookup_elements, + E::EF::one(), + &[(carry_6_col105.clone() + M31_131072.clone())], + )]); + + eval.add_constraint( + ((carry_7_col106.clone() * M31_512.clone()) + - (conv_mod_tmp_1478.clone() + carry_6_col105.clone())), + ); + eval.add_to_relation(&[RelationEntry::new( + &self.rangecheck_19_lookup_elements, + E::EF::one(), + &[(carry_7_col106.clone() + M31_131072.clone())], + )]); + + eval.add_constraint( + ((carry_8_col107.clone() * M31_512.clone()) + - (conv_mod_tmp_1479.clone() + carry_7_col106.clone())), + ); + eval.add_to_relation(&[RelationEntry::new( + &self.rangecheck_19_lookup_elements, + E::EF::one(), + &[(carry_8_col107.clone() + M31_131072.clone())], + )]); + + eval.add_constraint( + ((carry_9_col108.clone() * M31_512.clone()) + - (conv_mod_tmp_1480.clone() + carry_8_col107.clone())), + ); + eval.add_to_relation(&[RelationEntry::new( + &self.rangecheck_19_lookup_elements, + E::EF::one(), + &[(carry_9_col108.clone() + M31_131072.clone())], + )]); + + eval.add_constraint( + ((carry_10_col109.clone() * M31_512.clone()) + - (conv_mod_tmp_1481.clone() + carry_9_col108.clone())), + ); + eval.add_to_relation(&[RelationEntry::new( + &self.rangecheck_19_lookup_elements, + E::EF::one(), + &[(carry_10_col109.clone() + M31_131072.clone())], + )]); + + eval.add_constraint( + ((carry_11_col110.clone() * M31_512.clone()) + - (conv_mod_tmp_1482.clone() + carry_10_col109.clone())), + ); + eval.add_to_relation(&[RelationEntry::new( + &self.rangecheck_19_lookup_elements, + E::EF::one(), + &[(carry_11_col110.clone() + M31_131072.clone())], + )]); + + eval.add_constraint( + ((carry_12_col111.clone() * M31_512.clone()) + - (conv_mod_tmp_1483.clone() + carry_11_col110.clone())), + ); + eval.add_to_relation(&[RelationEntry::new( + &self.rangecheck_19_lookup_elements, + E::EF::one(), + &[(carry_12_col111.clone() + M31_131072.clone())], + )]); + + eval.add_constraint( + ((carry_13_col112.clone() * M31_512.clone()) + - (conv_mod_tmp_1484.clone() + carry_12_col111.clone())), + ); + eval.add_to_relation(&[RelationEntry::new( + &self.rangecheck_19_lookup_elements, + E::EF::one(), + &[(carry_13_col112.clone() + M31_131072.clone())], + )]); + + eval.add_constraint( + ((carry_14_col113.clone() * M31_512.clone()) + - (conv_mod_tmp_1485.clone() + carry_13_col112.clone())), + ); + eval.add_to_relation(&[RelationEntry::new( + &self.rangecheck_19_lookup_elements, + E::EF::one(), + &[(carry_14_col113.clone() + M31_131072.clone())], + )]); + + eval.add_constraint( + ((carry_15_col114.clone() * M31_512.clone()) + - (conv_mod_tmp_1486.clone() + carry_14_col113.clone())), + ); + eval.add_to_relation(&[RelationEntry::new( + &self.rangecheck_19_lookup_elements, + E::EF::one(), + &[(carry_15_col114.clone() + M31_131072.clone())], + )]); + + eval.add_constraint( + ((carry_16_col115.clone() * M31_512.clone()) + - (conv_mod_tmp_1487.clone() + carry_15_col114.clone())), + ); + eval.add_to_relation(&[RelationEntry::new( + &self.rangecheck_19_lookup_elements, + E::EF::one(), + &[(carry_16_col115.clone() + M31_131072.clone())], + )]); + + eval.add_constraint( + ((carry_17_col116.clone() * M31_512.clone()) + - (conv_mod_tmp_1488.clone() + carry_16_col115.clone())), + ); + eval.add_to_relation(&[RelationEntry::new( + &self.rangecheck_19_lookup_elements, + E::EF::one(), + &[(carry_17_col116.clone() + M31_131072.clone())], + )]); + + eval.add_constraint( + ((carry_18_col117.clone() * M31_512.clone()) + - (conv_mod_tmp_1489.clone() + carry_17_col116.clone())), + ); + eval.add_to_relation(&[RelationEntry::new( + &self.rangecheck_19_lookup_elements, + E::EF::one(), + &[(carry_18_col117.clone() + M31_131072.clone())], + )]); + + eval.add_constraint( + ((carry_19_col118.clone() * M31_512.clone()) + - (conv_mod_tmp_1490.clone() + carry_18_col117.clone())), + ); + eval.add_to_relation(&[RelationEntry::new( + &self.rangecheck_19_lookup_elements, + E::EF::one(), + &[(carry_19_col118.clone() + M31_131072.clone())], + )]); + + eval.add_constraint( + ((carry_20_col119.clone() * M31_512.clone()) + - (conv_mod_tmp_1491.clone() + carry_19_col118.clone())), + ); + eval.add_to_relation(&[RelationEntry::new( + &self.rangecheck_19_lookup_elements, + E::EF::one(), + &[(carry_20_col119.clone() + M31_131072.clone())], + )]); + + eval.add_constraint( + ((carry_21_col120.clone() * M31_512.clone()) + - ((conv_mod_tmp_1492.clone() - (M31_136.clone() * k_col98.clone())) + + carry_20_col119.clone())), + ); + eval.add_to_relation(&[RelationEntry::new( + &self.rangecheck_19_lookup_elements, + E::EF::one(), + &[(carry_21_col120.clone() + M31_131072.clone())], + )]); + + eval.add_constraint( + ((carry_22_col121.clone() * M31_512.clone()) + - (conv_mod_tmp_1493.clone() + carry_21_col120.clone())), + ); + eval.add_to_relation(&[RelationEntry::new( + &self.rangecheck_19_lookup_elements, + E::EF::one(), + &[(carry_22_col121.clone() + M31_131072.clone())], + )]); + + eval.add_constraint( + ((carry_23_col122.clone() * M31_512.clone()) + - (conv_mod_tmp_1494.clone() + carry_22_col121.clone())), + ); + eval.add_to_relation(&[RelationEntry::new( + &self.rangecheck_19_lookup_elements, + E::EF::one(), + &[(carry_23_col122.clone() + M31_131072.clone())], + )]); + + eval.add_constraint( + ((carry_24_col123.clone() * M31_512.clone()) + - (conv_mod_tmp_1495.clone() + carry_23_col122.clone())), + ); + eval.add_to_relation(&[RelationEntry::new( + &self.rangecheck_19_lookup_elements, + E::EF::one(), + &[(carry_24_col123.clone() + M31_131072.clone())], + )]); + + eval.add_constraint( + ((carry_25_col124.clone() * M31_512.clone()) + - (conv_mod_tmp_1496.clone() + carry_24_col123.clone())), + ); + eval.add_to_relation(&[RelationEntry::new( + &self.rangecheck_19_lookup_elements, + E::EF::one(), + &[(carry_25_col124.clone() + M31_131072.clone())], + )]); + + eval.add_constraint( + ((carry_26_col125.clone() * M31_512.clone()) + - (conv_mod_tmp_1497.clone() + carry_25_col124.clone())), + ); + eval.add_to_relation(&[RelationEntry::new( + &self.rangecheck_19_lookup_elements, + E::EF::one(), + &[(carry_26_col125.clone() + M31_131072.clone())], + )]); + + eval.add_constraint( + ((conv_mod_tmp_1498.clone() - (M31_256.clone() * k_col98.clone())) + + carry_26_col125.clone()), + ); + + eval.add_to_relation(&[RelationEntry::new( + &self.opcodes_lookup_elements, + E::EF::one(), + &[ + input_pc_col0.clone(), + input_ap_col1.clone(), + input_fp_col2.clone(), + ], + )]); + + eval.add_to_relation(&[RelationEntry::new( + &self.opcodes_lookup_elements, + -E::EF::one(), + &[ + (input_pc_col0.clone() + M31_1.clone()), + (input_ap_col1.clone() + ap_update_add_1_col10.clone()), + input_fp_col2.clone(), + ], + )]); + + eval.finalize_logup(); + eval + } +} diff --git a/stwo_cairo_prover/crates/prover/src/components/mul_opcode_is_small_f_is_imm_f/mod.rs b/stwo_cairo_prover/crates/prover/src/components/mul_opcode_is_small_f_is_imm_f/mod.rs new file mode 100644 index 00000000..3f7a8d74 --- /dev/null +++ b/stwo_cairo_prover/crates/prover/src/components/mul_opcode_is_small_f_is_imm_f/mod.rs @@ -0,0 +1,5 @@ +pub mod component; +pub mod prover; + +pub use component::{Claim, Component, Eval, InteractionClaim}; +pub use prover::{ClaimGenerator, InputType, InteractionClaimGenerator}; diff --git a/stwo_cairo_prover/crates/prover/src/components/mul_opcode_is_small_f_is_imm_f/prover.rs b/stwo_cairo_prover/crates/prover/src/components/mul_opcode_is_small_f_is_imm_f/prover.rs new file mode 100644 index 00000000..8300d16e --- /dev/null +++ b/stwo_cairo_prover/crates/prover/src/components/mul_opcode_is_small_f_is_imm_f/prover.rs @@ -0,0 +1,2280 @@ +#![allow(unused_parens)] +#![allow(unused_imports)] +use itertools::{chain, zip_eq, Itertools}; +use num_traits::{One, Zero}; +use prover_types::cpu::*; +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::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; +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::pcs::TreeBuilder; +use stwo_prover::core::poly::circle::{CanonicCoset, CircleEvaluation}; +use stwo_prover::core::poly::BitReversedOrder; +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}; +use crate::components::{ + memory_address_to_id, memory_id_to_big, pack_values, range_check_19, verify_instruction, +}; +use crate::relations; + +pub type InputType = CasmState; +pub type PackedInputType = PackedCasmState; +const N_TRACE_COLUMNS: usize = 126; + +#[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>, + 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, + verify_instruction_state: &mut verify_instruction::ClaimGenerator, + ) -> (Claim, InteractionClaimGenerator) { + let n_calls = self.inputs.len(); + assert_ne!(n_calls, 0); + let size = std::cmp::max(n_calls.next_power_of_two(), N_LANES); + let need_padding = n_calls != size; + + if need_padding { + self.inputs.resize(size, *self.inputs.first().unwrap()); + bit_reverse_coset_to_circle_domain_order(&mut self.inputs); + } + + 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(); + } + sub_components_inputs + .range_check_19_inputs + .iter() + .for_each(|inputs| { + range_check_19_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]); + }); + + 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 }, + InteractionClaimGenerator { + n_calls, + lookup_data, + }, + ) + } + + pub fn add_inputs(&mut self, inputs: &[InputType]) { + self.inputs.extend(inputs); + } +} + +pub struct SubComponentInputs { + pub range_check_19_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 { + 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), + ], + 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.range_check_19_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)); + self.verify_instruction_inputs + .iter_mut() + .for_each(|vec| bit_reverse_coset_to_circle_domain_order(vec)); + } +} + +#[allow(clippy::useless_conversion)] +#[allow(unused_variables)] +#[allow(clippy::double_parens)] +#[allow(non_snake_case)] +pub fn write_trace_simd( + inputs: Vec, + 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 = 126; + 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()); + #[allow(unused_mut)] + let mut sub_components_inputs = SubComponentInputs::with_capacity(inputs.len()); + + let M31_0 = PackedM31::broadcast(M31::from(0)); + let M31_1 = PackedM31::broadcast(M31::from(1)); + let M31_131072 = PackedM31::broadcast(M31::from(131072)); + let M31_134217728 = PackedM31::broadcast(M31::from(134217728)); + let M31_136 = PackedM31::broadcast(M31::from(136)); + let M31_2 = PackedM31::broadcast(M31::from(2)); + let M31_262144 = PackedM31::broadcast(M31::from(262144)); + let M31_32 = PackedM31::broadcast(M31::from(32)); + let M31_32768 = PackedM31::broadcast(M31::from(32768)); + let M31_4 = PackedM31::broadcast(M31::from(4)); + let M31_4194304 = PackedM31::broadcast(M31::from(4194304)); + let M31_64 = PackedM31::broadcast(M31::from(64)); + let M31_65536 = PackedM31::broadcast(M31::from(65536)); + let M31_8 = PackedM31::broadcast(M31::from(8)); + let UInt16_0 = PackedUInt16::broadcast(UInt16::from(0)); + let UInt16_1 = PackedUInt16::broadcast(UInt16::from(1)); + let UInt16_11 = PackedUInt16::broadcast(UInt16::from(11)); + let UInt16_127 = PackedUInt16::broadcast(UInt16::from(127)); + let UInt16_13 = PackedUInt16::broadcast(UInt16::from(13)); + let UInt16_2 = PackedUInt16::broadcast(UInt16::from(2)); + let UInt16_3 = PackedUInt16::broadcast(UInt16::from(3)); + let UInt16_31 = PackedUInt16::broadcast(UInt16::from(31)); + let UInt16_4 = PackedUInt16::broadcast(UInt16::from(4)); + let UInt16_5 = PackedUInt16::broadcast(UInt16::from(5)); + let UInt16_6 = PackedUInt16::broadcast(UInt16::from(6)); + let UInt16_7 = PackedUInt16::broadcast(UInt16::from(7)); + let UInt16_9 = PackedUInt16::broadcast(UInt16::from(9)); + let UInt32_262143 = PackedUInt32::broadcast(UInt32::from(262143)); + let UInt32_511 = PackedUInt32::broadcast(UInt32::from(511)); + let UInt32_65536 = PackedUInt32::broadcast(UInt32::from(65536)); + let UInt32_9 = PackedUInt32::broadcast(UInt32::from(9)); + + inputs + .into_iter() + .enumerate() + .for_each(|(row_index, mul_opcode_is_small_f_is_imm_f_input)| { + let input_tmp_1398 = mul_opcode_is_small_f_is_imm_f_input; + let input_pc_col0 = input_tmp_1398.pc; + trace[0].data[row_index] = input_pc_col0; + let input_ap_col1 = input_tmp_1398.ap; + trace[1].data[row_index] = input_ap_col1; + let input_fp_col2 = input_tmp_1398.fp; + trace[2].data[row_index] = input_fp_col2; + + // decode_instruction_15f7159a39884cc. + + let memory_address_to_id_value_tmp_1399 = + memory_address_to_id_state.deduce_output(input_pc_col0); + let memory_id_to_big_value_tmp_1400 = + memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_1399); + let offset0_tmp_1401 = + ((PackedUInt16::from_m31(memory_id_to_big_value_tmp_1400.get_m31(0))) + + (((PackedUInt16::from_m31(memory_id_to_big_value_tmp_1400.get_m31(1))) + & (UInt16_127)) + << (UInt16_9))); + let offset0_col3 = offset0_tmp_1401.as_m31(); + trace[3].data[row_index] = offset0_col3; + let offset1_tmp_1402 = + ((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_1400.get_m31(1))) + >> (UInt16_7)) + + ((PackedUInt16::from_m31(memory_id_to_big_value_tmp_1400.get_m31(2))) + << (UInt16_2))) + + (((PackedUInt16::from_m31(memory_id_to_big_value_tmp_1400.get_m31(3))) + & (UInt16_31)) + << (UInt16_11))); + let offset1_col4 = offset1_tmp_1402.as_m31(); + trace[4].data[row_index] = offset1_col4; + let offset2_tmp_1403 = + ((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_1400.get_m31(3))) + >> (UInt16_5)) + + ((PackedUInt16::from_m31(memory_id_to_big_value_tmp_1400.get_m31(4))) + << (UInt16_4))) + + (((PackedUInt16::from_m31(memory_id_to_big_value_tmp_1400.get_m31(5))) + & (UInt16_7)) + << (UInt16_13))); + let offset2_col5 = offset2_tmp_1403.as_m31(); + trace[5].data[row_index] = offset2_col5; + let dst_base_fp_tmp_1404 = + (((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_1400.get_m31(5))) + >> (UInt16_3)) + + ((PackedUInt16::from_m31(memory_id_to_big_value_tmp_1400.get_m31(6))) + << (UInt16_6))) + >> (UInt16_0)) + & (UInt16_1)); + let dst_base_fp_col6 = dst_base_fp_tmp_1404.as_m31(); + trace[6].data[row_index] = dst_base_fp_col6; + let op0_base_fp_tmp_1405 = + (((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_1400.get_m31(5))) + >> (UInt16_3)) + + ((PackedUInt16::from_m31(memory_id_to_big_value_tmp_1400.get_m31(6))) + << (UInt16_6))) + >> (UInt16_1)) + & (UInt16_1)); + let op0_base_fp_col7 = op0_base_fp_tmp_1405.as_m31(); + trace[7].data[row_index] = op0_base_fp_col7; + let op1_base_fp_tmp_1406 = + (((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_1400.get_m31(5))) + >> (UInt16_3)) + + ((PackedUInt16::from_m31(memory_id_to_big_value_tmp_1400.get_m31(6))) + << (UInt16_6))) + >> (UInt16_3)) + & (UInt16_1)); + let op1_base_fp_col8 = op1_base_fp_tmp_1406.as_m31(); + trace[8].data[row_index] = op1_base_fp_col8; + let op1_base_ap_tmp_1407 = + (((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_1400.get_m31(5))) + >> (UInt16_3)) + + ((PackedUInt16::from_m31(memory_id_to_big_value_tmp_1400.get_m31(6))) + << (UInt16_6))) + >> (UInt16_4)) + & (UInt16_1)); + let op1_base_ap_col9 = op1_base_ap_tmp_1407.as_m31(); + trace[9].data[row_index] = op1_base_ap_col9; + let ap_update_add_1_tmp_1408 = + (((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_1400.get_m31(5))) + >> (UInt16_3)) + + ((PackedUInt16::from_m31(memory_id_to_big_value_tmp_1400.get_m31(6))) + << (UInt16_6))) + >> (UInt16_11)) + & (UInt16_1)); + let ap_update_add_1_col10 = ap_update_add_1_tmp_1408.as_m31(); + trace[10].data[row_index] = ap_update_add_1_col10; + + 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, + M31_0, + op1_base_fp_col8, + op1_base_ap_col9, + M31_0, + M31_1, + M31_0, + M31_0, + M31_0, + M31_0, + ap_update_add_1_col10, + M31_0, + M31_0, + M31_1, + ], + ) + .unpack(), + ); + + lookup_data.verifyinstruction[0].push([ + input_pc_col0, + offset0_col3, + offset1_col4, + offset2_col5, + dst_base_fp_col6, + op0_base_fp_col7, + M31_0, + op1_base_fp_col8, + op1_base_ap_col9, + M31_0, + M31_1, + M31_0, + M31_0, + M31_0, + M31_0, + ap_update_add_1_col10, + M31_0, + M31_0, + M31_1, + ]); + + // read_positive_num_bits_252. + + let memory_address_to_id_value_tmp_1410 = 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 memory_id_to_big_value_tmp_1411 = + memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_1410); + let dst_id_col11 = memory_address_to_id_value_tmp_1410; + trace[11].data[row_index] = dst_id_col11; + sub_components_inputs.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_col11, + ]); + let dst_limb_0_col12 = memory_id_to_big_value_tmp_1411.get_m31(0); + trace[12].data[row_index] = dst_limb_0_col12; + let dst_limb_1_col13 = memory_id_to_big_value_tmp_1411.get_m31(1); + trace[13].data[row_index] = dst_limb_1_col13; + let dst_limb_2_col14 = memory_id_to_big_value_tmp_1411.get_m31(2); + trace[14].data[row_index] = dst_limb_2_col14; + let dst_limb_3_col15 = memory_id_to_big_value_tmp_1411.get_m31(3); + trace[15].data[row_index] = dst_limb_3_col15; + let dst_limb_4_col16 = memory_id_to_big_value_tmp_1411.get_m31(4); + trace[16].data[row_index] = dst_limb_4_col16; + let dst_limb_5_col17 = memory_id_to_big_value_tmp_1411.get_m31(5); + trace[17].data[row_index] = dst_limb_5_col17; + let dst_limb_6_col18 = memory_id_to_big_value_tmp_1411.get_m31(6); + trace[18].data[row_index] = dst_limb_6_col18; + let dst_limb_7_col19 = memory_id_to_big_value_tmp_1411.get_m31(7); + trace[19].data[row_index] = dst_limb_7_col19; + let dst_limb_8_col20 = memory_id_to_big_value_tmp_1411.get_m31(8); + trace[20].data[row_index] = dst_limb_8_col20; + let dst_limb_9_col21 = memory_id_to_big_value_tmp_1411.get_m31(9); + trace[21].data[row_index] = dst_limb_9_col21; + let dst_limb_10_col22 = memory_id_to_big_value_tmp_1411.get_m31(10); + trace[22].data[row_index] = dst_limb_10_col22; + let dst_limb_11_col23 = memory_id_to_big_value_tmp_1411.get_m31(11); + trace[23].data[row_index] = dst_limb_11_col23; + let dst_limb_12_col24 = memory_id_to_big_value_tmp_1411.get_m31(12); + trace[24].data[row_index] = dst_limb_12_col24; + let dst_limb_13_col25 = memory_id_to_big_value_tmp_1411.get_m31(13); + trace[25].data[row_index] = dst_limb_13_col25; + let dst_limb_14_col26 = memory_id_to_big_value_tmp_1411.get_m31(14); + trace[26].data[row_index] = dst_limb_14_col26; + let dst_limb_15_col27 = memory_id_to_big_value_tmp_1411.get_m31(15); + trace[27].data[row_index] = dst_limb_15_col27; + let dst_limb_16_col28 = memory_id_to_big_value_tmp_1411.get_m31(16); + trace[28].data[row_index] = dst_limb_16_col28; + let dst_limb_17_col29 = memory_id_to_big_value_tmp_1411.get_m31(17); + trace[29].data[row_index] = dst_limb_17_col29; + let dst_limb_18_col30 = memory_id_to_big_value_tmp_1411.get_m31(18); + trace[30].data[row_index] = dst_limb_18_col30; + let dst_limb_19_col31 = memory_id_to_big_value_tmp_1411.get_m31(19); + trace[31].data[row_index] = dst_limb_19_col31; + let dst_limb_20_col32 = memory_id_to_big_value_tmp_1411.get_m31(20); + trace[32].data[row_index] = dst_limb_20_col32; + let dst_limb_21_col33 = memory_id_to_big_value_tmp_1411.get_m31(21); + trace[33].data[row_index] = dst_limb_21_col33; + let dst_limb_22_col34 = memory_id_to_big_value_tmp_1411.get_m31(22); + trace[34].data[row_index] = dst_limb_22_col34; + let dst_limb_23_col35 = memory_id_to_big_value_tmp_1411.get_m31(23); + trace[35].data[row_index] = dst_limb_23_col35; + let dst_limb_24_col36 = memory_id_to_big_value_tmp_1411.get_m31(24); + trace[36].data[row_index] = dst_limb_24_col36; + let dst_limb_25_col37 = memory_id_to_big_value_tmp_1411.get_m31(25); + trace[37].data[row_index] = dst_limb_25_col37; + let dst_limb_26_col38 = memory_id_to_big_value_tmp_1411.get_m31(26); + trace[38].data[row_index] = dst_limb_26_col38; + let dst_limb_27_col39 = memory_id_to_big_value_tmp_1411.get_m31(27); + trace[39].data[row_index] = dst_limb_27_col39; + sub_components_inputs.memory_id_to_big_inputs[0].extend(dst_id_col11.unpack()); + + lookup_data.memoryidtobig[0].push([ + dst_id_col11, + dst_limb_0_col12, + dst_limb_1_col13, + dst_limb_2_col14, + dst_limb_3_col15, + dst_limb_4_col16, + dst_limb_5_col17, + dst_limb_6_col18, + dst_limb_7_col19, + dst_limb_8_col20, + dst_limb_9_col21, + dst_limb_10_col22, + dst_limb_11_col23, + dst_limb_12_col24, + dst_limb_13_col25, + dst_limb_14_col26, + dst_limb_15_col27, + dst_limb_16_col28, + dst_limb_17_col29, + dst_limb_18_col30, + dst_limb_19_col31, + dst_limb_20_col32, + dst_limb_21_col33, + dst_limb_22_col34, + dst_limb_23_col35, + dst_limb_24_col36, + dst_limb_25_col37, + dst_limb_26_col38, + dst_limb_27_col39, + ]); + + // read_positive_num_bits_252. + + let memory_address_to_id_value_tmp_1412 = 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 memory_id_to_big_value_tmp_1413 = + memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_1412); + let op0_id_col40 = memory_address_to_id_value_tmp_1412; + trace[40].data[row_index] = op0_id_col40; + sub_components_inputs.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_col40, + ]); + let op0_limb_0_col41 = memory_id_to_big_value_tmp_1413.get_m31(0); + trace[41].data[row_index] = op0_limb_0_col41; + let op0_limb_1_col42 = memory_id_to_big_value_tmp_1413.get_m31(1); + trace[42].data[row_index] = op0_limb_1_col42; + let op0_limb_2_col43 = memory_id_to_big_value_tmp_1413.get_m31(2); + trace[43].data[row_index] = op0_limb_2_col43; + let op0_limb_3_col44 = memory_id_to_big_value_tmp_1413.get_m31(3); + trace[44].data[row_index] = op0_limb_3_col44; + let op0_limb_4_col45 = memory_id_to_big_value_tmp_1413.get_m31(4); + trace[45].data[row_index] = op0_limb_4_col45; + let op0_limb_5_col46 = memory_id_to_big_value_tmp_1413.get_m31(5); + trace[46].data[row_index] = op0_limb_5_col46; + let op0_limb_6_col47 = memory_id_to_big_value_tmp_1413.get_m31(6); + trace[47].data[row_index] = op0_limb_6_col47; + let op0_limb_7_col48 = memory_id_to_big_value_tmp_1413.get_m31(7); + trace[48].data[row_index] = op0_limb_7_col48; + let op0_limb_8_col49 = memory_id_to_big_value_tmp_1413.get_m31(8); + trace[49].data[row_index] = op0_limb_8_col49; + let op0_limb_9_col50 = memory_id_to_big_value_tmp_1413.get_m31(9); + trace[50].data[row_index] = op0_limb_9_col50; + let op0_limb_10_col51 = memory_id_to_big_value_tmp_1413.get_m31(10); + trace[51].data[row_index] = op0_limb_10_col51; + let op0_limb_11_col52 = memory_id_to_big_value_tmp_1413.get_m31(11); + trace[52].data[row_index] = op0_limb_11_col52; + let op0_limb_12_col53 = memory_id_to_big_value_tmp_1413.get_m31(12); + trace[53].data[row_index] = op0_limb_12_col53; + let op0_limb_13_col54 = memory_id_to_big_value_tmp_1413.get_m31(13); + trace[54].data[row_index] = op0_limb_13_col54; + let op0_limb_14_col55 = memory_id_to_big_value_tmp_1413.get_m31(14); + trace[55].data[row_index] = op0_limb_14_col55; + let op0_limb_15_col56 = memory_id_to_big_value_tmp_1413.get_m31(15); + trace[56].data[row_index] = op0_limb_15_col56; + let op0_limb_16_col57 = memory_id_to_big_value_tmp_1413.get_m31(16); + trace[57].data[row_index] = op0_limb_16_col57; + let op0_limb_17_col58 = memory_id_to_big_value_tmp_1413.get_m31(17); + trace[58].data[row_index] = op0_limb_17_col58; + let op0_limb_18_col59 = memory_id_to_big_value_tmp_1413.get_m31(18); + trace[59].data[row_index] = op0_limb_18_col59; + let op0_limb_19_col60 = memory_id_to_big_value_tmp_1413.get_m31(19); + trace[60].data[row_index] = op0_limb_19_col60; + let op0_limb_20_col61 = memory_id_to_big_value_tmp_1413.get_m31(20); + trace[61].data[row_index] = op0_limb_20_col61; + let op0_limb_21_col62 = memory_id_to_big_value_tmp_1413.get_m31(21); + trace[62].data[row_index] = op0_limb_21_col62; + let op0_limb_22_col63 = memory_id_to_big_value_tmp_1413.get_m31(22); + trace[63].data[row_index] = op0_limb_22_col63; + let op0_limb_23_col64 = memory_id_to_big_value_tmp_1413.get_m31(23); + trace[64].data[row_index] = op0_limb_23_col64; + let op0_limb_24_col65 = memory_id_to_big_value_tmp_1413.get_m31(24); + trace[65].data[row_index] = op0_limb_24_col65; + let op0_limb_25_col66 = memory_id_to_big_value_tmp_1413.get_m31(25); + trace[66].data[row_index] = op0_limb_25_col66; + let op0_limb_26_col67 = memory_id_to_big_value_tmp_1413.get_m31(26); + trace[67].data[row_index] = op0_limb_26_col67; + let op0_limb_27_col68 = memory_id_to_big_value_tmp_1413.get_m31(27); + trace[68].data[row_index] = op0_limb_27_col68; + sub_components_inputs.memory_id_to_big_inputs[1].extend(op0_id_col40.unpack()); + + lookup_data.memoryidtobig[1].push([ + op0_id_col40, + op0_limb_0_col41, + op0_limb_1_col42, + op0_limb_2_col43, + op0_limb_3_col44, + op0_limb_4_col45, + op0_limb_5_col46, + op0_limb_6_col47, + op0_limb_7_col48, + op0_limb_8_col49, + op0_limb_9_col50, + op0_limb_10_col51, + op0_limb_11_col52, + op0_limb_12_col53, + op0_limb_13_col54, + op0_limb_14_col55, + op0_limb_15_col56, + op0_limb_16_col57, + op0_limb_17_col58, + op0_limb_18_col59, + op0_limb_19_col60, + op0_limb_20_col61, + op0_limb_21_col62, + op0_limb_22_col63, + op0_limb_23_col64, + op0_limb_24_col65, + op0_limb_25_col66, + op0_limb_26_col67, + op0_limb_27_col68, + ]); + + // read_positive_num_bits_252. + + let memory_address_to_id_value_tmp_1414 = memory_address_to_id_state.deduce_output( + ((((op1_base_fp_col8) * (input_fp_col2)) + ((op1_base_ap_col9) * (input_ap_col1))) + + ((offset2_col5) - (M31_32768))), + ); + let memory_id_to_big_value_tmp_1415 = + memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_1414); + let op1_id_col69 = memory_address_to_id_value_tmp_1414; + trace[69].data[row_index] = op1_id_col69; + sub_components_inputs.memory_address_to_id_inputs[2].extend( + ((((op1_base_fp_col8) * (input_fp_col2)) + ((op1_base_ap_col9) * (input_ap_col1))) + + ((offset2_col5) - (M31_32768))) + .unpack(), + ); + + lookup_data.memoryaddresstoid[2].push([ + ((((op1_base_fp_col8) * (input_fp_col2)) + ((op1_base_ap_col9) * (input_ap_col1))) + + ((offset2_col5) - (M31_32768))), + op1_id_col69, + ]); + let op1_limb_0_col70 = memory_id_to_big_value_tmp_1415.get_m31(0); + trace[70].data[row_index] = op1_limb_0_col70; + let op1_limb_1_col71 = memory_id_to_big_value_tmp_1415.get_m31(1); + trace[71].data[row_index] = op1_limb_1_col71; + let op1_limb_2_col72 = memory_id_to_big_value_tmp_1415.get_m31(2); + trace[72].data[row_index] = op1_limb_2_col72; + let op1_limb_3_col73 = memory_id_to_big_value_tmp_1415.get_m31(3); + trace[73].data[row_index] = op1_limb_3_col73; + let op1_limb_4_col74 = memory_id_to_big_value_tmp_1415.get_m31(4); + trace[74].data[row_index] = op1_limb_4_col74; + let op1_limb_5_col75 = memory_id_to_big_value_tmp_1415.get_m31(5); + trace[75].data[row_index] = op1_limb_5_col75; + let op1_limb_6_col76 = memory_id_to_big_value_tmp_1415.get_m31(6); + trace[76].data[row_index] = op1_limb_6_col76; + let op1_limb_7_col77 = memory_id_to_big_value_tmp_1415.get_m31(7); + trace[77].data[row_index] = op1_limb_7_col77; + let op1_limb_8_col78 = memory_id_to_big_value_tmp_1415.get_m31(8); + trace[78].data[row_index] = op1_limb_8_col78; + let op1_limb_9_col79 = memory_id_to_big_value_tmp_1415.get_m31(9); + trace[79].data[row_index] = op1_limb_9_col79; + let op1_limb_10_col80 = memory_id_to_big_value_tmp_1415.get_m31(10); + trace[80].data[row_index] = op1_limb_10_col80; + let op1_limb_11_col81 = memory_id_to_big_value_tmp_1415.get_m31(11); + trace[81].data[row_index] = op1_limb_11_col81; + let op1_limb_12_col82 = memory_id_to_big_value_tmp_1415.get_m31(12); + trace[82].data[row_index] = op1_limb_12_col82; + let op1_limb_13_col83 = memory_id_to_big_value_tmp_1415.get_m31(13); + trace[83].data[row_index] = op1_limb_13_col83; + let op1_limb_14_col84 = memory_id_to_big_value_tmp_1415.get_m31(14); + trace[84].data[row_index] = op1_limb_14_col84; + let op1_limb_15_col85 = memory_id_to_big_value_tmp_1415.get_m31(15); + trace[85].data[row_index] = op1_limb_15_col85; + let op1_limb_16_col86 = memory_id_to_big_value_tmp_1415.get_m31(16); + trace[86].data[row_index] = op1_limb_16_col86; + let op1_limb_17_col87 = memory_id_to_big_value_tmp_1415.get_m31(17); + trace[87].data[row_index] = op1_limb_17_col87; + let op1_limb_18_col88 = memory_id_to_big_value_tmp_1415.get_m31(18); + trace[88].data[row_index] = op1_limb_18_col88; + let op1_limb_19_col89 = memory_id_to_big_value_tmp_1415.get_m31(19); + trace[89].data[row_index] = op1_limb_19_col89; + let op1_limb_20_col90 = memory_id_to_big_value_tmp_1415.get_m31(20); + trace[90].data[row_index] = op1_limb_20_col90; + let op1_limb_21_col91 = memory_id_to_big_value_tmp_1415.get_m31(21); + trace[91].data[row_index] = op1_limb_21_col91; + let op1_limb_22_col92 = memory_id_to_big_value_tmp_1415.get_m31(22); + trace[92].data[row_index] = op1_limb_22_col92; + let op1_limb_23_col93 = memory_id_to_big_value_tmp_1415.get_m31(23); + trace[93].data[row_index] = op1_limb_23_col93; + let op1_limb_24_col94 = memory_id_to_big_value_tmp_1415.get_m31(24); + trace[94].data[row_index] = op1_limb_24_col94; + let op1_limb_25_col95 = memory_id_to_big_value_tmp_1415.get_m31(25); + trace[95].data[row_index] = op1_limb_25_col95; + let op1_limb_26_col96 = memory_id_to_big_value_tmp_1415.get_m31(26); + trace[96].data[row_index] = op1_limb_26_col96; + let op1_limb_27_col97 = memory_id_to_big_value_tmp_1415.get_m31(27); + trace[97].data[row_index] = op1_limb_27_col97; + sub_components_inputs.memory_id_to_big_inputs[2].extend(op1_id_col69.unpack()); + + lookup_data.memoryidtobig[2].push([ + op1_id_col69, + op1_limb_0_col70, + op1_limb_1_col71, + op1_limb_2_col72, + op1_limb_3_col73, + op1_limb_4_col74, + op1_limb_5_col75, + op1_limb_6_col76, + op1_limb_7_col77, + op1_limb_8_col78, + op1_limb_9_col79, + op1_limb_10_col80, + op1_limb_11_col81, + op1_limb_12_col82, + op1_limb_13_col83, + op1_limb_14_col84, + op1_limb_15_col85, + op1_limb_16_col86, + op1_limb_17_col87, + op1_limb_18_col88, + op1_limb_19_col89, + op1_limb_20_col90, + op1_limb_21_col91, + op1_limb_22_col92, + op1_limb_23_col93, + op1_limb_24_col94, + op1_limb_25_col95, + op1_limb_26_col96, + op1_limb_27_col97, + ]); + + // verify_mul252. + + let conv_tmp_1416 = + (((M31_0) - (dst_limb_0_col12)) + ((op0_limb_0_col41) * (op1_limb_0_col70))); + let conv_tmp_1417 = ((((M31_0) - (dst_limb_1_col13)) + + ((op0_limb_0_col41) * (op1_limb_1_col71))) + + ((op0_limb_1_col42) * (op1_limb_0_col70))); + let conv_tmp_1418 = (((((M31_0) - (dst_limb_2_col14)) + + ((op0_limb_0_col41) * (op1_limb_2_col72))) + + ((op0_limb_1_col42) * (op1_limb_1_col71))) + + ((op0_limb_2_col43) * (op1_limb_0_col70))); + let conv_tmp_1419 = ((((((M31_0) - (dst_limb_3_col15)) + + ((op0_limb_0_col41) * (op1_limb_3_col73))) + + ((op0_limb_1_col42) * (op1_limb_2_col72))) + + ((op0_limb_2_col43) * (op1_limb_1_col71))) + + ((op0_limb_3_col44) * (op1_limb_0_col70))); + let conv_tmp_1420 = (((((((M31_0) - (dst_limb_4_col16)) + + ((op0_limb_0_col41) * (op1_limb_4_col74))) + + ((op0_limb_1_col42) * (op1_limb_3_col73))) + + ((op0_limb_2_col43) * (op1_limb_2_col72))) + + ((op0_limb_3_col44) * (op1_limb_1_col71))) + + ((op0_limb_4_col45) * (op1_limb_0_col70))); + let conv_tmp_1421 = ((((((((M31_0) - (dst_limb_5_col17)) + + ((op0_limb_0_col41) * (op1_limb_5_col75))) + + ((op0_limb_1_col42) * (op1_limb_4_col74))) + + ((op0_limb_2_col43) * (op1_limb_3_col73))) + + ((op0_limb_3_col44) * (op1_limb_2_col72))) + + ((op0_limb_4_col45) * (op1_limb_1_col71))) + + ((op0_limb_5_col46) * (op1_limb_0_col70))); + let conv_tmp_1422 = (((((((((M31_0) - (dst_limb_6_col18)) + + ((op0_limb_0_col41) * (op1_limb_6_col76))) + + ((op0_limb_1_col42) * (op1_limb_5_col75))) + + ((op0_limb_2_col43) * (op1_limb_4_col74))) + + ((op0_limb_3_col44) * (op1_limb_3_col73))) + + ((op0_limb_4_col45) * (op1_limb_2_col72))) + + ((op0_limb_5_col46) * (op1_limb_1_col71))) + + ((op0_limb_6_col47) * (op1_limb_0_col70))); + let conv_tmp_1423 = ((((((((((M31_0) - (dst_limb_7_col19)) + + ((op0_limb_0_col41) * (op1_limb_7_col77))) + + ((op0_limb_1_col42) * (op1_limb_6_col76))) + + ((op0_limb_2_col43) * (op1_limb_5_col75))) + + ((op0_limb_3_col44) * (op1_limb_4_col74))) + + ((op0_limb_4_col45) * (op1_limb_3_col73))) + + ((op0_limb_5_col46) * (op1_limb_2_col72))) + + ((op0_limb_6_col47) * (op1_limb_1_col71))) + + ((op0_limb_7_col48) * (op1_limb_0_col70))); + let conv_tmp_1424 = (((((((((((M31_0) - (dst_limb_8_col20)) + + ((op0_limb_0_col41) * (op1_limb_8_col78))) + + ((op0_limb_1_col42) * (op1_limb_7_col77))) + + ((op0_limb_2_col43) * (op1_limb_6_col76))) + + ((op0_limb_3_col44) * (op1_limb_5_col75))) + + ((op0_limb_4_col45) * (op1_limb_4_col74))) + + ((op0_limb_5_col46) * (op1_limb_3_col73))) + + ((op0_limb_6_col47) * (op1_limb_2_col72))) + + ((op0_limb_7_col48) * (op1_limb_1_col71))) + + ((op0_limb_8_col49) * (op1_limb_0_col70))); + let conv_tmp_1425 = ((((((((((((M31_0) - (dst_limb_9_col21)) + + ((op0_limb_0_col41) * (op1_limb_9_col79))) + + ((op0_limb_1_col42) * (op1_limb_8_col78))) + + ((op0_limb_2_col43) * (op1_limb_7_col77))) + + ((op0_limb_3_col44) * (op1_limb_6_col76))) + + ((op0_limb_4_col45) * (op1_limb_5_col75))) + + ((op0_limb_5_col46) * (op1_limb_4_col74))) + + ((op0_limb_6_col47) * (op1_limb_3_col73))) + + ((op0_limb_7_col48) * (op1_limb_2_col72))) + + ((op0_limb_8_col49) * (op1_limb_1_col71))) + + ((op0_limb_9_col50) * (op1_limb_0_col70))); + let conv_tmp_1426 = (((((((((((((M31_0) - (dst_limb_10_col22)) + + ((op0_limb_0_col41) * (op1_limb_10_col80))) + + ((op0_limb_1_col42) * (op1_limb_9_col79))) + + ((op0_limb_2_col43) * (op1_limb_8_col78))) + + ((op0_limb_3_col44) * (op1_limb_7_col77))) + + ((op0_limb_4_col45) * (op1_limb_6_col76))) + + ((op0_limb_5_col46) * (op1_limb_5_col75))) + + ((op0_limb_6_col47) * (op1_limb_4_col74))) + + ((op0_limb_7_col48) * (op1_limb_3_col73))) + + ((op0_limb_8_col49) * (op1_limb_2_col72))) + + ((op0_limb_9_col50) * (op1_limb_1_col71))) + + ((op0_limb_10_col51) * (op1_limb_0_col70))); + let conv_tmp_1427 = ((((((((((((((M31_0) - (dst_limb_11_col23)) + + ((op0_limb_0_col41) * (op1_limb_11_col81))) + + ((op0_limb_1_col42) * (op1_limb_10_col80))) + + ((op0_limb_2_col43) * (op1_limb_9_col79))) + + ((op0_limb_3_col44) * (op1_limb_8_col78))) + + ((op0_limb_4_col45) * (op1_limb_7_col77))) + + ((op0_limb_5_col46) * (op1_limb_6_col76))) + + ((op0_limb_6_col47) * (op1_limb_5_col75))) + + ((op0_limb_7_col48) * (op1_limb_4_col74))) + + ((op0_limb_8_col49) * (op1_limb_3_col73))) + + ((op0_limb_9_col50) * (op1_limb_2_col72))) + + ((op0_limb_10_col51) * (op1_limb_1_col71))) + + ((op0_limb_11_col52) * (op1_limb_0_col70))); + let conv_tmp_1428 = (((((((((((((((M31_0) - (dst_limb_12_col24)) + + ((op0_limb_0_col41) * (op1_limb_12_col82))) + + ((op0_limb_1_col42) * (op1_limb_11_col81))) + + ((op0_limb_2_col43) * (op1_limb_10_col80))) + + ((op0_limb_3_col44) * (op1_limb_9_col79))) + + ((op0_limb_4_col45) * (op1_limb_8_col78))) + + ((op0_limb_5_col46) * (op1_limb_7_col77))) + + ((op0_limb_6_col47) * (op1_limb_6_col76))) + + ((op0_limb_7_col48) * (op1_limb_5_col75))) + + ((op0_limb_8_col49) * (op1_limb_4_col74))) + + ((op0_limb_9_col50) * (op1_limb_3_col73))) + + ((op0_limb_10_col51) * (op1_limb_2_col72))) + + ((op0_limb_11_col52) * (op1_limb_1_col71))) + + ((op0_limb_12_col53) * (op1_limb_0_col70))); + let conv_tmp_1429 = ((((((((((((((((M31_0) - (dst_limb_13_col25)) + + ((op0_limb_0_col41) * (op1_limb_13_col83))) + + ((op0_limb_1_col42) * (op1_limb_12_col82))) + + ((op0_limb_2_col43) * (op1_limb_11_col81))) + + ((op0_limb_3_col44) * (op1_limb_10_col80))) + + ((op0_limb_4_col45) * (op1_limb_9_col79))) + + ((op0_limb_5_col46) * (op1_limb_8_col78))) + + ((op0_limb_6_col47) * (op1_limb_7_col77))) + + ((op0_limb_7_col48) * (op1_limb_6_col76))) + + ((op0_limb_8_col49) * (op1_limb_5_col75))) + + ((op0_limb_9_col50) * (op1_limb_4_col74))) + + ((op0_limb_10_col51) * (op1_limb_3_col73))) + + ((op0_limb_11_col52) * (op1_limb_2_col72))) + + ((op0_limb_12_col53) * (op1_limb_1_col71))) + + ((op0_limb_13_col54) * (op1_limb_0_col70))); + let conv_tmp_1430 = (((((((((((((((((M31_0) - (dst_limb_14_col26)) + + ((op0_limb_0_col41) * (op1_limb_14_col84))) + + ((op0_limb_1_col42) * (op1_limb_13_col83))) + + ((op0_limb_2_col43) * (op1_limb_12_col82))) + + ((op0_limb_3_col44) * (op1_limb_11_col81))) + + ((op0_limb_4_col45) * (op1_limb_10_col80))) + + ((op0_limb_5_col46) * (op1_limb_9_col79))) + + ((op0_limb_6_col47) * (op1_limb_8_col78))) + + ((op0_limb_7_col48) * (op1_limb_7_col77))) + + ((op0_limb_8_col49) * (op1_limb_6_col76))) + + ((op0_limb_9_col50) * (op1_limb_5_col75))) + + ((op0_limb_10_col51) * (op1_limb_4_col74))) + + ((op0_limb_11_col52) * (op1_limb_3_col73))) + + ((op0_limb_12_col53) * (op1_limb_2_col72))) + + ((op0_limb_13_col54) * (op1_limb_1_col71))) + + ((op0_limb_14_col55) * (op1_limb_0_col70))); + let conv_tmp_1431 = ((((((((((((((((((M31_0) - (dst_limb_15_col27)) + + ((op0_limb_0_col41) * (op1_limb_15_col85))) + + ((op0_limb_1_col42) * (op1_limb_14_col84))) + + ((op0_limb_2_col43) * (op1_limb_13_col83))) + + ((op0_limb_3_col44) * (op1_limb_12_col82))) + + ((op0_limb_4_col45) * (op1_limb_11_col81))) + + ((op0_limb_5_col46) * (op1_limb_10_col80))) + + ((op0_limb_6_col47) * (op1_limb_9_col79))) + + ((op0_limb_7_col48) * (op1_limb_8_col78))) + + ((op0_limb_8_col49) * (op1_limb_7_col77))) + + ((op0_limb_9_col50) * (op1_limb_6_col76))) + + ((op0_limb_10_col51) * (op1_limb_5_col75))) + + ((op0_limb_11_col52) * (op1_limb_4_col74))) + + ((op0_limb_12_col53) * (op1_limb_3_col73))) + + ((op0_limb_13_col54) * (op1_limb_2_col72))) + + ((op0_limb_14_col55) * (op1_limb_1_col71))) + + ((op0_limb_15_col56) * (op1_limb_0_col70))); + let conv_tmp_1432 = (((((((((((((((((((M31_0) - (dst_limb_16_col28)) + + ((op0_limb_0_col41) * (op1_limb_16_col86))) + + ((op0_limb_1_col42) * (op1_limb_15_col85))) + + ((op0_limb_2_col43) * (op1_limb_14_col84))) + + ((op0_limb_3_col44) * (op1_limb_13_col83))) + + ((op0_limb_4_col45) * (op1_limb_12_col82))) + + ((op0_limb_5_col46) * (op1_limb_11_col81))) + + ((op0_limb_6_col47) * (op1_limb_10_col80))) + + ((op0_limb_7_col48) * (op1_limb_9_col79))) + + ((op0_limb_8_col49) * (op1_limb_8_col78))) + + ((op0_limb_9_col50) * (op1_limb_7_col77))) + + ((op0_limb_10_col51) * (op1_limb_6_col76))) + + ((op0_limb_11_col52) * (op1_limb_5_col75))) + + ((op0_limb_12_col53) * (op1_limb_4_col74))) + + ((op0_limb_13_col54) * (op1_limb_3_col73))) + + ((op0_limb_14_col55) * (op1_limb_2_col72))) + + ((op0_limb_15_col56) * (op1_limb_1_col71))) + + ((op0_limb_16_col57) * (op1_limb_0_col70))); + let conv_tmp_1433 = ((((((((((((((((((((M31_0) - (dst_limb_17_col29)) + + ((op0_limb_0_col41) * (op1_limb_17_col87))) + + ((op0_limb_1_col42) * (op1_limb_16_col86))) + + ((op0_limb_2_col43) * (op1_limb_15_col85))) + + ((op0_limb_3_col44) * (op1_limb_14_col84))) + + ((op0_limb_4_col45) * (op1_limb_13_col83))) + + ((op0_limb_5_col46) * (op1_limb_12_col82))) + + ((op0_limb_6_col47) * (op1_limb_11_col81))) + + ((op0_limb_7_col48) * (op1_limb_10_col80))) + + ((op0_limb_8_col49) * (op1_limb_9_col79))) + + ((op0_limb_9_col50) * (op1_limb_8_col78))) + + ((op0_limb_10_col51) * (op1_limb_7_col77))) + + ((op0_limb_11_col52) * (op1_limb_6_col76))) + + ((op0_limb_12_col53) * (op1_limb_5_col75))) + + ((op0_limb_13_col54) * (op1_limb_4_col74))) + + ((op0_limb_14_col55) * (op1_limb_3_col73))) + + ((op0_limb_15_col56) * (op1_limb_2_col72))) + + ((op0_limb_16_col57) * (op1_limb_1_col71))) + + ((op0_limb_17_col58) * (op1_limb_0_col70))); + let conv_tmp_1434 = (((((((((((((((((((((M31_0) + - (dst_limb_18_col30)) + + ((op0_limb_0_col41) * (op1_limb_18_col88))) + + ((op0_limb_1_col42) * (op1_limb_17_col87))) + + ((op0_limb_2_col43) * (op1_limb_16_col86))) + + ((op0_limb_3_col44) * (op1_limb_15_col85))) + + ((op0_limb_4_col45) * (op1_limb_14_col84))) + + ((op0_limb_5_col46) * (op1_limb_13_col83))) + + ((op0_limb_6_col47) * (op1_limb_12_col82))) + + ((op0_limb_7_col48) * (op1_limb_11_col81))) + + ((op0_limb_8_col49) * (op1_limb_10_col80))) + + ((op0_limb_9_col50) * (op1_limb_9_col79))) + + ((op0_limb_10_col51) * (op1_limb_8_col78))) + + ((op0_limb_11_col52) * (op1_limb_7_col77))) + + ((op0_limb_12_col53) * (op1_limb_6_col76))) + + ((op0_limb_13_col54) * (op1_limb_5_col75))) + + ((op0_limb_14_col55) * (op1_limb_4_col74))) + + ((op0_limb_15_col56) * (op1_limb_3_col73))) + + ((op0_limb_16_col57) * (op1_limb_2_col72))) + + ((op0_limb_17_col58) * (op1_limb_1_col71))) + + ((op0_limb_18_col59) * (op1_limb_0_col70))); + let conv_tmp_1435 = ((((((((((((((((((((((M31_0) + - (dst_limb_19_col31)) + + ((op0_limb_0_col41) * (op1_limb_19_col89))) + + ((op0_limb_1_col42) * (op1_limb_18_col88))) + + ((op0_limb_2_col43) * (op1_limb_17_col87))) + + ((op0_limb_3_col44) * (op1_limb_16_col86))) + + ((op0_limb_4_col45) * (op1_limb_15_col85))) + + ((op0_limb_5_col46) * (op1_limb_14_col84))) + + ((op0_limb_6_col47) * (op1_limb_13_col83))) + + ((op0_limb_7_col48) * (op1_limb_12_col82))) + + ((op0_limb_8_col49) * (op1_limb_11_col81))) + + ((op0_limb_9_col50) * (op1_limb_10_col80))) + + ((op0_limb_10_col51) * (op1_limb_9_col79))) + + ((op0_limb_11_col52) * (op1_limb_8_col78))) + + ((op0_limb_12_col53) * (op1_limb_7_col77))) + + ((op0_limb_13_col54) * (op1_limb_6_col76))) + + ((op0_limb_14_col55) * (op1_limb_5_col75))) + + ((op0_limb_15_col56) * (op1_limb_4_col74))) + + ((op0_limb_16_col57) * (op1_limb_3_col73))) + + ((op0_limb_17_col58) * (op1_limb_2_col72))) + + ((op0_limb_18_col59) * (op1_limb_1_col71))) + + ((op0_limb_19_col60) * (op1_limb_0_col70))); + let conv_tmp_1436 = (((((((((((((((((((((((M31_0) + - (dst_limb_20_col32)) + + ((op0_limb_0_col41) * (op1_limb_20_col90))) + + ((op0_limb_1_col42) * (op1_limb_19_col89))) + + ((op0_limb_2_col43) * (op1_limb_18_col88))) + + ((op0_limb_3_col44) * (op1_limb_17_col87))) + + ((op0_limb_4_col45) * (op1_limb_16_col86))) + + ((op0_limb_5_col46) * (op1_limb_15_col85))) + + ((op0_limb_6_col47) * (op1_limb_14_col84))) + + ((op0_limb_7_col48) * (op1_limb_13_col83))) + + ((op0_limb_8_col49) * (op1_limb_12_col82))) + + ((op0_limb_9_col50) * (op1_limb_11_col81))) + + ((op0_limb_10_col51) * (op1_limb_10_col80))) + + ((op0_limb_11_col52) * (op1_limb_9_col79))) + + ((op0_limb_12_col53) * (op1_limb_8_col78))) + + ((op0_limb_13_col54) * (op1_limb_7_col77))) + + ((op0_limb_14_col55) * (op1_limb_6_col76))) + + ((op0_limb_15_col56) * (op1_limb_5_col75))) + + ((op0_limb_16_col57) * (op1_limb_4_col74))) + + ((op0_limb_17_col58) * (op1_limb_3_col73))) + + ((op0_limb_18_col59) * (op1_limb_2_col72))) + + ((op0_limb_19_col60) * (op1_limb_1_col71))) + + ((op0_limb_20_col61) * (op1_limb_0_col70))); + let conv_tmp_1437 = ((((((((((((((((((((((((M31_0) + - (dst_limb_21_col33)) + + ((op0_limb_0_col41) * (op1_limb_21_col91))) + + ((op0_limb_1_col42) * (op1_limb_20_col90))) + + ((op0_limb_2_col43) * (op1_limb_19_col89))) + + ((op0_limb_3_col44) * (op1_limb_18_col88))) + + ((op0_limb_4_col45) * (op1_limb_17_col87))) + + ((op0_limb_5_col46) * (op1_limb_16_col86))) + + ((op0_limb_6_col47) * (op1_limb_15_col85))) + + ((op0_limb_7_col48) * (op1_limb_14_col84))) + + ((op0_limb_8_col49) * (op1_limb_13_col83))) + + ((op0_limb_9_col50) * (op1_limb_12_col82))) + + ((op0_limb_10_col51) * (op1_limb_11_col81))) + + ((op0_limb_11_col52) * (op1_limb_10_col80))) + + ((op0_limb_12_col53) * (op1_limb_9_col79))) + + ((op0_limb_13_col54) * (op1_limb_8_col78))) + + ((op0_limb_14_col55) * (op1_limb_7_col77))) + + ((op0_limb_15_col56) * (op1_limb_6_col76))) + + ((op0_limb_16_col57) * (op1_limb_5_col75))) + + ((op0_limb_17_col58) * (op1_limb_4_col74))) + + ((op0_limb_18_col59) * (op1_limb_3_col73))) + + ((op0_limb_19_col60) * (op1_limb_2_col72))) + + ((op0_limb_20_col61) * (op1_limb_1_col71))) + + ((op0_limb_21_col62) * (op1_limb_0_col70))); + let conv_tmp_1438 = (((((((((((((((((((((((((M31_0) + - (dst_limb_22_col34)) + + ((op0_limb_0_col41) * (op1_limb_22_col92))) + + ((op0_limb_1_col42) * (op1_limb_21_col91))) + + ((op0_limb_2_col43) * (op1_limb_20_col90))) + + ((op0_limb_3_col44) * (op1_limb_19_col89))) + + ((op0_limb_4_col45) * (op1_limb_18_col88))) + + ((op0_limb_5_col46) * (op1_limb_17_col87))) + + ((op0_limb_6_col47) * (op1_limb_16_col86))) + + ((op0_limb_7_col48) * (op1_limb_15_col85))) + + ((op0_limb_8_col49) * (op1_limb_14_col84))) + + ((op0_limb_9_col50) * (op1_limb_13_col83))) + + ((op0_limb_10_col51) * (op1_limb_12_col82))) + + ((op0_limb_11_col52) * (op1_limb_11_col81))) + + ((op0_limb_12_col53) * (op1_limb_10_col80))) + + ((op0_limb_13_col54) * (op1_limb_9_col79))) + + ((op0_limb_14_col55) * (op1_limb_8_col78))) + + ((op0_limb_15_col56) * (op1_limb_7_col77))) + + ((op0_limb_16_col57) * (op1_limb_6_col76))) + + ((op0_limb_17_col58) * (op1_limb_5_col75))) + + ((op0_limb_18_col59) * (op1_limb_4_col74))) + + ((op0_limb_19_col60) * (op1_limb_3_col73))) + + ((op0_limb_20_col61) * (op1_limb_2_col72))) + + ((op0_limb_21_col62) * (op1_limb_1_col71))) + + ((op0_limb_22_col63) * (op1_limb_0_col70))); + let conv_tmp_1439 = ((((((((((((((((((((((((((M31_0) + - (dst_limb_23_col35)) + + ((op0_limb_0_col41) * (op1_limb_23_col93))) + + ((op0_limb_1_col42) * (op1_limb_22_col92))) + + ((op0_limb_2_col43) * (op1_limb_21_col91))) + + ((op0_limb_3_col44) * (op1_limb_20_col90))) + + ((op0_limb_4_col45) * (op1_limb_19_col89))) + + ((op0_limb_5_col46) * (op1_limb_18_col88))) + + ((op0_limb_6_col47) * (op1_limb_17_col87))) + + ((op0_limb_7_col48) * (op1_limb_16_col86))) + + ((op0_limb_8_col49) * (op1_limb_15_col85))) + + ((op0_limb_9_col50) * (op1_limb_14_col84))) + + ((op0_limb_10_col51) * (op1_limb_13_col83))) + + ((op0_limb_11_col52) * (op1_limb_12_col82))) + + ((op0_limb_12_col53) * (op1_limb_11_col81))) + + ((op0_limb_13_col54) * (op1_limb_10_col80))) + + ((op0_limb_14_col55) * (op1_limb_9_col79))) + + ((op0_limb_15_col56) * (op1_limb_8_col78))) + + ((op0_limb_16_col57) * (op1_limb_7_col77))) + + ((op0_limb_17_col58) * (op1_limb_6_col76))) + + ((op0_limb_18_col59) * (op1_limb_5_col75))) + + ((op0_limb_19_col60) * (op1_limb_4_col74))) + + ((op0_limb_20_col61) * (op1_limb_3_col73))) + + ((op0_limb_21_col62) * (op1_limb_2_col72))) + + ((op0_limb_22_col63) * (op1_limb_1_col71))) + + ((op0_limb_23_col64) * (op1_limb_0_col70))); + let conv_tmp_1440 = (((((((((((((((((((((((((((M31_0) + - (dst_limb_24_col36)) + + ((op0_limb_0_col41) * (op1_limb_24_col94))) + + ((op0_limb_1_col42) * (op1_limb_23_col93))) + + ((op0_limb_2_col43) * (op1_limb_22_col92))) + + ((op0_limb_3_col44) * (op1_limb_21_col91))) + + ((op0_limb_4_col45) * (op1_limb_20_col90))) + + ((op0_limb_5_col46) * (op1_limb_19_col89))) + + ((op0_limb_6_col47) * (op1_limb_18_col88))) + + ((op0_limb_7_col48) * (op1_limb_17_col87))) + + ((op0_limb_8_col49) * (op1_limb_16_col86))) + + ((op0_limb_9_col50) * (op1_limb_15_col85))) + + ((op0_limb_10_col51) * (op1_limb_14_col84))) + + ((op0_limb_11_col52) * (op1_limb_13_col83))) + + ((op0_limb_12_col53) * (op1_limb_12_col82))) + + ((op0_limb_13_col54) * (op1_limb_11_col81))) + + ((op0_limb_14_col55) * (op1_limb_10_col80))) + + ((op0_limb_15_col56) * (op1_limb_9_col79))) + + ((op0_limb_16_col57) * (op1_limb_8_col78))) + + ((op0_limb_17_col58) * (op1_limb_7_col77))) + + ((op0_limb_18_col59) * (op1_limb_6_col76))) + + ((op0_limb_19_col60) * (op1_limb_5_col75))) + + ((op0_limb_20_col61) * (op1_limb_4_col74))) + + ((op0_limb_21_col62) * (op1_limb_3_col73))) + + ((op0_limb_22_col63) * (op1_limb_2_col72))) + + ((op0_limb_23_col64) * (op1_limb_1_col71))) + + ((op0_limb_24_col65) * (op1_limb_0_col70))); + let conv_tmp_1441 = ((((((((((((((((((((((((((((M31_0) + - (dst_limb_25_col37)) + + ((op0_limb_0_col41) * (op1_limb_25_col95))) + + ((op0_limb_1_col42) * (op1_limb_24_col94))) + + ((op0_limb_2_col43) * (op1_limb_23_col93))) + + ((op0_limb_3_col44) * (op1_limb_22_col92))) + + ((op0_limb_4_col45) * (op1_limb_21_col91))) + + ((op0_limb_5_col46) * (op1_limb_20_col90))) + + ((op0_limb_6_col47) * (op1_limb_19_col89))) + + ((op0_limb_7_col48) * (op1_limb_18_col88))) + + ((op0_limb_8_col49) * (op1_limb_17_col87))) + + ((op0_limb_9_col50) * (op1_limb_16_col86))) + + ((op0_limb_10_col51) * (op1_limb_15_col85))) + + ((op0_limb_11_col52) * (op1_limb_14_col84))) + + ((op0_limb_12_col53) * (op1_limb_13_col83))) + + ((op0_limb_13_col54) * (op1_limb_12_col82))) + + ((op0_limb_14_col55) * (op1_limb_11_col81))) + + ((op0_limb_15_col56) * (op1_limb_10_col80))) + + ((op0_limb_16_col57) * (op1_limb_9_col79))) + + ((op0_limb_17_col58) * (op1_limb_8_col78))) + + ((op0_limb_18_col59) * (op1_limb_7_col77))) + + ((op0_limb_19_col60) * (op1_limb_6_col76))) + + ((op0_limb_20_col61) * (op1_limb_5_col75))) + + ((op0_limb_21_col62) * (op1_limb_4_col74))) + + ((op0_limb_22_col63) * (op1_limb_3_col73))) + + ((op0_limb_23_col64) * (op1_limb_2_col72))) + + ((op0_limb_24_col65) * (op1_limb_1_col71))) + + ((op0_limb_25_col66) * (op1_limb_0_col70))); + let conv_tmp_1442 = (((((((((((((((((((((((((((((M31_0) + - (dst_limb_26_col38)) + + ((op0_limb_0_col41) * (op1_limb_26_col96))) + + ((op0_limb_1_col42) * (op1_limb_25_col95))) + + ((op0_limb_2_col43) * (op1_limb_24_col94))) + + ((op0_limb_3_col44) * (op1_limb_23_col93))) + + ((op0_limb_4_col45) * (op1_limb_22_col92))) + + ((op0_limb_5_col46) * (op1_limb_21_col91))) + + ((op0_limb_6_col47) * (op1_limb_20_col90))) + + ((op0_limb_7_col48) * (op1_limb_19_col89))) + + ((op0_limb_8_col49) * (op1_limb_18_col88))) + + ((op0_limb_9_col50) * (op1_limb_17_col87))) + + ((op0_limb_10_col51) * (op1_limb_16_col86))) + + ((op0_limb_11_col52) * (op1_limb_15_col85))) + + ((op0_limb_12_col53) * (op1_limb_14_col84))) + + ((op0_limb_13_col54) * (op1_limb_13_col83))) + + ((op0_limb_14_col55) * (op1_limb_12_col82))) + + ((op0_limb_15_col56) * (op1_limb_11_col81))) + + ((op0_limb_16_col57) * (op1_limb_10_col80))) + + ((op0_limb_17_col58) * (op1_limb_9_col79))) + + ((op0_limb_18_col59) * (op1_limb_8_col78))) + + ((op0_limb_19_col60) * (op1_limb_7_col77))) + + ((op0_limb_20_col61) * (op1_limb_6_col76))) + + ((op0_limb_21_col62) * (op1_limb_5_col75))) + + ((op0_limb_22_col63) * (op1_limb_4_col74))) + + ((op0_limb_23_col64) * (op1_limb_3_col73))) + + ((op0_limb_24_col65) * (op1_limb_2_col72))) + + ((op0_limb_25_col66) * (op1_limb_1_col71))) + + ((op0_limb_26_col67) * (op1_limb_0_col70))); + let conv_tmp_1443 = ((((((((((((((((((((((((((((((M31_0) + - (dst_limb_27_col39)) + + ((op0_limb_0_col41) * (op1_limb_27_col97))) + + ((op0_limb_1_col42) * (op1_limb_26_col96))) + + ((op0_limb_2_col43) * (op1_limb_25_col95))) + + ((op0_limb_3_col44) * (op1_limb_24_col94))) + + ((op0_limb_4_col45) * (op1_limb_23_col93))) + + ((op0_limb_5_col46) * (op1_limb_22_col92))) + + ((op0_limb_6_col47) * (op1_limb_21_col91))) + + ((op0_limb_7_col48) * (op1_limb_20_col90))) + + ((op0_limb_8_col49) * (op1_limb_19_col89))) + + ((op0_limb_9_col50) * (op1_limb_18_col88))) + + ((op0_limb_10_col51) * (op1_limb_17_col87))) + + ((op0_limb_11_col52) * (op1_limb_16_col86))) + + ((op0_limb_12_col53) * (op1_limb_15_col85))) + + ((op0_limb_13_col54) * (op1_limb_14_col84))) + + ((op0_limb_14_col55) * (op1_limb_13_col83))) + + ((op0_limb_15_col56) * (op1_limb_12_col82))) + + ((op0_limb_16_col57) * (op1_limb_11_col81))) + + ((op0_limb_17_col58) * (op1_limb_10_col80))) + + ((op0_limb_18_col59) * (op1_limb_9_col79))) + + ((op0_limb_19_col60) * (op1_limb_8_col78))) + + ((op0_limb_20_col61) * (op1_limb_7_col77))) + + ((op0_limb_21_col62) * (op1_limb_6_col76))) + + ((op0_limb_22_col63) * (op1_limb_5_col75))) + + ((op0_limb_23_col64) * (op1_limb_4_col74))) + + ((op0_limb_24_col65) * (op1_limb_3_col73))) + + ((op0_limb_25_col66) * (op1_limb_2_col72))) + + ((op0_limb_26_col67) * (op1_limb_1_col71))) + + ((op0_limb_27_col68) * (op1_limb_0_col70))); + let conv_tmp_1444 = ((((((((((((((((((((((((((((M31_0) + + ((op0_limb_1_col42) * (op1_limb_27_col97))) + + ((op0_limb_2_col43) * (op1_limb_26_col96))) + + ((op0_limb_3_col44) * (op1_limb_25_col95))) + + ((op0_limb_4_col45) * (op1_limb_24_col94))) + + ((op0_limb_5_col46) * (op1_limb_23_col93))) + + ((op0_limb_6_col47) * (op1_limb_22_col92))) + + ((op0_limb_7_col48) * (op1_limb_21_col91))) + + ((op0_limb_8_col49) * (op1_limb_20_col90))) + + ((op0_limb_9_col50) * (op1_limb_19_col89))) + + ((op0_limb_10_col51) * (op1_limb_18_col88))) + + ((op0_limb_11_col52) * (op1_limb_17_col87))) + + ((op0_limb_12_col53) * (op1_limb_16_col86))) + + ((op0_limb_13_col54) * (op1_limb_15_col85))) + + ((op0_limb_14_col55) * (op1_limb_14_col84))) + + ((op0_limb_15_col56) * (op1_limb_13_col83))) + + ((op0_limb_16_col57) * (op1_limb_12_col82))) + + ((op0_limb_17_col58) * (op1_limb_11_col81))) + + ((op0_limb_18_col59) * (op1_limb_10_col80))) + + ((op0_limb_19_col60) * (op1_limb_9_col79))) + + ((op0_limb_20_col61) * (op1_limb_8_col78))) + + ((op0_limb_21_col62) * (op1_limb_7_col77))) + + ((op0_limb_22_col63) * (op1_limb_6_col76))) + + ((op0_limb_23_col64) * (op1_limb_5_col75))) + + ((op0_limb_24_col65) * (op1_limb_4_col74))) + + ((op0_limb_25_col66) * (op1_limb_3_col73))) + + ((op0_limb_26_col67) * (op1_limb_2_col72))) + + ((op0_limb_27_col68) * (op1_limb_1_col71))); + let conv_tmp_1445 = (((((((((((((((((((((((((((M31_0) + + ((op0_limb_2_col43) * (op1_limb_27_col97))) + + ((op0_limb_3_col44) * (op1_limb_26_col96))) + + ((op0_limb_4_col45) * (op1_limb_25_col95))) + + ((op0_limb_5_col46) * (op1_limb_24_col94))) + + ((op0_limb_6_col47) * (op1_limb_23_col93))) + + ((op0_limb_7_col48) * (op1_limb_22_col92))) + + ((op0_limb_8_col49) * (op1_limb_21_col91))) + + ((op0_limb_9_col50) * (op1_limb_20_col90))) + + ((op0_limb_10_col51) * (op1_limb_19_col89))) + + ((op0_limb_11_col52) * (op1_limb_18_col88))) + + ((op0_limb_12_col53) * (op1_limb_17_col87))) + + ((op0_limb_13_col54) * (op1_limb_16_col86))) + + ((op0_limb_14_col55) * (op1_limb_15_col85))) + + ((op0_limb_15_col56) * (op1_limb_14_col84))) + + ((op0_limb_16_col57) * (op1_limb_13_col83))) + + ((op0_limb_17_col58) * (op1_limb_12_col82))) + + ((op0_limb_18_col59) * (op1_limb_11_col81))) + + ((op0_limb_19_col60) * (op1_limb_10_col80))) + + ((op0_limb_20_col61) * (op1_limb_9_col79))) + + ((op0_limb_21_col62) * (op1_limb_8_col78))) + + ((op0_limb_22_col63) * (op1_limb_7_col77))) + + ((op0_limb_23_col64) * (op1_limb_6_col76))) + + ((op0_limb_24_col65) * (op1_limb_5_col75))) + + ((op0_limb_25_col66) * (op1_limb_4_col74))) + + ((op0_limb_26_col67) * (op1_limb_3_col73))) + + ((op0_limb_27_col68) * (op1_limb_2_col72))); + let conv_tmp_1446 = ((((((((((((((((((((((((((M31_0) + + ((op0_limb_3_col44) * (op1_limb_27_col97))) + + ((op0_limb_4_col45) * (op1_limb_26_col96))) + + ((op0_limb_5_col46) * (op1_limb_25_col95))) + + ((op0_limb_6_col47) * (op1_limb_24_col94))) + + ((op0_limb_7_col48) * (op1_limb_23_col93))) + + ((op0_limb_8_col49) * (op1_limb_22_col92))) + + ((op0_limb_9_col50) * (op1_limb_21_col91))) + + ((op0_limb_10_col51) * (op1_limb_20_col90))) + + ((op0_limb_11_col52) * (op1_limb_19_col89))) + + ((op0_limb_12_col53) * (op1_limb_18_col88))) + + ((op0_limb_13_col54) * (op1_limb_17_col87))) + + ((op0_limb_14_col55) * (op1_limb_16_col86))) + + ((op0_limb_15_col56) * (op1_limb_15_col85))) + + ((op0_limb_16_col57) * (op1_limb_14_col84))) + + ((op0_limb_17_col58) * (op1_limb_13_col83))) + + ((op0_limb_18_col59) * (op1_limb_12_col82))) + + ((op0_limb_19_col60) * (op1_limb_11_col81))) + + ((op0_limb_20_col61) * (op1_limb_10_col80))) + + ((op0_limb_21_col62) * (op1_limb_9_col79))) + + ((op0_limb_22_col63) * (op1_limb_8_col78))) + + ((op0_limb_23_col64) * (op1_limb_7_col77))) + + ((op0_limb_24_col65) * (op1_limb_6_col76))) + + ((op0_limb_25_col66) * (op1_limb_5_col75))) + + ((op0_limb_26_col67) * (op1_limb_4_col74))) + + ((op0_limb_27_col68) * (op1_limb_3_col73))); + let conv_tmp_1447 = (((((((((((((((((((((((((M31_0) + + ((op0_limb_4_col45) * (op1_limb_27_col97))) + + ((op0_limb_5_col46) * (op1_limb_26_col96))) + + ((op0_limb_6_col47) * (op1_limb_25_col95))) + + ((op0_limb_7_col48) * (op1_limb_24_col94))) + + ((op0_limb_8_col49) * (op1_limb_23_col93))) + + ((op0_limb_9_col50) * (op1_limb_22_col92))) + + ((op0_limb_10_col51) * (op1_limb_21_col91))) + + ((op0_limb_11_col52) * (op1_limb_20_col90))) + + ((op0_limb_12_col53) * (op1_limb_19_col89))) + + ((op0_limb_13_col54) * (op1_limb_18_col88))) + + ((op0_limb_14_col55) * (op1_limb_17_col87))) + + ((op0_limb_15_col56) * (op1_limb_16_col86))) + + ((op0_limb_16_col57) * (op1_limb_15_col85))) + + ((op0_limb_17_col58) * (op1_limb_14_col84))) + + ((op0_limb_18_col59) * (op1_limb_13_col83))) + + ((op0_limb_19_col60) * (op1_limb_12_col82))) + + ((op0_limb_20_col61) * (op1_limb_11_col81))) + + ((op0_limb_21_col62) * (op1_limb_10_col80))) + + ((op0_limb_22_col63) * (op1_limb_9_col79))) + + ((op0_limb_23_col64) * (op1_limb_8_col78))) + + ((op0_limb_24_col65) * (op1_limb_7_col77))) + + ((op0_limb_25_col66) * (op1_limb_6_col76))) + + ((op0_limb_26_col67) * (op1_limb_5_col75))) + + ((op0_limb_27_col68) * (op1_limb_4_col74))); + let conv_tmp_1448 = ((((((((((((((((((((((((M31_0) + + ((op0_limb_5_col46) * (op1_limb_27_col97))) + + ((op0_limb_6_col47) * (op1_limb_26_col96))) + + ((op0_limb_7_col48) * (op1_limb_25_col95))) + + ((op0_limb_8_col49) * (op1_limb_24_col94))) + + ((op0_limb_9_col50) * (op1_limb_23_col93))) + + ((op0_limb_10_col51) * (op1_limb_22_col92))) + + ((op0_limb_11_col52) * (op1_limb_21_col91))) + + ((op0_limb_12_col53) * (op1_limb_20_col90))) + + ((op0_limb_13_col54) * (op1_limb_19_col89))) + + ((op0_limb_14_col55) * (op1_limb_18_col88))) + + ((op0_limb_15_col56) * (op1_limb_17_col87))) + + ((op0_limb_16_col57) * (op1_limb_16_col86))) + + ((op0_limb_17_col58) * (op1_limb_15_col85))) + + ((op0_limb_18_col59) * (op1_limb_14_col84))) + + ((op0_limb_19_col60) * (op1_limb_13_col83))) + + ((op0_limb_20_col61) * (op1_limb_12_col82))) + + ((op0_limb_21_col62) * (op1_limb_11_col81))) + + ((op0_limb_22_col63) * (op1_limb_10_col80))) + + ((op0_limb_23_col64) * (op1_limb_9_col79))) + + ((op0_limb_24_col65) * (op1_limb_8_col78))) + + ((op0_limb_25_col66) * (op1_limb_7_col77))) + + ((op0_limb_26_col67) * (op1_limb_6_col76))) + + ((op0_limb_27_col68) * (op1_limb_5_col75))); + let conv_tmp_1449 = (((((((((((((((((((((((M31_0) + + ((op0_limb_6_col47) * (op1_limb_27_col97))) + + ((op0_limb_7_col48) * (op1_limb_26_col96))) + + ((op0_limb_8_col49) * (op1_limb_25_col95))) + + ((op0_limb_9_col50) * (op1_limb_24_col94))) + + ((op0_limb_10_col51) * (op1_limb_23_col93))) + + ((op0_limb_11_col52) * (op1_limb_22_col92))) + + ((op0_limb_12_col53) * (op1_limb_21_col91))) + + ((op0_limb_13_col54) * (op1_limb_20_col90))) + + ((op0_limb_14_col55) * (op1_limb_19_col89))) + + ((op0_limb_15_col56) * (op1_limb_18_col88))) + + ((op0_limb_16_col57) * (op1_limb_17_col87))) + + ((op0_limb_17_col58) * (op1_limb_16_col86))) + + ((op0_limb_18_col59) * (op1_limb_15_col85))) + + ((op0_limb_19_col60) * (op1_limb_14_col84))) + + ((op0_limb_20_col61) * (op1_limb_13_col83))) + + ((op0_limb_21_col62) * (op1_limb_12_col82))) + + ((op0_limb_22_col63) * (op1_limb_11_col81))) + + ((op0_limb_23_col64) * (op1_limb_10_col80))) + + ((op0_limb_24_col65) * (op1_limb_9_col79))) + + ((op0_limb_25_col66) * (op1_limb_8_col78))) + + ((op0_limb_26_col67) * (op1_limb_7_col77))) + + ((op0_limb_27_col68) * (op1_limb_6_col76))); + let conv_tmp_1450 = ((((((((((((((((((((((M31_0) + + ((op0_limb_7_col48) * (op1_limb_27_col97))) + + ((op0_limb_8_col49) * (op1_limb_26_col96))) + + ((op0_limb_9_col50) * (op1_limb_25_col95))) + + ((op0_limb_10_col51) * (op1_limb_24_col94))) + + ((op0_limb_11_col52) * (op1_limb_23_col93))) + + ((op0_limb_12_col53) * (op1_limb_22_col92))) + + ((op0_limb_13_col54) * (op1_limb_21_col91))) + + ((op0_limb_14_col55) * (op1_limb_20_col90))) + + ((op0_limb_15_col56) * (op1_limb_19_col89))) + + ((op0_limb_16_col57) * (op1_limb_18_col88))) + + ((op0_limb_17_col58) * (op1_limb_17_col87))) + + ((op0_limb_18_col59) * (op1_limb_16_col86))) + + ((op0_limb_19_col60) * (op1_limb_15_col85))) + + ((op0_limb_20_col61) * (op1_limb_14_col84))) + + ((op0_limb_21_col62) * (op1_limb_13_col83))) + + ((op0_limb_22_col63) * (op1_limb_12_col82))) + + ((op0_limb_23_col64) * (op1_limb_11_col81))) + + ((op0_limb_24_col65) * (op1_limb_10_col80))) + + ((op0_limb_25_col66) * (op1_limb_9_col79))) + + ((op0_limb_26_col67) * (op1_limb_8_col78))) + + ((op0_limb_27_col68) * (op1_limb_7_col77))); + let conv_tmp_1451 = (((((((((((((((((((((M31_0) + + ((op0_limb_8_col49) * (op1_limb_27_col97))) + + ((op0_limb_9_col50) * (op1_limb_26_col96))) + + ((op0_limb_10_col51) * (op1_limb_25_col95))) + + ((op0_limb_11_col52) * (op1_limb_24_col94))) + + ((op0_limb_12_col53) * (op1_limb_23_col93))) + + ((op0_limb_13_col54) * (op1_limb_22_col92))) + + ((op0_limb_14_col55) * (op1_limb_21_col91))) + + ((op0_limb_15_col56) * (op1_limb_20_col90))) + + ((op0_limb_16_col57) * (op1_limb_19_col89))) + + ((op0_limb_17_col58) * (op1_limb_18_col88))) + + ((op0_limb_18_col59) * (op1_limb_17_col87))) + + ((op0_limb_19_col60) * (op1_limb_16_col86))) + + ((op0_limb_20_col61) * (op1_limb_15_col85))) + + ((op0_limb_21_col62) * (op1_limb_14_col84))) + + ((op0_limb_22_col63) * (op1_limb_13_col83))) + + ((op0_limb_23_col64) * (op1_limb_12_col82))) + + ((op0_limb_24_col65) * (op1_limb_11_col81))) + + ((op0_limb_25_col66) * (op1_limb_10_col80))) + + ((op0_limb_26_col67) * (op1_limb_9_col79))) + + ((op0_limb_27_col68) * (op1_limb_8_col78))); + let conv_tmp_1452 = ((((((((((((((((((((M31_0) + + ((op0_limb_9_col50) * (op1_limb_27_col97))) + + ((op0_limb_10_col51) * (op1_limb_26_col96))) + + ((op0_limb_11_col52) * (op1_limb_25_col95))) + + ((op0_limb_12_col53) * (op1_limb_24_col94))) + + ((op0_limb_13_col54) * (op1_limb_23_col93))) + + ((op0_limb_14_col55) * (op1_limb_22_col92))) + + ((op0_limb_15_col56) * (op1_limb_21_col91))) + + ((op0_limb_16_col57) * (op1_limb_20_col90))) + + ((op0_limb_17_col58) * (op1_limb_19_col89))) + + ((op0_limb_18_col59) * (op1_limb_18_col88))) + + ((op0_limb_19_col60) * (op1_limb_17_col87))) + + ((op0_limb_20_col61) * (op1_limb_16_col86))) + + ((op0_limb_21_col62) * (op1_limb_15_col85))) + + ((op0_limb_22_col63) * (op1_limb_14_col84))) + + ((op0_limb_23_col64) * (op1_limb_13_col83))) + + ((op0_limb_24_col65) * (op1_limb_12_col82))) + + ((op0_limb_25_col66) * (op1_limb_11_col81))) + + ((op0_limb_26_col67) * (op1_limb_10_col80))) + + ((op0_limb_27_col68) * (op1_limb_9_col79))); + let conv_tmp_1453 = (((((((((((((((((((M31_0) + + ((op0_limb_10_col51) * (op1_limb_27_col97))) + + ((op0_limb_11_col52) * (op1_limb_26_col96))) + + ((op0_limb_12_col53) * (op1_limb_25_col95))) + + ((op0_limb_13_col54) * (op1_limb_24_col94))) + + ((op0_limb_14_col55) * (op1_limb_23_col93))) + + ((op0_limb_15_col56) * (op1_limb_22_col92))) + + ((op0_limb_16_col57) * (op1_limb_21_col91))) + + ((op0_limb_17_col58) * (op1_limb_20_col90))) + + ((op0_limb_18_col59) * (op1_limb_19_col89))) + + ((op0_limb_19_col60) * (op1_limb_18_col88))) + + ((op0_limb_20_col61) * (op1_limb_17_col87))) + + ((op0_limb_21_col62) * (op1_limb_16_col86))) + + ((op0_limb_22_col63) * (op1_limb_15_col85))) + + ((op0_limb_23_col64) * (op1_limb_14_col84))) + + ((op0_limb_24_col65) * (op1_limb_13_col83))) + + ((op0_limb_25_col66) * (op1_limb_12_col82))) + + ((op0_limb_26_col67) * (op1_limb_11_col81))) + + ((op0_limb_27_col68) * (op1_limb_10_col80))); + let conv_tmp_1454 = ((((((((((((((((((M31_0) + + ((op0_limb_11_col52) * (op1_limb_27_col97))) + + ((op0_limb_12_col53) * (op1_limb_26_col96))) + + ((op0_limb_13_col54) * (op1_limb_25_col95))) + + ((op0_limb_14_col55) * (op1_limb_24_col94))) + + ((op0_limb_15_col56) * (op1_limb_23_col93))) + + ((op0_limb_16_col57) * (op1_limb_22_col92))) + + ((op0_limb_17_col58) * (op1_limb_21_col91))) + + ((op0_limb_18_col59) * (op1_limb_20_col90))) + + ((op0_limb_19_col60) * (op1_limb_19_col89))) + + ((op0_limb_20_col61) * (op1_limb_18_col88))) + + ((op0_limb_21_col62) * (op1_limb_17_col87))) + + ((op0_limb_22_col63) * (op1_limb_16_col86))) + + ((op0_limb_23_col64) * (op1_limb_15_col85))) + + ((op0_limb_24_col65) * (op1_limb_14_col84))) + + ((op0_limb_25_col66) * (op1_limb_13_col83))) + + ((op0_limb_26_col67) * (op1_limb_12_col82))) + + ((op0_limb_27_col68) * (op1_limb_11_col81))); + let conv_tmp_1455 = (((((((((((((((((M31_0) + + ((op0_limb_12_col53) * (op1_limb_27_col97))) + + ((op0_limb_13_col54) * (op1_limb_26_col96))) + + ((op0_limb_14_col55) * (op1_limb_25_col95))) + + ((op0_limb_15_col56) * (op1_limb_24_col94))) + + ((op0_limb_16_col57) * (op1_limb_23_col93))) + + ((op0_limb_17_col58) * (op1_limb_22_col92))) + + ((op0_limb_18_col59) * (op1_limb_21_col91))) + + ((op0_limb_19_col60) * (op1_limb_20_col90))) + + ((op0_limb_20_col61) * (op1_limb_19_col89))) + + ((op0_limb_21_col62) * (op1_limb_18_col88))) + + ((op0_limb_22_col63) * (op1_limb_17_col87))) + + ((op0_limb_23_col64) * (op1_limb_16_col86))) + + ((op0_limb_24_col65) * (op1_limb_15_col85))) + + ((op0_limb_25_col66) * (op1_limb_14_col84))) + + ((op0_limb_26_col67) * (op1_limb_13_col83))) + + ((op0_limb_27_col68) * (op1_limb_12_col82))); + let conv_tmp_1456 = ((((((((((((((((M31_0) + + ((op0_limb_13_col54) * (op1_limb_27_col97))) + + ((op0_limb_14_col55) * (op1_limb_26_col96))) + + ((op0_limb_15_col56) * (op1_limb_25_col95))) + + ((op0_limb_16_col57) * (op1_limb_24_col94))) + + ((op0_limb_17_col58) * (op1_limb_23_col93))) + + ((op0_limb_18_col59) * (op1_limb_22_col92))) + + ((op0_limb_19_col60) * (op1_limb_21_col91))) + + ((op0_limb_20_col61) * (op1_limb_20_col90))) + + ((op0_limb_21_col62) * (op1_limb_19_col89))) + + ((op0_limb_22_col63) * (op1_limb_18_col88))) + + ((op0_limb_23_col64) * (op1_limb_17_col87))) + + ((op0_limb_24_col65) * (op1_limb_16_col86))) + + ((op0_limb_25_col66) * (op1_limb_15_col85))) + + ((op0_limb_26_col67) * (op1_limb_14_col84))) + + ((op0_limb_27_col68) * (op1_limb_13_col83))); + let conv_tmp_1457 = (((((((((((((((M31_0) + + ((op0_limb_14_col55) * (op1_limb_27_col97))) + + ((op0_limb_15_col56) * (op1_limb_26_col96))) + + ((op0_limb_16_col57) * (op1_limb_25_col95))) + + ((op0_limb_17_col58) * (op1_limb_24_col94))) + + ((op0_limb_18_col59) * (op1_limb_23_col93))) + + ((op0_limb_19_col60) * (op1_limb_22_col92))) + + ((op0_limb_20_col61) * (op1_limb_21_col91))) + + ((op0_limb_21_col62) * (op1_limb_20_col90))) + + ((op0_limb_22_col63) * (op1_limb_19_col89))) + + ((op0_limb_23_col64) * (op1_limb_18_col88))) + + ((op0_limb_24_col65) * (op1_limb_17_col87))) + + ((op0_limb_25_col66) * (op1_limb_16_col86))) + + ((op0_limb_26_col67) * (op1_limb_15_col85))) + + ((op0_limb_27_col68) * (op1_limb_14_col84))); + let conv_tmp_1458 = ((((((((((((((M31_0) + + ((op0_limb_15_col56) * (op1_limb_27_col97))) + + ((op0_limb_16_col57) * (op1_limb_26_col96))) + + ((op0_limb_17_col58) * (op1_limb_25_col95))) + + ((op0_limb_18_col59) * (op1_limb_24_col94))) + + ((op0_limb_19_col60) * (op1_limb_23_col93))) + + ((op0_limb_20_col61) * (op1_limb_22_col92))) + + ((op0_limb_21_col62) * (op1_limb_21_col91))) + + ((op0_limb_22_col63) * (op1_limb_20_col90))) + + ((op0_limb_23_col64) * (op1_limb_19_col89))) + + ((op0_limb_24_col65) * (op1_limb_18_col88))) + + ((op0_limb_25_col66) * (op1_limb_17_col87))) + + ((op0_limb_26_col67) * (op1_limb_16_col86))) + + ((op0_limb_27_col68) * (op1_limb_15_col85))); + let conv_tmp_1459 = (((((((((((((M31_0) + + ((op0_limb_16_col57) * (op1_limb_27_col97))) + + ((op0_limb_17_col58) * (op1_limb_26_col96))) + + ((op0_limb_18_col59) * (op1_limb_25_col95))) + + ((op0_limb_19_col60) * (op1_limb_24_col94))) + + ((op0_limb_20_col61) * (op1_limb_23_col93))) + + ((op0_limb_21_col62) * (op1_limb_22_col92))) + + ((op0_limb_22_col63) * (op1_limb_21_col91))) + + ((op0_limb_23_col64) * (op1_limb_20_col90))) + + ((op0_limb_24_col65) * (op1_limb_19_col89))) + + ((op0_limb_25_col66) * (op1_limb_18_col88))) + + ((op0_limb_26_col67) * (op1_limb_17_col87))) + + ((op0_limb_27_col68) * (op1_limb_16_col86))); + let conv_tmp_1460 = ((((((((((((M31_0) + + ((op0_limb_17_col58) * (op1_limb_27_col97))) + + ((op0_limb_18_col59) * (op1_limb_26_col96))) + + ((op0_limb_19_col60) * (op1_limb_25_col95))) + + ((op0_limb_20_col61) * (op1_limb_24_col94))) + + ((op0_limb_21_col62) * (op1_limb_23_col93))) + + ((op0_limb_22_col63) * (op1_limb_22_col92))) + + ((op0_limb_23_col64) * (op1_limb_21_col91))) + + ((op0_limb_24_col65) * (op1_limb_20_col90))) + + ((op0_limb_25_col66) * (op1_limb_19_col89))) + + ((op0_limb_26_col67) * (op1_limb_18_col88))) + + ((op0_limb_27_col68) * (op1_limb_17_col87))); + let conv_tmp_1461 = (((((((((((M31_0) + + ((op0_limb_18_col59) * (op1_limb_27_col97))) + + ((op0_limb_19_col60) * (op1_limb_26_col96))) + + ((op0_limb_20_col61) * (op1_limb_25_col95))) + + ((op0_limb_21_col62) * (op1_limb_24_col94))) + + ((op0_limb_22_col63) * (op1_limb_23_col93))) + + ((op0_limb_23_col64) * (op1_limb_22_col92))) + + ((op0_limb_24_col65) * (op1_limb_21_col91))) + + ((op0_limb_25_col66) * (op1_limb_20_col90))) + + ((op0_limb_26_col67) * (op1_limb_19_col89))) + + ((op0_limb_27_col68) * (op1_limb_18_col88))); + let conv_tmp_1462 = ((((((((((M31_0) + + ((op0_limb_19_col60) * (op1_limb_27_col97))) + + ((op0_limb_20_col61) * (op1_limb_26_col96))) + + ((op0_limb_21_col62) * (op1_limb_25_col95))) + + ((op0_limb_22_col63) * (op1_limb_24_col94))) + + ((op0_limb_23_col64) * (op1_limb_23_col93))) + + ((op0_limb_24_col65) * (op1_limb_22_col92))) + + ((op0_limb_25_col66) * (op1_limb_21_col91))) + + ((op0_limb_26_col67) * (op1_limb_20_col90))) + + ((op0_limb_27_col68) * (op1_limb_19_col89))); + let conv_tmp_1463 = (((((((((M31_0) + + ((op0_limb_20_col61) * (op1_limb_27_col97))) + + ((op0_limb_21_col62) * (op1_limb_26_col96))) + + ((op0_limb_22_col63) * (op1_limb_25_col95))) + + ((op0_limb_23_col64) * (op1_limb_24_col94))) + + ((op0_limb_24_col65) * (op1_limb_23_col93))) + + ((op0_limb_25_col66) * (op1_limb_22_col92))) + + ((op0_limb_26_col67) * (op1_limb_21_col91))) + + ((op0_limb_27_col68) * (op1_limb_20_col90))); + let conv_tmp_1464 = ((((((((M31_0) + ((op0_limb_21_col62) * (op1_limb_27_col97))) + + ((op0_limb_22_col63) * (op1_limb_26_col96))) + + ((op0_limb_23_col64) * (op1_limb_25_col95))) + + ((op0_limb_24_col65) * (op1_limb_24_col94))) + + ((op0_limb_25_col66) * (op1_limb_23_col93))) + + ((op0_limb_26_col67) * (op1_limb_22_col92))) + + ((op0_limb_27_col68) * (op1_limb_21_col91))); + let conv_tmp_1465 = (((((((M31_0) + ((op0_limb_22_col63) * (op1_limb_27_col97))) + + ((op0_limb_23_col64) * (op1_limb_26_col96))) + + ((op0_limb_24_col65) * (op1_limb_25_col95))) + + ((op0_limb_25_col66) * (op1_limb_24_col94))) + + ((op0_limb_26_col67) * (op1_limb_23_col93))) + + ((op0_limb_27_col68) * (op1_limb_22_col92))); + let conv_tmp_1466 = ((((((M31_0) + ((op0_limb_23_col64) * (op1_limb_27_col97))) + + ((op0_limb_24_col65) * (op1_limb_26_col96))) + + ((op0_limb_25_col66) * (op1_limb_25_col95))) + + ((op0_limb_26_col67) * (op1_limb_24_col94))) + + ((op0_limb_27_col68) * (op1_limb_23_col93))); + let conv_tmp_1467 = (((((M31_0) + ((op0_limb_24_col65) * (op1_limb_27_col97))) + + ((op0_limb_25_col66) * (op1_limb_26_col96))) + + ((op0_limb_26_col67) * (op1_limb_25_col95))) + + ((op0_limb_27_col68) * (op1_limb_24_col94))); + let conv_tmp_1468 = ((((M31_0) + ((op0_limb_25_col66) * (op1_limb_27_col97))) + + ((op0_limb_26_col67) * (op1_limb_26_col96))) + + ((op0_limb_27_col68) * (op1_limb_25_col95))); + let conv_tmp_1469 = (((M31_0) + ((op0_limb_26_col67) * (op1_limb_27_col97))) + + ((op0_limb_27_col68) * (op1_limb_26_col96))); + let conv_tmp_1470 = ((M31_0) + ((op0_limb_27_col68) * (op1_limb_27_col97))); + let conv_mod_tmp_1471 = ((((M31_0) + ((M31_32) * (conv_tmp_1416))) + - ((M31_4) * (conv_tmp_1437))) + + ((M31_8) * (conv_tmp_1465))); + let conv_mod_tmp_1472 = (((((M31_0) + ((M31_1) * (conv_tmp_1416))) + + ((M31_32) * (conv_tmp_1417))) + - ((M31_4) * (conv_tmp_1438))) + + ((M31_8) * (conv_tmp_1466))); + let conv_mod_tmp_1473 = (((((M31_0) + ((M31_1) * (conv_tmp_1417))) + + ((M31_32) * (conv_tmp_1418))) + - ((M31_4) * (conv_tmp_1439))) + + ((M31_8) * (conv_tmp_1467))); + let conv_mod_tmp_1474 = (((((M31_0) + ((M31_1) * (conv_tmp_1418))) + + ((M31_32) * (conv_tmp_1419))) + - ((M31_4) * (conv_tmp_1440))) + + ((M31_8) * (conv_tmp_1468))); + let conv_mod_tmp_1475 = (((((M31_0) + ((M31_1) * (conv_tmp_1419))) + + ((M31_32) * (conv_tmp_1420))) + - ((M31_4) * (conv_tmp_1441))) + + ((M31_8) * (conv_tmp_1469))); + let conv_mod_tmp_1476 = (((((M31_0) + ((M31_1) * (conv_tmp_1420))) + + ((M31_32) * (conv_tmp_1421))) + - ((M31_4) * (conv_tmp_1442))) + + ((M31_8) * (conv_tmp_1470))); + let conv_mod_tmp_1477 = ((((M31_0) + ((M31_1) * (conv_tmp_1421))) + + ((M31_32) * (conv_tmp_1422))) + - ((M31_4) * (conv_tmp_1443))); + let conv_mod_tmp_1478 = (((((M31_0) + ((M31_2) * (conv_tmp_1416))) + + ((M31_1) * (conv_tmp_1422))) + + ((M31_32) * (conv_tmp_1423))) + - ((M31_4) * (conv_tmp_1444))); + let conv_mod_tmp_1479 = (((((M31_0) + ((M31_2) * (conv_tmp_1417))) + + ((M31_1) * (conv_tmp_1423))) + + ((M31_32) * (conv_tmp_1424))) + - ((M31_4) * (conv_tmp_1445))); + let conv_mod_tmp_1480 = (((((M31_0) + ((M31_2) * (conv_tmp_1418))) + + ((M31_1) * (conv_tmp_1424))) + + ((M31_32) * (conv_tmp_1425))) + - ((M31_4) * (conv_tmp_1446))); + let conv_mod_tmp_1481 = (((((M31_0) + ((M31_2) * (conv_tmp_1419))) + + ((M31_1) * (conv_tmp_1425))) + + ((M31_32) * (conv_tmp_1426))) + - ((M31_4) * (conv_tmp_1447))); + let conv_mod_tmp_1482 = (((((M31_0) + ((M31_2) * (conv_tmp_1420))) + + ((M31_1) * (conv_tmp_1426))) + + ((M31_32) * (conv_tmp_1427))) + - ((M31_4) * (conv_tmp_1448))); + let conv_mod_tmp_1483 = (((((M31_0) + ((M31_2) * (conv_tmp_1421))) + + ((M31_1) * (conv_tmp_1427))) + + ((M31_32) * (conv_tmp_1428))) + - ((M31_4) * (conv_tmp_1449))); + let conv_mod_tmp_1484 = (((((M31_0) + ((M31_2) * (conv_tmp_1422))) + + ((M31_1) * (conv_tmp_1428))) + + ((M31_32) * (conv_tmp_1429))) + - ((M31_4) * (conv_tmp_1450))); + let conv_mod_tmp_1485 = (((((M31_0) + ((M31_2) * (conv_tmp_1423))) + + ((M31_1) * (conv_tmp_1429))) + + ((M31_32) * (conv_tmp_1430))) + - ((M31_4) * (conv_tmp_1451))); + let conv_mod_tmp_1486 = (((((M31_0) + ((M31_2) * (conv_tmp_1424))) + + ((M31_1) * (conv_tmp_1430))) + + ((M31_32) * (conv_tmp_1431))) + - ((M31_4) * (conv_tmp_1452))); + let conv_mod_tmp_1487 = (((((M31_0) + ((M31_2) * (conv_tmp_1425))) + + ((M31_1) * (conv_tmp_1431))) + + ((M31_32) * (conv_tmp_1432))) + - ((M31_4) * (conv_tmp_1453))); + let conv_mod_tmp_1488 = (((((M31_0) + ((M31_2) * (conv_tmp_1426))) + + ((M31_1) * (conv_tmp_1432))) + + ((M31_32) * (conv_tmp_1433))) + - ((M31_4) * (conv_tmp_1454))); + let conv_mod_tmp_1489 = (((((M31_0) + ((M31_2) * (conv_tmp_1427))) + + ((M31_1) * (conv_tmp_1433))) + + ((M31_32) * (conv_tmp_1434))) + - ((M31_4) * (conv_tmp_1455))); + let conv_mod_tmp_1490 = (((((M31_0) + ((M31_2) * (conv_tmp_1428))) + + ((M31_1) * (conv_tmp_1434))) + + ((M31_32) * (conv_tmp_1435))) + - ((M31_4) * (conv_tmp_1456))); + let conv_mod_tmp_1491 = (((((M31_0) + ((M31_2) * (conv_tmp_1429))) + + ((M31_1) * (conv_tmp_1435))) + + ((M31_32) * (conv_tmp_1436))) + - ((M31_4) * (conv_tmp_1457))); + let conv_mod_tmp_1492 = (((((M31_0) + ((M31_2) * (conv_tmp_1430))) + + ((M31_1) * (conv_tmp_1436))) + - ((M31_4) * (conv_tmp_1458))) + + ((M31_64) * (conv_tmp_1465))); + let conv_mod_tmp_1493 = (((((M31_0) + ((M31_2) * (conv_tmp_1431))) + - ((M31_4) * (conv_tmp_1459))) + + ((M31_2) * (conv_tmp_1465))) + + ((M31_64) * (conv_tmp_1466))); + let conv_mod_tmp_1494 = (((((M31_0) + ((M31_2) * (conv_tmp_1432))) + - ((M31_4) * (conv_tmp_1460))) + + ((M31_2) * (conv_tmp_1466))) + + ((M31_64) * (conv_tmp_1467))); + let conv_mod_tmp_1495 = (((((M31_0) + ((M31_2) * (conv_tmp_1433))) + - ((M31_4) * (conv_tmp_1461))) + + ((M31_2) * (conv_tmp_1467))) + + ((M31_64) * (conv_tmp_1468))); + let conv_mod_tmp_1496 = (((((M31_0) + ((M31_2) * (conv_tmp_1434))) + - ((M31_4) * (conv_tmp_1462))) + + ((M31_2) * (conv_tmp_1468))) + + ((M31_64) * (conv_tmp_1469))); + let conv_mod_tmp_1497 = (((((M31_0) + ((M31_2) * (conv_tmp_1435))) + - ((M31_4) * (conv_tmp_1463))) + + ((M31_2) * (conv_tmp_1469))) + + ((M31_64) * (conv_tmp_1470))); + let conv_mod_tmp_1498 = ((((M31_0) + ((M31_2) * (conv_tmp_1436))) + - ((M31_4) * (conv_tmp_1464))) + + ((M31_2) * (conv_tmp_1470))); + let k_mod_2_18_biased_tmp_1499 = + ((((PackedUInt32::from_m31(((conv_mod_tmp_1471) + (M31_134217728)))) + + (((PackedUInt32::from_m31(((conv_mod_tmp_1472) + (M31_134217728)))) + & (UInt32_511)) + << (UInt32_9))) + + (UInt32_65536)) + & (UInt32_262143)); + let k_col98 = ((k_mod_2_18_biased_tmp_1499.low().as_m31()) + + (((k_mod_2_18_biased_tmp_1499.high().as_m31()) - (M31_1)) * (M31_65536))); + trace[98].data[row_index] = k_col98; + + sub_components_inputs.range_check_19_inputs[0] + .extend([((k_col98) + (M31_262144))].unpack()); + + lookup_data.rangecheck_19[0].push([((k_col98) + (M31_262144))]); + let carry_0_col99 = + ((((conv_mod_tmp_1471) - ((M31_1) * (k_col98))) + (M31_0)) * (M31_4194304)); + trace[99].data[row_index] = carry_0_col99; + + sub_components_inputs.range_check_19_inputs[1] + .extend([((carry_0_col99) + (M31_131072))].unpack()); + + lookup_data.rangecheck_19[1].push([((carry_0_col99) + (M31_131072))]); + let carry_1_col100 = (((conv_mod_tmp_1472) + (carry_0_col99)) * (M31_4194304)); + trace[100].data[row_index] = carry_1_col100; + + sub_components_inputs.range_check_19_inputs[2] + .extend([((carry_1_col100) + (M31_131072))].unpack()); + + lookup_data.rangecheck_19[2].push([((carry_1_col100) + (M31_131072))]); + let carry_2_col101 = (((conv_mod_tmp_1473) + (carry_1_col100)) * (M31_4194304)); + trace[101].data[row_index] = carry_2_col101; + + sub_components_inputs.range_check_19_inputs[3] + .extend([((carry_2_col101) + (M31_131072))].unpack()); + + lookup_data.rangecheck_19[3].push([((carry_2_col101) + (M31_131072))]); + let carry_3_col102 = (((conv_mod_tmp_1474) + (carry_2_col101)) * (M31_4194304)); + trace[102].data[row_index] = carry_3_col102; + + sub_components_inputs.range_check_19_inputs[4] + .extend([((carry_3_col102) + (M31_131072))].unpack()); + + lookup_data.rangecheck_19[4].push([((carry_3_col102) + (M31_131072))]); + let carry_4_col103 = (((conv_mod_tmp_1475) + (carry_3_col102)) * (M31_4194304)); + trace[103].data[row_index] = carry_4_col103; + + sub_components_inputs.range_check_19_inputs[5] + .extend([((carry_4_col103) + (M31_131072))].unpack()); + + lookup_data.rangecheck_19[5].push([((carry_4_col103) + (M31_131072))]); + let carry_5_col104 = (((conv_mod_tmp_1476) + (carry_4_col103)) * (M31_4194304)); + trace[104].data[row_index] = carry_5_col104; + + sub_components_inputs.range_check_19_inputs[6] + .extend([((carry_5_col104) + (M31_131072))].unpack()); + + lookup_data.rangecheck_19[6].push([((carry_5_col104) + (M31_131072))]); + let carry_6_col105 = (((conv_mod_tmp_1477) + (carry_5_col104)) * (M31_4194304)); + trace[105].data[row_index] = carry_6_col105; + + sub_components_inputs.range_check_19_inputs[7] + .extend([((carry_6_col105) + (M31_131072))].unpack()); + + lookup_data.rangecheck_19[7].push([((carry_6_col105) + (M31_131072))]); + let carry_7_col106 = (((conv_mod_tmp_1478) + (carry_6_col105)) * (M31_4194304)); + trace[106].data[row_index] = carry_7_col106; + + sub_components_inputs.range_check_19_inputs[8] + .extend([((carry_7_col106) + (M31_131072))].unpack()); + + lookup_data.rangecheck_19[8].push([((carry_7_col106) + (M31_131072))]); + let carry_8_col107 = (((conv_mod_tmp_1479) + (carry_7_col106)) * (M31_4194304)); + trace[107].data[row_index] = carry_8_col107; + + sub_components_inputs.range_check_19_inputs[9] + .extend([((carry_8_col107) + (M31_131072))].unpack()); + + lookup_data.rangecheck_19[9].push([((carry_8_col107) + (M31_131072))]); + let carry_9_col108 = (((conv_mod_tmp_1480) + (carry_8_col107)) * (M31_4194304)); + trace[108].data[row_index] = carry_9_col108; + + sub_components_inputs.range_check_19_inputs[10] + .extend([((carry_9_col108) + (M31_131072))].unpack()); + + lookup_data.rangecheck_19[10].push([((carry_9_col108) + (M31_131072))]); + let carry_10_col109 = (((conv_mod_tmp_1481) + (carry_9_col108)) * (M31_4194304)); + trace[109].data[row_index] = carry_10_col109; + + sub_components_inputs.range_check_19_inputs[11] + .extend([((carry_10_col109) + (M31_131072))].unpack()); + + lookup_data.rangecheck_19[11].push([((carry_10_col109) + (M31_131072))]); + let carry_11_col110 = (((conv_mod_tmp_1482) + (carry_10_col109)) * (M31_4194304)); + trace[110].data[row_index] = carry_11_col110; + + sub_components_inputs.range_check_19_inputs[12] + .extend([((carry_11_col110) + (M31_131072))].unpack()); + + lookup_data.rangecheck_19[12].push([((carry_11_col110) + (M31_131072))]); + let carry_12_col111 = (((conv_mod_tmp_1483) + (carry_11_col110)) * (M31_4194304)); + trace[111].data[row_index] = carry_12_col111; + + sub_components_inputs.range_check_19_inputs[13] + .extend([((carry_12_col111) + (M31_131072))].unpack()); + + lookup_data.rangecheck_19[13].push([((carry_12_col111) + (M31_131072))]); + let carry_13_col112 = (((conv_mod_tmp_1484) + (carry_12_col111)) * (M31_4194304)); + trace[112].data[row_index] = carry_13_col112; + + sub_components_inputs.range_check_19_inputs[14] + .extend([((carry_13_col112) + (M31_131072))].unpack()); + + lookup_data.rangecheck_19[14].push([((carry_13_col112) + (M31_131072))]); + let carry_14_col113 = (((conv_mod_tmp_1485) + (carry_13_col112)) * (M31_4194304)); + trace[113].data[row_index] = carry_14_col113; + + sub_components_inputs.range_check_19_inputs[15] + .extend([((carry_14_col113) + (M31_131072))].unpack()); + + lookup_data.rangecheck_19[15].push([((carry_14_col113) + (M31_131072))]); + let carry_15_col114 = (((conv_mod_tmp_1486) + (carry_14_col113)) * (M31_4194304)); + trace[114].data[row_index] = carry_15_col114; + + sub_components_inputs.range_check_19_inputs[16] + .extend([((carry_15_col114) + (M31_131072))].unpack()); + + lookup_data.rangecheck_19[16].push([((carry_15_col114) + (M31_131072))]); + let carry_16_col115 = (((conv_mod_tmp_1487) + (carry_15_col114)) * (M31_4194304)); + trace[115].data[row_index] = carry_16_col115; + + sub_components_inputs.range_check_19_inputs[17] + .extend([((carry_16_col115) + (M31_131072))].unpack()); + + lookup_data.rangecheck_19[17].push([((carry_16_col115) + (M31_131072))]); + let carry_17_col116 = (((conv_mod_tmp_1488) + (carry_16_col115)) * (M31_4194304)); + trace[116].data[row_index] = carry_17_col116; + + sub_components_inputs.range_check_19_inputs[18] + .extend([((carry_17_col116) + (M31_131072))].unpack()); + + lookup_data.rangecheck_19[18].push([((carry_17_col116) + (M31_131072))]); + let carry_18_col117 = (((conv_mod_tmp_1489) + (carry_17_col116)) * (M31_4194304)); + trace[117].data[row_index] = carry_18_col117; + + sub_components_inputs.range_check_19_inputs[19] + .extend([((carry_18_col117) + (M31_131072))].unpack()); + + lookup_data.rangecheck_19[19].push([((carry_18_col117) + (M31_131072))]); + let carry_19_col118 = (((conv_mod_tmp_1490) + (carry_18_col117)) * (M31_4194304)); + trace[118].data[row_index] = carry_19_col118; + + sub_components_inputs.range_check_19_inputs[20] + .extend([((carry_19_col118) + (M31_131072))].unpack()); + + lookup_data.rangecheck_19[20].push([((carry_19_col118) + (M31_131072))]); + let carry_20_col119 = (((conv_mod_tmp_1491) + (carry_19_col118)) * (M31_4194304)); + trace[119].data[row_index] = carry_20_col119; + + sub_components_inputs.range_check_19_inputs[21] + .extend([((carry_20_col119) + (M31_131072))].unpack()); + + lookup_data.rangecheck_19[21].push([((carry_20_col119) + (M31_131072))]); + let carry_21_col120 = ((((conv_mod_tmp_1492) - ((M31_136) * (k_col98))) + + (carry_20_col119)) + * (M31_4194304)); + trace[120].data[row_index] = carry_21_col120; + + sub_components_inputs.range_check_19_inputs[22] + .extend([((carry_21_col120) + (M31_131072))].unpack()); + + lookup_data.rangecheck_19[22].push([((carry_21_col120) + (M31_131072))]); + let carry_22_col121 = (((conv_mod_tmp_1493) + (carry_21_col120)) * (M31_4194304)); + trace[121].data[row_index] = carry_22_col121; + + sub_components_inputs.range_check_19_inputs[23] + .extend([((carry_22_col121) + (M31_131072))].unpack()); + + lookup_data.rangecheck_19[23].push([((carry_22_col121) + (M31_131072))]); + let carry_23_col122 = (((conv_mod_tmp_1494) + (carry_22_col121)) * (M31_4194304)); + trace[122].data[row_index] = carry_23_col122; + + sub_components_inputs.range_check_19_inputs[24] + .extend([((carry_23_col122) + (M31_131072))].unpack()); + + lookup_data.rangecheck_19[24].push([((carry_23_col122) + (M31_131072))]); + let carry_24_col123 = (((conv_mod_tmp_1495) + (carry_23_col122)) * (M31_4194304)); + trace[123].data[row_index] = carry_24_col123; + + sub_components_inputs.range_check_19_inputs[25] + .extend([((carry_24_col123) + (M31_131072))].unpack()); + + lookup_data.rangecheck_19[25].push([((carry_24_col123) + (M31_131072))]); + let carry_25_col124 = (((conv_mod_tmp_1496) + (carry_24_col123)) * (M31_4194304)); + trace[124].data[row_index] = carry_25_col124; + + sub_components_inputs.range_check_19_inputs[26] + .extend([((carry_25_col124) + (M31_131072))].unpack()); + + lookup_data.rangecheck_19[26].push([((carry_25_col124) + (M31_131072))]); + let carry_26_col125 = (((conv_mod_tmp_1497) + (carry_25_col124)) * (M31_4194304)); + trace[125].data[row_index] = carry_26_col125; + + sub_components_inputs.range_check_19_inputs[27] + .extend([((carry_26_col125) + (M31_131072))].unpack()); + + lookup_data.rangecheck_19[27].push([((carry_26_col125) + (M31_131072))]); + + lookup_data.opcodes[0].push([input_pc_col0, input_ap_col1, input_fp_col2]); + lookup_data.opcodes[1].push([ + ((input_pc_col0) + (M31_1)), + ((input_ap_col1) + (ap_update_add_1_col10)), + input_fp_col2, + ]); + }); + + (trace, sub_components_inputs, lookup_data) +} + +pub struct LookupData { + 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 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), + ], + 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), + ], + verifyinstruction: [Vec::with_capacity(capacity)], + } + } +} + +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>, + memoryaddresstoid_lookup_elements: &relations::MemoryAddressToId, + memoryidtobig_lookup_elements: &relations::MemoryIdToBig, + opcodes_lookup_elements: &relations::Opcodes, + rangecheck_19_lookup_elements: &relations::RangeCheck_19, + 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.verifyinstruction[0]; + for (i, lookup_values) in lookup_row.iter().enumerate() { + let denom = verifyinstruction_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.memoryaddresstoid[0]; + for (i, lookup_values) in lookup_row.iter().enumerate() { + let denom = memoryaddresstoid_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.memoryidtobig[0]; + for (i, lookup_values) in lookup_row.iter().enumerate() { + let denom = memoryidtobig_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.memoryaddresstoid[1]; + for (i, lookup_values) in lookup_row.iter().enumerate() { + let denom = memoryaddresstoid_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.memoryidtobig[1]; + for (i, lookup_values) in lookup_row.iter().enumerate() { + let denom = memoryidtobig_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.memoryaddresstoid[2]; + for (i, lookup_values) in lookup_row.iter().enumerate() { + let denom = memoryaddresstoid_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.memoryidtobig[2]; + for (i, lookup_values) in lookup_row.iter().enumerate() { + let denom = memoryidtobig_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.rangecheck_19[0]; + for (i, lookup_values) in lookup_row.iter().enumerate() { + let denom = 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.rangecheck_19[1]; + for (i, lookup_values) in lookup_row.iter().enumerate() { + let denom = 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.rangecheck_19[2]; + for (i, lookup_values) in lookup_row.iter().enumerate() { + let denom = 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.rangecheck_19[3]; + for (i, lookup_values) in lookup_row.iter().enumerate() { + let denom = 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.rangecheck_19[4]; + for (i, lookup_values) in lookup_row.iter().enumerate() { + let denom = 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.rangecheck_19[5]; + for (i, lookup_values) in lookup_row.iter().enumerate() { + let denom = 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.rangecheck_19[6]; + for (i, lookup_values) in lookup_row.iter().enumerate() { + let denom = 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.rangecheck_19[7]; + for (i, lookup_values) in lookup_row.iter().enumerate() { + let denom = 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.rangecheck_19[8]; + for (i, lookup_values) in lookup_row.iter().enumerate() { + let denom = 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.rangecheck_19[9]; + for (i, lookup_values) in lookup_row.iter().enumerate() { + let denom = 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.rangecheck_19[10]; + for (i, lookup_values) in lookup_row.iter().enumerate() { + let denom = 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.rangecheck_19[11]; + for (i, lookup_values) in lookup_row.iter().enumerate() { + let denom = 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.rangecheck_19[12]; + for (i, lookup_values) in lookup_row.iter().enumerate() { + let denom = 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.rangecheck_19[13]; + for (i, lookup_values) in lookup_row.iter().enumerate() { + let denom = 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.rangecheck_19[14]; + for (i, lookup_values) in lookup_row.iter().enumerate() { + let denom = 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.rangecheck_19[15]; + for (i, lookup_values) in lookup_row.iter().enumerate() { + let denom = 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.rangecheck_19[16]; + for (i, lookup_values) in lookup_row.iter().enumerate() { + let denom = 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.rangecheck_19[17]; + for (i, lookup_values) in lookup_row.iter().enumerate() { + let denom = 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.rangecheck_19[18]; + for (i, lookup_values) in lookup_row.iter().enumerate() { + let denom = 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.rangecheck_19[19]; + for (i, lookup_values) in lookup_row.iter().enumerate() { + let denom = 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.rangecheck_19[20]; + for (i, lookup_values) in lookup_row.iter().enumerate() { + let denom = 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.rangecheck_19[21]; + for (i, lookup_values) in lookup_row.iter().enumerate() { + let denom = 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.rangecheck_19[22]; + for (i, lookup_values) in lookup_row.iter().enumerate() { + let denom = 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.rangecheck_19[23]; + for (i, lookup_values) in lookup_row.iter().enumerate() { + let denom = 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.rangecheck_19[24]; + for (i, lookup_values) in lookup_row.iter().enumerate() { + let denom = 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.rangecheck_19[25]; + for (i, lookup_values) in lookup_row.iter().enumerate() { + let denom = 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.rangecheck_19[26]; + for (i, lookup_values) in lookup_row.iter().enumerate() { + let denom = 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.rangecheck_19[27]; + for (i, lookup_values) in lookup_row.iter().enumerate() { + let denom = 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.opcodes[0]; + for (i, lookup_values) in lookup_row.iter().enumerate() { + let denom = opcodes_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.opcodes[1]; + for (i, lookup_values) in lookup_row.iter().enumerate() { + let denom = opcodes_lookup_elements.combine(lookup_values); + col_gen.write_frac(i, -PackedQM31::one(), denom); + } + col_gen.finalize_col(); + + 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 { + logup_sums: (total_sum, claimed_sum), + } + } +} diff --git a/stwo_cairo_prover/crates/prover/src/components/mul_opcode_is_small_f_is_imm_t/component.rs b/stwo_cairo_prover/crates/prover/src/components/mul_opcode_is_small_f_is_imm_t/component.rs new file mode 100644 index 00000000..d1ef43e4 --- /dev/null +++ b/stwo_cairo_prover/crates/prover/src/components/mul_opcode_is_small_f_is_imm_t/component.rs @@ -0,0 +1,1660 @@ +#![allow(non_camel_case_types)] +#![allow(unused_imports)] +use num_traits::{One, Zero}; +use serde::{Deserialize, Serialize}; +use stwo_prover::constraint_framework::logup::{LogupAtRow, LogupSums, LookupElements}; +use stwo_prover::constraint_framework::{ + EvalAtRow, FrameworkComponent, FrameworkEval, RelationEntry, +}; +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::pcs::TreeVec; + +use crate::relations; + +pub struct Eval { + pub claim: Claim, + pub memoryaddresstoid_lookup_elements: relations::MemoryAddressToId, + pub memoryidtobig_lookup_elements: relations::MemoryIdToBig, + pub opcodes_lookup_elements: relations::Opcodes, + pub rangecheck_19_lookup_elements: relations::RangeCheck_19, + pub verifyinstruction_lookup_elements: relations::VerifyInstruction, +} + +#[derive(Copy, Clone, Serialize, Deserialize)] +pub struct Claim { + pub n_calls: usize, +} +impl Claim { + pub fn log_sizes(&self) -> TreeVec> { + let log_size = std::cmp::max(self.n_calls.next_power_of_two().ilog2(), LOG_N_LANES); + let trace_log_sizes = vec![log_size; 123]; + let interaction_log_sizes = vec![log_size; SECURE_EXTENSION_DEGREE * 37]; + let preprocessed_log_sizes = vec![log_size]; + TreeVec::new(vec![ + preprocessed_log_sizes, + trace_log_sizes, + interaction_log_sizes, + ]) + } + + pub fn mix_into(&self, channel: &mut impl Channel) { + channel.mix_u64(self.n_calls as u64); + } +} + +#[derive(Copy, Clone, Serialize, Deserialize)] +pub struct InteractionClaim { + pub logup_sums: LogupSums, +} +impl InteractionClaim { + pub fn mix_into(&self, channel: &mut impl Channel) { + 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); + } + } +} + +pub type Component = FrameworkComponent; + +impl FrameworkEval for Eval { + fn log_size(&self) -> u32 { + std::cmp::max(self.claim.n_calls.next_power_of_two().ilog2(), LOG_N_LANES) + } + + fn max_constraint_log_degree_bound(&self) -> u32 { + self.log_size() + 1 + } + + #[allow(unused_parens)] + #[allow(clippy::double_parens)] + #[allow(non_snake_case)] + 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)); + let M31_131072 = E::F::from(M31::from(131072)); + let M31_136 = E::F::from(M31::from(136)); + let M31_2 = E::F::from(M31::from(2)); + let M31_256 = E::F::from(M31::from(256)); + let M31_262144 = E::F::from(M31::from(262144)); + let M31_32 = E::F::from(M31::from(32)); + let M31_32768 = E::F::from(M31::from(32768)); + let M31_32769 = E::F::from(M31::from(32769)); + let M31_4 = E::F::from(M31::from(4)); + let M31_512 = E::F::from(M31::from(512)); + let M31_64 = E::F::from(M31::from(64)); + let M31_8 = E::F::from(M31::from(8)); + let input_pc_col0 = eval.next_trace_mask(); + let input_ap_col1 = eval.next_trace_mask(); + let input_fp_col2 = eval.next_trace_mask(); + let offset0_col3 = eval.next_trace_mask(); + let offset1_col4 = eval.next_trace_mask(); + let dst_base_fp_col5 = eval.next_trace_mask(); + let op0_base_fp_col6 = eval.next_trace_mask(); + let ap_update_add_1_col7 = eval.next_trace_mask(); + let dst_id_col8 = eval.next_trace_mask(); + let dst_limb_0_col9 = eval.next_trace_mask(); + let dst_limb_1_col10 = eval.next_trace_mask(); + let dst_limb_2_col11 = eval.next_trace_mask(); + let dst_limb_3_col12 = eval.next_trace_mask(); + let dst_limb_4_col13 = eval.next_trace_mask(); + let dst_limb_5_col14 = eval.next_trace_mask(); + let dst_limb_6_col15 = eval.next_trace_mask(); + let dst_limb_7_col16 = eval.next_trace_mask(); + let dst_limb_8_col17 = eval.next_trace_mask(); + let dst_limb_9_col18 = eval.next_trace_mask(); + let dst_limb_10_col19 = eval.next_trace_mask(); + let dst_limb_11_col20 = eval.next_trace_mask(); + let dst_limb_12_col21 = eval.next_trace_mask(); + let dst_limb_13_col22 = eval.next_trace_mask(); + let dst_limb_14_col23 = eval.next_trace_mask(); + let dst_limb_15_col24 = eval.next_trace_mask(); + let dst_limb_16_col25 = eval.next_trace_mask(); + let dst_limb_17_col26 = eval.next_trace_mask(); + let dst_limb_18_col27 = eval.next_trace_mask(); + let dst_limb_19_col28 = eval.next_trace_mask(); + let dst_limb_20_col29 = eval.next_trace_mask(); + let dst_limb_21_col30 = eval.next_trace_mask(); + let dst_limb_22_col31 = eval.next_trace_mask(); + let dst_limb_23_col32 = eval.next_trace_mask(); + let dst_limb_24_col33 = eval.next_trace_mask(); + let dst_limb_25_col34 = eval.next_trace_mask(); + let dst_limb_26_col35 = eval.next_trace_mask(); + let dst_limb_27_col36 = eval.next_trace_mask(); + let op0_id_col37 = eval.next_trace_mask(); + let op0_limb_0_col38 = eval.next_trace_mask(); + let op0_limb_1_col39 = eval.next_trace_mask(); + let op0_limb_2_col40 = eval.next_trace_mask(); + let op0_limb_3_col41 = eval.next_trace_mask(); + let op0_limb_4_col42 = eval.next_trace_mask(); + let op0_limb_5_col43 = eval.next_trace_mask(); + let op0_limb_6_col44 = eval.next_trace_mask(); + let op0_limb_7_col45 = eval.next_trace_mask(); + let op0_limb_8_col46 = eval.next_trace_mask(); + let op0_limb_9_col47 = eval.next_trace_mask(); + let op0_limb_10_col48 = eval.next_trace_mask(); + let op0_limb_11_col49 = eval.next_trace_mask(); + let op0_limb_12_col50 = eval.next_trace_mask(); + let op0_limb_13_col51 = eval.next_trace_mask(); + let op0_limb_14_col52 = eval.next_trace_mask(); + let op0_limb_15_col53 = eval.next_trace_mask(); + let op0_limb_16_col54 = eval.next_trace_mask(); + let op0_limb_17_col55 = eval.next_trace_mask(); + let op0_limb_18_col56 = eval.next_trace_mask(); + let op0_limb_19_col57 = eval.next_trace_mask(); + let op0_limb_20_col58 = eval.next_trace_mask(); + let op0_limb_21_col59 = eval.next_trace_mask(); + let op0_limb_22_col60 = eval.next_trace_mask(); + let op0_limb_23_col61 = eval.next_trace_mask(); + let op0_limb_24_col62 = eval.next_trace_mask(); + let op0_limb_25_col63 = eval.next_trace_mask(); + let op0_limb_26_col64 = eval.next_trace_mask(); + let op0_limb_27_col65 = eval.next_trace_mask(); + let op1_id_col66 = eval.next_trace_mask(); + let op1_limb_0_col67 = eval.next_trace_mask(); + let op1_limb_1_col68 = eval.next_trace_mask(); + let op1_limb_2_col69 = eval.next_trace_mask(); + let op1_limb_3_col70 = eval.next_trace_mask(); + let op1_limb_4_col71 = eval.next_trace_mask(); + let op1_limb_5_col72 = eval.next_trace_mask(); + let op1_limb_6_col73 = eval.next_trace_mask(); + let op1_limb_7_col74 = eval.next_trace_mask(); + let op1_limb_8_col75 = eval.next_trace_mask(); + let op1_limb_9_col76 = eval.next_trace_mask(); + let op1_limb_10_col77 = eval.next_trace_mask(); + let op1_limb_11_col78 = eval.next_trace_mask(); + let op1_limb_12_col79 = eval.next_trace_mask(); + let op1_limb_13_col80 = eval.next_trace_mask(); + let op1_limb_14_col81 = eval.next_trace_mask(); + let op1_limb_15_col82 = eval.next_trace_mask(); + let op1_limb_16_col83 = eval.next_trace_mask(); + let op1_limb_17_col84 = eval.next_trace_mask(); + let op1_limb_18_col85 = eval.next_trace_mask(); + let op1_limb_19_col86 = eval.next_trace_mask(); + let op1_limb_20_col87 = eval.next_trace_mask(); + let op1_limb_21_col88 = eval.next_trace_mask(); + let op1_limb_22_col89 = eval.next_trace_mask(); + let op1_limb_23_col90 = eval.next_trace_mask(); + let op1_limb_24_col91 = eval.next_trace_mask(); + let op1_limb_25_col92 = eval.next_trace_mask(); + let op1_limb_26_col93 = eval.next_trace_mask(); + let op1_limb_27_col94 = eval.next_trace_mask(); + let k_col95 = eval.next_trace_mask(); + let carry_0_col96 = eval.next_trace_mask(); + let carry_1_col97 = eval.next_trace_mask(); + let carry_2_col98 = eval.next_trace_mask(); + let carry_3_col99 = eval.next_trace_mask(); + let carry_4_col100 = eval.next_trace_mask(); + let carry_5_col101 = eval.next_trace_mask(); + let carry_6_col102 = eval.next_trace_mask(); + let carry_7_col103 = eval.next_trace_mask(); + let carry_8_col104 = eval.next_trace_mask(); + let carry_9_col105 = eval.next_trace_mask(); + let carry_10_col106 = eval.next_trace_mask(); + let carry_11_col107 = eval.next_trace_mask(); + let carry_12_col108 = eval.next_trace_mask(); + let carry_13_col109 = eval.next_trace_mask(); + let carry_14_col110 = eval.next_trace_mask(); + let carry_15_col111 = eval.next_trace_mask(); + let carry_16_col112 = eval.next_trace_mask(); + let carry_17_col113 = eval.next_trace_mask(); + let carry_18_col114 = eval.next_trace_mask(); + let carry_19_col115 = eval.next_trace_mask(); + let carry_20_col116 = eval.next_trace_mask(); + let carry_21_col117 = eval.next_trace_mask(); + let carry_22_col118 = eval.next_trace_mask(); + let carry_23_col119 = eval.next_trace_mask(); + let carry_24_col120 = eval.next_trace_mask(); + let carry_25_col121 = eval.next_trace_mask(); + let carry_26_col122 = eval.next_trace_mask(); + + // decode_instruction_cea21b812a0ef1a0. + + eval.add_to_relation(&[RelationEntry::new( + &self.verifyinstruction_lookup_elements, + E::EF::one(), + &[ + input_pc_col0.clone(), + offset0_col3.clone(), + offset1_col4.clone(), + M31_32769.clone(), + dst_base_fp_col5.clone(), + op0_base_fp_col6.clone(), + M31_1.clone(), + M31_0.clone(), + M31_0.clone(), + M31_0.clone(), + M31_1.clone(), + M31_0.clone(), + M31_0.clone(), + M31_0.clone(), + M31_0.clone(), + ap_update_add_1_col7.clone(), + M31_0.clone(), + M31_0.clone(), + M31_1.clone(), + ], + )]); + + // read_positive_num_bits_252. + + eval.add_to_relation(&[RelationEntry::new( + &self.memoryaddresstoid_lookup_elements, + E::EF::one(), + &[ + (((dst_base_fp_col5.clone() * input_fp_col2.clone()) + + ((M31_1.clone() - dst_base_fp_col5.clone()) * input_ap_col1.clone())) + + (offset0_col3.clone() - M31_32768.clone())), + dst_id_col8.clone(), + ], + )]); + + eval.add_to_relation(&[RelationEntry::new( + &self.memoryidtobig_lookup_elements, + E::EF::one(), + &[ + dst_id_col8.clone(), + dst_limb_0_col9.clone(), + dst_limb_1_col10.clone(), + dst_limb_2_col11.clone(), + dst_limb_3_col12.clone(), + dst_limb_4_col13.clone(), + dst_limb_5_col14.clone(), + dst_limb_6_col15.clone(), + dst_limb_7_col16.clone(), + dst_limb_8_col17.clone(), + dst_limb_9_col18.clone(), + dst_limb_10_col19.clone(), + dst_limb_11_col20.clone(), + dst_limb_12_col21.clone(), + dst_limb_13_col22.clone(), + dst_limb_14_col23.clone(), + dst_limb_15_col24.clone(), + dst_limb_16_col25.clone(), + dst_limb_17_col26.clone(), + dst_limb_18_col27.clone(), + dst_limb_19_col28.clone(), + dst_limb_20_col29.clone(), + dst_limb_21_col30.clone(), + dst_limb_22_col31.clone(), + dst_limb_23_col32.clone(), + dst_limb_24_col33.clone(), + dst_limb_25_col34.clone(), + dst_limb_26_col35.clone(), + dst_limb_27_col36.clone(), + ], + )]); + + // read_positive_num_bits_252. + + eval.add_to_relation(&[RelationEntry::new( + &self.memoryaddresstoid_lookup_elements, + E::EF::one(), + &[ + (((op0_base_fp_col6.clone() * input_fp_col2.clone()) + + ((M31_1.clone() - op0_base_fp_col6.clone()) * input_ap_col1.clone())) + + (offset1_col4.clone() - M31_32768.clone())), + op0_id_col37.clone(), + ], + )]); + + eval.add_to_relation(&[RelationEntry::new( + &self.memoryidtobig_lookup_elements, + E::EF::one(), + &[ + op0_id_col37.clone(), + op0_limb_0_col38.clone(), + op0_limb_1_col39.clone(), + op0_limb_2_col40.clone(), + op0_limb_3_col41.clone(), + op0_limb_4_col42.clone(), + op0_limb_5_col43.clone(), + op0_limb_6_col44.clone(), + op0_limb_7_col45.clone(), + op0_limb_8_col46.clone(), + op0_limb_9_col47.clone(), + op0_limb_10_col48.clone(), + op0_limb_11_col49.clone(), + op0_limb_12_col50.clone(), + op0_limb_13_col51.clone(), + op0_limb_14_col52.clone(), + op0_limb_15_col53.clone(), + op0_limb_16_col54.clone(), + op0_limb_17_col55.clone(), + op0_limb_18_col56.clone(), + op0_limb_19_col57.clone(), + op0_limb_20_col58.clone(), + op0_limb_21_col59.clone(), + op0_limb_22_col60.clone(), + op0_limb_23_col61.clone(), + op0_limb_24_col62.clone(), + op0_limb_25_col63.clone(), + op0_limb_26_col64.clone(), + op0_limb_27_col65.clone(), + ], + )]); + + // read_positive_num_bits_252. + + eval.add_to_relation(&[RelationEntry::new( + &self.memoryaddresstoid_lookup_elements, + E::EF::one(), + &[ + (input_pc_col0.clone() + M31_1.clone()), + op1_id_col66.clone(), + ], + )]); + + eval.add_to_relation(&[RelationEntry::new( + &self.memoryidtobig_lookup_elements, + E::EF::one(), + &[ + op1_id_col66.clone(), + op1_limb_0_col67.clone(), + op1_limb_1_col68.clone(), + op1_limb_2_col69.clone(), + op1_limb_3_col70.clone(), + op1_limb_4_col71.clone(), + op1_limb_5_col72.clone(), + op1_limb_6_col73.clone(), + op1_limb_7_col74.clone(), + op1_limb_8_col75.clone(), + op1_limb_9_col76.clone(), + op1_limb_10_col77.clone(), + op1_limb_11_col78.clone(), + op1_limb_12_col79.clone(), + op1_limb_13_col80.clone(), + op1_limb_14_col81.clone(), + op1_limb_15_col82.clone(), + op1_limb_16_col83.clone(), + op1_limb_17_col84.clone(), + op1_limb_18_col85.clone(), + op1_limb_19_col86.clone(), + op1_limb_20_col87.clone(), + op1_limb_21_col88.clone(), + op1_limb_22_col89.clone(), + op1_limb_23_col90.clone(), + op1_limb_24_col91.clone(), + op1_limb_25_col92.clone(), + op1_limb_26_col93.clone(), + op1_limb_27_col94.clone(), + ], + )]); + + // verify_mul252. + + let conv_tmp_1543 = ((M31_0.clone() - dst_limb_0_col9.clone()) + + (op0_limb_0_col38.clone() * op1_limb_0_col67.clone())); + let conv_tmp_1544 = (((M31_0.clone() - dst_limb_1_col10.clone()) + + (op0_limb_0_col38.clone() * op1_limb_1_col68.clone())) + + (op0_limb_1_col39.clone() * op1_limb_0_col67.clone())); + let conv_tmp_1545 = ((((M31_0.clone() - dst_limb_2_col11.clone()) + + (op0_limb_0_col38.clone() * op1_limb_2_col69.clone())) + + (op0_limb_1_col39.clone() * op1_limb_1_col68.clone())) + + (op0_limb_2_col40.clone() * op1_limb_0_col67.clone())); + let conv_tmp_1546 = (((((M31_0.clone() - dst_limb_3_col12.clone()) + + (op0_limb_0_col38.clone() * op1_limb_3_col70.clone())) + + (op0_limb_1_col39.clone() * op1_limb_2_col69.clone())) + + (op0_limb_2_col40.clone() * op1_limb_1_col68.clone())) + + (op0_limb_3_col41.clone() * op1_limb_0_col67.clone())); + let conv_tmp_1547 = ((((((M31_0.clone() - dst_limb_4_col13.clone()) + + (op0_limb_0_col38.clone() * op1_limb_4_col71.clone())) + + (op0_limb_1_col39.clone() * op1_limb_3_col70.clone())) + + (op0_limb_2_col40.clone() * op1_limb_2_col69.clone())) + + (op0_limb_3_col41.clone() * op1_limb_1_col68.clone())) + + (op0_limb_4_col42.clone() * op1_limb_0_col67.clone())); + let conv_tmp_1548 = (((((((M31_0.clone() - dst_limb_5_col14.clone()) + + (op0_limb_0_col38.clone() * op1_limb_5_col72.clone())) + + (op0_limb_1_col39.clone() * op1_limb_4_col71.clone())) + + (op0_limb_2_col40.clone() * op1_limb_3_col70.clone())) + + (op0_limb_3_col41.clone() * op1_limb_2_col69.clone())) + + (op0_limb_4_col42.clone() * op1_limb_1_col68.clone())) + + (op0_limb_5_col43.clone() * op1_limb_0_col67.clone())); + let conv_tmp_1549 = ((((((((M31_0.clone() - dst_limb_6_col15.clone()) + + (op0_limb_0_col38.clone() * op1_limb_6_col73.clone())) + + (op0_limb_1_col39.clone() * op1_limb_5_col72.clone())) + + (op0_limb_2_col40.clone() * op1_limb_4_col71.clone())) + + (op0_limb_3_col41.clone() * op1_limb_3_col70.clone())) + + (op0_limb_4_col42.clone() * op1_limb_2_col69.clone())) + + (op0_limb_5_col43.clone() * op1_limb_1_col68.clone())) + + (op0_limb_6_col44.clone() * op1_limb_0_col67.clone())); + let conv_tmp_1550 = (((((((((M31_0.clone() - dst_limb_7_col16.clone()) + + (op0_limb_0_col38.clone() * op1_limb_7_col74.clone())) + + (op0_limb_1_col39.clone() * op1_limb_6_col73.clone())) + + (op0_limb_2_col40.clone() * op1_limb_5_col72.clone())) + + (op0_limb_3_col41.clone() * op1_limb_4_col71.clone())) + + (op0_limb_4_col42.clone() * op1_limb_3_col70.clone())) + + (op0_limb_5_col43.clone() * op1_limb_2_col69.clone())) + + (op0_limb_6_col44.clone() * op1_limb_1_col68.clone())) + + (op0_limb_7_col45.clone() * op1_limb_0_col67.clone())); + let conv_tmp_1551 = ((((((((((M31_0.clone() - dst_limb_8_col17.clone()) + + (op0_limb_0_col38.clone() * op1_limb_8_col75.clone())) + + (op0_limb_1_col39.clone() * op1_limb_7_col74.clone())) + + (op0_limb_2_col40.clone() * op1_limb_6_col73.clone())) + + (op0_limb_3_col41.clone() * op1_limb_5_col72.clone())) + + (op0_limb_4_col42.clone() * op1_limb_4_col71.clone())) + + (op0_limb_5_col43.clone() * op1_limb_3_col70.clone())) + + (op0_limb_6_col44.clone() * op1_limb_2_col69.clone())) + + (op0_limb_7_col45.clone() * op1_limb_1_col68.clone())) + + (op0_limb_8_col46.clone() * op1_limb_0_col67.clone())); + let conv_tmp_1552 = (((((((((((M31_0.clone() - dst_limb_9_col18.clone()) + + (op0_limb_0_col38.clone() * op1_limb_9_col76.clone())) + + (op0_limb_1_col39.clone() * op1_limb_8_col75.clone())) + + (op0_limb_2_col40.clone() * op1_limb_7_col74.clone())) + + (op0_limb_3_col41.clone() * op1_limb_6_col73.clone())) + + (op0_limb_4_col42.clone() * op1_limb_5_col72.clone())) + + (op0_limb_5_col43.clone() * op1_limb_4_col71.clone())) + + (op0_limb_6_col44.clone() * op1_limb_3_col70.clone())) + + (op0_limb_7_col45.clone() * op1_limb_2_col69.clone())) + + (op0_limb_8_col46.clone() * op1_limb_1_col68.clone())) + + (op0_limb_9_col47.clone() * op1_limb_0_col67.clone())); + let conv_tmp_1553 = ((((((((((((M31_0.clone() - dst_limb_10_col19.clone()) + + (op0_limb_0_col38.clone() * op1_limb_10_col77.clone())) + + (op0_limb_1_col39.clone() * op1_limb_9_col76.clone())) + + (op0_limb_2_col40.clone() * op1_limb_8_col75.clone())) + + (op0_limb_3_col41.clone() * op1_limb_7_col74.clone())) + + (op0_limb_4_col42.clone() * op1_limb_6_col73.clone())) + + (op0_limb_5_col43.clone() * op1_limb_5_col72.clone())) + + (op0_limb_6_col44.clone() * op1_limb_4_col71.clone())) + + (op0_limb_7_col45.clone() * op1_limb_3_col70.clone())) + + (op0_limb_8_col46.clone() * op1_limb_2_col69.clone())) + + (op0_limb_9_col47.clone() * op1_limb_1_col68.clone())) + + (op0_limb_10_col48.clone() * op1_limb_0_col67.clone())); + let conv_tmp_1554 = (((((((((((((M31_0.clone() - dst_limb_11_col20.clone()) + + (op0_limb_0_col38.clone() * op1_limb_11_col78.clone())) + + (op0_limb_1_col39.clone() * op1_limb_10_col77.clone())) + + (op0_limb_2_col40.clone() * op1_limb_9_col76.clone())) + + (op0_limb_3_col41.clone() * op1_limb_8_col75.clone())) + + (op0_limb_4_col42.clone() * op1_limb_7_col74.clone())) + + (op0_limb_5_col43.clone() * op1_limb_6_col73.clone())) + + (op0_limb_6_col44.clone() * op1_limb_5_col72.clone())) + + (op0_limb_7_col45.clone() * op1_limb_4_col71.clone())) + + (op0_limb_8_col46.clone() * op1_limb_3_col70.clone())) + + (op0_limb_9_col47.clone() * op1_limb_2_col69.clone())) + + (op0_limb_10_col48.clone() * op1_limb_1_col68.clone())) + + (op0_limb_11_col49.clone() * op1_limb_0_col67.clone())); + let conv_tmp_1555 = ((((((((((((((M31_0.clone() - dst_limb_12_col21.clone()) + + (op0_limb_0_col38.clone() * op1_limb_12_col79.clone())) + + (op0_limb_1_col39.clone() * op1_limb_11_col78.clone())) + + (op0_limb_2_col40.clone() * op1_limb_10_col77.clone())) + + (op0_limb_3_col41.clone() * op1_limb_9_col76.clone())) + + (op0_limb_4_col42.clone() * op1_limb_8_col75.clone())) + + (op0_limb_5_col43.clone() * op1_limb_7_col74.clone())) + + (op0_limb_6_col44.clone() * op1_limb_6_col73.clone())) + + (op0_limb_7_col45.clone() * op1_limb_5_col72.clone())) + + (op0_limb_8_col46.clone() * op1_limb_4_col71.clone())) + + (op0_limb_9_col47.clone() * op1_limb_3_col70.clone())) + + (op0_limb_10_col48.clone() * op1_limb_2_col69.clone())) + + (op0_limb_11_col49.clone() * op1_limb_1_col68.clone())) + + (op0_limb_12_col50.clone() * op1_limb_0_col67.clone())); + let conv_tmp_1556 = (((((((((((((((M31_0.clone() - dst_limb_13_col22.clone()) + + (op0_limb_0_col38.clone() * op1_limb_13_col80.clone())) + + (op0_limb_1_col39.clone() * op1_limb_12_col79.clone())) + + (op0_limb_2_col40.clone() * op1_limb_11_col78.clone())) + + (op0_limb_3_col41.clone() * op1_limb_10_col77.clone())) + + (op0_limb_4_col42.clone() * op1_limb_9_col76.clone())) + + (op0_limb_5_col43.clone() * op1_limb_8_col75.clone())) + + (op0_limb_6_col44.clone() * op1_limb_7_col74.clone())) + + (op0_limb_7_col45.clone() * op1_limb_6_col73.clone())) + + (op0_limb_8_col46.clone() * op1_limb_5_col72.clone())) + + (op0_limb_9_col47.clone() * op1_limb_4_col71.clone())) + + (op0_limb_10_col48.clone() * op1_limb_3_col70.clone())) + + (op0_limb_11_col49.clone() * op1_limb_2_col69.clone())) + + (op0_limb_12_col50.clone() * op1_limb_1_col68.clone())) + + (op0_limb_13_col51.clone() * op1_limb_0_col67.clone())); + let conv_tmp_1557 = ((((((((((((((((M31_0.clone() + - dst_limb_14_col23.clone()) + + (op0_limb_0_col38.clone() * op1_limb_14_col81.clone())) + + (op0_limb_1_col39.clone() * op1_limb_13_col80.clone())) + + (op0_limb_2_col40.clone() * op1_limb_12_col79.clone())) + + (op0_limb_3_col41.clone() * op1_limb_11_col78.clone())) + + (op0_limb_4_col42.clone() * op1_limb_10_col77.clone())) + + (op0_limb_5_col43.clone() * op1_limb_9_col76.clone())) + + (op0_limb_6_col44.clone() * op1_limb_8_col75.clone())) + + (op0_limb_7_col45.clone() * op1_limb_7_col74.clone())) + + (op0_limb_8_col46.clone() * op1_limb_6_col73.clone())) + + (op0_limb_9_col47.clone() * op1_limb_5_col72.clone())) + + (op0_limb_10_col48.clone() * op1_limb_4_col71.clone())) + + (op0_limb_11_col49.clone() * op1_limb_3_col70.clone())) + + (op0_limb_12_col50.clone() * op1_limb_2_col69.clone())) + + (op0_limb_13_col51.clone() * op1_limb_1_col68.clone())) + + (op0_limb_14_col52.clone() * op1_limb_0_col67.clone())); + let conv_tmp_1558 = (((((((((((((((((M31_0.clone() + - dst_limb_15_col24.clone()) + + (op0_limb_0_col38.clone() * op1_limb_15_col82.clone())) + + (op0_limb_1_col39.clone() * op1_limb_14_col81.clone())) + + (op0_limb_2_col40.clone() * op1_limb_13_col80.clone())) + + (op0_limb_3_col41.clone() * op1_limb_12_col79.clone())) + + (op0_limb_4_col42.clone() * op1_limb_11_col78.clone())) + + (op0_limb_5_col43.clone() * op1_limb_10_col77.clone())) + + (op0_limb_6_col44.clone() * op1_limb_9_col76.clone())) + + (op0_limb_7_col45.clone() * op1_limb_8_col75.clone())) + + (op0_limb_8_col46.clone() * op1_limb_7_col74.clone())) + + (op0_limb_9_col47.clone() * op1_limb_6_col73.clone())) + + (op0_limb_10_col48.clone() * op1_limb_5_col72.clone())) + + (op0_limb_11_col49.clone() * op1_limb_4_col71.clone())) + + (op0_limb_12_col50.clone() * op1_limb_3_col70.clone())) + + (op0_limb_13_col51.clone() * op1_limb_2_col69.clone())) + + (op0_limb_14_col52.clone() * op1_limb_1_col68.clone())) + + (op0_limb_15_col53.clone() * op1_limb_0_col67.clone())); + let conv_tmp_1559 = ((((((((((((((((((M31_0.clone() + - dst_limb_16_col25.clone()) + + (op0_limb_0_col38.clone() * op1_limb_16_col83.clone())) + + (op0_limb_1_col39.clone() * op1_limb_15_col82.clone())) + + (op0_limb_2_col40.clone() * op1_limb_14_col81.clone())) + + (op0_limb_3_col41.clone() * op1_limb_13_col80.clone())) + + (op0_limb_4_col42.clone() * op1_limb_12_col79.clone())) + + (op0_limb_5_col43.clone() * op1_limb_11_col78.clone())) + + (op0_limb_6_col44.clone() * op1_limb_10_col77.clone())) + + (op0_limb_7_col45.clone() * op1_limb_9_col76.clone())) + + (op0_limb_8_col46.clone() * op1_limb_8_col75.clone())) + + (op0_limb_9_col47.clone() * op1_limb_7_col74.clone())) + + (op0_limb_10_col48.clone() * op1_limb_6_col73.clone())) + + (op0_limb_11_col49.clone() * op1_limb_5_col72.clone())) + + (op0_limb_12_col50.clone() * op1_limb_4_col71.clone())) + + (op0_limb_13_col51.clone() * op1_limb_3_col70.clone())) + + (op0_limb_14_col52.clone() * op1_limb_2_col69.clone())) + + (op0_limb_15_col53.clone() * op1_limb_1_col68.clone())) + + (op0_limb_16_col54.clone() * op1_limb_0_col67.clone())); + let conv_tmp_1560 = (((((((((((((((((((M31_0.clone() + - dst_limb_17_col26.clone()) + + (op0_limb_0_col38.clone() * op1_limb_17_col84.clone())) + + (op0_limb_1_col39.clone() * op1_limb_16_col83.clone())) + + (op0_limb_2_col40.clone() * op1_limb_15_col82.clone())) + + (op0_limb_3_col41.clone() * op1_limb_14_col81.clone())) + + (op0_limb_4_col42.clone() * op1_limb_13_col80.clone())) + + (op0_limb_5_col43.clone() * op1_limb_12_col79.clone())) + + (op0_limb_6_col44.clone() * op1_limb_11_col78.clone())) + + (op0_limb_7_col45.clone() * op1_limb_10_col77.clone())) + + (op0_limb_8_col46.clone() * op1_limb_9_col76.clone())) + + (op0_limb_9_col47.clone() * op1_limb_8_col75.clone())) + + (op0_limb_10_col48.clone() * op1_limb_7_col74.clone())) + + (op0_limb_11_col49.clone() * op1_limb_6_col73.clone())) + + (op0_limb_12_col50.clone() * op1_limb_5_col72.clone())) + + (op0_limb_13_col51.clone() * op1_limb_4_col71.clone())) + + (op0_limb_14_col52.clone() * op1_limb_3_col70.clone())) + + (op0_limb_15_col53.clone() * op1_limb_2_col69.clone())) + + (op0_limb_16_col54.clone() * op1_limb_1_col68.clone())) + + (op0_limb_17_col55.clone() * op1_limb_0_col67.clone())); + let conv_tmp_1561 = ((((((((((((((((((((M31_0.clone() + - dst_limb_18_col27.clone()) + + (op0_limb_0_col38.clone() * op1_limb_18_col85.clone())) + + (op0_limb_1_col39.clone() * op1_limb_17_col84.clone())) + + (op0_limb_2_col40.clone() * op1_limb_16_col83.clone())) + + (op0_limb_3_col41.clone() * op1_limb_15_col82.clone())) + + (op0_limb_4_col42.clone() * op1_limb_14_col81.clone())) + + (op0_limb_5_col43.clone() * op1_limb_13_col80.clone())) + + (op0_limb_6_col44.clone() * op1_limb_12_col79.clone())) + + (op0_limb_7_col45.clone() * op1_limb_11_col78.clone())) + + (op0_limb_8_col46.clone() * op1_limb_10_col77.clone())) + + (op0_limb_9_col47.clone() * op1_limb_9_col76.clone())) + + (op0_limb_10_col48.clone() * op1_limb_8_col75.clone())) + + (op0_limb_11_col49.clone() * op1_limb_7_col74.clone())) + + (op0_limb_12_col50.clone() * op1_limb_6_col73.clone())) + + (op0_limb_13_col51.clone() * op1_limb_5_col72.clone())) + + (op0_limb_14_col52.clone() * op1_limb_4_col71.clone())) + + (op0_limb_15_col53.clone() * op1_limb_3_col70.clone())) + + (op0_limb_16_col54.clone() * op1_limb_2_col69.clone())) + + (op0_limb_17_col55.clone() * op1_limb_1_col68.clone())) + + (op0_limb_18_col56.clone() * op1_limb_0_col67.clone())); + let conv_tmp_1562 = (((((((((((((((((((((M31_0.clone() + - dst_limb_19_col28.clone()) + + (op0_limb_0_col38.clone() * op1_limb_19_col86.clone())) + + (op0_limb_1_col39.clone() * op1_limb_18_col85.clone())) + + (op0_limb_2_col40.clone() * op1_limb_17_col84.clone())) + + (op0_limb_3_col41.clone() * op1_limb_16_col83.clone())) + + (op0_limb_4_col42.clone() * op1_limb_15_col82.clone())) + + (op0_limb_5_col43.clone() * op1_limb_14_col81.clone())) + + (op0_limb_6_col44.clone() * op1_limb_13_col80.clone())) + + (op0_limb_7_col45.clone() * op1_limb_12_col79.clone())) + + (op0_limb_8_col46.clone() * op1_limb_11_col78.clone())) + + (op0_limb_9_col47.clone() * op1_limb_10_col77.clone())) + + (op0_limb_10_col48.clone() * op1_limb_9_col76.clone())) + + (op0_limb_11_col49.clone() * op1_limb_8_col75.clone())) + + (op0_limb_12_col50.clone() * op1_limb_7_col74.clone())) + + (op0_limb_13_col51.clone() * op1_limb_6_col73.clone())) + + (op0_limb_14_col52.clone() * op1_limb_5_col72.clone())) + + (op0_limb_15_col53.clone() * op1_limb_4_col71.clone())) + + (op0_limb_16_col54.clone() * op1_limb_3_col70.clone())) + + (op0_limb_17_col55.clone() * op1_limb_2_col69.clone())) + + (op0_limb_18_col56.clone() * op1_limb_1_col68.clone())) + + (op0_limb_19_col57.clone() * op1_limb_0_col67.clone())); + let conv_tmp_1563 = ((((((((((((((((((((((M31_0.clone() + - dst_limb_20_col29.clone()) + + (op0_limb_0_col38.clone() * op1_limb_20_col87.clone())) + + (op0_limb_1_col39.clone() * op1_limb_19_col86.clone())) + + (op0_limb_2_col40.clone() * op1_limb_18_col85.clone())) + + (op0_limb_3_col41.clone() * op1_limb_17_col84.clone())) + + (op0_limb_4_col42.clone() * op1_limb_16_col83.clone())) + + (op0_limb_5_col43.clone() * op1_limb_15_col82.clone())) + + (op0_limb_6_col44.clone() * op1_limb_14_col81.clone())) + + (op0_limb_7_col45.clone() * op1_limb_13_col80.clone())) + + (op0_limb_8_col46.clone() * op1_limb_12_col79.clone())) + + (op0_limb_9_col47.clone() * op1_limb_11_col78.clone())) + + (op0_limb_10_col48.clone() * op1_limb_10_col77.clone())) + + (op0_limb_11_col49.clone() * op1_limb_9_col76.clone())) + + (op0_limb_12_col50.clone() * op1_limb_8_col75.clone())) + + (op0_limb_13_col51.clone() * op1_limb_7_col74.clone())) + + (op0_limb_14_col52.clone() * op1_limb_6_col73.clone())) + + (op0_limb_15_col53.clone() * op1_limb_5_col72.clone())) + + (op0_limb_16_col54.clone() * op1_limb_4_col71.clone())) + + (op0_limb_17_col55.clone() * op1_limb_3_col70.clone())) + + (op0_limb_18_col56.clone() * op1_limb_2_col69.clone())) + + (op0_limb_19_col57.clone() * op1_limb_1_col68.clone())) + + (op0_limb_20_col58.clone() * op1_limb_0_col67.clone())); + let conv_tmp_1564 = (((((((((((((((((((((((M31_0.clone() + - dst_limb_21_col30.clone()) + + (op0_limb_0_col38.clone() * op1_limb_21_col88.clone())) + + (op0_limb_1_col39.clone() * op1_limb_20_col87.clone())) + + (op0_limb_2_col40.clone() * op1_limb_19_col86.clone())) + + (op0_limb_3_col41.clone() * op1_limb_18_col85.clone())) + + (op0_limb_4_col42.clone() * op1_limb_17_col84.clone())) + + (op0_limb_5_col43.clone() * op1_limb_16_col83.clone())) + + (op0_limb_6_col44.clone() * op1_limb_15_col82.clone())) + + (op0_limb_7_col45.clone() * op1_limb_14_col81.clone())) + + (op0_limb_8_col46.clone() * op1_limb_13_col80.clone())) + + (op0_limb_9_col47.clone() * op1_limb_12_col79.clone())) + + (op0_limb_10_col48.clone() * op1_limb_11_col78.clone())) + + (op0_limb_11_col49.clone() * op1_limb_10_col77.clone())) + + (op0_limb_12_col50.clone() * op1_limb_9_col76.clone())) + + (op0_limb_13_col51.clone() * op1_limb_8_col75.clone())) + + (op0_limb_14_col52.clone() * op1_limb_7_col74.clone())) + + (op0_limb_15_col53.clone() * op1_limb_6_col73.clone())) + + (op0_limb_16_col54.clone() * op1_limb_5_col72.clone())) + + (op0_limb_17_col55.clone() * op1_limb_4_col71.clone())) + + (op0_limb_18_col56.clone() * op1_limb_3_col70.clone())) + + (op0_limb_19_col57.clone() * op1_limb_2_col69.clone())) + + (op0_limb_20_col58.clone() * op1_limb_1_col68.clone())) + + (op0_limb_21_col59.clone() * op1_limb_0_col67.clone())); + let conv_tmp_1565 = ((((((((((((((((((((((((M31_0.clone() + - dst_limb_22_col31.clone()) + + (op0_limb_0_col38.clone() * op1_limb_22_col89.clone())) + + (op0_limb_1_col39.clone() * op1_limb_21_col88.clone())) + + (op0_limb_2_col40.clone() * op1_limb_20_col87.clone())) + + (op0_limb_3_col41.clone() * op1_limb_19_col86.clone())) + + (op0_limb_4_col42.clone() * op1_limb_18_col85.clone())) + + (op0_limb_5_col43.clone() * op1_limb_17_col84.clone())) + + (op0_limb_6_col44.clone() * op1_limb_16_col83.clone())) + + (op0_limb_7_col45.clone() * op1_limb_15_col82.clone())) + + (op0_limb_8_col46.clone() * op1_limb_14_col81.clone())) + + (op0_limb_9_col47.clone() * op1_limb_13_col80.clone())) + + (op0_limb_10_col48.clone() * op1_limb_12_col79.clone())) + + (op0_limb_11_col49.clone() * op1_limb_11_col78.clone())) + + (op0_limb_12_col50.clone() * op1_limb_10_col77.clone())) + + (op0_limb_13_col51.clone() * op1_limb_9_col76.clone())) + + (op0_limb_14_col52.clone() * op1_limb_8_col75.clone())) + + (op0_limb_15_col53.clone() * op1_limb_7_col74.clone())) + + (op0_limb_16_col54.clone() * op1_limb_6_col73.clone())) + + (op0_limb_17_col55.clone() * op1_limb_5_col72.clone())) + + (op0_limb_18_col56.clone() * op1_limb_4_col71.clone())) + + (op0_limb_19_col57.clone() * op1_limb_3_col70.clone())) + + (op0_limb_20_col58.clone() * op1_limb_2_col69.clone())) + + (op0_limb_21_col59.clone() * op1_limb_1_col68.clone())) + + (op0_limb_22_col60.clone() * op1_limb_0_col67.clone())); + let conv_tmp_1566 = (((((((((((((((((((((((((M31_0.clone() + - dst_limb_23_col32.clone()) + + (op0_limb_0_col38.clone() * op1_limb_23_col90.clone())) + + (op0_limb_1_col39.clone() * op1_limb_22_col89.clone())) + + (op0_limb_2_col40.clone() * op1_limb_21_col88.clone())) + + (op0_limb_3_col41.clone() * op1_limb_20_col87.clone())) + + (op0_limb_4_col42.clone() * op1_limb_19_col86.clone())) + + (op0_limb_5_col43.clone() * op1_limb_18_col85.clone())) + + (op0_limb_6_col44.clone() * op1_limb_17_col84.clone())) + + (op0_limb_7_col45.clone() * op1_limb_16_col83.clone())) + + (op0_limb_8_col46.clone() * op1_limb_15_col82.clone())) + + (op0_limb_9_col47.clone() * op1_limb_14_col81.clone())) + + (op0_limb_10_col48.clone() * op1_limb_13_col80.clone())) + + (op0_limb_11_col49.clone() * op1_limb_12_col79.clone())) + + (op0_limb_12_col50.clone() * op1_limb_11_col78.clone())) + + (op0_limb_13_col51.clone() * op1_limb_10_col77.clone())) + + (op0_limb_14_col52.clone() * op1_limb_9_col76.clone())) + + (op0_limb_15_col53.clone() * op1_limb_8_col75.clone())) + + (op0_limb_16_col54.clone() * op1_limb_7_col74.clone())) + + (op0_limb_17_col55.clone() * op1_limb_6_col73.clone())) + + (op0_limb_18_col56.clone() * op1_limb_5_col72.clone())) + + (op0_limb_19_col57.clone() * op1_limb_4_col71.clone())) + + (op0_limb_20_col58.clone() * op1_limb_3_col70.clone())) + + (op0_limb_21_col59.clone() * op1_limb_2_col69.clone())) + + (op0_limb_22_col60.clone() * op1_limb_1_col68.clone())) + + (op0_limb_23_col61.clone() * op1_limb_0_col67.clone())); + let conv_tmp_1567 = ((((((((((((((((((((((((((M31_0.clone() + - dst_limb_24_col33.clone()) + + (op0_limb_0_col38.clone() * op1_limb_24_col91.clone())) + + (op0_limb_1_col39.clone() * op1_limb_23_col90.clone())) + + (op0_limb_2_col40.clone() * op1_limb_22_col89.clone())) + + (op0_limb_3_col41.clone() * op1_limb_21_col88.clone())) + + (op0_limb_4_col42.clone() * op1_limb_20_col87.clone())) + + (op0_limb_5_col43.clone() * op1_limb_19_col86.clone())) + + (op0_limb_6_col44.clone() * op1_limb_18_col85.clone())) + + (op0_limb_7_col45.clone() * op1_limb_17_col84.clone())) + + (op0_limb_8_col46.clone() * op1_limb_16_col83.clone())) + + (op0_limb_9_col47.clone() * op1_limb_15_col82.clone())) + + (op0_limb_10_col48.clone() * op1_limb_14_col81.clone())) + + (op0_limb_11_col49.clone() * op1_limb_13_col80.clone())) + + (op0_limb_12_col50.clone() * op1_limb_12_col79.clone())) + + (op0_limb_13_col51.clone() * op1_limb_11_col78.clone())) + + (op0_limb_14_col52.clone() * op1_limb_10_col77.clone())) + + (op0_limb_15_col53.clone() * op1_limb_9_col76.clone())) + + (op0_limb_16_col54.clone() * op1_limb_8_col75.clone())) + + (op0_limb_17_col55.clone() * op1_limb_7_col74.clone())) + + (op0_limb_18_col56.clone() * op1_limb_6_col73.clone())) + + (op0_limb_19_col57.clone() * op1_limb_5_col72.clone())) + + (op0_limb_20_col58.clone() * op1_limb_4_col71.clone())) + + (op0_limb_21_col59.clone() * op1_limb_3_col70.clone())) + + (op0_limb_22_col60.clone() * op1_limb_2_col69.clone())) + + (op0_limb_23_col61.clone() * op1_limb_1_col68.clone())) + + (op0_limb_24_col62.clone() * op1_limb_0_col67.clone())); + let conv_tmp_1568 = (((((((((((((((((((((((((((M31_0.clone() + - dst_limb_25_col34.clone()) + + (op0_limb_0_col38.clone() * op1_limb_25_col92.clone())) + + (op0_limb_1_col39.clone() * op1_limb_24_col91.clone())) + + (op0_limb_2_col40.clone() * op1_limb_23_col90.clone())) + + (op0_limb_3_col41.clone() * op1_limb_22_col89.clone())) + + (op0_limb_4_col42.clone() * op1_limb_21_col88.clone())) + + (op0_limb_5_col43.clone() * op1_limb_20_col87.clone())) + + (op0_limb_6_col44.clone() * op1_limb_19_col86.clone())) + + (op0_limb_7_col45.clone() * op1_limb_18_col85.clone())) + + (op0_limb_8_col46.clone() * op1_limb_17_col84.clone())) + + (op0_limb_9_col47.clone() * op1_limb_16_col83.clone())) + + (op0_limb_10_col48.clone() * op1_limb_15_col82.clone())) + + (op0_limb_11_col49.clone() * op1_limb_14_col81.clone())) + + (op0_limb_12_col50.clone() * op1_limb_13_col80.clone())) + + (op0_limb_13_col51.clone() * op1_limb_12_col79.clone())) + + (op0_limb_14_col52.clone() * op1_limb_11_col78.clone())) + + (op0_limb_15_col53.clone() * op1_limb_10_col77.clone())) + + (op0_limb_16_col54.clone() * op1_limb_9_col76.clone())) + + (op0_limb_17_col55.clone() * op1_limb_8_col75.clone())) + + (op0_limb_18_col56.clone() * op1_limb_7_col74.clone())) + + (op0_limb_19_col57.clone() * op1_limb_6_col73.clone())) + + (op0_limb_20_col58.clone() * op1_limb_5_col72.clone())) + + (op0_limb_21_col59.clone() * op1_limb_4_col71.clone())) + + (op0_limb_22_col60.clone() * op1_limb_3_col70.clone())) + + (op0_limb_23_col61.clone() * op1_limb_2_col69.clone())) + + (op0_limb_24_col62.clone() * op1_limb_1_col68.clone())) + + (op0_limb_25_col63.clone() * op1_limb_0_col67.clone())); + let conv_tmp_1569 = ((((((((((((((((((((((((((((M31_0.clone() + - dst_limb_26_col35.clone()) + + (op0_limb_0_col38.clone() * op1_limb_26_col93.clone())) + + (op0_limb_1_col39.clone() * op1_limb_25_col92.clone())) + + (op0_limb_2_col40.clone() * op1_limb_24_col91.clone())) + + (op0_limb_3_col41.clone() * op1_limb_23_col90.clone())) + + (op0_limb_4_col42.clone() * op1_limb_22_col89.clone())) + + (op0_limb_5_col43.clone() * op1_limb_21_col88.clone())) + + (op0_limb_6_col44.clone() * op1_limb_20_col87.clone())) + + (op0_limb_7_col45.clone() * op1_limb_19_col86.clone())) + + (op0_limb_8_col46.clone() * op1_limb_18_col85.clone())) + + (op0_limb_9_col47.clone() * op1_limb_17_col84.clone())) + + (op0_limb_10_col48.clone() * op1_limb_16_col83.clone())) + + (op0_limb_11_col49.clone() * op1_limb_15_col82.clone())) + + (op0_limb_12_col50.clone() * op1_limb_14_col81.clone())) + + (op0_limb_13_col51.clone() * op1_limb_13_col80.clone())) + + (op0_limb_14_col52.clone() * op1_limb_12_col79.clone())) + + (op0_limb_15_col53.clone() * op1_limb_11_col78.clone())) + + (op0_limb_16_col54.clone() * op1_limb_10_col77.clone())) + + (op0_limb_17_col55.clone() * op1_limb_9_col76.clone())) + + (op0_limb_18_col56.clone() * op1_limb_8_col75.clone())) + + (op0_limb_19_col57.clone() * op1_limb_7_col74.clone())) + + (op0_limb_20_col58.clone() * op1_limb_6_col73.clone())) + + (op0_limb_21_col59.clone() * op1_limb_5_col72.clone())) + + (op0_limb_22_col60.clone() * op1_limb_4_col71.clone())) + + (op0_limb_23_col61.clone() * op1_limb_3_col70.clone())) + + (op0_limb_24_col62.clone() * op1_limb_2_col69.clone())) + + (op0_limb_25_col63.clone() * op1_limb_1_col68.clone())) + + (op0_limb_26_col64.clone() * op1_limb_0_col67.clone())); + let conv_tmp_1570 = (((((((((((((((((((((((((((((M31_0.clone() + - dst_limb_27_col36.clone()) + + (op0_limb_0_col38.clone() * op1_limb_27_col94.clone())) + + (op0_limb_1_col39.clone() * op1_limb_26_col93.clone())) + + (op0_limb_2_col40.clone() * op1_limb_25_col92.clone())) + + (op0_limb_3_col41.clone() * op1_limb_24_col91.clone())) + + (op0_limb_4_col42.clone() * op1_limb_23_col90.clone())) + + (op0_limb_5_col43.clone() * op1_limb_22_col89.clone())) + + (op0_limb_6_col44.clone() * op1_limb_21_col88.clone())) + + (op0_limb_7_col45.clone() * op1_limb_20_col87.clone())) + + (op0_limb_8_col46.clone() * op1_limb_19_col86.clone())) + + (op0_limb_9_col47.clone() * op1_limb_18_col85.clone())) + + (op0_limb_10_col48.clone() * op1_limb_17_col84.clone())) + + (op0_limb_11_col49.clone() * op1_limb_16_col83.clone())) + + (op0_limb_12_col50.clone() * op1_limb_15_col82.clone())) + + (op0_limb_13_col51.clone() * op1_limb_14_col81.clone())) + + (op0_limb_14_col52.clone() * op1_limb_13_col80.clone())) + + (op0_limb_15_col53.clone() * op1_limb_12_col79.clone())) + + (op0_limb_16_col54.clone() * op1_limb_11_col78.clone())) + + (op0_limb_17_col55.clone() * op1_limb_10_col77.clone())) + + (op0_limb_18_col56.clone() * op1_limb_9_col76.clone())) + + (op0_limb_19_col57.clone() * op1_limb_8_col75.clone())) + + (op0_limb_20_col58.clone() * op1_limb_7_col74.clone())) + + (op0_limb_21_col59.clone() * op1_limb_6_col73.clone())) + + (op0_limb_22_col60.clone() * op1_limb_5_col72.clone())) + + (op0_limb_23_col61.clone() * op1_limb_4_col71.clone())) + + (op0_limb_24_col62.clone() * op1_limb_3_col70.clone())) + + (op0_limb_25_col63.clone() * op1_limb_2_col69.clone())) + + (op0_limb_26_col64.clone() * op1_limb_1_col68.clone())) + + (op0_limb_27_col65.clone() * op1_limb_0_col67.clone())); + let conv_tmp_1571 = (((((((((((((((((((((((((((M31_0.clone() + + (op0_limb_1_col39.clone() * op1_limb_27_col94.clone())) + + (op0_limb_2_col40.clone() * op1_limb_26_col93.clone())) + + (op0_limb_3_col41.clone() * op1_limb_25_col92.clone())) + + (op0_limb_4_col42.clone() * op1_limb_24_col91.clone())) + + (op0_limb_5_col43.clone() * op1_limb_23_col90.clone())) + + (op0_limb_6_col44.clone() * op1_limb_22_col89.clone())) + + (op0_limb_7_col45.clone() * op1_limb_21_col88.clone())) + + (op0_limb_8_col46.clone() * op1_limb_20_col87.clone())) + + (op0_limb_9_col47.clone() * op1_limb_19_col86.clone())) + + (op0_limb_10_col48.clone() * op1_limb_18_col85.clone())) + + (op0_limb_11_col49.clone() * op1_limb_17_col84.clone())) + + (op0_limb_12_col50.clone() * op1_limb_16_col83.clone())) + + (op0_limb_13_col51.clone() * op1_limb_15_col82.clone())) + + (op0_limb_14_col52.clone() * op1_limb_14_col81.clone())) + + (op0_limb_15_col53.clone() * op1_limb_13_col80.clone())) + + (op0_limb_16_col54.clone() * op1_limb_12_col79.clone())) + + (op0_limb_17_col55.clone() * op1_limb_11_col78.clone())) + + (op0_limb_18_col56.clone() * op1_limb_10_col77.clone())) + + (op0_limb_19_col57.clone() * op1_limb_9_col76.clone())) + + (op0_limb_20_col58.clone() * op1_limb_8_col75.clone())) + + (op0_limb_21_col59.clone() * op1_limb_7_col74.clone())) + + (op0_limb_22_col60.clone() * op1_limb_6_col73.clone())) + + (op0_limb_23_col61.clone() * op1_limb_5_col72.clone())) + + (op0_limb_24_col62.clone() * op1_limb_4_col71.clone())) + + (op0_limb_25_col63.clone() * op1_limb_3_col70.clone())) + + (op0_limb_26_col64.clone() * op1_limb_2_col69.clone())) + + (op0_limb_27_col65.clone() * op1_limb_1_col68.clone())); + let conv_tmp_1572 = ((((((((((((((((((((((((((M31_0.clone() + + (op0_limb_2_col40.clone() * op1_limb_27_col94.clone())) + + (op0_limb_3_col41.clone() * op1_limb_26_col93.clone())) + + (op0_limb_4_col42.clone() * op1_limb_25_col92.clone())) + + (op0_limb_5_col43.clone() * op1_limb_24_col91.clone())) + + (op0_limb_6_col44.clone() * op1_limb_23_col90.clone())) + + (op0_limb_7_col45.clone() * op1_limb_22_col89.clone())) + + (op0_limb_8_col46.clone() * op1_limb_21_col88.clone())) + + (op0_limb_9_col47.clone() * op1_limb_20_col87.clone())) + + (op0_limb_10_col48.clone() * op1_limb_19_col86.clone())) + + (op0_limb_11_col49.clone() * op1_limb_18_col85.clone())) + + (op0_limb_12_col50.clone() * op1_limb_17_col84.clone())) + + (op0_limb_13_col51.clone() * op1_limb_16_col83.clone())) + + (op0_limb_14_col52.clone() * op1_limb_15_col82.clone())) + + (op0_limb_15_col53.clone() * op1_limb_14_col81.clone())) + + (op0_limb_16_col54.clone() * op1_limb_13_col80.clone())) + + (op0_limb_17_col55.clone() * op1_limb_12_col79.clone())) + + (op0_limb_18_col56.clone() * op1_limb_11_col78.clone())) + + (op0_limb_19_col57.clone() * op1_limb_10_col77.clone())) + + (op0_limb_20_col58.clone() * op1_limb_9_col76.clone())) + + (op0_limb_21_col59.clone() * op1_limb_8_col75.clone())) + + (op0_limb_22_col60.clone() * op1_limb_7_col74.clone())) + + (op0_limb_23_col61.clone() * op1_limb_6_col73.clone())) + + (op0_limb_24_col62.clone() * op1_limb_5_col72.clone())) + + (op0_limb_25_col63.clone() * op1_limb_4_col71.clone())) + + (op0_limb_26_col64.clone() * op1_limb_3_col70.clone())) + + (op0_limb_27_col65.clone() * op1_limb_2_col69.clone())); + let conv_tmp_1573 = (((((((((((((((((((((((((M31_0.clone() + + (op0_limb_3_col41.clone() * op1_limb_27_col94.clone())) + + (op0_limb_4_col42.clone() * op1_limb_26_col93.clone())) + + (op0_limb_5_col43.clone() * op1_limb_25_col92.clone())) + + (op0_limb_6_col44.clone() * op1_limb_24_col91.clone())) + + (op0_limb_7_col45.clone() * op1_limb_23_col90.clone())) + + (op0_limb_8_col46.clone() * op1_limb_22_col89.clone())) + + (op0_limb_9_col47.clone() * op1_limb_21_col88.clone())) + + (op0_limb_10_col48.clone() * op1_limb_20_col87.clone())) + + (op0_limb_11_col49.clone() * op1_limb_19_col86.clone())) + + (op0_limb_12_col50.clone() * op1_limb_18_col85.clone())) + + (op0_limb_13_col51.clone() * op1_limb_17_col84.clone())) + + (op0_limb_14_col52.clone() * op1_limb_16_col83.clone())) + + (op0_limb_15_col53.clone() * op1_limb_15_col82.clone())) + + (op0_limb_16_col54.clone() * op1_limb_14_col81.clone())) + + (op0_limb_17_col55.clone() * op1_limb_13_col80.clone())) + + (op0_limb_18_col56.clone() * op1_limb_12_col79.clone())) + + (op0_limb_19_col57.clone() * op1_limb_11_col78.clone())) + + (op0_limb_20_col58.clone() * op1_limb_10_col77.clone())) + + (op0_limb_21_col59.clone() * op1_limb_9_col76.clone())) + + (op0_limb_22_col60.clone() * op1_limb_8_col75.clone())) + + (op0_limb_23_col61.clone() * op1_limb_7_col74.clone())) + + (op0_limb_24_col62.clone() * op1_limb_6_col73.clone())) + + (op0_limb_25_col63.clone() * op1_limb_5_col72.clone())) + + (op0_limb_26_col64.clone() * op1_limb_4_col71.clone())) + + (op0_limb_27_col65.clone() * op1_limb_3_col70.clone())); + let conv_tmp_1574 = ((((((((((((((((((((((((M31_0.clone() + + (op0_limb_4_col42.clone() * op1_limb_27_col94.clone())) + + (op0_limb_5_col43.clone() * op1_limb_26_col93.clone())) + + (op0_limb_6_col44.clone() * op1_limb_25_col92.clone())) + + (op0_limb_7_col45.clone() * op1_limb_24_col91.clone())) + + (op0_limb_8_col46.clone() * op1_limb_23_col90.clone())) + + (op0_limb_9_col47.clone() * op1_limb_22_col89.clone())) + + (op0_limb_10_col48.clone() * op1_limb_21_col88.clone())) + + (op0_limb_11_col49.clone() * op1_limb_20_col87.clone())) + + (op0_limb_12_col50.clone() * op1_limb_19_col86.clone())) + + (op0_limb_13_col51.clone() * op1_limb_18_col85.clone())) + + (op0_limb_14_col52.clone() * op1_limb_17_col84.clone())) + + (op0_limb_15_col53.clone() * op1_limb_16_col83.clone())) + + (op0_limb_16_col54.clone() * op1_limb_15_col82.clone())) + + (op0_limb_17_col55.clone() * op1_limb_14_col81.clone())) + + (op0_limb_18_col56.clone() * op1_limb_13_col80.clone())) + + (op0_limb_19_col57.clone() * op1_limb_12_col79.clone())) + + (op0_limb_20_col58.clone() * op1_limb_11_col78.clone())) + + (op0_limb_21_col59.clone() * op1_limb_10_col77.clone())) + + (op0_limb_22_col60.clone() * op1_limb_9_col76.clone())) + + (op0_limb_23_col61.clone() * op1_limb_8_col75.clone())) + + (op0_limb_24_col62.clone() * op1_limb_7_col74.clone())) + + (op0_limb_25_col63.clone() * op1_limb_6_col73.clone())) + + (op0_limb_26_col64.clone() * op1_limb_5_col72.clone())) + + (op0_limb_27_col65.clone() * op1_limb_4_col71.clone())); + let conv_tmp_1575 = (((((((((((((((((((((((M31_0.clone() + + (op0_limb_5_col43.clone() * op1_limb_27_col94.clone())) + + (op0_limb_6_col44.clone() * op1_limb_26_col93.clone())) + + (op0_limb_7_col45.clone() * op1_limb_25_col92.clone())) + + (op0_limb_8_col46.clone() * op1_limb_24_col91.clone())) + + (op0_limb_9_col47.clone() * op1_limb_23_col90.clone())) + + (op0_limb_10_col48.clone() * op1_limb_22_col89.clone())) + + (op0_limb_11_col49.clone() * op1_limb_21_col88.clone())) + + (op0_limb_12_col50.clone() * op1_limb_20_col87.clone())) + + (op0_limb_13_col51.clone() * op1_limb_19_col86.clone())) + + (op0_limb_14_col52.clone() * op1_limb_18_col85.clone())) + + (op0_limb_15_col53.clone() * op1_limb_17_col84.clone())) + + (op0_limb_16_col54.clone() * op1_limb_16_col83.clone())) + + (op0_limb_17_col55.clone() * op1_limb_15_col82.clone())) + + (op0_limb_18_col56.clone() * op1_limb_14_col81.clone())) + + (op0_limb_19_col57.clone() * op1_limb_13_col80.clone())) + + (op0_limb_20_col58.clone() * op1_limb_12_col79.clone())) + + (op0_limb_21_col59.clone() * op1_limb_11_col78.clone())) + + (op0_limb_22_col60.clone() * op1_limb_10_col77.clone())) + + (op0_limb_23_col61.clone() * op1_limb_9_col76.clone())) + + (op0_limb_24_col62.clone() * op1_limb_8_col75.clone())) + + (op0_limb_25_col63.clone() * op1_limb_7_col74.clone())) + + (op0_limb_26_col64.clone() * op1_limb_6_col73.clone())) + + (op0_limb_27_col65.clone() * op1_limb_5_col72.clone())); + let conv_tmp_1576 = ((((((((((((((((((((((M31_0.clone() + + (op0_limb_6_col44.clone() * op1_limb_27_col94.clone())) + + (op0_limb_7_col45.clone() * op1_limb_26_col93.clone())) + + (op0_limb_8_col46.clone() * op1_limb_25_col92.clone())) + + (op0_limb_9_col47.clone() * op1_limb_24_col91.clone())) + + (op0_limb_10_col48.clone() * op1_limb_23_col90.clone())) + + (op0_limb_11_col49.clone() * op1_limb_22_col89.clone())) + + (op0_limb_12_col50.clone() * op1_limb_21_col88.clone())) + + (op0_limb_13_col51.clone() * op1_limb_20_col87.clone())) + + (op0_limb_14_col52.clone() * op1_limb_19_col86.clone())) + + (op0_limb_15_col53.clone() * op1_limb_18_col85.clone())) + + (op0_limb_16_col54.clone() * op1_limb_17_col84.clone())) + + (op0_limb_17_col55.clone() * op1_limb_16_col83.clone())) + + (op0_limb_18_col56.clone() * op1_limb_15_col82.clone())) + + (op0_limb_19_col57.clone() * op1_limb_14_col81.clone())) + + (op0_limb_20_col58.clone() * op1_limb_13_col80.clone())) + + (op0_limb_21_col59.clone() * op1_limb_12_col79.clone())) + + (op0_limb_22_col60.clone() * op1_limb_11_col78.clone())) + + (op0_limb_23_col61.clone() * op1_limb_10_col77.clone())) + + (op0_limb_24_col62.clone() * op1_limb_9_col76.clone())) + + (op0_limb_25_col63.clone() * op1_limb_8_col75.clone())) + + (op0_limb_26_col64.clone() * op1_limb_7_col74.clone())) + + (op0_limb_27_col65.clone() * op1_limb_6_col73.clone())); + let conv_tmp_1577 = (((((((((((((((((((((M31_0.clone() + + (op0_limb_7_col45.clone() * op1_limb_27_col94.clone())) + + (op0_limb_8_col46.clone() * op1_limb_26_col93.clone())) + + (op0_limb_9_col47.clone() * op1_limb_25_col92.clone())) + + (op0_limb_10_col48.clone() * op1_limb_24_col91.clone())) + + (op0_limb_11_col49.clone() * op1_limb_23_col90.clone())) + + (op0_limb_12_col50.clone() * op1_limb_22_col89.clone())) + + (op0_limb_13_col51.clone() * op1_limb_21_col88.clone())) + + (op0_limb_14_col52.clone() * op1_limb_20_col87.clone())) + + (op0_limb_15_col53.clone() * op1_limb_19_col86.clone())) + + (op0_limb_16_col54.clone() * op1_limb_18_col85.clone())) + + (op0_limb_17_col55.clone() * op1_limb_17_col84.clone())) + + (op0_limb_18_col56.clone() * op1_limb_16_col83.clone())) + + (op0_limb_19_col57.clone() * op1_limb_15_col82.clone())) + + (op0_limb_20_col58.clone() * op1_limb_14_col81.clone())) + + (op0_limb_21_col59.clone() * op1_limb_13_col80.clone())) + + (op0_limb_22_col60.clone() * op1_limb_12_col79.clone())) + + (op0_limb_23_col61.clone() * op1_limb_11_col78.clone())) + + (op0_limb_24_col62.clone() * op1_limb_10_col77.clone())) + + (op0_limb_25_col63.clone() * op1_limb_9_col76.clone())) + + (op0_limb_26_col64.clone() * op1_limb_8_col75.clone())) + + (op0_limb_27_col65.clone() * op1_limb_7_col74.clone())); + let conv_tmp_1578 = ((((((((((((((((((((M31_0.clone() + + (op0_limb_8_col46.clone() * op1_limb_27_col94.clone())) + + (op0_limb_9_col47.clone() * op1_limb_26_col93.clone())) + + (op0_limb_10_col48.clone() * op1_limb_25_col92.clone())) + + (op0_limb_11_col49.clone() * op1_limb_24_col91.clone())) + + (op0_limb_12_col50.clone() * op1_limb_23_col90.clone())) + + (op0_limb_13_col51.clone() * op1_limb_22_col89.clone())) + + (op0_limb_14_col52.clone() * op1_limb_21_col88.clone())) + + (op0_limb_15_col53.clone() * op1_limb_20_col87.clone())) + + (op0_limb_16_col54.clone() * op1_limb_19_col86.clone())) + + (op0_limb_17_col55.clone() * op1_limb_18_col85.clone())) + + (op0_limb_18_col56.clone() * op1_limb_17_col84.clone())) + + (op0_limb_19_col57.clone() * op1_limb_16_col83.clone())) + + (op0_limb_20_col58.clone() * op1_limb_15_col82.clone())) + + (op0_limb_21_col59.clone() * op1_limb_14_col81.clone())) + + (op0_limb_22_col60.clone() * op1_limb_13_col80.clone())) + + (op0_limb_23_col61.clone() * op1_limb_12_col79.clone())) + + (op0_limb_24_col62.clone() * op1_limb_11_col78.clone())) + + (op0_limb_25_col63.clone() * op1_limb_10_col77.clone())) + + (op0_limb_26_col64.clone() * op1_limb_9_col76.clone())) + + (op0_limb_27_col65.clone() * op1_limb_8_col75.clone())); + let conv_tmp_1579 = (((((((((((((((((((M31_0.clone() + + (op0_limb_9_col47.clone() * op1_limb_27_col94.clone())) + + (op0_limb_10_col48.clone() * op1_limb_26_col93.clone())) + + (op0_limb_11_col49.clone() * op1_limb_25_col92.clone())) + + (op0_limb_12_col50.clone() * op1_limb_24_col91.clone())) + + (op0_limb_13_col51.clone() * op1_limb_23_col90.clone())) + + (op0_limb_14_col52.clone() * op1_limb_22_col89.clone())) + + (op0_limb_15_col53.clone() * op1_limb_21_col88.clone())) + + (op0_limb_16_col54.clone() * op1_limb_20_col87.clone())) + + (op0_limb_17_col55.clone() * op1_limb_19_col86.clone())) + + (op0_limb_18_col56.clone() * op1_limb_18_col85.clone())) + + (op0_limb_19_col57.clone() * op1_limb_17_col84.clone())) + + (op0_limb_20_col58.clone() * op1_limb_16_col83.clone())) + + (op0_limb_21_col59.clone() * op1_limb_15_col82.clone())) + + (op0_limb_22_col60.clone() * op1_limb_14_col81.clone())) + + (op0_limb_23_col61.clone() * op1_limb_13_col80.clone())) + + (op0_limb_24_col62.clone() * op1_limb_12_col79.clone())) + + (op0_limb_25_col63.clone() * op1_limb_11_col78.clone())) + + (op0_limb_26_col64.clone() * op1_limb_10_col77.clone())) + + (op0_limb_27_col65.clone() * op1_limb_9_col76.clone())); + let conv_tmp_1580 = ((((((((((((((((((M31_0.clone() + + (op0_limb_10_col48.clone() * op1_limb_27_col94.clone())) + + (op0_limb_11_col49.clone() * op1_limb_26_col93.clone())) + + (op0_limb_12_col50.clone() * op1_limb_25_col92.clone())) + + (op0_limb_13_col51.clone() * op1_limb_24_col91.clone())) + + (op0_limb_14_col52.clone() * op1_limb_23_col90.clone())) + + (op0_limb_15_col53.clone() * op1_limb_22_col89.clone())) + + (op0_limb_16_col54.clone() * op1_limb_21_col88.clone())) + + (op0_limb_17_col55.clone() * op1_limb_20_col87.clone())) + + (op0_limb_18_col56.clone() * op1_limb_19_col86.clone())) + + (op0_limb_19_col57.clone() * op1_limb_18_col85.clone())) + + (op0_limb_20_col58.clone() * op1_limb_17_col84.clone())) + + (op0_limb_21_col59.clone() * op1_limb_16_col83.clone())) + + (op0_limb_22_col60.clone() * op1_limb_15_col82.clone())) + + (op0_limb_23_col61.clone() * op1_limb_14_col81.clone())) + + (op0_limb_24_col62.clone() * op1_limb_13_col80.clone())) + + (op0_limb_25_col63.clone() * op1_limb_12_col79.clone())) + + (op0_limb_26_col64.clone() * op1_limb_11_col78.clone())) + + (op0_limb_27_col65.clone() * op1_limb_10_col77.clone())); + let conv_tmp_1581 = (((((((((((((((((M31_0.clone() + + (op0_limb_11_col49.clone() * op1_limb_27_col94.clone())) + + (op0_limb_12_col50.clone() * op1_limb_26_col93.clone())) + + (op0_limb_13_col51.clone() * op1_limb_25_col92.clone())) + + (op0_limb_14_col52.clone() * op1_limb_24_col91.clone())) + + (op0_limb_15_col53.clone() * op1_limb_23_col90.clone())) + + (op0_limb_16_col54.clone() * op1_limb_22_col89.clone())) + + (op0_limb_17_col55.clone() * op1_limb_21_col88.clone())) + + (op0_limb_18_col56.clone() * op1_limb_20_col87.clone())) + + (op0_limb_19_col57.clone() * op1_limb_19_col86.clone())) + + (op0_limb_20_col58.clone() * op1_limb_18_col85.clone())) + + (op0_limb_21_col59.clone() * op1_limb_17_col84.clone())) + + (op0_limb_22_col60.clone() * op1_limb_16_col83.clone())) + + (op0_limb_23_col61.clone() * op1_limb_15_col82.clone())) + + (op0_limb_24_col62.clone() * op1_limb_14_col81.clone())) + + (op0_limb_25_col63.clone() * op1_limb_13_col80.clone())) + + (op0_limb_26_col64.clone() * op1_limb_12_col79.clone())) + + (op0_limb_27_col65.clone() * op1_limb_11_col78.clone())); + let conv_tmp_1582 = ((((((((((((((((M31_0.clone() + + (op0_limb_12_col50.clone() * op1_limb_27_col94.clone())) + + (op0_limb_13_col51.clone() * op1_limb_26_col93.clone())) + + (op0_limb_14_col52.clone() * op1_limb_25_col92.clone())) + + (op0_limb_15_col53.clone() * op1_limb_24_col91.clone())) + + (op0_limb_16_col54.clone() * op1_limb_23_col90.clone())) + + (op0_limb_17_col55.clone() * op1_limb_22_col89.clone())) + + (op0_limb_18_col56.clone() * op1_limb_21_col88.clone())) + + (op0_limb_19_col57.clone() * op1_limb_20_col87.clone())) + + (op0_limb_20_col58.clone() * op1_limb_19_col86.clone())) + + (op0_limb_21_col59.clone() * op1_limb_18_col85.clone())) + + (op0_limb_22_col60.clone() * op1_limb_17_col84.clone())) + + (op0_limb_23_col61.clone() * op1_limb_16_col83.clone())) + + (op0_limb_24_col62.clone() * op1_limb_15_col82.clone())) + + (op0_limb_25_col63.clone() * op1_limb_14_col81.clone())) + + (op0_limb_26_col64.clone() * op1_limb_13_col80.clone())) + + (op0_limb_27_col65.clone() * op1_limb_12_col79.clone())); + let conv_tmp_1583 = (((((((((((((((M31_0.clone() + + (op0_limb_13_col51.clone() * op1_limb_27_col94.clone())) + + (op0_limb_14_col52.clone() * op1_limb_26_col93.clone())) + + (op0_limb_15_col53.clone() * op1_limb_25_col92.clone())) + + (op0_limb_16_col54.clone() * op1_limb_24_col91.clone())) + + (op0_limb_17_col55.clone() * op1_limb_23_col90.clone())) + + (op0_limb_18_col56.clone() * op1_limb_22_col89.clone())) + + (op0_limb_19_col57.clone() * op1_limb_21_col88.clone())) + + (op0_limb_20_col58.clone() * op1_limb_20_col87.clone())) + + (op0_limb_21_col59.clone() * op1_limb_19_col86.clone())) + + (op0_limb_22_col60.clone() * op1_limb_18_col85.clone())) + + (op0_limb_23_col61.clone() * op1_limb_17_col84.clone())) + + (op0_limb_24_col62.clone() * op1_limb_16_col83.clone())) + + (op0_limb_25_col63.clone() * op1_limb_15_col82.clone())) + + (op0_limb_26_col64.clone() * op1_limb_14_col81.clone())) + + (op0_limb_27_col65.clone() * op1_limb_13_col80.clone())); + let conv_tmp_1584 = ((((((((((((((M31_0.clone() + + (op0_limb_14_col52.clone() * op1_limb_27_col94.clone())) + + (op0_limb_15_col53.clone() * op1_limb_26_col93.clone())) + + (op0_limb_16_col54.clone() * op1_limb_25_col92.clone())) + + (op0_limb_17_col55.clone() * op1_limb_24_col91.clone())) + + (op0_limb_18_col56.clone() * op1_limb_23_col90.clone())) + + (op0_limb_19_col57.clone() * op1_limb_22_col89.clone())) + + (op0_limb_20_col58.clone() * op1_limb_21_col88.clone())) + + (op0_limb_21_col59.clone() * op1_limb_20_col87.clone())) + + (op0_limb_22_col60.clone() * op1_limb_19_col86.clone())) + + (op0_limb_23_col61.clone() * op1_limb_18_col85.clone())) + + (op0_limb_24_col62.clone() * op1_limb_17_col84.clone())) + + (op0_limb_25_col63.clone() * op1_limb_16_col83.clone())) + + (op0_limb_26_col64.clone() * op1_limb_15_col82.clone())) + + (op0_limb_27_col65.clone() * op1_limb_14_col81.clone())); + let conv_tmp_1585 = (((((((((((((M31_0.clone() + + (op0_limb_15_col53.clone() * op1_limb_27_col94.clone())) + + (op0_limb_16_col54.clone() * op1_limb_26_col93.clone())) + + (op0_limb_17_col55.clone() * op1_limb_25_col92.clone())) + + (op0_limb_18_col56.clone() * op1_limb_24_col91.clone())) + + (op0_limb_19_col57.clone() * op1_limb_23_col90.clone())) + + (op0_limb_20_col58.clone() * op1_limb_22_col89.clone())) + + (op0_limb_21_col59.clone() * op1_limb_21_col88.clone())) + + (op0_limb_22_col60.clone() * op1_limb_20_col87.clone())) + + (op0_limb_23_col61.clone() * op1_limb_19_col86.clone())) + + (op0_limb_24_col62.clone() * op1_limb_18_col85.clone())) + + (op0_limb_25_col63.clone() * op1_limb_17_col84.clone())) + + (op0_limb_26_col64.clone() * op1_limb_16_col83.clone())) + + (op0_limb_27_col65.clone() * op1_limb_15_col82.clone())); + let conv_tmp_1586 = ((((((((((((M31_0.clone() + + (op0_limb_16_col54.clone() * op1_limb_27_col94.clone())) + + (op0_limb_17_col55.clone() * op1_limb_26_col93.clone())) + + (op0_limb_18_col56.clone() * op1_limb_25_col92.clone())) + + (op0_limb_19_col57.clone() * op1_limb_24_col91.clone())) + + (op0_limb_20_col58.clone() * op1_limb_23_col90.clone())) + + (op0_limb_21_col59.clone() * op1_limb_22_col89.clone())) + + (op0_limb_22_col60.clone() * op1_limb_21_col88.clone())) + + (op0_limb_23_col61.clone() * op1_limb_20_col87.clone())) + + (op0_limb_24_col62.clone() * op1_limb_19_col86.clone())) + + (op0_limb_25_col63.clone() * op1_limb_18_col85.clone())) + + (op0_limb_26_col64.clone() * op1_limb_17_col84.clone())) + + (op0_limb_27_col65.clone() * op1_limb_16_col83.clone())); + let conv_tmp_1587 = (((((((((((M31_0.clone() + + (op0_limb_17_col55.clone() * op1_limb_27_col94.clone())) + + (op0_limb_18_col56.clone() * op1_limb_26_col93.clone())) + + (op0_limb_19_col57.clone() * op1_limb_25_col92.clone())) + + (op0_limb_20_col58.clone() * op1_limb_24_col91.clone())) + + (op0_limb_21_col59.clone() * op1_limb_23_col90.clone())) + + (op0_limb_22_col60.clone() * op1_limb_22_col89.clone())) + + (op0_limb_23_col61.clone() * op1_limb_21_col88.clone())) + + (op0_limb_24_col62.clone() * op1_limb_20_col87.clone())) + + (op0_limb_25_col63.clone() * op1_limb_19_col86.clone())) + + (op0_limb_26_col64.clone() * op1_limb_18_col85.clone())) + + (op0_limb_27_col65.clone() * op1_limb_17_col84.clone())); + let conv_tmp_1588 = ((((((((((M31_0.clone() + + (op0_limb_18_col56.clone() * op1_limb_27_col94.clone())) + + (op0_limb_19_col57.clone() * op1_limb_26_col93.clone())) + + (op0_limb_20_col58.clone() * op1_limb_25_col92.clone())) + + (op0_limb_21_col59.clone() * op1_limb_24_col91.clone())) + + (op0_limb_22_col60.clone() * op1_limb_23_col90.clone())) + + (op0_limb_23_col61.clone() * op1_limb_22_col89.clone())) + + (op0_limb_24_col62.clone() * op1_limb_21_col88.clone())) + + (op0_limb_25_col63.clone() * op1_limb_20_col87.clone())) + + (op0_limb_26_col64.clone() * op1_limb_19_col86.clone())) + + (op0_limb_27_col65.clone() * op1_limb_18_col85.clone())); + let conv_tmp_1589 = (((((((((M31_0.clone() + + (op0_limb_19_col57.clone() * op1_limb_27_col94.clone())) + + (op0_limb_20_col58.clone() * op1_limb_26_col93.clone())) + + (op0_limb_21_col59.clone() * op1_limb_25_col92.clone())) + + (op0_limb_22_col60.clone() * op1_limb_24_col91.clone())) + + (op0_limb_23_col61.clone() * op1_limb_23_col90.clone())) + + (op0_limb_24_col62.clone() * op1_limb_22_col89.clone())) + + (op0_limb_25_col63.clone() * op1_limb_21_col88.clone())) + + (op0_limb_26_col64.clone() * op1_limb_20_col87.clone())) + + (op0_limb_27_col65.clone() * op1_limb_19_col86.clone())); + let conv_tmp_1590 = ((((((((M31_0.clone() + + (op0_limb_20_col58.clone() * op1_limb_27_col94.clone())) + + (op0_limb_21_col59.clone() * op1_limb_26_col93.clone())) + + (op0_limb_22_col60.clone() * op1_limb_25_col92.clone())) + + (op0_limb_23_col61.clone() * op1_limb_24_col91.clone())) + + (op0_limb_24_col62.clone() * op1_limb_23_col90.clone())) + + (op0_limb_25_col63.clone() * op1_limb_22_col89.clone())) + + (op0_limb_26_col64.clone() * op1_limb_21_col88.clone())) + + (op0_limb_27_col65.clone() * op1_limb_20_col87.clone())); + let conv_tmp_1591 = (((((((M31_0.clone() + + (op0_limb_21_col59.clone() * op1_limb_27_col94.clone())) + + (op0_limb_22_col60.clone() * op1_limb_26_col93.clone())) + + (op0_limb_23_col61.clone() * op1_limb_25_col92.clone())) + + (op0_limb_24_col62.clone() * op1_limb_24_col91.clone())) + + (op0_limb_25_col63.clone() * op1_limb_23_col90.clone())) + + (op0_limb_26_col64.clone() * op1_limb_22_col89.clone())) + + (op0_limb_27_col65.clone() * op1_limb_21_col88.clone())); + let conv_tmp_1592 = ((((((M31_0.clone() + + (op0_limb_22_col60.clone() * op1_limb_27_col94.clone())) + + (op0_limb_23_col61.clone() * op1_limb_26_col93.clone())) + + (op0_limb_24_col62.clone() * op1_limb_25_col92.clone())) + + (op0_limb_25_col63.clone() * op1_limb_24_col91.clone())) + + (op0_limb_26_col64.clone() * op1_limb_23_col90.clone())) + + (op0_limb_27_col65.clone() * op1_limb_22_col89.clone())); + let conv_tmp_1593 = (((((M31_0.clone() + + (op0_limb_23_col61.clone() * op1_limb_27_col94.clone())) + + (op0_limb_24_col62.clone() * op1_limb_26_col93.clone())) + + (op0_limb_25_col63.clone() * op1_limb_25_col92.clone())) + + (op0_limb_26_col64.clone() * op1_limb_24_col91.clone())) + + (op0_limb_27_col65.clone() * op1_limb_23_col90.clone())); + let conv_tmp_1594 = ((((M31_0.clone() + + (op0_limb_24_col62.clone() * op1_limb_27_col94.clone())) + + (op0_limb_25_col63.clone() * op1_limb_26_col93.clone())) + + (op0_limb_26_col64.clone() * op1_limb_25_col92.clone())) + + (op0_limb_27_col65.clone() * op1_limb_24_col91.clone())); + let conv_tmp_1595 = (((M31_0.clone() + + (op0_limb_25_col63.clone() * op1_limb_27_col94.clone())) + + (op0_limb_26_col64.clone() * op1_limb_26_col93.clone())) + + (op0_limb_27_col65.clone() * op1_limb_25_col92.clone())); + let conv_tmp_1596 = ((M31_0.clone() + + (op0_limb_26_col64.clone() * op1_limb_27_col94.clone())) + + (op0_limb_27_col65.clone() * op1_limb_26_col93.clone())); + let conv_tmp_1597 = + (M31_0.clone() + (op0_limb_27_col65.clone() * op1_limb_27_col94.clone())); + let conv_mod_tmp_1598 = (((M31_0.clone() + (M31_32.clone() * conv_tmp_1543.clone())) + - (M31_4.clone() * conv_tmp_1564.clone())) + + (M31_8.clone() * conv_tmp_1592.clone())); + let conv_mod_tmp_1599 = ((((M31_0.clone() + (M31_1.clone() * conv_tmp_1543.clone())) + + (M31_32.clone() * conv_tmp_1544.clone())) + - (M31_4.clone() * conv_tmp_1565.clone())) + + (M31_8.clone() * conv_tmp_1593.clone())); + let conv_mod_tmp_1600 = ((((M31_0.clone() + (M31_1.clone() * conv_tmp_1544.clone())) + + (M31_32.clone() * conv_tmp_1545.clone())) + - (M31_4.clone() * conv_tmp_1566.clone())) + + (M31_8.clone() * conv_tmp_1594.clone())); + let conv_mod_tmp_1601 = ((((M31_0.clone() + (M31_1.clone() * conv_tmp_1545.clone())) + + (M31_32.clone() * conv_tmp_1546.clone())) + - (M31_4.clone() * conv_tmp_1567.clone())) + + (M31_8.clone() * conv_tmp_1595.clone())); + let conv_mod_tmp_1602 = ((((M31_0.clone() + (M31_1.clone() * conv_tmp_1546.clone())) + + (M31_32.clone() * conv_tmp_1547.clone())) + - (M31_4.clone() * conv_tmp_1568.clone())) + + (M31_8.clone() * conv_tmp_1596.clone())); + let conv_mod_tmp_1603 = ((((M31_0.clone() + (M31_1.clone() * conv_tmp_1547.clone())) + + (M31_32.clone() * conv_tmp_1548.clone())) + - (M31_4.clone() * conv_tmp_1569.clone())) + + (M31_8.clone() * conv_tmp_1597.clone())); + let conv_mod_tmp_1604 = (((M31_0.clone() + (M31_1.clone() * conv_tmp_1548.clone())) + + (M31_32.clone() * conv_tmp_1549.clone())) + - (M31_4.clone() * conv_tmp_1570.clone())); + let conv_mod_tmp_1605 = ((((M31_0.clone() + (M31_2.clone() * conv_tmp_1543.clone())) + + (M31_1.clone() * conv_tmp_1549.clone())) + + (M31_32.clone() * conv_tmp_1550.clone())) + - (M31_4.clone() * conv_tmp_1571.clone())); + let conv_mod_tmp_1606 = ((((M31_0.clone() + (M31_2.clone() * conv_tmp_1544.clone())) + + (M31_1.clone() * conv_tmp_1550.clone())) + + (M31_32.clone() * conv_tmp_1551.clone())) + - (M31_4.clone() * conv_tmp_1572.clone())); + let conv_mod_tmp_1607 = ((((M31_0.clone() + (M31_2.clone() * conv_tmp_1545.clone())) + + (M31_1.clone() * conv_tmp_1551.clone())) + + (M31_32.clone() * conv_tmp_1552.clone())) + - (M31_4.clone() * conv_tmp_1573.clone())); + let conv_mod_tmp_1608 = ((((M31_0.clone() + (M31_2.clone() * conv_tmp_1546.clone())) + + (M31_1.clone() * conv_tmp_1552.clone())) + + (M31_32.clone() * conv_tmp_1553.clone())) + - (M31_4.clone() * conv_tmp_1574.clone())); + let conv_mod_tmp_1609 = ((((M31_0.clone() + (M31_2.clone() * conv_tmp_1547.clone())) + + (M31_1.clone() * conv_tmp_1553.clone())) + + (M31_32.clone() * conv_tmp_1554.clone())) + - (M31_4.clone() * conv_tmp_1575.clone())); + let conv_mod_tmp_1610 = ((((M31_0.clone() + (M31_2.clone() * conv_tmp_1548.clone())) + + (M31_1.clone() * conv_tmp_1554.clone())) + + (M31_32.clone() * conv_tmp_1555.clone())) + - (M31_4.clone() * conv_tmp_1576.clone())); + let conv_mod_tmp_1611 = ((((M31_0.clone() + (M31_2.clone() * conv_tmp_1549.clone())) + + (M31_1.clone() * conv_tmp_1555.clone())) + + (M31_32.clone() * conv_tmp_1556.clone())) + - (M31_4.clone() * conv_tmp_1577.clone())); + let conv_mod_tmp_1612 = ((((M31_0.clone() + (M31_2.clone() * conv_tmp_1550.clone())) + + (M31_1.clone() * conv_tmp_1556.clone())) + + (M31_32.clone() * conv_tmp_1557.clone())) + - (M31_4.clone() * conv_tmp_1578.clone())); + let conv_mod_tmp_1613 = ((((M31_0.clone() + (M31_2.clone() * conv_tmp_1551.clone())) + + (M31_1.clone() * conv_tmp_1557.clone())) + + (M31_32.clone() * conv_tmp_1558.clone())) + - (M31_4.clone() * conv_tmp_1579.clone())); + let conv_mod_tmp_1614 = ((((M31_0.clone() + (M31_2.clone() * conv_tmp_1552.clone())) + + (M31_1.clone() * conv_tmp_1558.clone())) + + (M31_32.clone() * conv_tmp_1559.clone())) + - (M31_4.clone() * conv_tmp_1580.clone())); + let conv_mod_tmp_1615 = ((((M31_0.clone() + (M31_2.clone() * conv_tmp_1553.clone())) + + (M31_1.clone() * conv_tmp_1559.clone())) + + (M31_32.clone() * conv_tmp_1560.clone())) + - (M31_4.clone() * conv_tmp_1581.clone())); + let conv_mod_tmp_1616 = ((((M31_0.clone() + (M31_2.clone() * conv_tmp_1554.clone())) + + (M31_1.clone() * conv_tmp_1560.clone())) + + (M31_32.clone() * conv_tmp_1561.clone())) + - (M31_4.clone() * conv_tmp_1582.clone())); + let conv_mod_tmp_1617 = ((((M31_0.clone() + (M31_2.clone() * conv_tmp_1555.clone())) + + (M31_1.clone() * conv_tmp_1561.clone())) + + (M31_32.clone() * conv_tmp_1562.clone())) + - (M31_4.clone() * conv_tmp_1583.clone())); + let conv_mod_tmp_1618 = ((((M31_0.clone() + (M31_2.clone() * conv_tmp_1556.clone())) + + (M31_1.clone() * conv_tmp_1562.clone())) + + (M31_32.clone() * conv_tmp_1563.clone())) + - (M31_4.clone() * conv_tmp_1584.clone())); + let conv_mod_tmp_1619 = ((((M31_0.clone() + (M31_2.clone() * conv_tmp_1557.clone())) + + (M31_1.clone() * conv_tmp_1563.clone())) + - (M31_4.clone() * conv_tmp_1585.clone())) + + (M31_64.clone() * conv_tmp_1592.clone())); + let conv_mod_tmp_1620 = ((((M31_0.clone() + (M31_2.clone() * conv_tmp_1558.clone())) + - (M31_4.clone() * conv_tmp_1586.clone())) + + (M31_2.clone() * conv_tmp_1592.clone())) + + (M31_64.clone() * conv_tmp_1593.clone())); + let conv_mod_tmp_1621 = ((((M31_0.clone() + (M31_2.clone() * conv_tmp_1559.clone())) + - (M31_4.clone() * conv_tmp_1587.clone())) + + (M31_2.clone() * conv_tmp_1593.clone())) + + (M31_64.clone() * conv_tmp_1594.clone())); + let conv_mod_tmp_1622 = ((((M31_0.clone() + (M31_2.clone() * conv_tmp_1560.clone())) + - (M31_4.clone() * conv_tmp_1588.clone())) + + (M31_2.clone() * conv_tmp_1594.clone())) + + (M31_64.clone() * conv_tmp_1595.clone())); + let conv_mod_tmp_1623 = ((((M31_0.clone() + (M31_2.clone() * conv_tmp_1561.clone())) + - (M31_4.clone() * conv_tmp_1589.clone())) + + (M31_2.clone() * conv_tmp_1595.clone())) + + (M31_64.clone() * conv_tmp_1596.clone())); + let conv_mod_tmp_1624 = ((((M31_0.clone() + (M31_2.clone() * conv_tmp_1562.clone())) + - (M31_4.clone() * conv_tmp_1590.clone())) + + (M31_2.clone() * conv_tmp_1596.clone())) + + (M31_64.clone() * conv_tmp_1597.clone())); + let conv_mod_tmp_1625 = (((M31_0.clone() + (M31_2.clone() * conv_tmp_1563.clone())) + - (M31_4.clone() * conv_tmp_1591.clone())) + + (M31_2.clone() * conv_tmp_1597.clone())); + eval.add_to_relation(&[RelationEntry::new( + &self.rangecheck_19_lookup_elements, + E::EF::one(), + &[(k_col95.clone() + M31_262144.clone())], + )]); + + eval.add_constraint( + ((carry_0_col96.clone() * M31_512.clone()) + - ((conv_mod_tmp_1598.clone() - (M31_1.clone() * k_col95.clone())) + + M31_0.clone())), + ); + eval.add_to_relation(&[RelationEntry::new( + &self.rangecheck_19_lookup_elements, + E::EF::one(), + &[(carry_0_col96.clone() + M31_131072.clone())], + )]); + + eval.add_constraint( + ((carry_1_col97.clone() * M31_512.clone()) + - (conv_mod_tmp_1599.clone() + carry_0_col96.clone())), + ); + eval.add_to_relation(&[RelationEntry::new( + &self.rangecheck_19_lookup_elements, + E::EF::one(), + &[(carry_1_col97.clone() + M31_131072.clone())], + )]); + + eval.add_constraint( + ((carry_2_col98.clone() * M31_512.clone()) + - (conv_mod_tmp_1600.clone() + carry_1_col97.clone())), + ); + eval.add_to_relation(&[RelationEntry::new( + &self.rangecheck_19_lookup_elements, + E::EF::one(), + &[(carry_2_col98.clone() + M31_131072.clone())], + )]); + + eval.add_constraint( + ((carry_3_col99.clone() * M31_512.clone()) + - (conv_mod_tmp_1601.clone() + carry_2_col98.clone())), + ); + eval.add_to_relation(&[RelationEntry::new( + &self.rangecheck_19_lookup_elements, + E::EF::one(), + &[(carry_3_col99.clone() + M31_131072.clone())], + )]); + + eval.add_constraint( + ((carry_4_col100.clone() * M31_512.clone()) + - (conv_mod_tmp_1602.clone() + carry_3_col99.clone())), + ); + eval.add_to_relation(&[RelationEntry::new( + &self.rangecheck_19_lookup_elements, + E::EF::one(), + &[(carry_4_col100.clone() + M31_131072.clone())], + )]); + + eval.add_constraint( + ((carry_5_col101.clone() * M31_512.clone()) + - (conv_mod_tmp_1603.clone() + carry_4_col100.clone())), + ); + eval.add_to_relation(&[RelationEntry::new( + &self.rangecheck_19_lookup_elements, + E::EF::one(), + &[(carry_5_col101.clone() + M31_131072.clone())], + )]); + + eval.add_constraint( + ((carry_6_col102.clone() * M31_512.clone()) + - (conv_mod_tmp_1604.clone() + carry_5_col101.clone())), + ); + eval.add_to_relation(&[RelationEntry::new( + &self.rangecheck_19_lookup_elements, + E::EF::one(), + &[(carry_6_col102.clone() + M31_131072.clone())], + )]); + + eval.add_constraint( + ((carry_7_col103.clone() * M31_512.clone()) + - (conv_mod_tmp_1605.clone() + carry_6_col102.clone())), + ); + eval.add_to_relation(&[RelationEntry::new( + &self.rangecheck_19_lookup_elements, + E::EF::one(), + &[(carry_7_col103.clone() + M31_131072.clone())], + )]); + + eval.add_constraint( + ((carry_8_col104.clone() * M31_512.clone()) + - (conv_mod_tmp_1606.clone() + carry_7_col103.clone())), + ); + eval.add_to_relation(&[RelationEntry::new( + &self.rangecheck_19_lookup_elements, + E::EF::one(), + &[(carry_8_col104.clone() + M31_131072.clone())], + )]); + + eval.add_constraint( + ((carry_9_col105.clone() * M31_512.clone()) + - (conv_mod_tmp_1607.clone() + carry_8_col104.clone())), + ); + eval.add_to_relation(&[RelationEntry::new( + &self.rangecheck_19_lookup_elements, + E::EF::one(), + &[(carry_9_col105.clone() + M31_131072.clone())], + )]); + + eval.add_constraint( + ((carry_10_col106.clone() * M31_512.clone()) + - (conv_mod_tmp_1608.clone() + carry_9_col105.clone())), + ); + eval.add_to_relation(&[RelationEntry::new( + &self.rangecheck_19_lookup_elements, + E::EF::one(), + &[(carry_10_col106.clone() + M31_131072.clone())], + )]); + + eval.add_constraint( + ((carry_11_col107.clone() * M31_512.clone()) + - (conv_mod_tmp_1609.clone() + carry_10_col106.clone())), + ); + eval.add_to_relation(&[RelationEntry::new( + &self.rangecheck_19_lookup_elements, + E::EF::one(), + &[(carry_11_col107.clone() + M31_131072.clone())], + )]); + + eval.add_constraint( + ((carry_12_col108.clone() * M31_512.clone()) + - (conv_mod_tmp_1610.clone() + carry_11_col107.clone())), + ); + eval.add_to_relation(&[RelationEntry::new( + &self.rangecheck_19_lookup_elements, + E::EF::one(), + &[(carry_12_col108.clone() + M31_131072.clone())], + )]); + + eval.add_constraint( + ((carry_13_col109.clone() * M31_512.clone()) + - (conv_mod_tmp_1611.clone() + carry_12_col108.clone())), + ); + eval.add_to_relation(&[RelationEntry::new( + &self.rangecheck_19_lookup_elements, + E::EF::one(), + &[(carry_13_col109.clone() + M31_131072.clone())], + )]); + + eval.add_constraint( + ((carry_14_col110.clone() * M31_512.clone()) + - (conv_mod_tmp_1612.clone() + carry_13_col109.clone())), + ); + eval.add_to_relation(&[RelationEntry::new( + &self.rangecheck_19_lookup_elements, + E::EF::one(), + &[(carry_14_col110.clone() + M31_131072.clone())], + )]); + + eval.add_constraint( + ((carry_15_col111.clone() * M31_512.clone()) + - (conv_mod_tmp_1613.clone() + carry_14_col110.clone())), + ); + eval.add_to_relation(&[RelationEntry::new( + &self.rangecheck_19_lookup_elements, + E::EF::one(), + &[(carry_15_col111.clone() + M31_131072.clone())], + )]); + + eval.add_constraint( + ((carry_16_col112.clone() * M31_512.clone()) + - (conv_mod_tmp_1614.clone() + carry_15_col111.clone())), + ); + eval.add_to_relation(&[RelationEntry::new( + &self.rangecheck_19_lookup_elements, + E::EF::one(), + &[(carry_16_col112.clone() + M31_131072.clone())], + )]); + + eval.add_constraint( + ((carry_17_col113.clone() * M31_512.clone()) + - (conv_mod_tmp_1615.clone() + carry_16_col112.clone())), + ); + eval.add_to_relation(&[RelationEntry::new( + &self.rangecheck_19_lookup_elements, + E::EF::one(), + &[(carry_17_col113.clone() + M31_131072.clone())], + )]); + + eval.add_constraint( + ((carry_18_col114.clone() * M31_512.clone()) + - (conv_mod_tmp_1616.clone() + carry_17_col113.clone())), + ); + eval.add_to_relation(&[RelationEntry::new( + &self.rangecheck_19_lookup_elements, + E::EF::one(), + &[(carry_18_col114.clone() + M31_131072.clone())], + )]); + + eval.add_constraint( + ((carry_19_col115.clone() * M31_512.clone()) + - (conv_mod_tmp_1617.clone() + carry_18_col114.clone())), + ); + eval.add_to_relation(&[RelationEntry::new( + &self.rangecheck_19_lookup_elements, + E::EF::one(), + &[(carry_19_col115.clone() + M31_131072.clone())], + )]); + + eval.add_constraint( + ((carry_20_col116.clone() * M31_512.clone()) + - (conv_mod_tmp_1618.clone() + carry_19_col115.clone())), + ); + eval.add_to_relation(&[RelationEntry::new( + &self.rangecheck_19_lookup_elements, + E::EF::one(), + &[(carry_20_col116.clone() + M31_131072.clone())], + )]); + + eval.add_constraint( + ((carry_21_col117.clone() * M31_512.clone()) + - ((conv_mod_tmp_1619.clone() - (M31_136.clone() * k_col95.clone())) + + carry_20_col116.clone())), + ); + eval.add_to_relation(&[RelationEntry::new( + &self.rangecheck_19_lookup_elements, + E::EF::one(), + &[(carry_21_col117.clone() + M31_131072.clone())], + )]); + + eval.add_constraint( + ((carry_22_col118.clone() * M31_512.clone()) + - (conv_mod_tmp_1620.clone() + carry_21_col117.clone())), + ); + eval.add_to_relation(&[RelationEntry::new( + &self.rangecheck_19_lookup_elements, + E::EF::one(), + &[(carry_22_col118.clone() + M31_131072.clone())], + )]); + + eval.add_constraint( + ((carry_23_col119.clone() * M31_512.clone()) + - (conv_mod_tmp_1621.clone() + carry_22_col118.clone())), + ); + eval.add_to_relation(&[RelationEntry::new( + &self.rangecheck_19_lookup_elements, + E::EF::one(), + &[(carry_23_col119.clone() + M31_131072.clone())], + )]); + + eval.add_constraint( + ((carry_24_col120.clone() * M31_512.clone()) + - (conv_mod_tmp_1622.clone() + carry_23_col119.clone())), + ); + eval.add_to_relation(&[RelationEntry::new( + &self.rangecheck_19_lookup_elements, + E::EF::one(), + &[(carry_24_col120.clone() + M31_131072.clone())], + )]); + + eval.add_constraint( + ((carry_25_col121.clone() * M31_512.clone()) + - (conv_mod_tmp_1623.clone() + carry_24_col120.clone())), + ); + eval.add_to_relation(&[RelationEntry::new( + &self.rangecheck_19_lookup_elements, + E::EF::one(), + &[(carry_25_col121.clone() + M31_131072.clone())], + )]); + + eval.add_constraint( + ((carry_26_col122.clone() * M31_512.clone()) + - (conv_mod_tmp_1624.clone() + carry_25_col121.clone())), + ); + eval.add_to_relation(&[RelationEntry::new( + &self.rangecheck_19_lookup_elements, + E::EF::one(), + &[(carry_26_col122.clone() + M31_131072.clone())], + )]); + + eval.add_constraint( + ((conv_mod_tmp_1625.clone() - (M31_256.clone() * k_col95.clone())) + + carry_26_col122.clone()), + ); + + eval.add_to_relation(&[RelationEntry::new( + &self.opcodes_lookup_elements, + E::EF::one(), + &[ + input_pc_col0.clone(), + input_ap_col1.clone(), + input_fp_col2.clone(), + ], + )]); + + eval.add_to_relation(&[RelationEntry::new( + &self.opcodes_lookup_elements, + -E::EF::one(), + &[ + (input_pc_col0.clone() + M31_2.clone()), + (input_ap_col1.clone() + ap_update_add_1_col7.clone()), + input_fp_col2.clone(), + ], + )]); + + eval.finalize_logup(); + eval + } +} diff --git a/stwo_cairo_prover/crates/prover/src/components/mul_opcode_is_small_f_is_imm_t/mod.rs b/stwo_cairo_prover/crates/prover/src/components/mul_opcode_is_small_f_is_imm_t/mod.rs new file mode 100644 index 00000000..3f7a8d74 --- /dev/null +++ b/stwo_cairo_prover/crates/prover/src/components/mul_opcode_is_small_f_is_imm_t/mod.rs @@ -0,0 +1,5 @@ +pub mod component; +pub mod prover; + +pub use component::{Claim, Component, Eval, InteractionClaim}; +pub use prover::{ClaimGenerator, InputType, InteractionClaimGenerator}; diff --git a/stwo_cairo_prover/crates/prover/src/components/mul_opcode_is_small_f_is_imm_t/prover.rs b/stwo_cairo_prover/crates/prover/src/components/mul_opcode_is_small_f_is_imm_t/prover.rs new file mode 100644 index 00000000..010e756e --- /dev/null +++ b/stwo_cairo_prover/crates/prover/src/components/mul_opcode_is_small_f_is_imm_t/prover.rs @@ -0,0 +1,2241 @@ +#![allow(unused_parens)] +#![allow(unused_imports)] +use itertools::{chain, zip_eq, Itertools}; +use num_traits::{One, Zero}; +use prover_types::cpu::*; +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::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; +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::pcs::TreeBuilder; +use stwo_prover::core::poly::circle::{CanonicCoset, CircleEvaluation}; +use stwo_prover::core::poly::BitReversedOrder; +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}; +use crate::components::{ + memory_address_to_id, memory_id_to_big, pack_values, range_check_19, verify_instruction, +}; +use crate::relations; + +pub type InputType = CasmState; +pub type PackedInputType = PackedCasmState; +const N_TRACE_COLUMNS: usize = 123; + +#[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>, + 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, + verify_instruction_state: &mut verify_instruction::ClaimGenerator, + ) -> (Claim, InteractionClaimGenerator) { + let n_calls = self.inputs.len(); + assert_ne!(n_calls, 0); + let size = std::cmp::max(n_calls.next_power_of_two(), N_LANES); + let need_padding = n_calls != size; + + if need_padding { + self.inputs.resize(size, *self.inputs.first().unwrap()); + bit_reverse_coset_to_circle_domain_order(&mut self.inputs); + } + + 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(); + } + sub_components_inputs + .range_check_19_inputs + .iter() + .for_each(|inputs| { + range_check_19_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]); + }); + + 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 }, + InteractionClaimGenerator { + n_calls, + lookup_data, + }, + ) + } + + pub fn add_inputs(&mut self, inputs: &[InputType]) { + self.inputs.extend(inputs); + } +} + +pub struct SubComponentInputs { + pub range_check_19_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 { + 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), + ], + 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.range_check_19_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)); + self.verify_instruction_inputs + .iter_mut() + .for_each(|vec| bit_reverse_coset_to_circle_domain_order(vec)); + } +} + +#[allow(clippy::useless_conversion)] +#[allow(unused_variables)] +#[allow(clippy::double_parens)] +#[allow(non_snake_case)] +pub fn write_trace_simd( + inputs: Vec, + 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 = 123; + 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()); + #[allow(unused_mut)] + let mut sub_components_inputs = SubComponentInputs::with_capacity(inputs.len()); + + let M31_0 = PackedM31::broadcast(M31::from(0)); + let M31_1 = PackedM31::broadcast(M31::from(1)); + let M31_131072 = PackedM31::broadcast(M31::from(131072)); + let M31_134217728 = PackedM31::broadcast(M31::from(134217728)); + let M31_136 = PackedM31::broadcast(M31::from(136)); + let M31_2 = PackedM31::broadcast(M31::from(2)); + let M31_262144 = PackedM31::broadcast(M31::from(262144)); + let M31_32 = PackedM31::broadcast(M31::from(32)); + let M31_32768 = PackedM31::broadcast(M31::from(32768)); + let M31_32769 = PackedM31::broadcast(M31::from(32769)); + let M31_4 = PackedM31::broadcast(M31::from(4)); + let M31_4194304 = PackedM31::broadcast(M31::from(4194304)); + let M31_64 = PackedM31::broadcast(M31::from(64)); + let M31_65536 = PackedM31::broadcast(M31::from(65536)); + let M31_8 = PackedM31::broadcast(M31::from(8)); + let UInt16_0 = PackedUInt16::broadcast(UInt16::from(0)); + let UInt16_1 = PackedUInt16::broadcast(UInt16::from(1)); + let UInt16_11 = PackedUInt16::broadcast(UInt16::from(11)); + let UInt16_127 = PackedUInt16::broadcast(UInt16::from(127)); + let UInt16_2 = PackedUInt16::broadcast(UInt16::from(2)); + let UInt16_3 = PackedUInt16::broadcast(UInt16::from(3)); + let UInt16_31 = PackedUInt16::broadcast(UInt16::from(31)); + let UInt16_6 = PackedUInt16::broadcast(UInt16::from(6)); + let UInt16_7 = PackedUInt16::broadcast(UInt16::from(7)); + let UInt16_9 = PackedUInt16::broadcast(UInt16::from(9)); + let UInt32_262143 = PackedUInt32::broadcast(UInt32::from(262143)); + let UInt32_511 = PackedUInt32::broadcast(UInt32::from(511)); + let UInt32_65536 = PackedUInt32::broadcast(UInt32::from(65536)); + let UInt32_9 = PackedUInt32::broadcast(UInt32::from(9)); + + inputs + .into_iter() + .enumerate() + .for_each(|(row_index, mul_opcode_is_small_f_is_imm_t_input)| { + let input_tmp_1528 = mul_opcode_is_small_f_is_imm_t_input; + let input_pc_col0 = input_tmp_1528.pc; + trace[0].data[row_index] = input_pc_col0; + let input_ap_col1 = input_tmp_1528.ap; + trace[1].data[row_index] = input_ap_col1; + let input_fp_col2 = input_tmp_1528.fp; + trace[2].data[row_index] = input_fp_col2; + + // decode_instruction_cea21b812a0ef1a0. + + let memory_address_to_id_value_tmp_1529 = + memory_address_to_id_state.deduce_output(input_pc_col0); + let memory_id_to_big_value_tmp_1530 = + memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_1529); + let offset0_tmp_1531 = + ((PackedUInt16::from_m31(memory_id_to_big_value_tmp_1530.get_m31(0))) + + (((PackedUInt16::from_m31(memory_id_to_big_value_tmp_1530.get_m31(1))) + & (UInt16_127)) + << (UInt16_9))); + let offset0_col3 = offset0_tmp_1531.as_m31(); + trace[3].data[row_index] = offset0_col3; + let offset1_tmp_1532 = + ((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_1530.get_m31(1))) + >> (UInt16_7)) + + ((PackedUInt16::from_m31(memory_id_to_big_value_tmp_1530.get_m31(2))) + << (UInt16_2))) + + (((PackedUInt16::from_m31(memory_id_to_big_value_tmp_1530.get_m31(3))) + & (UInt16_31)) + << (UInt16_11))); + let offset1_col4 = offset1_tmp_1532.as_m31(); + trace[4].data[row_index] = offset1_col4; + let dst_base_fp_tmp_1533 = + (((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_1530.get_m31(5))) + >> (UInt16_3)) + + ((PackedUInt16::from_m31(memory_id_to_big_value_tmp_1530.get_m31(6))) + << (UInt16_6))) + >> (UInt16_0)) + & (UInt16_1)); + let dst_base_fp_col5 = dst_base_fp_tmp_1533.as_m31(); + trace[5].data[row_index] = dst_base_fp_col5; + let op0_base_fp_tmp_1534 = + (((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_1530.get_m31(5))) + >> (UInt16_3)) + + ((PackedUInt16::from_m31(memory_id_to_big_value_tmp_1530.get_m31(6))) + << (UInt16_6))) + >> (UInt16_1)) + & (UInt16_1)); + let op0_base_fp_col6 = op0_base_fp_tmp_1534.as_m31(); + trace[6].data[row_index] = op0_base_fp_col6; + let ap_update_add_1_tmp_1535 = + (((((PackedUInt16::from_m31(memory_id_to_big_value_tmp_1530.get_m31(5))) + >> (UInt16_3)) + + ((PackedUInt16::from_m31(memory_id_to_big_value_tmp_1530.get_m31(6))) + << (UInt16_6))) + >> (UInt16_11)) + & (UInt16_1)); + let ap_update_add_1_col7 = ap_update_add_1_tmp_1535.as_m31(); + trace[7].data[row_index] = ap_update_add_1_col7; + + sub_components_inputs.verify_instruction_inputs[0].extend( + ( + input_pc_col0, + [offset0_col3, offset1_col4, M31_32769], + [ + dst_base_fp_col5, + op0_base_fp_col6, + M31_1, + M31_0, + M31_0, + M31_0, + M31_1, + M31_0, + M31_0, + M31_0, + M31_0, + ap_update_add_1_col7, + M31_0, + M31_0, + M31_1, + ], + ) + .unpack(), + ); + + lookup_data.verifyinstruction[0].push([ + input_pc_col0, + offset0_col3, + offset1_col4, + M31_32769, + dst_base_fp_col5, + op0_base_fp_col6, + M31_1, + M31_0, + M31_0, + M31_0, + M31_1, + M31_0, + M31_0, + M31_0, + M31_0, + ap_update_add_1_col7, + M31_0, + M31_0, + M31_1, + ]); + + // read_positive_num_bits_252. + + let memory_address_to_id_value_tmp_1537 = memory_address_to_id_state.deduce_output( + ((((dst_base_fp_col5) * (input_fp_col2)) + + (((M31_1) - (dst_base_fp_col5)) * (input_ap_col1))) + + ((offset0_col3) - (M31_32768))), + ); + let memory_id_to_big_value_tmp_1538 = + memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_1537); + let dst_id_col8 = memory_address_to_id_value_tmp_1537; + trace[8].data[row_index] = dst_id_col8; + sub_components_inputs.memory_address_to_id_inputs[0].extend( + ((((dst_base_fp_col5) * (input_fp_col2)) + + (((M31_1) - (dst_base_fp_col5)) * (input_ap_col1))) + + ((offset0_col3) - (M31_32768))) + .unpack(), + ); + + lookup_data.memoryaddresstoid[0].push([ + ((((dst_base_fp_col5) * (input_fp_col2)) + + (((M31_1) - (dst_base_fp_col5)) * (input_ap_col1))) + + ((offset0_col3) - (M31_32768))), + dst_id_col8, + ]); + let dst_limb_0_col9 = memory_id_to_big_value_tmp_1538.get_m31(0); + trace[9].data[row_index] = dst_limb_0_col9; + let dst_limb_1_col10 = memory_id_to_big_value_tmp_1538.get_m31(1); + trace[10].data[row_index] = dst_limb_1_col10; + let dst_limb_2_col11 = memory_id_to_big_value_tmp_1538.get_m31(2); + trace[11].data[row_index] = dst_limb_2_col11; + let dst_limb_3_col12 = memory_id_to_big_value_tmp_1538.get_m31(3); + trace[12].data[row_index] = dst_limb_3_col12; + let dst_limb_4_col13 = memory_id_to_big_value_tmp_1538.get_m31(4); + trace[13].data[row_index] = dst_limb_4_col13; + let dst_limb_5_col14 = memory_id_to_big_value_tmp_1538.get_m31(5); + trace[14].data[row_index] = dst_limb_5_col14; + let dst_limb_6_col15 = memory_id_to_big_value_tmp_1538.get_m31(6); + trace[15].data[row_index] = dst_limb_6_col15; + let dst_limb_7_col16 = memory_id_to_big_value_tmp_1538.get_m31(7); + trace[16].data[row_index] = dst_limb_7_col16; + let dst_limb_8_col17 = memory_id_to_big_value_tmp_1538.get_m31(8); + trace[17].data[row_index] = dst_limb_8_col17; + let dst_limb_9_col18 = memory_id_to_big_value_tmp_1538.get_m31(9); + trace[18].data[row_index] = dst_limb_9_col18; + let dst_limb_10_col19 = memory_id_to_big_value_tmp_1538.get_m31(10); + trace[19].data[row_index] = dst_limb_10_col19; + let dst_limb_11_col20 = memory_id_to_big_value_tmp_1538.get_m31(11); + trace[20].data[row_index] = dst_limb_11_col20; + let dst_limb_12_col21 = memory_id_to_big_value_tmp_1538.get_m31(12); + trace[21].data[row_index] = dst_limb_12_col21; + let dst_limb_13_col22 = memory_id_to_big_value_tmp_1538.get_m31(13); + trace[22].data[row_index] = dst_limb_13_col22; + let dst_limb_14_col23 = memory_id_to_big_value_tmp_1538.get_m31(14); + trace[23].data[row_index] = dst_limb_14_col23; + let dst_limb_15_col24 = memory_id_to_big_value_tmp_1538.get_m31(15); + trace[24].data[row_index] = dst_limb_15_col24; + let dst_limb_16_col25 = memory_id_to_big_value_tmp_1538.get_m31(16); + trace[25].data[row_index] = dst_limb_16_col25; + let dst_limb_17_col26 = memory_id_to_big_value_tmp_1538.get_m31(17); + trace[26].data[row_index] = dst_limb_17_col26; + let dst_limb_18_col27 = memory_id_to_big_value_tmp_1538.get_m31(18); + trace[27].data[row_index] = dst_limb_18_col27; + let dst_limb_19_col28 = memory_id_to_big_value_tmp_1538.get_m31(19); + trace[28].data[row_index] = dst_limb_19_col28; + let dst_limb_20_col29 = memory_id_to_big_value_tmp_1538.get_m31(20); + trace[29].data[row_index] = dst_limb_20_col29; + let dst_limb_21_col30 = memory_id_to_big_value_tmp_1538.get_m31(21); + trace[30].data[row_index] = dst_limb_21_col30; + let dst_limb_22_col31 = memory_id_to_big_value_tmp_1538.get_m31(22); + trace[31].data[row_index] = dst_limb_22_col31; + let dst_limb_23_col32 = memory_id_to_big_value_tmp_1538.get_m31(23); + trace[32].data[row_index] = dst_limb_23_col32; + let dst_limb_24_col33 = memory_id_to_big_value_tmp_1538.get_m31(24); + trace[33].data[row_index] = dst_limb_24_col33; + let dst_limb_25_col34 = memory_id_to_big_value_tmp_1538.get_m31(25); + trace[34].data[row_index] = dst_limb_25_col34; + let dst_limb_26_col35 = memory_id_to_big_value_tmp_1538.get_m31(26); + trace[35].data[row_index] = dst_limb_26_col35; + let dst_limb_27_col36 = memory_id_to_big_value_tmp_1538.get_m31(27); + trace[36].data[row_index] = dst_limb_27_col36; + sub_components_inputs.memory_id_to_big_inputs[0].extend(dst_id_col8.unpack()); + + lookup_data.memoryidtobig[0].push([ + dst_id_col8, + dst_limb_0_col9, + dst_limb_1_col10, + dst_limb_2_col11, + dst_limb_3_col12, + dst_limb_4_col13, + dst_limb_5_col14, + dst_limb_6_col15, + dst_limb_7_col16, + dst_limb_8_col17, + dst_limb_9_col18, + dst_limb_10_col19, + dst_limb_11_col20, + dst_limb_12_col21, + dst_limb_13_col22, + dst_limb_14_col23, + dst_limb_15_col24, + dst_limb_16_col25, + dst_limb_17_col26, + dst_limb_18_col27, + dst_limb_19_col28, + dst_limb_20_col29, + dst_limb_21_col30, + dst_limb_22_col31, + dst_limb_23_col32, + dst_limb_24_col33, + dst_limb_25_col34, + dst_limb_26_col35, + dst_limb_27_col36, + ]); + + // read_positive_num_bits_252. + + let memory_address_to_id_value_tmp_1539 = memory_address_to_id_state.deduce_output( + ((((op0_base_fp_col6) * (input_fp_col2)) + + (((M31_1) - (op0_base_fp_col6)) * (input_ap_col1))) + + ((offset1_col4) - (M31_32768))), + ); + let memory_id_to_big_value_tmp_1540 = + memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_1539); + let op0_id_col37 = memory_address_to_id_value_tmp_1539; + trace[37].data[row_index] = op0_id_col37; + sub_components_inputs.memory_address_to_id_inputs[1].extend( + ((((op0_base_fp_col6) * (input_fp_col2)) + + (((M31_1) - (op0_base_fp_col6)) * (input_ap_col1))) + + ((offset1_col4) - (M31_32768))) + .unpack(), + ); + + lookup_data.memoryaddresstoid[1].push([ + ((((op0_base_fp_col6) * (input_fp_col2)) + + (((M31_1) - (op0_base_fp_col6)) * (input_ap_col1))) + + ((offset1_col4) - (M31_32768))), + op0_id_col37, + ]); + let op0_limb_0_col38 = memory_id_to_big_value_tmp_1540.get_m31(0); + trace[38].data[row_index] = op0_limb_0_col38; + let op0_limb_1_col39 = memory_id_to_big_value_tmp_1540.get_m31(1); + trace[39].data[row_index] = op0_limb_1_col39; + let op0_limb_2_col40 = memory_id_to_big_value_tmp_1540.get_m31(2); + trace[40].data[row_index] = op0_limb_2_col40; + let op0_limb_3_col41 = memory_id_to_big_value_tmp_1540.get_m31(3); + trace[41].data[row_index] = op0_limb_3_col41; + let op0_limb_4_col42 = memory_id_to_big_value_tmp_1540.get_m31(4); + trace[42].data[row_index] = op0_limb_4_col42; + let op0_limb_5_col43 = memory_id_to_big_value_tmp_1540.get_m31(5); + trace[43].data[row_index] = op0_limb_5_col43; + let op0_limb_6_col44 = memory_id_to_big_value_tmp_1540.get_m31(6); + trace[44].data[row_index] = op0_limb_6_col44; + let op0_limb_7_col45 = memory_id_to_big_value_tmp_1540.get_m31(7); + trace[45].data[row_index] = op0_limb_7_col45; + let op0_limb_8_col46 = memory_id_to_big_value_tmp_1540.get_m31(8); + trace[46].data[row_index] = op0_limb_8_col46; + let op0_limb_9_col47 = memory_id_to_big_value_tmp_1540.get_m31(9); + trace[47].data[row_index] = op0_limb_9_col47; + let op0_limb_10_col48 = memory_id_to_big_value_tmp_1540.get_m31(10); + trace[48].data[row_index] = op0_limb_10_col48; + let op0_limb_11_col49 = memory_id_to_big_value_tmp_1540.get_m31(11); + trace[49].data[row_index] = op0_limb_11_col49; + let op0_limb_12_col50 = memory_id_to_big_value_tmp_1540.get_m31(12); + trace[50].data[row_index] = op0_limb_12_col50; + let op0_limb_13_col51 = memory_id_to_big_value_tmp_1540.get_m31(13); + trace[51].data[row_index] = op0_limb_13_col51; + let op0_limb_14_col52 = memory_id_to_big_value_tmp_1540.get_m31(14); + trace[52].data[row_index] = op0_limb_14_col52; + let op0_limb_15_col53 = memory_id_to_big_value_tmp_1540.get_m31(15); + trace[53].data[row_index] = op0_limb_15_col53; + let op0_limb_16_col54 = memory_id_to_big_value_tmp_1540.get_m31(16); + trace[54].data[row_index] = op0_limb_16_col54; + let op0_limb_17_col55 = memory_id_to_big_value_tmp_1540.get_m31(17); + trace[55].data[row_index] = op0_limb_17_col55; + let op0_limb_18_col56 = memory_id_to_big_value_tmp_1540.get_m31(18); + trace[56].data[row_index] = op0_limb_18_col56; + let op0_limb_19_col57 = memory_id_to_big_value_tmp_1540.get_m31(19); + trace[57].data[row_index] = op0_limb_19_col57; + let op0_limb_20_col58 = memory_id_to_big_value_tmp_1540.get_m31(20); + trace[58].data[row_index] = op0_limb_20_col58; + let op0_limb_21_col59 = memory_id_to_big_value_tmp_1540.get_m31(21); + trace[59].data[row_index] = op0_limb_21_col59; + let op0_limb_22_col60 = memory_id_to_big_value_tmp_1540.get_m31(22); + trace[60].data[row_index] = op0_limb_22_col60; + let op0_limb_23_col61 = memory_id_to_big_value_tmp_1540.get_m31(23); + trace[61].data[row_index] = op0_limb_23_col61; + let op0_limb_24_col62 = memory_id_to_big_value_tmp_1540.get_m31(24); + trace[62].data[row_index] = op0_limb_24_col62; + let op0_limb_25_col63 = memory_id_to_big_value_tmp_1540.get_m31(25); + trace[63].data[row_index] = op0_limb_25_col63; + let op0_limb_26_col64 = memory_id_to_big_value_tmp_1540.get_m31(26); + trace[64].data[row_index] = op0_limb_26_col64; + let op0_limb_27_col65 = memory_id_to_big_value_tmp_1540.get_m31(27); + trace[65].data[row_index] = op0_limb_27_col65; + sub_components_inputs.memory_id_to_big_inputs[1].extend(op0_id_col37.unpack()); + + lookup_data.memoryidtobig[1].push([ + op0_id_col37, + op0_limb_0_col38, + op0_limb_1_col39, + op0_limb_2_col40, + op0_limb_3_col41, + op0_limb_4_col42, + op0_limb_5_col43, + op0_limb_6_col44, + op0_limb_7_col45, + op0_limb_8_col46, + op0_limb_9_col47, + op0_limb_10_col48, + op0_limb_11_col49, + op0_limb_12_col50, + op0_limb_13_col51, + op0_limb_14_col52, + op0_limb_15_col53, + op0_limb_16_col54, + op0_limb_17_col55, + op0_limb_18_col56, + op0_limb_19_col57, + op0_limb_20_col58, + op0_limb_21_col59, + op0_limb_22_col60, + op0_limb_23_col61, + op0_limb_24_col62, + op0_limb_25_col63, + op0_limb_26_col64, + op0_limb_27_col65, + ]); + + // read_positive_num_bits_252. + + let memory_address_to_id_value_tmp_1541 = + memory_address_to_id_state.deduce_output(((input_pc_col0) + (M31_1))); + let memory_id_to_big_value_tmp_1542 = + memory_id_to_big_state.deduce_output(memory_address_to_id_value_tmp_1541); + let op1_id_col66 = memory_address_to_id_value_tmp_1541; + trace[66].data[row_index] = op1_id_col66; + sub_components_inputs.memory_address_to_id_inputs[2] + .extend(((input_pc_col0) + (M31_1)).unpack()); + + lookup_data.memoryaddresstoid[2].push([((input_pc_col0) + (M31_1)), op1_id_col66]); + let op1_limb_0_col67 = memory_id_to_big_value_tmp_1542.get_m31(0); + trace[67].data[row_index] = op1_limb_0_col67; + let op1_limb_1_col68 = memory_id_to_big_value_tmp_1542.get_m31(1); + trace[68].data[row_index] = op1_limb_1_col68; + let op1_limb_2_col69 = memory_id_to_big_value_tmp_1542.get_m31(2); + trace[69].data[row_index] = op1_limb_2_col69; + let op1_limb_3_col70 = memory_id_to_big_value_tmp_1542.get_m31(3); + trace[70].data[row_index] = op1_limb_3_col70; + let op1_limb_4_col71 = memory_id_to_big_value_tmp_1542.get_m31(4); + trace[71].data[row_index] = op1_limb_4_col71; + let op1_limb_5_col72 = memory_id_to_big_value_tmp_1542.get_m31(5); + trace[72].data[row_index] = op1_limb_5_col72; + let op1_limb_6_col73 = memory_id_to_big_value_tmp_1542.get_m31(6); + trace[73].data[row_index] = op1_limb_6_col73; + let op1_limb_7_col74 = memory_id_to_big_value_tmp_1542.get_m31(7); + trace[74].data[row_index] = op1_limb_7_col74; + let op1_limb_8_col75 = memory_id_to_big_value_tmp_1542.get_m31(8); + trace[75].data[row_index] = op1_limb_8_col75; + let op1_limb_9_col76 = memory_id_to_big_value_tmp_1542.get_m31(9); + trace[76].data[row_index] = op1_limb_9_col76; + let op1_limb_10_col77 = memory_id_to_big_value_tmp_1542.get_m31(10); + trace[77].data[row_index] = op1_limb_10_col77; + let op1_limb_11_col78 = memory_id_to_big_value_tmp_1542.get_m31(11); + trace[78].data[row_index] = op1_limb_11_col78; + let op1_limb_12_col79 = memory_id_to_big_value_tmp_1542.get_m31(12); + trace[79].data[row_index] = op1_limb_12_col79; + let op1_limb_13_col80 = memory_id_to_big_value_tmp_1542.get_m31(13); + trace[80].data[row_index] = op1_limb_13_col80; + let op1_limb_14_col81 = memory_id_to_big_value_tmp_1542.get_m31(14); + trace[81].data[row_index] = op1_limb_14_col81; + let op1_limb_15_col82 = memory_id_to_big_value_tmp_1542.get_m31(15); + trace[82].data[row_index] = op1_limb_15_col82; + let op1_limb_16_col83 = memory_id_to_big_value_tmp_1542.get_m31(16); + trace[83].data[row_index] = op1_limb_16_col83; + let op1_limb_17_col84 = memory_id_to_big_value_tmp_1542.get_m31(17); + trace[84].data[row_index] = op1_limb_17_col84; + let op1_limb_18_col85 = memory_id_to_big_value_tmp_1542.get_m31(18); + trace[85].data[row_index] = op1_limb_18_col85; + let op1_limb_19_col86 = memory_id_to_big_value_tmp_1542.get_m31(19); + trace[86].data[row_index] = op1_limb_19_col86; + let op1_limb_20_col87 = memory_id_to_big_value_tmp_1542.get_m31(20); + trace[87].data[row_index] = op1_limb_20_col87; + let op1_limb_21_col88 = memory_id_to_big_value_tmp_1542.get_m31(21); + trace[88].data[row_index] = op1_limb_21_col88; + let op1_limb_22_col89 = memory_id_to_big_value_tmp_1542.get_m31(22); + trace[89].data[row_index] = op1_limb_22_col89; + let op1_limb_23_col90 = memory_id_to_big_value_tmp_1542.get_m31(23); + trace[90].data[row_index] = op1_limb_23_col90; + let op1_limb_24_col91 = memory_id_to_big_value_tmp_1542.get_m31(24); + trace[91].data[row_index] = op1_limb_24_col91; + let op1_limb_25_col92 = memory_id_to_big_value_tmp_1542.get_m31(25); + trace[92].data[row_index] = op1_limb_25_col92; + let op1_limb_26_col93 = memory_id_to_big_value_tmp_1542.get_m31(26); + trace[93].data[row_index] = op1_limb_26_col93; + let op1_limb_27_col94 = memory_id_to_big_value_tmp_1542.get_m31(27); + trace[94].data[row_index] = op1_limb_27_col94; + sub_components_inputs.memory_id_to_big_inputs[2].extend(op1_id_col66.unpack()); + + lookup_data.memoryidtobig[2].push([ + op1_id_col66, + op1_limb_0_col67, + op1_limb_1_col68, + op1_limb_2_col69, + op1_limb_3_col70, + op1_limb_4_col71, + op1_limb_5_col72, + op1_limb_6_col73, + op1_limb_7_col74, + op1_limb_8_col75, + op1_limb_9_col76, + op1_limb_10_col77, + op1_limb_11_col78, + op1_limb_12_col79, + op1_limb_13_col80, + op1_limb_14_col81, + op1_limb_15_col82, + op1_limb_16_col83, + op1_limb_17_col84, + op1_limb_18_col85, + op1_limb_19_col86, + op1_limb_20_col87, + op1_limb_21_col88, + op1_limb_22_col89, + op1_limb_23_col90, + op1_limb_24_col91, + op1_limb_25_col92, + op1_limb_26_col93, + op1_limb_27_col94, + ]); + + // verify_mul252. + + let conv_tmp_1543 = + (((M31_0) - (dst_limb_0_col9)) + ((op0_limb_0_col38) * (op1_limb_0_col67))); + let conv_tmp_1544 = ((((M31_0) - (dst_limb_1_col10)) + + ((op0_limb_0_col38) * (op1_limb_1_col68))) + + ((op0_limb_1_col39) * (op1_limb_0_col67))); + let conv_tmp_1545 = (((((M31_0) - (dst_limb_2_col11)) + + ((op0_limb_0_col38) * (op1_limb_2_col69))) + + ((op0_limb_1_col39) * (op1_limb_1_col68))) + + ((op0_limb_2_col40) * (op1_limb_0_col67))); + let conv_tmp_1546 = ((((((M31_0) - (dst_limb_3_col12)) + + ((op0_limb_0_col38) * (op1_limb_3_col70))) + + ((op0_limb_1_col39) * (op1_limb_2_col69))) + + ((op0_limb_2_col40) * (op1_limb_1_col68))) + + ((op0_limb_3_col41) * (op1_limb_0_col67))); + let conv_tmp_1547 = (((((((M31_0) - (dst_limb_4_col13)) + + ((op0_limb_0_col38) * (op1_limb_4_col71))) + + ((op0_limb_1_col39) * (op1_limb_3_col70))) + + ((op0_limb_2_col40) * (op1_limb_2_col69))) + + ((op0_limb_3_col41) * (op1_limb_1_col68))) + + ((op0_limb_4_col42) * (op1_limb_0_col67))); + let conv_tmp_1548 = ((((((((M31_0) - (dst_limb_5_col14)) + + ((op0_limb_0_col38) * (op1_limb_5_col72))) + + ((op0_limb_1_col39) * (op1_limb_4_col71))) + + ((op0_limb_2_col40) * (op1_limb_3_col70))) + + ((op0_limb_3_col41) * (op1_limb_2_col69))) + + ((op0_limb_4_col42) * (op1_limb_1_col68))) + + ((op0_limb_5_col43) * (op1_limb_0_col67))); + let conv_tmp_1549 = (((((((((M31_0) - (dst_limb_6_col15)) + + ((op0_limb_0_col38) * (op1_limb_6_col73))) + + ((op0_limb_1_col39) * (op1_limb_5_col72))) + + ((op0_limb_2_col40) * (op1_limb_4_col71))) + + ((op0_limb_3_col41) * (op1_limb_3_col70))) + + ((op0_limb_4_col42) * (op1_limb_2_col69))) + + ((op0_limb_5_col43) * (op1_limb_1_col68))) + + ((op0_limb_6_col44) * (op1_limb_0_col67))); + let conv_tmp_1550 = ((((((((((M31_0) - (dst_limb_7_col16)) + + ((op0_limb_0_col38) * (op1_limb_7_col74))) + + ((op0_limb_1_col39) * (op1_limb_6_col73))) + + ((op0_limb_2_col40) * (op1_limb_5_col72))) + + ((op0_limb_3_col41) * (op1_limb_4_col71))) + + ((op0_limb_4_col42) * (op1_limb_3_col70))) + + ((op0_limb_5_col43) * (op1_limb_2_col69))) + + ((op0_limb_6_col44) * (op1_limb_1_col68))) + + ((op0_limb_7_col45) * (op1_limb_0_col67))); + let conv_tmp_1551 = (((((((((((M31_0) - (dst_limb_8_col17)) + + ((op0_limb_0_col38) * (op1_limb_8_col75))) + + ((op0_limb_1_col39) * (op1_limb_7_col74))) + + ((op0_limb_2_col40) * (op1_limb_6_col73))) + + ((op0_limb_3_col41) * (op1_limb_5_col72))) + + ((op0_limb_4_col42) * (op1_limb_4_col71))) + + ((op0_limb_5_col43) * (op1_limb_3_col70))) + + ((op0_limb_6_col44) * (op1_limb_2_col69))) + + ((op0_limb_7_col45) * (op1_limb_1_col68))) + + ((op0_limb_8_col46) * (op1_limb_0_col67))); + let conv_tmp_1552 = ((((((((((((M31_0) - (dst_limb_9_col18)) + + ((op0_limb_0_col38) * (op1_limb_9_col76))) + + ((op0_limb_1_col39) * (op1_limb_8_col75))) + + ((op0_limb_2_col40) * (op1_limb_7_col74))) + + ((op0_limb_3_col41) * (op1_limb_6_col73))) + + ((op0_limb_4_col42) * (op1_limb_5_col72))) + + ((op0_limb_5_col43) * (op1_limb_4_col71))) + + ((op0_limb_6_col44) * (op1_limb_3_col70))) + + ((op0_limb_7_col45) * (op1_limb_2_col69))) + + ((op0_limb_8_col46) * (op1_limb_1_col68))) + + ((op0_limb_9_col47) * (op1_limb_0_col67))); + let conv_tmp_1553 = (((((((((((((M31_0) - (dst_limb_10_col19)) + + ((op0_limb_0_col38) * (op1_limb_10_col77))) + + ((op0_limb_1_col39) * (op1_limb_9_col76))) + + ((op0_limb_2_col40) * (op1_limb_8_col75))) + + ((op0_limb_3_col41) * (op1_limb_7_col74))) + + ((op0_limb_4_col42) * (op1_limb_6_col73))) + + ((op0_limb_5_col43) * (op1_limb_5_col72))) + + ((op0_limb_6_col44) * (op1_limb_4_col71))) + + ((op0_limb_7_col45) * (op1_limb_3_col70))) + + ((op0_limb_8_col46) * (op1_limb_2_col69))) + + ((op0_limb_9_col47) * (op1_limb_1_col68))) + + ((op0_limb_10_col48) * (op1_limb_0_col67))); + let conv_tmp_1554 = ((((((((((((((M31_0) - (dst_limb_11_col20)) + + ((op0_limb_0_col38) * (op1_limb_11_col78))) + + ((op0_limb_1_col39) * (op1_limb_10_col77))) + + ((op0_limb_2_col40) * (op1_limb_9_col76))) + + ((op0_limb_3_col41) * (op1_limb_8_col75))) + + ((op0_limb_4_col42) * (op1_limb_7_col74))) + + ((op0_limb_5_col43) * (op1_limb_6_col73))) + + ((op0_limb_6_col44) * (op1_limb_5_col72))) + + ((op0_limb_7_col45) * (op1_limb_4_col71))) + + ((op0_limb_8_col46) * (op1_limb_3_col70))) + + ((op0_limb_9_col47) * (op1_limb_2_col69))) + + ((op0_limb_10_col48) * (op1_limb_1_col68))) + + ((op0_limb_11_col49) * (op1_limb_0_col67))); + let conv_tmp_1555 = (((((((((((((((M31_0) - (dst_limb_12_col21)) + + ((op0_limb_0_col38) * (op1_limb_12_col79))) + + ((op0_limb_1_col39) * (op1_limb_11_col78))) + + ((op0_limb_2_col40) * (op1_limb_10_col77))) + + ((op0_limb_3_col41) * (op1_limb_9_col76))) + + ((op0_limb_4_col42) * (op1_limb_8_col75))) + + ((op0_limb_5_col43) * (op1_limb_7_col74))) + + ((op0_limb_6_col44) * (op1_limb_6_col73))) + + ((op0_limb_7_col45) * (op1_limb_5_col72))) + + ((op0_limb_8_col46) * (op1_limb_4_col71))) + + ((op0_limb_9_col47) * (op1_limb_3_col70))) + + ((op0_limb_10_col48) * (op1_limb_2_col69))) + + ((op0_limb_11_col49) * (op1_limb_1_col68))) + + ((op0_limb_12_col50) * (op1_limb_0_col67))); + let conv_tmp_1556 = ((((((((((((((((M31_0) - (dst_limb_13_col22)) + + ((op0_limb_0_col38) * (op1_limb_13_col80))) + + ((op0_limb_1_col39) * (op1_limb_12_col79))) + + ((op0_limb_2_col40) * (op1_limb_11_col78))) + + ((op0_limb_3_col41) * (op1_limb_10_col77))) + + ((op0_limb_4_col42) * (op1_limb_9_col76))) + + ((op0_limb_5_col43) * (op1_limb_8_col75))) + + ((op0_limb_6_col44) * (op1_limb_7_col74))) + + ((op0_limb_7_col45) * (op1_limb_6_col73))) + + ((op0_limb_8_col46) * (op1_limb_5_col72))) + + ((op0_limb_9_col47) * (op1_limb_4_col71))) + + ((op0_limb_10_col48) * (op1_limb_3_col70))) + + ((op0_limb_11_col49) * (op1_limb_2_col69))) + + ((op0_limb_12_col50) * (op1_limb_1_col68))) + + ((op0_limb_13_col51) * (op1_limb_0_col67))); + let conv_tmp_1557 = (((((((((((((((((M31_0) - (dst_limb_14_col23)) + + ((op0_limb_0_col38) * (op1_limb_14_col81))) + + ((op0_limb_1_col39) * (op1_limb_13_col80))) + + ((op0_limb_2_col40) * (op1_limb_12_col79))) + + ((op0_limb_3_col41) * (op1_limb_11_col78))) + + ((op0_limb_4_col42) * (op1_limb_10_col77))) + + ((op0_limb_5_col43) * (op1_limb_9_col76))) + + ((op0_limb_6_col44) * (op1_limb_8_col75))) + + ((op0_limb_7_col45) * (op1_limb_7_col74))) + + ((op0_limb_8_col46) * (op1_limb_6_col73))) + + ((op0_limb_9_col47) * (op1_limb_5_col72))) + + ((op0_limb_10_col48) * (op1_limb_4_col71))) + + ((op0_limb_11_col49) * (op1_limb_3_col70))) + + ((op0_limb_12_col50) * (op1_limb_2_col69))) + + ((op0_limb_13_col51) * (op1_limb_1_col68))) + + ((op0_limb_14_col52) * (op1_limb_0_col67))); + let conv_tmp_1558 = ((((((((((((((((((M31_0) - (dst_limb_15_col24)) + + ((op0_limb_0_col38) * (op1_limb_15_col82))) + + ((op0_limb_1_col39) * (op1_limb_14_col81))) + + ((op0_limb_2_col40) * (op1_limb_13_col80))) + + ((op0_limb_3_col41) * (op1_limb_12_col79))) + + ((op0_limb_4_col42) * (op1_limb_11_col78))) + + ((op0_limb_5_col43) * (op1_limb_10_col77))) + + ((op0_limb_6_col44) * (op1_limb_9_col76))) + + ((op0_limb_7_col45) * (op1_limb_8_col75))) + + ((op0_limb_8_col46) * (op1_limb_7_col74))) + + ((op0_limb_9_col47) * (op1_limb_6_col73))) + + ((op0_limb_10_col48) * (op1_limb_5_col72))) + + ((op0_limb_11_col49) * (op1_limb_4_col71))) + + ((op0_limb_12_col50) * (op1_limb_3_col70))) + + ((op0_limb_13_col51) * (op1_limb_2_col69))) + + ((op0_limb_14_col52) * (op1_limb_1_col68))) + + ((op0_limb_15_col53) * (op1_limb_0_col67))); + let conv_tmp_1559 = (((((((((((((((((((M31_0) - (dst_limb_16_col25)) + + ((op0_limb_0_col38) * (op1_limb_16_col83))) + + ((op0_limb_1_col39) * (op1_limb_15_col82))) + + ((op0_limb_2_col40) * (op1_limb_14_col81))) + + ((op0_limb_3_col41) * (op1_limb_13_col80))) + + ((op0_limb_4_col42) * (op1_limb_12_col79))) + + ((op0_limb_5_col43) * (op1_limb_11_col78))) + + ((op0_limb_6_col44) * (op1_limb_10_col77))) + + ((op0_limb_7_col45) * (op1_limb_9_col76))) + + ((op0_limb_8_col46) * (op1_limb_8_col75))) + + ((op0_limb_9_col47) * (op1_limb_7_col74))) + + ((op0_limb_10_col48) * (op1_limb_6_col73))) + + ((op0_limb_11_col49) * (op1_limb_5_col72))) + + ((op0_limb_12_col50) * (op1_limb_4_col71))) + + ((op0_limb_13_col51) * (op1_limb_3_col70))) + + ((op0_limb_14_col52) * (op1_limb_2_col69))) + + ((op0_limb_15_col53) * (op1_limb_1_col68))) + + ((op0_limb_16_col54) * (op1_limb_0_col67))); + let conv_tmp_1560 = ((((((((((((((((((((M31_0) - (dst_limb_17_col26)) + + ((op0_limb_0_col38) * (op1_limb_17_col84))) + + ((op0_limb_1_col39) * (op1_limb_16_col83))) + + ((op0_limb_2_col40) * (op1_limb_15_col82))) + + ((op0_limb_3_col41) * (op1_limb_14_col81))) + + ((op0_limb_4_col42) * (op1_limb_13_col80))) + + ((op0_limb_5_col43) * (op1_limb_12_col79))) + + ((op0_limb_6_col44) * (op1_limb_11_col78))) + + ((op0_limb_7_col45) * (op1_limb_10_col77))) + + ((op0_limb_8_col46) * (op1_limb_9_col76))) + + ((op0_limb_9_col47) * (op1_limb_8_col75))) + + ((op0_limb_10_col48) * (op1_limb_7_col74))) + + ((op0_limb_11_col49) * (op1_limb_6_col73))) + + ((op0_limb_12_col50) * (op1_limb_5_col72))) + + ((op0_limb_13_col51) * (op1_limb_4_col71))) + + ((op0_limb_14_col52) * (op1_limb_3_col70))) + + ((op0_limb_15_col53) * (op1_limb_2_col69))) + + ((op0_limb_16_col54) * (op1_limb_1_col68))) + + ((op0_limb_17_col55) * (op1_limb_0_col67))); + let conv_tmp_1561 = (((((((((((((((((((((M31_0) + - (dst_limb_18_col27)) + + ((op0_limb_0_col38) * (op1_limb_18_col85))) + + ((op0_limb_1_col39) * (op1_limb_17_col84))) + + ((op0_limb_2_col40) * (op1_limb_16_col83))) + + ((op0_limb_3_col41) * (op1_limb_15_col82))) + + ((op0_limb_4_col42) * (op1_limb_14_col81))) + + ((op0_limb_5_col43) * (op1_limb_13_col80))) + + ((op0_limb_6_col44) * (op1_limb_12_col79))) + + ((op0_limb_7_col45) * (op1_limb_11_col78))) + + ((op0_limb_8_col46) * (op1_limb_10_col77))) + + ((op0_limb_9_col47) * (op1_limb_9_col76))) + + ((op0_limb_10_col48) * (op1_limb_8_col75))) + + ((op0_limb_11_col49) * (op1_limb_7_col74))) + + ((op0_limb_12_col50) * (op1_limb_6_col73))) + + ((op0_limb_13_col51) * (op1_limb_5_col72))) + + ((op0_limb_14_col52) * (op1_limb_4_col71))) + + ((op0_limb_15_col53) * (op1_limb_3_col70))) + + ((op0_limb_16_col54) * (op1_limb_2_col69))) + + ((op0_limb_17_col55) * (op1_limb_1_col68))) + + ((op0_limb_18_col56) * (op1_limb_0_col67))); + let conv_tmp_1562 = ((((((((((((((((((((((M31_0) + - (dst_limb_19_col28)) + + ((op0_limb_0_col38) * (op1_limb_19_col86))) + + ((op0_limb_1_col39) * (op1_limb_18_col85))) + + ((op0_limb_2_col40) * (op1_limb_17_col84))) + + ((op0_limb_3_col41) * (op1_limb_16_col83))) + + ((op0_limb_4_col42) * (op1_limb_15_col82))) + + ((op0_limb_5_col43) * (op1_limb_14_col81))) + + ((op0_limb_6_col44) * (op1_limb_13_col80))) + + ((op0_limb_7_col45) * (op1_limb_12_col79))) + + ((op0_limb_8_col46) * (op1_limb_11_col78))) + + ((op0_limb_9_col47) * (op1_limb_10_col77))) + + ((op0_limb_10_col48) * (op1_limb_9_col76))) + + ((op0_limb_11_col49) * (op1_limb_8_col75))) + + ((op0_limb_12_col50) * (op1_limb_7_col74))) + + ((op0_limb_13_col51) * (op1_limb_6_col73))) + + ((op0_limb_14_col52) * (op1_limb_5_col72))) + + ((op0_limb_15_col53) * (op1_limb_4_col71))) + + ((op0_limb_16_col54) * (op1_limb_3_col70))) + + ((op0_limb_17_col55) * (op1_limb_2_col69))) + + ((op0_limb_18_col56) * (op1_limb_1_col68))) + + ((op0_limb_19_col57) * (op1_limb_0_col67))); + let conv_tmp_1563 = (((((((((((((((((((((((M31_0) + - (dst_limb_20_col29)) + + ((op0_limb_0_col38) * (op1_limb_20_col87))) + + ((op0_limb_1_col39) * (op1_limb_19_col86))) + + ((op0_limb_2_col40) * (op1_limb_18_col85))) + + ((op0_limb_3_col41) * (op1_limb_17_col84))) + + ((op0_limb_4_col42) * (op1_limb_16_col83))) + + ((op0_limb_5_col43) * (op1_limb_15_col82))) + + ((op0_limb_6_col44) * (op1_limb_14_col81))) + + ((op0_limb_7_col45) * (op1_limb_13_col80))) + + ((op0_limb_8_col46) * (op1_limb_12_col79))) + + ((op0_limb_9_col47) * (op1_limb_11_col78))) + + ((op0_limb_10_col48) * (op1_limb_10_col77))) + + ((op0_limb_11_col49) * (op1_limb_9_col76))) + + ((op0_limb_12_col50) * (op1_limb_8_col75))) + + ((op0_limb_13_col51) * (op1_limb_7_col74))) + + ((op0_limb_14_col52) * (op1_limb_6_col73))) + + ((op0_limb_15_col53) * (op1_limb_5_col72))) + + ((op0_limb_16_col54) * (op1_limb_4_col71))) + + ((op0_limb_17_col55) * (op1_limb_3_col70))) + + ((op0_limb_18_col56) * (op1_limb_2_col69))) + + ((op0_limb_19_col57) * (op1_limb_1_col68))) + + ((op0_limb_20_col58) * (op1_limb_0_col67))); + let conv_tmp_1564 = ((((((((((((((((((((((((M31_0) + - (dst_limb_21_col30)) + + ((op0_limb_0_col38) * (op1_limb_21_col88))) + + ((op0_limb_1_col39) * (op1_limb_20_col87))) + + ((op0_limb_2_col40) * (op1_limb_19_col86))) + + ((op0_limb_3_col41) * (op1_limb_18_col85))) + + ((op0_limb_4_col42) * (op1_limb_17_col84))) + + ((op0_limb_5_col43) * (op1_limb_16_col83))) + + ((op0_limb_6_col44) * (op1_limb_15_col82))) + + ((op0_limb_7_col45) * (op1_limb_14_col81))) + + ((op0_limb_8_col46) * (op1_limb_13_col80))) + + ((op0_limb_9_col47) * (op1_limb_12_col79))) + + ((op0_limb_10_col48) * (op1_limb_11_col78))) + + ((op0_limb_11_col49) * (op1_limb_10_col77))) + + ((op0_limb_12_col50) * (op1_limb_9_col76))) + + ((op0_limb_13_col51) * (op1_limb_8_col75))) + + ((op0_limb_14_col52) * (op1_limb_7_col74))) + + ((op0_limb_15_col53) * (op1_limb_6_col73))) + + ((op0_limb_16_col54) * (op1_limb_5_col72))) + + ((op0_limb_17_col55) * (op1_limb_4_col71))) + + ((op0_limb_18_col56) * (op1_limb_3_col70))) + + ((op0_limb_19_col57) * (op1_limb_2_col69))) + + ((op0_limb_20_col58) * (op1_limb_1_col68))) + + ((op0_limb_21_col59) * (op1_limb_0_col67))); + let conv_tmp_1565 = (((((((((((((((((((((((((M31_0) + - (dst_limb_22_col31)) + + ((op0_limb_0_col38) * (op1_limb_22_col89))) + + ((op0_limb_1_col39) * (op1_limb_21_col88))) + + ((op0_limb_2_col40) * (op1_limb_20_col87))) + + ((op0_limb_3_col41) * (op1_limb_19_col86))) + + ((op0_limb_4_col42) * (op1_limb_18_col85))) + + ((op0_limb_5_col43) * (op1_limb_17_col84))) + + ((op0_limb_6_col44) * (op1_limb_16_col83))) + + ((op0_limb_7_col45) * (op1_limb_15_col82))) + + ((op0_limb_8_col46) * (op1_limb_14_col81))) + + ((op0_limb_9_col47) * (op1_limb_13_col80))) + + ((op0_limb_10_col48) * (op1_limb_12_col79))) + + ((op0_limb_11_col49) * (op1_limb_11_col78))) + + ((op0_limb_12_col50) * (op1_limb_10_col77))) + + ((op0_limb_13_col51) * (op1_limb_9_col76))) + + ((op0_limb_14_col52) * (op1_limb_8_col75))) + + ((op0_limb_15_col53) * (op1_limb_7_col74))) + + ((op0_limb_16_col54) * (op1_limb_6_col73))) + + ((op0_limb_17_col55) * (op1_limb_5_col72))) + + ((op0_limb_18_col56) * (op1_limb_4_col71))) + + ((op0_limb_19_col57) * (op1_limb_3_col70))) + + ((op0_limb_20_col58) * (op1_limb_2_col69))) + + ((op0_limb_21_col59) * (op1_limb_1_col68))) + + ((op0_limb_22_col60) * (op1_limb_0_col67))); + let conv_tmp_1566 = ((((((((((((((((((((((((((M31_0) + - (dst_limb_23_col32)) + + ((op0_limb_0_col38) * (op1_limb_23_col90))) + + ((op0_limb_1_col39) * (op1_limb_22_col89))) + + ((op0_limb_2_col40) * (op1_limb_21_col88))) + + ((op0_limb_3_col41) * (op1_limb_20_col87))) + + ((op0_limb_4_col42) * (op1_limb_19_col86))) + + ((op0_limb_5_col43) * (op1_limb_18_col85))) + + ((op0_limb_6_col44) * (op1_limb_17_col84))) + + ((op0_limb_7_col45) * (op1_limb_16_col83))) + + ((op0_limb_8_col46) * (op1_limb_15_col82))) + + ((op0_limb_9_col47) * (op1_limb_14_col81))) + + ((op0_limb_10_col48) * (op1_limb_13_col80))) + + ((op0_limb_11_col49) * (op1_limb_12_col79))) + + ((op0_limb_12_col50) * (op1_limb_11_col78))) + + ((op0_limb_13_col51) * (op1_limb_10_col77))) + + ((op0_limb_14_col52) * (op1_limb_9_col76))) + + ((op0_limb_15_col53) * (op1_limb_8_col75))) + + ((op0_limb_16_col54) * (op1_limb_7_col74))) + + ((op0_limb_17_col55) * (op1_limb_6_col73))) + + ((op0_limb_18_col56) * (op1_limb_5_col72))) + + ((op0_limb_19_col57) * (op1_limb_4_col71))) + + ((op0_limb_20_col58) * (op1_limb_3_col70))) + + ((op0_limb_21_col59) * (op1_limb_2_col69))) + + ((op0_limb_22_col60) * (op1_limb_1_col68))) + + ((op0_limb_23_col61) * (op1_limb_0_col67))); + let conv_tmp_1567 = (((((((((((((((((((((((((((M31_0) + - (dst_limb_24_col33)) + + ((op0_limb_0_col38) * (op1_limb_24_col91))) + + ((op0_limb_1_col39) * (op1_limb_23_col90))) + + ((op0_limb_2_col40) * (op1_limb_22_col89))) + + ((op0_limb_3_col41) * (op1_limb_21_col88))) + + ((op0_limb_4_col42) * (op1_limb_20_col87))) + + ((op0_limb_5_col43) * (op1_limb_19_col86))) + + ((op0_limb_6_col44) * (op1_limb_18_col85))) + + ((op0_limb_7_col45) * (op1_limb_17_col84))) + + ((op0_limb_8_col46) * (op1_limb_16_col83))) + + ((op0_limb_9_col47) * (op1_limb_15_col82))) + + ((op0_limb_10_col48) * (op1_limb_14_col81))) + + ((op0_limb_11_col49) * (op1_limb_13_col80))) + + ((op0_limb_12_col50) * (op1_limb_12_col79))) + + ((op0_limb_13_col51) * (op1_limb_11_col78))) + + ((op0_limb_14_col52) * (op1_limb_10_col77))) + + ((op0_limb_15_col53) * (op1_limb_9_col76))) + + ((op0_limb_16_col54) * (op1_limb_8_col75))) + + ((op0_limb_17_col55) * (op1_limb_7_col74))) + + ((op0_limb_18_col56) * (op1_limb_6_col73))) + + ((op0_limb_19_col57) * (op1_limb_5_col72))) + + ((op0_limb_20_col58) * (op1_limb_4_col71))) + + ((op0_limb_21_col59) * (op1_limb_3_col70))) + + ((op0_limb_22_col60) * (op1_limb_2_col69))) + + ((op0_limb_23_col61) * (op1_limb_1_col68))) + + ((op0_limb_24_col62) * (op1_limb_0_col67))); + let conv_tmp_1568 = ((((((((((((((((((((((((((((M31_0) + - (dst_limb_25_col34)) + + ((op0_limb_0_col38) * (op1_limb_25_col92))) + + ((op0_limb_1_col39) * (op1_limb_24_col91))) + + ((op0_limb_2_col40) * (op1_limb_23_col90))) + + ((op0_limb_3_col41) * (op1_limb_22_col89))) + + ((op0_limb_4_col42) * (op1_limb_21_col88))) + + ((op0_limb_5_col43) * (op1_limb_20_col87))) + + ((op0_limb_6_col44) * (op1_limb_19_col86))) + + ((op0_limb_7_col45) * (op1_limb_18_col85))) + + ((op0_limb_8_col46) * (op1_limb_17_col84))) + + ((op0_limb_9_col47) * (op1_limb_16_col83))) + + ((op0_limb_10_col48) * (op1_limb_15_col82))) + + ((op0_limb_11_col49) * (op1_limb_14_col81))) + + ((op0_limb_12_col50) * (op1_limb_13_col80))) + + ((op0_limb_13_col51) * (op1_limb_12_col79))) + + ((op0_limb_14_col52) * (op1_limb_11_col78))) + + ((op0_limb_15_col53) * (op1_limb_10_col77))) + + ((op0_limb_16_col54) * (op1_limb_9_col76))) + + ((op0_limb_17_col55) * (op1_limb_8_col75))) + + ((op0_limb_18_col56) * (op1_limb_7_col74))) + + ((op0_limb_19_col57) * (op1_limb_6_col73))) + + ((op0_limb_20_col58) * (op1_limb_5_col72))) + + ((op0_limb_21_col59) * (op1_limb_4_col71))) + + ((op0_limb_22_col60) * (op1_limb_3_col70))) + + ((op0_limb_23_col61) * (op1_limb_2_col69))) + + ((op0_limb_24_col62) * (op1_limb_1_col68))) + + ((op0_limb_25_col63) * (op1_limb_0_col67))); + let conv_tmp_1569 = (((((((((((((((((((((((((((((M31_0) + - (dst_limb_26_col35)) + + ((op0_limb_0_col38) * (op1_limb_26_col93))) + + ((op0_limb_1_col39) * (op1_limb_25_col92))) + + ((op0_limb_2_col40) * (op1_limb_24_col91))) + + ((op0_limb_3_col41) * (op1_limb_23_col90))) + + ((op0_limb_4_col42) * (op1_limb_22_col89))) + + ((op0_limb_5_col43) * (op1_limb_21_col88))) + + ((op0_limb_6_col44) * (op1_limb_20_col87))) + + ((op0_limb_7_col45) * (op1_limb_19_col86))) + + ((op0_limb_8_col46) * (op1_limb_18_col85))) + + ((op0_limb_9_col47) * (op1_limb_17_col84))) + + ((op0_limb_10_col48) * (op1_limb_16_col83))) + + ((op0_limb_11_col49) * (op1_limb_15_col82))) + + ((op0_limb_12_col50) * (op1_limb_14_col81))) + + ((op0_limb_13_col51) * (op1_limb_13_col80))) + + ((op0_limb_14_col52) * (op1_limb_12_col79))) + + ((op0_limb_15_col53) * (op1_limb_11_col78))) + + ((op0_limb_16_col54) * (op1_limb_10_col77))) + + ((op0_limb_17_col55) * (op1_limb_9_col76))) + + ((op0_limb_18_col56) * (op1_limb_8_col75))) + + ((op0_limb_19_col57) * (op1_limb_7_col74))) + + ((op0_limb_20_col58) * (op1_limb_6_col73))) + + ((op0_limb_21_col59) * (op1_limb_5_col72))) + + ((op0_limb_22_col60) * (op1_limb_4_col71))) + + ((op0_limb_23_col61) * (op1_limb_3_col70))) + + ((op0_limb_24_col62) * (op1_limb_2_col69))) + + ((op0_limb_25_col63) * (op1_limb_1_col68))) + + ((op0_limb_26_col64) * (op1_limb_0_col67))); + let conv_tmp_1570 = ((((((((((((((((((((((((((((((M31_0) + - (dst_limb_27_col36)) + + ((op0_limb_0_col38) * (op1_limb_27_col94))) + + ((op0_limb_1_col39) * (op1_limb_26_col93))) + + ((op0_limb_2_col40) * (op1_limb_25_col92))) + + ((op0_limb_3_col41) * (op1_limb_24_col91))) + + ((op0_limb_4_col42) * (op1_limb_23_col90))) + + ((op0_limb_5_col43) * (op1_limb_22_col89))) + + ((op0_limb_6_col44) * (op1_limb_21_col88))) + + ((op0_limb_7_col45) * (op1_limb_20_col87))) + + ((op0_limb_8_col46) * (op1_limb_19_col86))) + + ((op0_limb_9_col47) * (op1_limb_18_col85))) + + ((op0_limb_10_col48) * (op1_limb_17_col84))) + + ((op0_limb_11_col49) * (op1_limb_16_col83))) + + ((op0_limb_12_col50) * (op1_limb_15_col82))) + + ((op0_limb_13_col51) * (op1_limb_14_col81))) + + ((op0_limb_14_col52) * (op1_limb_13_col80))) + + ((op0_limb_15_col53) * (op1_limb_12_col79))) + + ((op0_limb_16_col54) * (op1_limb_11_col78))) + + ((op0_limb_17_col55) * (op1_limb_10_col77))) + + ((op0_limb_18_col56) * (op1_limb_9_col76))) + + ((op0_limb_19_col57) * (op1_limb_8_col75))) + + ((op0_limb_20_col58) * (op1_limb_7_col74))) + + ((op0_limb_21_col59) * (op1_limb_6_col73))) + + ((op0_limb_22_col60) * (op1_limb_5_col72))) + + ((op0_limb_23_col61) * (op1_limb_4_col71))) + + ((op0_limb_24_col62) * (op1_limb_3_col70))) + + ((op0_limb_25_col63) * (op1_limb_2_col69))) + + ((op0_limb_26_col64) * (op1_limb_1_col68))) + + ((op0_limb_27_col65) * (op1_limb_0_col67))); + let conv_tmp_1571 = ((((((((((((((((((((((((((((M31_0) + + ((op0_limb_1_col39) * (op1_limb_27_col94))) + + ((op0_limb_2_col40) * (op1_limb_26_col93))) + + ((op0_limb_3_col41) * (op1_limb_25_col92))) + + ((op0_limb_4_col42) * (op1_limb_24_col91))) + + ((op0_limb_5_col43) * (op1_limb_23_col90))) + + ((op0_limb_6_col44) * (op1_limb_22_col89))) + + ((op0_limb_7_col45) * (op1_limb_21_col88))) + + ((op0_limb_8_col46) * (op1_limb_20_col87))) + + ((op0_limb_9_col47) * (op1_limb_19_col86))) + + ((op0_limb_10_col48) * (op1_limb_18_col85))) + + ((op0_limb_11_col49) * (op1_limb_17_col84))) + + ((op0_limb_12_col50) * (op1_limb_16_col83))) + + ((op0_limb_13_col51) * (op1_limb_15_col82))) + + ((op0_limb_14_col52) * (op1_limb_14_col81))) + + ((op0_limb_15_col53) * (op1_limb_13_col80))) + + ((op0_limb_16_col54) * (op1_limb_12_col79))) + + ((op0_limb_17_col55) * (op1_limb_11_col78))) + + ((op0_limb_18_col56) * (op1_limb_10_col77))) + + ((op0_limb_19_col57) * (op1_limb_9_col76))) + + ((op0_limb_20_col58) * (op1_limb_8_col75))) + + ((op0_limb_21_col59) * (op1_limb_7_col74))) + + ((op0_limb_22_col60) * (op1_limb_6_col73))) + + ((op0_limb_23_col61) * (op1_limb_5_col72))) + + ((op0_limb_24_col62) * (op1_limb_4_col71))) + + ((op0_limb_25_col63) * (op1_limb_3_col70))) + + ((op0_limb_26_col64) * (op1_limb_2_col69))) + + ((op0_limb_27_col65) * (op1_limb_1_col68))); + let conv_tmp_1572 = (((((((((((((((((((((((((((M31_0) + + ((op0_limb_2_col40) * (op1_limb_27_col94))) + + ((op0_limb_3_col41) * (op1_limb_26_col93))) + + ((op0_limb_4_col42) * (op1_limb_25_col92))) + + ((op0_limb_5_col43) * (op1_limb_24_col91))) + + ((op0_limb_6_col44) * (op1_limb_23_col90))) + + ((op0_limb_7_col45) * (op1_limb_22_col89))) + + ((op0_limb_8_col46) * (op1_limb_21_col88))) + + ((op0_limb_9_col47) * (op1_limb_20_col87))) + + ((op0_limb_10_col48) * (op1_limb_19_col86))) + + ((op0_limb_11_col49) * (op1_limb_18_col85))) + + ((op0_limb_12_col50) * (op1_limb_17_col84))) + + ((op0_limb_13_col51) * (op1_limb_16_col83))) + + ((op0_limb_14_col52) * (op1_limb_15_col82))) + + ((op0_limb_15_col53) * (op1_limb_14_col81))) + + ((op0_limb_16_col54) * (op1_limb_13_col80))) + + ((op0_limb_17_col55) * (op1_limb_12_col79))) + + ((op0_limb_18_col56) * (op1_limb_11_col78))) + + ((op0_limb_19_col57) * (op1_limb_10_col77))) + + ((op0_limb_20_col58) * (op1_limb_9_col76))) + + ((op0_limb_21_col59) * (op1_limb_8_col75))) + + ((op0_limb_22_col60) * (op1_limb_7_col74))) + + ((op0_limb_23_col61) * (op1_limb_6_col73))) + + ((op0_limb_24_col62) * (op1_limb_5_col72))) + + ((op0_limb_25_col63) * (op1_limb_4_col71))) + + ((op0_limb_26_col64) * (op1_limb_3_col70))) + + ((op0_limb_27_col65) * (op1_limb_2_col69))); + let conv_tmp_1573 = ((((((((((((((((((((((((((M31_0) + + ((op0_limb_3_col41) * (op1_limb_27_col94))) + + ((op0_limb_4_col42) * (op1_limb_26_col93))) + + ((op0_limb_5_col43) * (op1_limb_25_col92))) + + ((op0_limb_6_col44) * (op1_limb_24_col91))) + + ((op0_limb_7_col45) * (op1_limb_23_col90))) + + ((op0_limb_8_col46) * (op1_limb_22_col89))) + + ((op0_limb_9_col47) * (op1_limb_21_col88))) + + ((op0_limb_10_col48) * (op1_limb_20_col87))) + + ((op0_limb_11_col49) * (op1_limb_19_col86))) + + ((op0_limb_12_col50) * (op1_limb_18_col85))) + + ((op0_limb_13_col51) * (op1_limb_17_col84))) + + ((op0_limb_14_col52) * (op1_limb_16_col83))) + + ((op0_limb_15_col53) * (op1_limb_15_col82))) + + ((op0_limb_16_col54) * (op1_limb_14_col81))) + + ((op0_limb_17_col55) * (op1_limb_13_col80))) + + ((op0_limb_18_col56) * (op1_limb_12_col79))) + + ((op0_limb_19_col57) * (op1_limb_11_col78))) + + ((op0_limb_20_col58) * (op1_limb_10_col77))) + + ((op0_limb_21_col59) * (op1_limb_9_col76))) + + ((op0_limb_22_col60) * (op1_limb_8_col75))) + + ((op0_limb_23_col61) * (op1_limb_7_col74))) + + ((op0_limb_24_col62) * (op1_limb_6_col73))) + + ((op0_limb_25_col63) * (op1_limb_5_col72))) + + ((op0_limb_26_col64) * (op1_limb_4_col71))) + + ((op0_limb_27_col65) * (op1_limb_3_col70))); + let conv_tmp_1574 = (((((((((((((((((((((((((M31_0) + + ((op0_limb_4_col42) * (op1_limb_27_col94))) + + ((op0_limb_5_col43) * (op1_limb_26_col93))) + + ((op0_limb_6_col44) * (op1_limb_25_col92))) + + ((op0_limb_7_col45) * (op1_limb_24_col91))) + + ((op0_limb_8_col46) * (op1_limb_23_col90))) + + ((op0_limb_9_col47) * (op1_limb_22_col89))) + + ((op0_limb_10_col48) * (op1_limb_21_col88))) + + ((op0_limb_11_col49) * (op1_limb_20_col87))) + + ((op0_limb_12_col50) * (op1_limb_19_col86))) + + ((op0_limb_13_col51) * (op1_limb_18_col85))) + + ((op0_limb_14_col52) * (op1_limb_17_col84))) + + ((op0_limb_15_col53) * (op1_limb_16_col83))) + + ((op0_limb_16_col54) * (op1_limb_15_col82))) + + ((op0_limb_17_col55) * (op1_limb_14_col81))) + + ((op0_limb_18_col56) * (op1_limb_13_col80))) + + ((op0_limb_19_col57) * (op1_limb_12_col79))) + + ((op0_limb_20_col58) * (op1_limb_11_col78))) + + ((op0_limb_21_col59) * (op1_limb_10_col77))) + + ((op0_limb_22_col60) * (op1_limb_9_col76))) + + ((op0_limb_23_col61) * (op1_limb_8_col75))) + + ((op0_limb_24_col62) * (op1_limb_7_col74))) + + ((op0_limb_25_col63) * (op1_limb_6_col73))) + + ((op0_limb_26_col64) * (op1_limb_5_col72))) + + ((op0_limb_27_col65) * (op1_limb_4_col71))); + let conv_tmp_1575 = ((((((((((((((((((((((((M31_0) + + ((op0_limb_5_col43) * (op1_limb_27_col94))) + + ((op0_limb_6_col44) * (op1_limb_26_col93))) + + ((op0_limb_7_col45) * (op1_limb_25_col92))) + + ((op0_limb_8_col46) * (op1_limb_24_col91))) + + ((op0_limb_9_col47) * (op1_limb_23_col90))) + + ((op0_limb_10_col48) * (op1_limb_22_col89))) + + ((op0_limb_11_col49) * (op1_limb_21_col88))) + + ((op0_limb_12_col50) * (op1_limb_20_col87))) + + ((op0_limb_13_col51) * (op1_limb_19_col86))) + + ((op0_limb_14_col52) * (op1_limb_18_col85))) + + ((op0_limb_15_col53) * (op1_limb_17_col84))) + + ((op0_limb_16_col54) * (op1_limb_16_col83))) + + ((op0_limb_17_col55) * (op1_limb_15_col82))) + + ((op0_limb_18_col56) * (op1_limb_14_col81))) + + ((op0_limb_19_col57) * (op1_limb_13_col80))) + + ((op0_limb_20_col58) * (op1_limb_12_col79))) + + ((op0_limb_21_col59) * (op1_limb_11_col78))) + + ((op0_limb_22_col60) * (op1_limb_10_col77))) + + ((op0_limb_23_col61) * (op1_limb_9_col76))) + + ((op0_limb_24_col62) * (op1_limb_8_col75))) + + ((op0_limb_25_col63) * (op1_limb_7_col74))) + + ((op0_limb_26_col64) * (op1_limb_6_col73))) + + ((op0_limb_27_col65) * (op1_limb_5_col72))); + let conv_tmp_1576 = (((((((((((((((((((((((M31_0) + + ((op0_limb_6_col44) * (op1_limb_27_col94))) + + ((op0_limb_7_col45) * (op1_limb_26_col93))) + + ((op0_limb_8_col46) * (op1_limb_25_col92))) + + ((op0_limb_9_col47) * (op1_limb_24_col91))) + + ((op0_limb_10_col48) * (op1_limb_23_col90))) + + ((op0_limb_11_col49) * (op1_limb_22_col89))) + + ((op0_limb_12_col50) * (op1_limb_21_col88))) + + ((op0_limb_13_col51) * (op1_limb_20_col87))) + + ((op0_limb_14_col52) * (op1_limb_19_col86))) + + ((op0_limb_15_col53) * (op1_limb_18_col85))) + + ((op0_limb_16_col54) * (op1_limb_17_col84))) + + ((op0_limb_17_col55) * (op1_limb_16_col83))) + + ((op0_limb_18_col56) * (op1_limb_15_col82))) + + ((op0_limb_19_col57) * (op1_limb_14_col81))) + + ((op0_limb_20_col58) * (op1_limb_13_col80))) + + ((op0_limb_21_col59) * (op1_limb_12_col79))) + + ((op0_limb_22_col60) * (op1_limb_11_col78))) + + ((op0_limb_23_col61) * (op1_limb_10_col77))) + + ((op0_limb_24_col62) * (op1_limb_9_col76))) + + ((op0_limb_25_col63) * (op1_limb_8_col75))) + + ((op0_limb_26_col64) * (op1_limb_7_col74))) + + ((op0_limb_27_col65) * (op1_limb_6_col73))); + let conv_tmp_1577 = ((((((((((((((((((((((M31_0) + + ((op0_limb_7_col45) * (op1_limb_27_col94))) + + ((op0_limb_8_col46) * (op1_limb_26_col93))) + + ((op0_limb_9_col47) * (op1_limb_25_col92))) + + ((op0_limb_10_col48) * (op1_limb_24_col91))) + + ((op0_limb_11_col49) * (op1_limb_23_col90))) + + ((op0_limb_12_col50) * (op1_limb_22_col89))) + + ((op0_limb_13_col51) * (op1_limb_21_col88))) + + ((op0_limb_14_col52) * (op1_limb_20_col87))) + + ((op0_limb_15_col53) * (op1_limb_19_col86))) + + ((op0_limb_16_col54) * (op1_limb_18_col85))) + + ((op0_limb_17_col55) * (op1_limb_17_col84))) + + ((op0_limb_18_col56) * (op1_limb_16_col83))) + + ((op0_limb_19_col57) * (op1_limb_15_col82))) + + ((op0_limb_20_col58) * (op1_limb_14_col81))) + + ((op0_limb_21_col59) * (op1_limb_13_col80))) + + ((op0_limb_22_col60) * (op1_limb_12_col79))) + + ((op0_limb_23_col61) * (op1_limb_11_col78))) + + ((op0_limb_24_col62) * (op1_limb_10_col77))) + + ((op0_limb_25_col63) * (op1_limb_9_col76))) + + ((op0_limb_26_col64) * (op1_limb_8_col75))) + + ((op0_limb_27_col65) * (op1_limb_7_col74))); + let conv_tmp_1578 = (((((((((((((((((((((M31_0) + + ((op0_limb_8_col46) * (op1_limb_27_col94))) + + ((op0_limb_9_col47) * (op1_limb_26_col93))) + + ((op0_limb_10_col48) * (op1_limb_25_col92))) + + ((op0_limb_11_col49) * (op1_limb_24_col91))) + + ((op0_limb_12_col50) * (op1_limb_23_col90))) + + ((op0_limb_13_col51) * (op1_limb_22_col89))) + + ((op0_limb_14_col52) * (op1_limb_21_col88))) + + ((op0_limb_15_col53) * (op1_limb_20_col87))) + + ((op0_limb_16_col54) * (op1_limb_19_col86))) + + ((op0_limb_17_col55) * (op1_limb_18_col85))) + + ((op0_limb_18_col56) * (op1_limb_17_col84))) + + ((op0_limb_19_col57) * (op1_limb_16_col83))) + + ((op0_limb_20_col58) * (op1_limb_15_col82))) + + ((op0_limb_21_col59) * (op1_limb_14_col81))) + + ((op0_limb_22_col60) * (op1_limb_13_col80))) + + ((op0_limb_23_col61) * (op1_limb_12_col79))) + + ((op0_limb_24_col62) * (op1_limb_11_col78))) + + ((op0_limb_25_col63) * (op1_limb_10_col77))) + + ((op0_limb_26_col64) * (op1_limb_9_col76))) + + ((op0_limb_27_col65) * (op1_limb_8_col75))); + let conv_tmp_1579 = ((((((((((((((((((((M31_0) + + ((op0_limb_9_col47) * (op1_limb_27_col94))) + + ((op0_limb_10_col48) * (op1_limb_26_col93))) + + ((op0_limb_11_col49) * (op1_limb_25_col92))) + + ((op0_limb_12_col50) * (op1_limb_24_col91))) + + ((op0_limb_13_col51) * (op1_limb_23_col90))) + + ((op0_limb_14_col52) * (op1_limb_22_col89))) + + ((op0_limb_15_col53) * (op1_limb_21_col88))) + + ((op0_limb_16_col54) * (op1_limb_20_col87))) + + ((op0_limb_17_col55) * (op1_limb_19_col86))) + + ((op0_limb_18_col56) * (op1_limb_18_col85))) + + ((op0_limb_19_col57) * (op1_limb_17_col84))) + + ((op0_limb_20_col58) * (op1_limb_16_col83))) + + ((op0_limb_21_col59) * (op1_limb_15_col82))) + + ((op0_limb_22_col60) * (op1_limb_14_col81))) + + ((op0_limb_23_col61) * (op1_limb_13_col80))) + + ((op0_limb_24_col62) * (op1_limb_12_col79))) + + ((op0_limb_25_col63) * (op1_limb_11_col78))) + + ((op0_limb_26_col64) * (op1_limb_10_col77))) + + ((op0_limb_27_col65) * (op1_limb_9_col76))); + let conv_tmp_1580 = (((((((((((((((((((M31_0) + + ((op0_limb_10_col48) * (op1_limb_27_col94))) + + ((op0_limb_11_col49) * (op1_limb_26_col93))) + + ((op0_limb_12_col50) * (op1_limb_25_col92))) + + ((op0_limb_13_col51) * (op1_limb_24_col91))) + + ((op0_limb_14_col52) * (op1_limb_23_col90))) + + ((op0_limb_15_col53) * (op1_limb_22_col89))) + + ((op0_limb_16_col54) * (op1_limb_21_col88))) + + ((op0_limb_17_col55) * (op1_limb_20_col87))) + + ((op0_limb_18_col56) * (op1_limb_19_col86))) + + ((op0_limb_19_col57) * (op1_limb_18_col85))) + + ((op0_limb_20_col58) * (op1_limb_17_col84))) + + ((op0_limb_21_col59) * (op1_limb_16_col83))) + + ((op0_limb_22_col60) * (op1_limb_15_col82))) + + ((op0_limb_23_col61) * (op1_limb_14_col81))) + + ((op0_limb_24_col62) * (op1_limb_13_col80))) + + ((op0_limb_25_col63) * (op1_limb_12_col79))) + + ((op0_limb_26_col64) * (op1_limb_11_col78))) + + ((op0_limb_27_col65) * (op1_limb_10_col77))); + let conv_tmp_1581 = ((((((((((((((((((M31_0) + + ((op0_limb_11_col49) * (op1_limb_27_col94))) + + ((op0_limb_12_col50) * (op1_limb_26_col93))) + + ((op0_limb_13_col51) * (op1_limb_25_col92))) + + ((op0_limb_14_col52) * (op1_limb_24_col91))) + + ((op0_limb_15_col53) * (op1_limb_23_col90))) + + ((op0_limb_16_col54) * (op1_limb_22_col89))) + + ((op0_limb_17_col55) * (op1_limb_21_col88))) + + ((op0_limb_18_col56) * (op1_limb_20_col87))) + + ((op0_limb_19_col57) * (op1_limb_19_col86))) + + ((op0_limb_20_col58) * (op1_limb_18_col85))) + + ((op0_limb_21_col59) * (op1_limb_17_col84))) + + ((op0_limb_22_col60) * (op1_limb_16_col83))) + + ((op0_limb_23_col61) * (op1_limb_15_col82))) + + ((op0_limb_24_col62) * (op1_limb_14_col81))) + + ((op0_limb_25_col63) * (op1_limb_13_col80))) + + ((op0_limb_26_col64) * (op1_limb_12_col79))) + + ((op0_limb_27_col65) * (op1_limb_11_col78))); + let conv_tmp_1582 = (((((((((((((((((M31_0) + + ((op0_limb_12_col50) * (op1_limb_27_col94))) + + ((op0_limb_13_col51) * (op1_limb_26_col93))) + + ((op0_limb_14_col52) * (op1_limb_25_col92))) + + ((op0_limb_15_col53) * (op1_limb_24_col91))) + + ((op0_limb_16_col54) * (op1_limb_23_col90))) + + ((op0_limb_17_col55) * (op1_limb_22_col89))) + + ((op0_limb_18_col56) * (op1_limb_21_col88))) + + ((op0_limb_19_col57) * (op1_limb_20_col87))) + + ((op0_limb_20_col58) * (op1_limb_19_col86))) + + ((op0_limb_21_col59) * (op1_limb_18_col85))) + + ((op0_limb_22_col60) * (op1_limb_17_col84))) + + ((op0_limb_23_col61) * (op1_limb_16_col83))) + + ((op0_limb_24_col62) * (op1_limb_15_col82))) + + ((op0_limb_25_col63) * (op1_limb_14_col81))) + + ((op0_limb_26_col64) * (op1_limb_13_col80))) + + ((op0_limb_27_col65) * (op1_limb_12_col79))); + let conv_tmp_1583 = ((((((((((((((((M31_0) + + ((op0_limb_13_col51) * (op1_limb_27_col94))) + + ((op0_limb_14_col52) * (op1_limb_26_col93))) + + ((op0_limb_15_col53) * (op1_limb_25_col92))) + + ((op0_limb_16_col54) * (op1_limb_24_col91))) + + ((op0_limb_17_col55) * (op1_limb_23_col90))) + + ((op0_limb_18_col56) * (op1_limb_22_col89))) + + ((op0_limb_19_col57) * (op1_limb_21_col88))) + + ((op0_limb_20_col58) * (op1_limb_20_col87))) + + ((op0_limb_21_col59) * (op1_limb_19_col86))) + + ((op0_limb_22_col60) * (op1_limb_18_col85))) + + ((op0_limb_23_col61) * (op1_limb_17_col84))) + + ((op0_limb_24_col62) * (op1_limb_16_col83))) + + ((op0_limb_25_col63) * (op1_limb_15_col82))) + + ((op0_limb_26_col64) * (op1_limb_14_col81))) + + ((op0_limb_27_col65) * (op1_limb_13_col80))); + let conv_tmp_1584 = (((((((((((((((M31_0) + + ((op0_limb_14_col52) * (op1_limb_27_col94))) + + ((op0_limb_15_col53) * (op1_limb_26_col93))) + + ((op0_limb_16_col54) * (op1_limb_25_col92))) + + ((op0_limb_17_col55) * (op1_limb_24_col91))) + + ((op0_limb_18_col56) * (op1_limb_23_col90))) + + ((op0_limb_19_col57) * (op1_limb_22_col89))) + + ((op0_limb_20_col58) * (op1_limb_21_col88))) + + ((op0_limb_21_col59) * (op1_limb_20_col87))) + + ((op0_limb_22_col60) * (op1_limb_19_col86))) + + ((op0_limb_23_col61) * (op1_limb_18_col85))) + + ((op0_limb_24_col62) * (op1_limb_17_col84))) + + ((op0_limb_25_col63) * (op1_limb_16_col83))) + + ((op0_limb_26_col64) * (op1_limb_15_col82))) + + ((op0_limb_27_col65) * (op1_limb_14_col81))); + let conv_tmp_1585 = ((((((((((((((M31_0) + + ((op0_limb_15_col53) * (op1_limb_27_col94))) + + ((op0_limb_16_col54) * (op1_limb_26_col93))) + + ((op0_limb_17_col55) * (op1_limb_25_col92))) + + ((op0_limb_18_col56) * (op1_limb_24_col91))) + + ((op0_limb_19_col57) * (op1_limb_23_col90))) + + ((op0_limb_20_col58) * (op1_limb_22_col89))) + + ((op0_limb_21_col59) * (op1_limb_21_col88))) + + ((op0_limb_22_col60) * (op1_limb_20_col87))) + + ((op0_limb_23_col61) * (op1_limb_19_col86))) + + ((op0_limb_24_col62) * (op1_limb_18_col85))) + + ((op0_limb_25_col63) * (op1_limb_17_col84))) + + ((op0_limb_26_col64) * (op1_limb_16_col83))) + + ((op0_limb_27_col65) * (op1_limb_15_col82))); + let conv_tmp_1586 = (((((((((((((M31_0) + + ((op0_limb_16_col54) * (op1_limb_27_col94))) + + ((op0_limb_17_col55) * (op1_limb_26_col93))) + + ((op0_limb_18_col56) * (op1_limb_25_col92))) + + ((op0_limb_19_col57) * (op1_limb_24_col91))) + + ((op0_limb_20_col58) * (op1_limb_23_col90))) + + ((op0_limb_21_col59) * (op1_limb_22_col89))) + + ((op0_limb_22_col60) * (op1_limb_21_col88))) + + ((op0_limb_23_col61) * (op1_limb_20_col87))) + + ((op0_limb_24_col62) * (op1_limb_19_col86))) + + ((op0_limb_25_col63) * (op1_limb_18_col85))) + + ((op0_limb_26_col64) * (op1_limb_17_col84))) + + ((op0_limb_27_col65) * (op1_limb_16_col83))); + let conv_tmp_1587 = ((((((((((((M31_0) + + ((op0_limb_17_col55) * (op1_limb_27_col94))) + + ((op0_limb_18_col56) * (op1_limb_26_col93))) + + ((op0_limb_19_col57) * (op1_limb_25_col92))) + + ((op0_limb_20_col58) * (op1_limb_24_col91))) + + ((op0_limb_21_col59) * (op1_limb_23_col90))) + + ((op0_limb_22_col60) * (op1_limb_22_col89))) + + ((op0_limb_23_col61) * (op1_limb_21_col88))) + + ((op0_limb_24_col62) * (op1_limb_20_col87))) + + ((op0_limb_25_col63) * (op1_limb_19_col86))) + + ((op0_limb_26_col64) * (op1_limb_18_col85))) + + ((op0_limb_27_col65) * (op1_limb_17_col84))); + let conv_tmp_1588 = (((((((((((M31_0) + + ((op0_limb_18_col56) * (op1_limb_27_col94))) + + ((op0_limb_19_col57) * (op1_limb_26_col93))) + + ((op0_limb_20_col58) * (op1_limb_25_col92))) + + ((op0_limb_21_col59) * (op1_limb_24_col91))) + + ((op0_limb_22_col60) * (op1_limb_23_col90))) + + ((op0_limb_23_col61) * (op1_limb_22_col89))) + + ((op0_limb_24_col62) * (op1_limb_21_col88))) + + ((op0_limb_25_col63) * (op1_limb_20_col87))) + + ((op0_limb_26_col64) * (op1_limb_19_col86))) + + ((op0_limb_27_col65) * (op1_limb_18_col85))); + let conv_tmp_1589 = ((((((((((M31_0) + + ((op0_limb_19_col57) * (op1_limb_27_col94))) + + ((op0_limb_20_col58) * (op1_limb_26_col93))) + + ((op0_limb_21_col59) * (op1_limb_25_col92))) + + ((op0_limb_22_col60) * (op1_limb_24_col91))) + + ((op0_limb_23_col61) * (op1_limb_23_col90))) + + ((op0_limb_24_col62) * (op1_limb_22_col89))) + + ((op0_limb_25_col63) * (op1_limb_21_col88))) + + ((op0_limb_26_col64) * (op1_limb_20_col87))) + + ((op0_limb_27_col65) * (op1_limb_19_col86))); + let conv_tmp_1590 = (((((((((M31_0) + + ((op0_limb_20_col58) * (op1_limb_27_col94))) + + ((op0_limb_21_col59) * (op1_limb_26_col93))) + + ((op0_limb_22_col60) * (op1_limb_25_col92))) + + ((op0_limb_23_col61) * (op1_limb_24_col91))) + + ((op0_limb_24_col62) * (op1_limb_23_col90))) + + ((op0_limb_25_col63) * (op1_limb_22_col89))) + + ((op0_limb_26_col64) * (op1_limb_21_col88))) + + ((op0_limb_27_col65) * (op1_limb_20_col87))); + let conv_tmp_1591 = ((((((((M31_0) + ((op0_limb_21_col59) * (op1_limb_27_col94))) + + ((op0_limb_22_col60) * (op1_limb_26_col93))) + + ((op0_limb_23_col61) * (op1_limb_25_col92))) + + ((op0_limb_24_col62) * (op1_limb_24_col91))) + + ((op0_limb_25_col63) * (op1_limb_23_col90))) + + ((op0_limb_26_col64) * (op1_limb_22_col89))) + + ((op0_limb_27_col65) * (op1_limb_21_col88))); + let conv_tmp_1592 = (((((((M31_0) + ((op0_limb_22_col60) * (op1_limb_27_col94))) + + ((op0_limb_23_col61) * (op1_limb_26_col93))) + + ((op0_limb_24_col62) * (op1_limb_25_col92))) + + ((op0_limb_25_col63) * (op1_limb_24_col91))) + + ((op0_limb_26_col64) * (op1_limb_23_col90))) + + ((op0_limb_27_col65) * (op1_limb_22_col89))); + let conv_tmp_1593 = ((((((M31_0) + ((op0_limb_23_col61) * (op1_limb_27_col94))) + + ((op0_limb_24_col62) * (op1_limb_26_col93))) + + ((op0_limb_25_col63) * (op1_limb_25_col92))) + + ((op0_limb_26_col64) * (op1_limb_24_col91))) + + ((op0_limb_27_col65) * (op1_limb_23_col90))); + let conv_tmp_1594 = (((((M31_0) + ((op0_limb_24_col62) * (op1_limb_27_col94))) + + ((op0_limb_25_col63) * (op1_limb_26_col93))) + + ((op0_limb_26_col64) * (op1_limb_25_col92))) + + ((op0_limb_27_col65) * (op1_limb_24_col91))); + let conv_tmp_1595 = ((((M31_0) + ((op0_limb_25_col63) * (op1_limb_27_col94))) + + ((op0_limb_26_col64) * (op1_limb_26_col93))) + + ((op0_limb_27_col65) * (op1_limb_25_col92))); + let conv_tmp_1596 = (((M31_0) + ((op0_limb_26_col64) * (op1_limb_27_col94))) + + ((op0_limb_27_col65) * (op1_limb_26_col93))); + let conv_tmp_1597 = ((M31_0) + ((op0_limb_27_col65) * (op1_limb_27_col94))); + let conv_mod_tmp_1598 = ((((M31_0) + ((M31_32) * (conv_tmp_1543))) + - ((M31_4) * (conv_tmp_1564))) + + ((M31_8) * (conv_tmp_1592))); + let conv_mod_tmp_1599 = (((((M31_0) + ((M31_1) * (conv_tmp_1543))) + + ((M31_32) * (conv_tmp_1544))) + - ((M31_4) * (conv_tmp_1565))) + + ((M31_8) * (conv_tmp_1593))); + let conv_mod_tmp_1600 = (((((M31_0) + ((M31_1) * (conv_tmp_1544))) + + ((M31_32) * (conv_tmp_1545))) + - ((M31_4) * (conv_tmp_1566))) + + ((M31_8) * (conv_tmp_1594))); + let conv_mod_tmp_1601 = (((((M31_0) + ((M31_1) * (conv_tmp_1545))) + + ((M31_32) * (conv_tmp_1546))) + - ((M31_4) * (conv_tmp_1567))) + + ((M31_8) * (conv_tmp_1595))); + let conv_mod_tmp_1602 = (((((M31_0) + ((M31_1) * (conv_tmp_1546))) + + ((M31_32) * (conv_tmp_1547))) + - ((M31_4) * (conv_tmp_1568))) + + ((M31_8) * (conv_tmp_1596))); + let conv_mod_tmp_1603 = (((((M31_0) + ((M31_1) * (conv_tmp_1547))) + + ((M31_32) * (conv_tmp_1548))) + - ((M31_4) * (conv_tmp_1569))) + + ((M31_8) * (conv_tmp_1597))); + let conv_mod_tmp_1604 = ((((M31_0) + ((M31_1) * (conv_tmp_1548))) + + ((M31_32) * (conv_tmp_1549))) + - ((M31_4) * (conv_tmp_1570))); + let conv_mod_tmp_1605 = (((((M31_0) + ((M31_2) * (conv_tmp_1543))) + + ((M31_1) * (conv_tmp_1549))) + + ((M31_32) * (conv_tmp_1550))) + - ((M31_4) * (conv_tmp_1571))); + let conv_mod_tmp_1606 = (((((M31_0) + ((M31_2) * (conv_tmp_1544))) + + ((M31_1) * (conv_tmp_1550))) + + ((M31_32) * (conv_tmp_1551))) + - ((M31_4) * (conv_tmp_1572))); + let conv_mod_tmp_1607 = (((((M31_0) + ((M31_2) * (conv_tmp_1545))) + + ((M31_1) * (conv_tmp_1551))) + + ((M31_32) * (conv_tmp_1552))) + - ((M31_4) * (conv_tmp_1573))); + let conv_mod_tmp_1608 = (((((M31_0) + ((M31_2) * (conv_tmp_1546))) + + ((M31_1) * (conv_tmp_1552))) + + ((M31_32) * (conv_tmp_1553))) + - ((M31_4) * (conv_tmp_1574))); + let conv_mod_tmp_1609 = (((((M31_0) + ((M31_2) * (conv_tmp_1547))) + + ((M31_1) * (conv_tmp_1553))) + + ((M31_32) * (conv_tmp_1554))) + - ((M31_4) * (conv_tmp_1575))); + let conv_mod_tmp_1610 = (((((M31_0) + ((M31_2) * (conv_tmp_1548))) + + ((M31_1) * (conv_tmp_1554))) + + ((M31_32) * (conv_tmp_1555))) + - ((M31_4) * (conv_tmp_1576))); + let conv_mod_tmp_1611 = (((((M31_0) + ((M31_2) * (conv_tmp_1549))) + + ((M31_1) * (conv_tmp_1555))) + + ((M31_32) * (conv_tmp_1556))) + - ((M31_4) * (conv_tmp_1577))); + let conv_mod_tmp_1612 = (((((M31_0) + ((M31_2) * (conv_tmp_1550))) + + ((M31_1) * (conv_tmp_1556))) + + ((M31_32) * (conv_tmp_1557))) + - ((M31_4) * (conv_tmp_1578))); + let conv_mod_tmp_1613 = (((((M31_0) + ((M31_2) * (conv_tmp_1551))) + + ((M31_1) * (conv_tmp_1557))) + + ((M31_32) * (conv_tmp_1558))) + - ((M31_4) * (conv_tmp_1579))); + let conv_mod_tmp_1614 = (((((M31_0) + ((M31_2) * (conv_tmp_1552))) + + ((M31_1) * (conv_tmp_1558))) + + ((M31_32) * (conv_tmp_1559))) + - ((M31_4) * (conv_tmp_1580))); + let conv_mod_tmp_1615 = (((((M31_0) + ((M31_2) * (conv_tmp_1553))) + + ((M31_1) * (conv_tmp_1559))) + + ((M31_32) * (conv_tmp_1560))) + - ((M31_4) * (conv_tmp_1581))); + let conv_mod_tmp_1616 = (((((M31_0) + ((M31_2) * (conv_tmp_1554))) + + ((M31_1) * (conv_tmp_1560))) + + ((M31_32) * (conv_tmp_1561))) + - ((M31_4) * (conv_tmp_1582))); + let conv_mod_tmp_1617 = (((((M31_0) + ((M31_2) * (conv_tmp_1555))) + + ((M31_1) * (conv_tmp_1561))) + + ((M31_32) * (conv_tmp_1562))) + - ((M31_4) * (conv_tmp_1583))); + let conv_mod_tmp_1618 = (((((M31_0) + ((M31_2) * (conv_tmp_1556))) + + ((M31_1) * (conv_tmp_1562))) + + ((M31_32) * (conv_tmp_1563))) + - ((M31_4) * (conv_tmp_1584))); + let conv_mod_tmp_1619 = (((((M31_0) + ((M31_2) * (conv_tmp_1557))) + + ((M31_1) * (conv_tmp_1563))) + - ((M31_4) * (conv_tmp_1585))) + + ((M31_64) * (conv_tmp_1592))); + let conv_mod_tmp_1620 = (((((M31_0) + ((M31_2) * (conv_tmp_1558))) + - ((M31_4) * (conv_tmp_1586))) + + ((M31_2) * (conv_tmp_1592))) + + ((M31_64) * (conv_tmp_1593))); + let conv_mod_tmp_1621 = (((((M31_0) + ((M31_2) * (conv_tmp_1559))) + - ((M31_4) * (conv_tmp_1587))) + + ((M31_2) * (conv_tmp_1593))) + + ((M31_64) * (conv_tmp_1594))); + let conv_mod_tmp_1622 = (((((M31_0) + ((M31_2) * (conv_tmp_1560))) + - ((M31_4) * (conv_tmp_1588))) + + ((M31_2) * (conv_tmp_1594))) + + ((M31_64) * (conv_tmp_1595))); + let conv_mod_tmp_1623 = (((((M31_0) + ((M31_2) * (conv_tmp_1561))) + - ((M31_4) * (conv_tmp_1589))) + + ((M31_2) * (conv_tmp_1595))) + + ((M31_64) * (conv_tmp_1596))); + let conv_mod_tmp_1624 = (((((M31_0) + ((M31_2) * (conv_tmp_1562))) + - ((M31_4) * (conv_tmp_1590))) + + ((M31_2) * (conv_tmp_1596))) + + ((M31_64) * (conv_tmp_1597))); + let conv_mod_tmp_1625 = ((((M31_0) + ((M31_2) * (conv_tmp_1563))) + - ((M31_4) * (conv_tmp_1591))) + + ((M31_2) * (conv_tmp_1597))); + let k_mod_2_18_biased_tmp_1626 = + ((((PackedUInt32::from_m31(((conv_mod_tmp_1598) + (M31_134217728)))) + + (((PackedUInt32::from_m31(((conv_mod_tmp_1599) + (M31_134217728)))) + & (UInt32_511)) + << (UInt32_9))) + + (UInt32_65536)) + & (UInt32_262143)); + let k_col95 = ((k_mod_2_18_biased_tmp_1626.low().as_m31()) + + (((k_mod_2_18_biased_tmp_1626.high().as_m31()) - (M31_1)) * (M31_65536))); + trace[95].data[row_index] = k_col95; + + sub_components_inputs.range_check_19_inputs[0] + .extend([((k_col95) + (M31_262144))].unpack()); + + lookup_data.rangecheck_19[0].push([((k_col95) + (M31_262144))]); + let carry_0_col96 = + ((((conv_mod_tmp_1598) - ((M31_1) * (k_col95))) + (M31_0)) * (M31_4194304)); + trace[96].data[row_index] = carry_0_col96; + + sub_components_inputs.range_check_19_inputs[1] + .extend([((carry_0_col96) + (M31_131072))].unpack()); + + lookup_data.rangecheck_19[1].push([((carry_0_col96) + (M31_131072))]); + let carry_1_col97 = (((conv_mod_tmp_1599) + (carry_0_col96)) * (M31_4194304)); + trace[97].data[row_index] = carry_1_col97; + + sub_components_inputs.range_check_19_inputs[2] + .extend([((carry_1_col97) + (M31_131072))].unpack()); + + lookup_data.rangecheck_19[2].push([((carry_1_col97) + (M31_131072))]); + let carry_2_col98 = (((conv_mod_tmp_1600) + (carry_1_col97)) * (M31_4194304)); + trace[98].data[row_index] = carry_2_col98; + + sub_components_inputs.range_check_19_inputs[3] + .extend([((carry_2_col98) + (M31_131072))].unpack()); + + lookup_data.rangecheck_19[3].push([((carry_2_col98) + (M31_131072))]); + let carry_3_col99 = (((conv_mod_tmp_1601) + (carry_2_col98)) * (M31_4194304)); + trace[99].data[row_index] = carry_3_col99; + + sub_components_inputs.range_check_19_inputs[4] + .extend([((carry_3_col99) + (M31_131072))].unpack()); + + lookup_data.rangecheck_19[4].push([((carry_3_col99) + (M31_131072))]); + let carry_4_col100 = (((conv_mod_tmp_1602) + (carry_3_col99)) * (M31_4194304)); + trace[100].data[row_index] = carry_4_col100; + + sub_components_inputs.range_check_19_inputs[5] + .extend([((carry_4_col100) + (M31_131072))].unpack()); + + lookup_data.rangecheck_19[5].push([((carry_4_col100) + (M31_131072))]); + let carry_5_col101 = (((conv_mod_tmp_1603) + (carry_4_col100)) * (M31_4194304)); + trace[101].data[row_index] = carry_5_col101; + + sub_components_inputs.range_check_19_inputs[6] + .extend([((carry_5_col101) + (M31_131072))].unpack()); + + lookup_data.rangecheck_19[6].push([((carry_5_col101) + (M31_131072))]); + let carry_6_col102 = (((conv_mod_tmp_1604) + (carry_5_col101)) * (M31_4194304)); + trace[102].data[row_index] = carry_6_col102; + + sub_components_inputs.range_check_19_inputs[7] + .extend([((carry_6_col102) + (M31_131072))].unpack()); + + lookup_data.rangecheck_19[7].push([((carry_6_col102) + (M31_131072))]); + let carry_7_col103 = (((conv_mod_tmp_1605) + (carry_6_col102)) * (M31_4194304)); + trace[103].data[row_index] = carry_7_col103; + + sub_components_inputs.range_check_19_inputs[8] + .extend([((carry_7_col103) + (M31_131072))].unpack()); + + lookup_data.rangecheck_19[8].push([((carry_7_col103) + (M31_131072))]); + let carry_8_col104 = (((conv_mod_tmp_1606) + (carry_7_col103)) * (M31_4194304)); + trace[104].data[row_index] = carry_8_col104; + + sub_components_inputs.range_check_19_inputs[9] + .extend([((carry_8_col104) + (M31_131072))].unpack()); + + lookup_data.rangecheck_19[9].push([((carry_8_col104) + (M31_131072))]); + let carry_9_col105 = (((conv_mod_tmp_1607) + (carry_8_col104)) * (M31_4194304)); + trace[105].data[row_index] = carry_9_col105; + + sub_components_inputs.range_check_19_inputs[10] + .extend([((carry_9_col105) + (M31_131072))].unpack()); + + lookup_data.rangecheck_19[10].push([((carry_9_col105) + (M31_131072))]); + let carry_10_col106 = (((conv_mod_tmp_1608) + (carry_9_col105)) * (M31_4194304)); + trace[106].data[row_index] = carry_10_col106; + + sub_components_inputs.range_check_19_inputs[11] + .extend([((carry_10_col106) + (M31_131072))].unpack()); + + lookup_data.rangecheck_19[11].push([((carry_10_col106) + (M31_131072))]); + let carry_11_col107 = (((conv_mod_tmp_1609) + (carry_10_col106)) * (M31_4194304)); + trace[107].data[row_index] = carry_11_col107; + + sub_components_inputs.range_check_19_inputs[12] + .extend([((carry_11_col107) + (M31_131072))].unpack()); + + lookup_data.rangecheck_19[12].push([((carry_11_col107) + (M31_131072))]); + let carry_12_col108 = (((conv_mod_tmp_1610) + (carry_11_col107)) * (M31_4194304)); + trace[108].data[row_index] = carry_12_col108; + + sub_components_inputs.range_check_19_inputs[13] + .extend([((carry_12_col108) + (M31_131072))].unpack()); + + lookup_data.rangecheck_19[13].push([((carry_12_col108) + (M31_131072))]); + let carry_13_col109 = (((conv_mod_tmp_1611) + (carry_12_col108)) * (M31_4194304)); + trace[109].data[row_index] = carry_13_col109; + + sub_components_inputs.range_check_19_inputs[14] + .extend([((carry_13_col109) + (M31_131072))].unpack()); + + lookup_data.rangecheck_19[14].push([((carry_13_col109) + (M31_131072))]); + let carry_14_col110 = (((conv_mod_tmp_1612) + (carry_13_col109)) * (M31_4194304)); + trace[110].data[row_index] = carry_14_col110; + + sub_components_inputs.range_check_19_inputs[15] + .extend([((carry_14_col110) + (M31_131072))].unpack()); + + lookup_data.rangecheck_19[15].push([((carry_14_col110) + (M31_131072))]); + let carry_15_col111 = (((conv_mod_tmp_1613) + (carry_14_col110)) * (M31_4194304)); + trace[111].data[row_index] = carry_15_col111; + + sub_components_inputs.range_check_19_inputs[16] + .extend([((carry_15_col111) + (M31_131072))].unpack()); + + lookup_data.rangecheck_19[16].push([((carry_15_col111) + (M31_131072))]); + let carry_16_col112 = (((conv_mod_tmp_1614) + (carry_15_col111)) * (M31_4194304)); + trace[112].data[row_index] = carry_16_col112; + + sub_components_inputs.range_check_19_inputs[17] + .extend([((carry_16_col112) + (M31_131072))].unpack()); + + lookup_data.rangecheck_19[17].push([((carry_16_col112) + (M31_131072))]); + let carry_17_col113 = (((conv_mod_tmp_1615) + (carry_16_col112)) * (M31_4194304)); + trace[113].data[row_index] = carry_17_col113; + + sub_components_inputs.range_check_19_inputs[18] + .extend([((carry_17_col113) + (M31_131072))].unpack()); + + lookup_data.rangecheck_19[18].push([((carry_17_col113) + (M31_131072))]); + let carry_18_col114 = (((conv_mod_tmp_1616) + (carry_17_col113)) * (M31_4194304)); + trace[114].data[row_index] = carry_18_col114; + + sub_components_inputs.range_check_19_inputs[19] + .extend([((carry_18_col114) + (M31_131072))].unpack()); + + lookup_data.rangecheck_19[19].push([((carry_18_col114) + (M31_131072))]); + let carry_19_col115 = (((conv_mod_tmp_1617) + (carry_18_col114)) * (M31_4194304)); + trace[115].data[row_index] = carry_19_col115; + + sub_components_inputs.range_check_19_inputs[20] + .extend([((carry_19_col115) + (M31_131072))].unpack()); + + lookup_data.rangecheck_19[20].push([((carry_19_col115) + (M31_131072))]); + let carry_20_col116 = (((conv_mod_tmp_1618) + (carry_19_col115)) * (M31_4194304)); + trace[116].data[row_index] = carry_20_col116; + + sub_components_inputs.range_check_19_inputs[21] + .extend([((carry_20_col116) + (M31_131072))].unpack()); + + lookup_data.rangecheck_19[21].push([((carry_20_col116) + (M31_131072))]); + let carry_21_col117 = ((((conv_mod_tmp_1619) - ((M31_136) * (k_col95))) + + (carry_20_col116)) + * (M31_4194304)); + trace[117].data[row_index] = carry_21_col117; + + sub_components_inputs.range_check_19_inputs[22] + .extend([((carry_21_col117) + (M31_131072))].unpack()); + + lookup_data.rangecheck_19[22].push([((carry_21_col117) + (M31_131072))]); + let carry_22_col118 = (((conv_mod_tmp_1620) + (carry_21_col117)) * (M31_4194304)); + trace[118].data[row_index] = carry_22_col118; + + sub_components_inputs.range_check_19_inputs[23] + .extend([((carry_22_col118) + (M31_131072))].unpack()); + + lookup_data.rangecheck_19[23].push([((carry_22_col118) + (M31_131072))]); + let carry_23_col119 = (((conv_mod_tmp_1621) + (carry_22_col118)) * (M31_4194304)); + trace[119].data[row_index] = carry_23_col119; + + sub_components_inputs.range_check_19_inputs[24] + .extend([((carry_23_col119) + (M31_131072))].unpack()); + + lookup_data.rangecheck_19[24].push([((carry_23_col119) + (M31_131072))]); + let carry_24_col120 = (((conv_mod_tmp_1622) + (carry_23_col119)) * (M31_4194304)); + trace[120].data[row_index] = carry_24_col120; + + sub_components_inputs.range_check_19_inputs[25] + .extend([((carry_24_col120) + (M31_131072))].unpack()); + + lookup_data.rangecheck_19[25].push([((carry_24_col120) + (M31_131072))]); + let carry_25_col121 = (((conv_mod_tmp_1623) + (carry_24_col120)) * (M31_4194304)); + trace[121].data[row_index] = carry_25_col121; + + sub_components_inputs.range_check_19_inputs[26] + .extend([((carry_25_col121) + (M31_131072))].unpack()); + + lookup_data.rangecheck_19[26].push([((carry_25_col121) + (M31_131072))]); + let carry_26_col122 = (((conv_mod_tmp_1624) + (carry_25_col121)) * (M31_4194304)); + trace[122].data[row_index] = carry_26_col122; + + sub_components_inputs.range_check_19_inputs[27] + .extend([((carry_26_col122) + (M31_131072))].unpack()); + + lookup_data.rangecheck_19[27].push([((carry_26_col122) + (M31_131072))]); + + lookup_data.opcodes[0].push([input_pc_col0, input_ap_col1, input_fp_col2]); + lookup_data.opcodes[1].push([ + ((input_pc_col0) + (M31_2)), + ((input_ap_col1) + (ap_update_add_1_col7)), + input_fp_col2, + ]); + }); + + (trace, sub_components_inputs, lookup_data) +} + +pub struct LookupData { + 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 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), + ], + 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), + ], + verifyinstruction: [Vec::with_capacity(capacity)], + } + } +} + +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>, + memoryaddresstoid_lookup_elements: &relations::MemoryAddressToId, + memoryidtobig_lookup_elements: &relations::MemoryIdToBig, + opcodes_lookup_elements: &relations::Opcodes, + rangecheck_19_lookup_elements: &relations::RangeCheck_19, + 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.verifyinstruction[0]; + for (i, lookup_values) in lookup_row.iter().enumerate() { + let denom = verifyinstruction_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.memoryaddresstoid[0]; + for (i, lookup_values) in lookup_row.iter().enumerate() { + let denom = memoryaddresstoid_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.memoryidtobig[0]; + for (i, lookup_values) in lookup_row.iter().enumerate() { + let denom = memoryidtobig_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.memoryaddresstoid[1]; + for (i, lookup_values) in lookup_row.iter().enumerate() { + let denom = memoryaddresstoid_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.memoryidtobig[1]; + for (i, lookup_values) in lookup_row.iter().enumerate() { + let denom = memoryidtobig_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.memoryaddresstoid[2]; + for (i, lookup_values) in lookup_row.iter().enumerate() { + let denom = memoryaddresstoid_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.memoryidtobig[2]; + for (i, lookup_values) in lookup_row.iter().enumerate() { + let denom = memoryidtobig_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.rangecheck_19[0]; + for (i, lookup_values) in lookup_row.iter().enumerate() { + let denom = 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.rangecheck_19[1]; + for (i, lookup_values) in lookup_row.iter().enumerate() { + let denom = 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.rangecheck_19[2]; + for (i, lookup_values) in lookup_row.iter().enumerate() { + let denom = 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.rangecheck_19[3]; + for (i, lookup_values) in lookup_row.iter().enumerate() { + let denom = 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.rangecheck_19[4]; + for (i, lookup_values) in lookup_row.iter().enumerate() { + let denom = 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.rangecheck_19[5]; + for (i, lookup_values) in lookup_row.iter().enumerate() { + let denom = 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.rangecheck_19[6]; + for (i, lookup_values) in lookup_row.iter().enumerate() { + let denom = 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.rangecheck_19[7]; + for (i, lookup_values) in lookup_row.iter().enumerate() { + let denom = 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.rangecheck_19[8]; + for (i, lookup_values) in lookup_row.iter().enumerate() { + let denom = 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.rangecheck_19[9]; + for (i, lookup_values) in lookup_row.iter().enumerate() { + let denom = 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.rangecheck_19[10]; + for (i, lookup_values) in lookup_row.iter().enumerate() { + let denom = 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.rangecheck_19[11]; + for (i, lookup_values) in lookup_row.iter().enumerate() { + let denom = 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.rangecheck_19[12]; + for (i, lookup_values) in lookup_row.iter().enumerate() { + let denom = 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.rangecheck_19[13]; + for (i, lookup_values) in lookup_row.iter().enumerate() { + let denom = 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.rangecheck_19[14]; + for (i, lookup_values) in lookup_row.iter().enumerate() { + let denom = 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.rangecheck_19[15]; + for (i, lookup_values) in lookup_row.iter().enumerate() { + let denom = 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.rangecheck_19[16]; + for (i, lookup_values) in lookup_row.iter().enumerate() { + let denom = 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.rangecheck_19[17]; + for (i, lookup_values) in lookup_row.iter().enumerate() { + let denom = 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.rangecheck_19[18]; + for (i, lookup_values) in lookup_row.iter().enumerate() { + let denom = 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.rangecheck_19[19]; + for (i, lookup_values) in lookup_row.iter().enumerate() { + let denom = 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.rangecheck_19[20]; + for (i, lookup_values) in lookup_row.iter().enumerate() { + let denom = 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.rangecheck_19[21]; + for (i, lookup_values) in lookup_row.iter().enumerate() { + let denom = 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.rangecheck_19[22]; + for (i, lookup_values) in lookup_row.iter().enumerate() { + let denom = 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.rangecheck_19[23]; + for (i, lookup_values) in lookup_row.iter().enumerate() { + let denom = 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.rangecheck_19[24]; + for (i, lookup_values) in lookup_row.iter().enumerate() { + let denom = 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.rangecheck_19[25]; + for (i, lookup_values) in lookup_row.iter().enumerate() { + let denom = 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.rangecheck_19[26]; + for (i, lookup_values) in lookup_row.iter().enumerate() { + let denom = 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.rangecheck_19[27]; + for (i, lookup_values) in lookup_row.iter().enumerate() { + let denom = 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.opcodes[0]; + for (i, lookup_values) in lookup_row.iter().enumerate() { + let denom = opcodes_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.opcodes[1]; + for (i, lookup_values) in lookup_row.iter().enumerate() { + let denom = opcodes_lookup_elements.combine(lookup_values); + col_gen.write_frac(i, -PackedQM31::one(), denom); + } + col_gen.finalize_col(); + + 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 { + logup_sums: (total_sum, claimed_sum), + } + } +} diff --git a/stwo_cairo_prover/crates/prover/src/components/range_check_vector/mod.rs b/stwo_cairo_prover/crates/prover/src/components/range_check_vector/mod.rs index 9a750233..01bb3a8e 100644 --- a/stwo_cairo_prover/crates/prover/src/components/range_check_vector/mod.rs +++ b/stwo_cairo_prover/crates/prover/src/components/range_check_vector/mod.rs @@ -74,6 +74,8 @@ generate_range_check_code!([19]); generate_range_check_code!([9, 9]); generate_range_check_code!([7, 2, 5]); generate_range_check_code!([4, 3]); +generate_range_check_code!([6]); +generate_range_check_code!([3]); #[cfg(test)] mod tests { diff --git a/stwo_cairo_prover/crates/prover/src/input/state_transitions.rs b/stwo_cairo_prover/crates/prover/src/input/state_transitions.rs index 5b3e0c9b..742afa19 100644 --- a/stwo_cairo_prover/crates/prover/src/input/state_transitions.rs +++ b/stwo_cairo_prover/crates/prover/src/input/state_transitions.rs @@ -475,7 +475,7 @@ impl StateTransitions { Instruction { offset0, offset1: _, - offset2, + offset2: _, dst_base_fp: _, op0_base_fp, op1_imm, @@ -491,39 +491,47 @@ impl StateTransitions { opcode_call: false, opcode_ret: false, opcode_assert_eq: true, - } if !dev_mode => { + } => { let op1_addr = if op0_base_fp { fp } else { ap }; - let op1 = mem.get(op1_addr.0.checked_add_signed(offset0 as i32).unwrap()); + let _op1 = mem.get(op1_addr.0.checked_add_signed(offset0 as i32).unwrap()); if op1_imm { // [ap/fp + offset0] = [ap/fp + offset1] * Imm. - assert!(!op1_base_fp && !op1_base_ap && offset2 == 1); - if let MemoryValue::Small(_) = op1 { - self.casm_states_by_opcode - .mul_opcode_is_small_t_is_imm_t - .push(state); - } else { - self.casm_states_by_opcode - .mul_opcode_is_small_f_is_imm_t - .push(state); - }; + // TODO(Ohad): uncomment when small mull is added. + // assert!(!op1_base_fp && !op1_base_ap && offset2 == 1); + // if let MemoryValue::Small(_) = op1 { + // self.casm_states_by_opcode + // .mul_opcode_is_small_t_is_imm_t + // .push(state); + // } else { + // self.casm_states_by_opcode + // .mul_opcode_is_small_f_is_imm_t + // .push(state); + // }; + self.casm_states_by_opcode + .mul_opcode_is_small_f_is_imm_t + .push(state); } else { // [ap/fp + offset0] = [ap/fp + offset1] * [ap/fp + offset2]. assert!((op1_base_fp || op1_base_ap)); - let op0_addr = if op0_base_fp { fp } else { ap }; - let op0 = mem.get(op0_addr.0.checked_add_signed(offset0 as i32).unwrap()); - if let MemoryValue::F252(_) = op1 { - self.casm_states_by_opcode - .mul_opcode_is_small_f_is_imm_f - .push(state); - } else if let MemoryValue::F252(_) = op0 { - self.casm_states_by_opcode - .mul_opcode_is_small_f_is_imm_f - .push(state); - } else { - self.casm_states_by_opcode - .mul_opcode_is_small_t_is_imm_f - .push(state); - } + // TODO(Ohad): uncomment when small mull is added. + // let op0_addr = if op0_base_fp { fp } else { ap }; + // let op0 = mem.get(op0_addr.0.checked_add_signed(offset0 as i32).unwrap()); + // if let MemoryValue::F252(_) = op1 { + // self.casm_states_by_opcode + // .mul_opcode_is_small_f_is_imm_f + // .push(state); + // } else if let MemoryValue::F252(_) = op0 { + // self.casm_states_by_opcode + // .mul_opcode_is_small_f_is_imm_f + // .push(state); + // } else { + // self.casm_states_by_opcode + // .mul_opcode_is_small_t_is_imm_f + // .push(state); + // } + self.casm_states_by_opcode + .mul_opcode_is_small_f_is_imm_f + .push(state); } } diff --git a/stwo_cairo_prover/crates/prover/src/lib.rs b/stwo_cairo_prover/crates/prover/src/lib.rs index 5a28d83b..0da16dad 100644 --- a/stwo_cairo_prover/crates/prover/src/lib.rs +++ b/stwo_cairo_prover/crates/prover/src/lib.rs @@ -1,4 +1,7 @@ #![feature(array_methods, portable_simd, iter_array_chunks, array_chunks)] +// TODO(Ohad): remove. +#![allow(clippy::too_many_arguments)] + pub mod cairo_air; pub mod components; pub mod felt; @@ -191,6 +194,8 @@ mod tests { ); } + // TODO(Ohad): un-ignore. + #[ignore = "mul small opcode is not implemented yet"] #[test] fn test_mul() { let instructions = casm! { diff --git a/stwo_cairo_prover/crates/prover/src/relations/mod.rs b/stwo_cairo_prover/crates/prover/src/relations/mod.rs index f9422867..b8c5cad9 100644 --- a/stwo_cairo_prover/crates/prover/src/relations/mod.rs +++ b/stwo_cairo_prover/crates/prover/src/relations/mod.rs @@ -4,6 +4,8 @@ use stwo_prover::relation; relation!(MemoryAddressToId, 2); relation!(MemoryIdToBig, 29); relation!(Opcodes, 3); +relation!(RangeCheck_3, 1); +relation!(RangeCheck_6, 1); relation!(RangeCheck_18, 1); relation!(RangeCheck_19, 1); relation!(RangeCheck_9_9, 2);