// 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_add_252::VerifyAdd252;

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

impl Add252 {
    #[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>(
        [add_252_input_a_limb_0, add_252_input_a_limb_1, add_252_input_a_limb_2, add_252_input_a_limb_3, add_252_input_a_limb_4, add_252_input_a_limb_5, add_252_input_a_limb_6, add_252_input_a_limb_7, add_252_input_a_limb_8, add_252_input_a_limb_9, add_252_input_a_limb_10, add_252_input_a_limb_11, add_252_input_a_limb_12, add_252_input_a_limb_13, add_252_input_a_limb_14, add_252_input_a_limb_15, add_252_input_a_limb_16, add_252_input_a_limb_17, add_252_input_a_limb_18, add_252_input_a_limb_19, add_252_input_a_limb_20, add_252_input_a_limb_21, add_252_input_a_limb_22, add_252_input_a_limb_23, add_252_input_a_limb_24, add_252_input_a_limb_25, add_252_input_a_limb_26, add_252_input_a_limb_27, add_252_input_b_limb_0, add_252_input_b_limb_1, add_252_input_b_limb_2, add_252_input_b_limb_3, add_252_input_b_limb_4, add_252_input_b_limb_5, add_252_input_b_limb_6, add_252_input_b_limb_7, add_252_input_b_limb_8, add_252_input_b_limb_9, add_252_input_b_limb_10, add_252_input_b_limb_11, add_252_input_b_limb_12, add_252_input_b_limb_13, add_252_input_b_limb_14, add_252_input_b_limb_15, add_252_input_b_limb_16, add_252_input_b_limb_17, add_252_input_b_limb_18, add_252_input_b_limb_19, add_252_input_b_limb_20, add_252_input_b_limb_21, add_252_input_b_limb_22, add_252_input_b_limb_23, add_252_input_b_limb_24, add_252_input_b_limb_25, add_252_input_b_limb_26, add_252_input_b_limb_27]: [E::F; 56],
        add_res_limb_0_col0: E::F,
        add_res_limb_1_col1: E::F,
        add_res_limb_2_col2: E::F,
        add_res_limb_3_col3: E::F,
        add_res_limb_4_col4: E::F,
        add_res_limb_5_col5: E::F,
        add_res_limb_6_col6: E::F,
        add_res_limb_7_col7: E::F,
        add_res_limb_8_col8: E::F,
        add_res_limb_9_col9: E::F,
        add_res_limb_10_col10: E::F,
        add_res_limb_11_col11: E::F,
        add_res_limb_12_col12: E::F,
        add_res_limb_13_col13: E::F,
        add_res_limb_14_col14: E::F,
        add_res_limb_15_col15: E::F,
        add_res_limb_16_col16: E::F,
        add_res_limb_17_col17: E::F,
        add_res_limb_18_col18: E::F,
        add_res_limb_19_col19: E::F,
        add_res_limb_20_col20: E::F,
        add_res_limb_21_col21: E::F,
        add_res_limb_22_col22: E::F,
        add_res_limb_23_col23: E::F,
        add_res_limb_24_col24: E::F,
        add_res_limb_25_col25: E::F,
        add_res_limb_26_col26: E::F,
        add_res_limb_27_col27: E::F,
        sub_p_bit_col28: E::F,
        common_lookup_elements: &relations::CommonLookupElements,
        eval: &mut E,
    ) -> [E::F; 0] {
        RangeCheckMemValueN28::evaluate(
            [
                add_res_limb_0_col0.clone(),
                add_res_limb_1_col1.clone(),
                add_res_limb_2_col2.clone(),
                add_res_limb_3_col3.clone(),
                add_res_limb_4_col4.clone(),
                add_res_limb_5_col5.clone(),
                add_res_limb_6_col6.clone(),
                add_res_limb_7_col7.clone(),
                add_res_limb_8_col8.clone(),
                add_res_limb_9_col9.clone(),
                add_res_limb_10_col10.clone(),
                add_res_limb_11_col11.clone(),
                add_res_limb_12_col12.clone(),
                add_res_limb_13_col13.clone(),
                add_res_limb_14_col14.clone(),
                add_res_limb_15_col15.clone(),
                add_res_limb_16_col16.clone(),
                add_res_limb_17_col17.clone(),
                add_res_limb_18_col18.clone(),
                add_res_limb_19_col19.clone(),
                add_res_limb_20_col20.clone(),
                add_res_limb_21_col21.clone(),
                add_res_limb_22_col22.clone(),
                add_res_limb_23_col23.clone(),
                add_res_limb_24_col24.clone(),
                add_res_limb_25_col25.clone(),
                add_res_limb_26_col26.clone(),
                add_res_limb_27_col27.clone(),
            ],
            common_lookup_elements,
            eval,
        );
        VerifyAdd252::evaluate(
            [
                add_252_input_a_limb_0.clone(),
                add_252_input_a_limb_1.clone(),
                add_252_input_a_limb_2.clone(),
                add_252_input_a_limb_3.clone(),
                add_252_input_a_limb_4.clone(),
                add_252_input_a_limb_5.clone(),
                add_252_input_a_limb_6.clone(),
                add_252_input_a_limb_7.clone(),
                add_252_input_a_limb_8.clone(),
                add_252_input_a_limb_9.clone(),
                add_252_input_a_limb_10.clone(),
                add_252_input_a_limb_11.clone(),
                add_252_input_a_limb_12.clone(),
                add_252_input_a_limb_13.clone(),
                add_252_input_a_limb_14.clone(),
                add_252_input_a_limb_15.clone(),
                add_252_input_a_limb_16.clone(),
                add_252_input_a_limb_17.clone(),
                add_252_input_a_limb_18.clone(),
                add_252_input_a_limb_19.clone(),
                add_252_input_a_limb_20.clone(),
                add_252_input_a_limb_21.clone(),
                add_252_input_a_limb_22.clone(),
                add_252_input_a_limb_23.clone(),
                add_252_input_a_limb_24.clone(),
                add_252_input_a_limb_25.clone(),
                add_252_input_a_limb_26.clone(),
                add_252_input_a_limb_27.clone(),
                add_252_input_b_limb_0.clone(),
                add_252_input_b_limb_1.clone(),
                add_252_input_b_limb_2.clone(),
                add_252_input_b_limb_3.clone(),
                add_252_input_b_limb_4.clone(),
                add_252_input_b_limb_5.clone(),
                add_252_input_b_limb_6.clone(),
                add_252_input_b_limb_7.clone(),
                add_252_input_b_limb_8.clone(),
                add_252_input_b_limb_9.clone(),
                add_252_input_b_limb_10.clone(),
                add_252_input_b_limb_11.clone(),
                add_252_input_b_limb_12.clone(),
                add_252_input_b_limb_13.clone(),
                add_252_input_b_limb_14.clone(),
                add_252_input_b_limb_15.clone(),
                add_252_input_b_limb_16.clone(),
                add_252_input_b_limb_17.clone(),
                add_252_input_b_limb_18.clone(),
                add_252_input_b_limb_19.clone(),
                add_252_input_b_limb_20.clone(),
                add_252_input_b_limb_21.clone(),
                add_252_input_b_limb_22.clone(),
                add_252_input_b_limb_23.clone(),
                add_252_input_b_limb_24.clone(),
                add_252_input_b_limb_25.clone(),
                add_252_input_b_limb_26.clone(),
                add_252_input_b_limb_27.clone(),
                add_res_limb_0_col0.clone(),
                add_res_limb_1_col1.clone(),
                add_res_limb_2_col2.clone(),
                add_res_limb_3_col3.clone(),
                add_res_limb_4_col4.clone(),
                add_res_limb_5_col5.clone(),
                add_res_limb_6_col6.clone(),
                add_res_limb_7_col7.clone(),
                add_res_limb_8_col8.clone(),
                add_res_limb_9_col9.clone(),
                add_res_limb_10_col10.clone(),
                add_res_limb_11_col11.clone(),
                add_res_limb_12_col12.clone(),
                add_res_limb_13_col13.clone(),
                add_res_limb_14_col14.clone(),
                add_res_limb_15_col15.clone(),
                add_res_limb_16_col16.clone(),
                add_res_limb_17_col17.clone(),
                add_res_limb_18_col18.clone(),
                add_res_limb_19_col19.clone(),
                add_res_limb_20_col20.clone(),
                add_res_limb_21_col21.clone(),
                add_res_limb_22_col22.clone(),
                add_res_limb_23_col23.clone(),
                add_res_limb_24_col24.clone(),
                add_res_limb_25_col25.clone(),
                add_res_limb_26_col26.clone(),
                add_res_limb_27_col27.clone(),
            ],
            sub_p_bit_col28.clone(),
            common_lookup_elements,
            eval,
        );
        []
    }
}
