// This file was created by the AIR team.

use crate::components::prelude::*;
use crate::components::subroutines::range_check_mem_value_n_28::RangeCheckMemValueN28;
use crate::components::subroutines::verify_mul_252::VerifyMul252;

#[derive(Copy, Clone, Serialize, Deserialize, CairoSerialize)]
pub struct Mul252 {}

impl Mul252 {
    #[allow(unused_parens)]
    #[allow(clippy::double_parens)]
    #[allow(non_snake_case)]
    #[allow(clippy::unused_unit)]
    #[allow(unused_variables)]
    #[allow(clippy::too_many_arguments)]
    pub fn evaluate<E: EvalAtRow>(
        [mul_252_input_a_limb_0, mul_252_input_a_limb_1, mul_252_input_a_limb_2, mul_252_input_a_limb_3, mul_252_input_a_limb_4, mul_252_input_a_limb_5, mul_252_input_a_limb_6, mul_252_input_a_limb_7, mul_252_input_a_limb_8, mul_252_input_a_limb_9, mul_252_input_a_limb_10, mul_252_input_a_limb_11, mul_252_input_a_limb_12, mul_252_input_a_limb_13, mul_252_input_a_limb_14, mul_252_input_a_limb_15, mul_252_input_a_limb_16, mul_252_input_a_limb_17, mul_252_input_a_limb_18, mul_252_input_a_limb_19, mul_252_input_a_limb_20, mul_252_input_a_limb_21, mul_252_input_a_limb_22, mul_252_input_a_limb_23, mul_252_input_a_limb_24, mul_252_input_a_limb_25, mul_252_input_a_limb_26, mul_252_input_a_limb_27, mul_252_input_b_limb_0, mul_252_input_b_limb_1, mul_252_input_b_limb_2, mul_252_input_b_limb_3, mul_252_input_b_limb_4, mul_252_input_b_limb_5, mul_252_input_b_limb_6, mul_252_input_b_limb_7, mul_252_input_b_limb_8, mul_252_input_b_limb_9, mul_252_input_b_limb_10, mul_252_input_b_limb_11, mul_252_input_b_limb_12, mul_252_input_b_limb_13, mul_252_input_b_limb_14, mul_252_input_b_limb_15, mul_252_input_b_limb_16, mul_252_input_b_limb_17, mul_252_input_b_limb_18, mul_252_input_b_limb_19, mul_252_input_b_limb_20, mul_252_input_b_limb_21, mul_252_input_b_limb_22, mul_252_input_b_limb_23, mul_252_input_b_limb_24, mul_252_input_b_limb_25, mul_252_input_b_limb_26, mul_252_input_b_limb_27]: [E::F; 56],
        mul_res_limb_0_col0: E::F,
        mul_res_limb_1_col1: E::F,
        mul_res_limb_2_col2: E::F,
        mul_res_limb_3_col3: E::F,
        mul_res_limb_4_col4: E::F,
        mul_res_limb_5_col5: E::F,
        mul_res_limb_6_col6: E::F,
        mul_res_limb_7_col7: E::F,
        mul_res_limb_8_col8: E::F,
        mul_res_limb_9_col9: E::F,
        mul_res_limb_10_col10: E::F,
        mul_res_limb_11_col11: E::F,
        mul_res_limb_12_col12: E::F,
        mul_res_limb_13_col13: E::F,
        mul_res_limb_14_col14: E::F,
        mul_res_limb_15_col15: E::F,
        mul_res_limb_16_col16: E::F,
        mul_res_limb_17_col17: E::F,
        mul_res_limb_18_col18: E::F,
        mul_res_limb_19_col19: E::F,
        mul_res_limb_20_col20: E::F,
        mul_res_limb_21_col21: E::F,
        mul_res_limb_22_col22: E::F,
        mul_res_limb_23_col23: E::F,
        mul_res_limb_24_col24: E::F,
        mul_res_limb_25_col25: E::F,
        mul_res_limb_26_col26: E::F,
        mul_res_limb_27_col27: E::F,
        k_col28: E::F,
        carry_0_col29: E::F,
        carry_1_col30: E::F,
        carry_2_col31: E::F,
        carry_3_col32: E::F,
        carry_4_col33: E::F,
        carry_5_col34: E::F,
        carry_6_col35: E::F,
        carry_7_col36: E::F,
        carry_8_col37: E::F,
        carry_9_col38: E::F,
        carry_10_col39: E::F,
        carry_11_col40: E::F,
        carry_12_col41: E::F,
        carry_13_col42: E::F,
        carry_14_col43: E::F,
        carry_15_col44: E::F,
        carry_16_col45: E::F,
        carry_17_col46: E::F,
        carry_18_col47: E::F,
        carry_19_col48: E::F,
        carry_20_col49: E::F,
        carry_21_col50: E::F,
        carry_22_col51: E::F,
        carry_23_col52: E::F,
        carry_24_col53: E::F,
        carry_25_col54: E::F,
        carry_26_col55: E::F,
        common_lookup_elements: &relations::CommonLookupElements,
        eval: &mut E,
    ) -> [E::F; 0] {
        RangeCheckMemValueN28::evaluate(
            [
                mul_res_limb_0_col0.clone(),
                mul_res_limb_1_col1.clone(),
                mul_res_limb_2_col2.clone(),
                mul_res_limb_3_col3.clone(),
                mul_res_limb_4_col4.clone(),
                mul_res_limb_5_col5.clone(),
                mul_res_limb_6_col6.clone(),
                mul_res_limb_7_col7.clone(),
                mul_res_limb_8_col8.clone(),
                mul_res_limb_9_col9.clone(),
                mul_res_limb_10_col10.clone(),
                mul_res_limb_11_col11.clone(),
                mul_res_limb_12_col12.clone(),
                mul_res_limb_13_col13.clone(),
                mul_res_limb_14_col14.clone(),
                mul_res_limb_15_col15.clone(),
                mul_res_limb_16_col16.clone(),
                mul_res_limb_17_col17.clone(),
                mul_res_limb_18_col18.clone(),
                mul_res_limb_19_col19.clone(),
                mul_res_limb_20_col20.clone(),
                mul_res_limb_21_col21.clone(),
                mul_res_limb_22_col22.clone(),
                mul_res_limb_23_col23.clone(),
                mul_res_limb_24_col24.clone(),
                mul_res_limb_25_col25.clone(),
                mul_res_limb_26_col26.clone(),
                mul_res_limb_27_col27.clone(),
            ],
            common_lookup_elements,
            eval,
        );
        VerifyMul252::evaluate(
            [
                mul_252_input_a_limb_0.clone(),
                mul_252_input_a_limb_1.clone(),
                mul_252_input_a_limb_2.clone(),
                mul_252_input_a_limb_3.clone(),
                mul_252_input_a_limb_4.clone(),
                mul_252_input_a_limb_5.clone(),
                mul_252_input_a_limb_6.clone(),
                mul_252_input_a_limb_7.clone(),
                mul_252_input_a_limb_8.clone(),
                mul_252_input_a_limb_9.clone(),
                mul_252_input_a_limb_10.clone(),
                mul_252_input_a_limb_11.clone(),
                mul_252_input_a_limb_12.clone(),
                mul_252_input_a_limb_13.clone(),
                mul_252_input_a_limb_14.clone(),
                mul_252_input_a_limb_15.clone(),
                mul_252_input_a_limb_16.clone(),
                mul_252_input_a_limb_17.clone(),
                mul_252_input_a_limb_18.clone(),
                mul_252_input_a_limb_19.clone(),
                mul_252_input_a_limb_20.clone(),
                mul_252_input_a_limb_21.clone(),
                mul_252_input_a_limb_22.clone(),
                mul_252_input_a_limb_23.clone(),
                mul_252_input_a_limb_24.clone(),
                mul_252_input_a_limb_25.clone(),
                mul_252_input_a_limb_26.clone(),
                mul_252_input_a_limb_27.clone(),
                mul_252_input_b_limb_0.clone(),
                mul_252_input_b_limb_1.clone(),
                mul_252_input_b_limb_2.clone(),
                mul_252_input_b_limb_3.clone(),
                mul_252_input_b_limb_4.clone(),
                mul_252_input_b_limb_5.clone(),
                mul_252_input_b_limb_6.clone(),
                mul_252_input_b_limb_7.clone(),
                mul_252_input_b_limb_8.clone(),
                mul_252_input_b_limb_9.clone(),
                mul_252_input_b_limb_10.clone(),
                mul_252_input_b_limb_11.clone(),
                mul_252_input_b_limb_12.clone(),
                mul_252_input_b_limb_13.clone(),
                mul_252_input_b_limb_14.clone(),
                mul_252_input_b_limb_15.clone(),
                mul_252_input_b_limb_16.clone(),
                mul_252_input_b_limb_17.clone(),
                mul_252_input_b_limb_18.clone(),
                mul_252_input_b_limb_19.clone(),
                mul_252_input_b_limb_20.clone(),
                mul_252_input_b_limb_21.clone(),
                mul_252_input_b_limb_22.clone(),
                mul_252_input_b_limb_23.clone(),
                mul_252_input_b_limb_24.clone(),
                mul_252_input_b_limb_25.clone(),
                mul_252_input_b_limb_26.clone(),
                mul_252_input_b_limb_27.clone(),
                mul_res_limb_0_col0.clone(),
                mul_res_limb_1_col1.clone(),
                mul_res_limb_2_col2.clone(),
                mul_res_limb_3_col3.clone(),
                mul_res_limb_4_col4.clone(),
                mul_res_limb_5_col5.clone(),
                mul_res_limb_6_col6.clone(),
                mul_res_limb_7_col7.clone(),
                mul_res_limb_8_col8.clone(),
                mul_res_limb_9_col9.clone(),
                mul_res_limb_10_col10.clone(),
                mul_res_limb_11_col11.clone(),
                mul_res_limb_12_col12.clone(),
                mul_res_limb_13_col13.clone(),
                mul_res_limb_14_col14.clone(),
                mul_res_limb_15_col15.clone(),
                mul_res_limb_16_col16.clone(),
                mul_res_limb_17_col17.clone(),
                mul_res_limb_18_col18.clone(),
                mul_res_limb_19_col19.clone(),
                mul_res_limb_20_col20.clone(),
                mul_res_limb_21_col21.clone(),
                mul_res_limb_22_col22.clone(),
                mul_res_limb_23_col23.clone(),
                mul_res_limb_24_col24.clone(),
                mul_res_limb_25_col25.clone(),
                mul_res_limb_26_col26.clone(),
                mul_res_limb_27_col27.clone(),
            ],
            k_col28.clone(),
            carry_0_col29.clone(),
            carry_1_col30.clone(),
            carry_2_col31.clone(),
            carry_3_col32.clone(),
            carry_4_col33.clone(),
            carry_5_col34.clone(),
            carry_6_col35.clone(),
            carry_7_col36.clone(),
            carry_8_col37.clone(),
            carry_9_col38.clone(),
            carry_10_col39.clone(),
            carry_11_col40.clone(),
            carry_12_col41.clone(),
            carry_13_col42.clone(),
            carry_14_col43.clone(),
            carry_15_col44.clone(),
            carry_16_col45.clone(),
            carry_17_col46.clone(),
            carry_18_col47.clone(),
            carry_19_col48.clone(),
            carry_20_col49.clone(),
            carry_21_col50.clone(),
            carry_22_col51.clone(),
            carry_23_col52.clone(),
            carry_24_col53.clone(),
            carry_25_col54.clone(),
            carry_26_col55.clone(),
            common_lookup_elements,
            eval,
        );
        []
    }
}
