/* TA_Lib_internal::FindStartOfNewSpeedProfile_LOOP */
void FindStartOfNewSpeedProfil_TA_Lib_internal(
  /* TA_Lib_internal::FindStartOfNewSpeedProfile_LOOP::i */kcg_int i,
  /* TA_Lib_internal::FindStartOfNewSpeedProfile_LOOP::Acc */kcg_int Acc,
  /* TA_Lib_internal::FindStartOfNewSpeedProfile_LOOP::distance_in */D_STATIC distance_in,
  /* TA_Lib_internal::FindStartOfNewSpeedProfile_LOOP::Profile_in */SSP_cat_t_TA_MRSP *Profile_in,
  outC_FindStartOfNewSpeedProfil_TA_Lib_internal *outC)
{
  kcg_int noname;
  
  outC->_L14 = i;
  outC->_L12 = 0;
  outC->_L13 = outC->_L14 > outC->_L12;
  kcg_copy_SSP_cat_t_TA_MRSP(&outC->_L2, Profile_in);
  outC->_L3 = i;
  if ((0 <= outC->_L3) & (outC->_L3 < 33)) {
    kcg_copy_SSP_section_t_TA_MRSP(&outC->_L4, &outC->_L2[outC->_L3]);
  }
  else {
    kcg_copy_SSP_section_t_TA_MRSP(
      &outC->_L4,
      (SSP_section_t_TA_MRSP *) &DEFAULT_SSP_section_TA_MRSP);
  }
  outC->_L5 = outC->_L4.target;
  outC->_L15 = outC->_L12 == outC->_L5;
  outC->_L16 = outC->_L13 & outC->_L15;
  outC->_L17 = !outC->_L16;
  outC->_L1 = distance_in;
  outC->_L6 = outC->_L5 < outC->_L1;
  outC->_L18 = outC->_L17 & outC->_L6;
  outC->_L8 = Acc;
  noname = outC->_L8;
  outC->_L7 = i;
  outC->relevant_section = outC->_L7;
  outC->cont = outC->_L18;
}
/* TA_Lib_internal::FindFirstRelevantSPForNewLRBG_Loop */
void FindFirstRelevantSPForNew_TA_Lib_internal(
  /* TA_Lib_internal::FindFirstRelevantSPForNewLRBG_Loop::i */kcg_int i,
  /* TA_Lib_internal::FindFirstRelevantSPForNewLRBG_Loop::Acc */kcg_int Acc,
  /* TA_Lib_internal::FindFirstRelevantSPForNewLRBG_Loop::Profile_in */SSP_cat_t_TA_MRSP *Profile_in,
  /* TA_Lib_internal::FindFirstRelevantSPForNewLRBG_Loop::Distance_2LRBGs */kcg_int Distance_2LRBGs,
  outC_FindFirstRelevantSPForNew_TA_Lib_internal *outC)
{
  kcg_int noname;
  
  outC->_L182 = i;
  outC->_L176 = 0;
  outC->_L181 = outC->_L182 > outC->_L176;
  kcg_copy_SSP_cat_t_TA_MRSP(&outC->_L170, Profile_in);
  outC->_L168 = i;
  if ((0 <= outC->_L168) & (outC->_L168 < 33)) {
    kcg_copy_SSP_section_t_TA_MRSP(&outC->_L172, &outC->_L170[outC->_L168]);
  }
  else {
    kcg_copy_SSP_section_t_TA_MRSP(
      &outC->_L172,
      (SSP_section_t_TA_MRSP *) &DEFAULT_SSP_section_TA_MRSP);
  }
  outC->_L173 = outC->_L172.target;
  outC->_L177 = outC->_L176 == outC->_L173;
  outC->_L178 = outC->_L181 & outC->_L177;
  outC->_L179 = !outC->_L178;
  outC->_L171 = Distance_2LRBGs;
  outC->_L174 = outC->_L173 < outC->_L171;
  outC->_L180 = outC->_L179 & outC->_L174;
  outC->cont = outC->_L180;
  outC->_L175 = i;
  outC->_L169 = Acc;
  noname = outC->_L169;
  outC->relevant_section = outC->_L175;
}
/* TA_Lib_internal::Update_SP_per_LRBG_loop */
void Update_SP_per_LRBG_loop_TA_Lib_internal(
  /* TA_Lib_internal::Update_SP_per_LRBG_loop::i */kcg_int i,
  /* TA_Lib_internal::Update_SP_per_LRBG_loop::SP */SSP_cat_t_TA_MRSP *SP,
  /* TA_Lib_internal::Update_SP_per_LRBG_loop::First_Section_To_Replace */kcg_int First_Section_To_Replace,
  /* TA_Lib_internal::Update_SP_per_LRBG_loop::new_SSP_received */SSP_cat_t_TA_MRSP *new_SSP_received,
  outC_Update_SP_per_LRBG_loop_TA_Lib_internal *outC)
{
  kcg_copy_SSP_cat_t_TA_MRSP(&outC->_L20, SP);
  kcg_copy_SSP_cat_t_TA_MRSP(&outC->_L6, new_SSP_received);
  outC->_L11 = i;
  if ((0 <= outC->_L11) & (outC->_L11 < 33)) {
    kcg_copy_SSP_section_t_TA_MRSP(&outC->_L15, &outC->_L6[outC->_L11]);
  }
  else {
    kcg_copy_SSP_section_t_TA_MRSP(
      &outC->_L15,
      (SSP_section_t_TA_MRSP *) &DEFAULT_SSP_section_TA_MRSP);
  }
  outC->_L5 = i;
  outC->_L4 = First_Section_To_Replace;
  outC->_L7 = outC->_L5 + outC->_L4;
  kcg_copy_SSP_cat_t_TA_MRSP(&outC->_L19, &outC->_L20);
  if ((0 <= outC->_L7) & (outC->_L7 < 33)) {
    kcg_copy_SSP_section_t_TA_MRSP(&outC->_L19[outC->_L7], &outC->_L15);
  }
  kcg_copy_SSP_cat_t_TA_MRSP(&outC->SpeedProfile_out, &outC->_L19);
}
/* TA_SSP::Convert_P27_to_DistanceProfile_1st_section */
void Convert_P27_to_DistancePr_TA_SSP(
  /* TA_SSP::Convert_P27_to_DistanceProfile_1st_section::q_scale */Q_SCALE q_scale,
  /* TA_SSP::Convert_P27_to_DistanceProfile_1st_section::Section1_in */P027V1_section_enum_T_TM_baseline2 *Section1_in,
  /* TA_SSP::Convert_P27_to_DistanceProfile_1st_section::TrainLength */L_internal_Type_Obu_BasicTypes_Pkg TrainLength,
  outC_Convert_P27_to_DistancePr_TA_SSP *outC)
{
  kcg_copy_P027V1_section_enum_T_TM_baseline2(&outC->_L98, Section1_in);
  outC->_L97 = TrainLength;
  kcg_copy_P027V1_section_enum_T_TM_baseline2(&outC->_L93, Section1_in);
  outC->_L96 = outC->_L93.v_static;
  outC->v_static_section1 = outC->_L96;
  outC->_L89 = q_scale;
  kcg_copy_P027V1_section_enum_T_TM_baseline2(&outC->_L86, Section1_in);
  outC->_L87 = outC->_L86.d_static;
  /* 2 */
  Normalize_Distance_d_inte_TA_Lib_internal(
    outC->_L89,
    outC->_L87,
    &outC->Context_2);
  outC->_L88 = outC->Context_2.d_internal;
  outC->_L95.target = outC->_L88;
  outC->_L95.speed = outC->_L96;
  outC->_L91 = outC->_L98.q_front;
  /* 2 */
  Eval_Q_Front_TA_Lib_internal(outC->_L91, outC->_L97, &outC->_1_Context_2);
  outC->_L90 = outC->_1_Context_2.added_train_length;
  outC->_L92 = outC->_L88 + outC->_L90;
  outC->_L94.target = outC->_L92;
  outC->_L94.speed = outC->_L96;
  kcg_copy_SSP_section_t_TA_MRSP(&outC->section1_delay, &outC->_L94);
  kcg_copy_SSP_section_t_TA_MRSP(&outC->section1, &outC->_L95);
}
/* TA_MRSP::MRSP_FindLastSSPSection */
void MRSP_FindLastSSPSection_TA_MRSP(
  /* TA_MRSP::MRSP_FindLastSSPSection::SSP_Reverse_In */SSP_cat_t_TA_MRSP *SSP_Reverse_In,
  outC_MRSP_FindLastSSPSection_TA_MRSP *outC)
{
  SSP_Mark_ValidSSPsection_TA_MRSP tmp;
  kcg_int i;
  kcg_int noname;
  
  kcg_copy_SSP_Mark_ValidSSPsection_TA_MRSP(
    &outC->_L31,
    (SSP_Mark_ValidSSPsection_TA_MRSP *)
      &DEFAULT_SSP_Init_ValidSSPsection_TA_MRSP);
  kcg_copy_SSP_cat_t_TA_MRSP(&outC->_L1, SSP_Reverse_In);
  outC->_L16 = kcg_true;
  kcg_copy_SSP_Mark_ValidSSPsection_TA_MRSP(&outC->_L14, &outC->_L31);
  if (outC->_L16) {
    for (i = 0; i < 33; i++) {
      kcg_copy_SSP_Mark_ValidSSPsection_TA_MRSP(&tmp, &outC->_L14);
      /* 1 */
      MRSP_FindLastSSPSection_LOOP_TA_MRSP(
        i,
        &tmp,
        &outC->_L1[i],
        &outC->Context_1[i]);
      kcg_copy_SSP_Mark_ValidSSPsection_TA_MRSP(
        &outC->_L14,
        &outC->Context_1[i].i_out);
      outC->_L13 = i + 1;
      if (!outC->Context_1[i].cont) {
        break;
      }
    }
  }
  else {
    outC->_L13 = 0;
  }
  outC->_L28 = outC->_L14.Index;
  outC->_L29 = outC->_L14.Found;
  if ((0 <= outC->_L28) & (outC->_L28 < 33)) {
    kcg_copy_SSP_section_t_TA_MRSP(&outC->_L19, &outC->_L1[outC->_L28]);
  }
  else {
    kcg_copy_SSP_section_t_TA_MRSP(
      &outC->_L19,
      (SSP_section_t_TA_MRSP *) &DEFAULT_SSP_section_TA_MRSP);
  }
  outC->_L21 = outC->_L19.target;
  outC->_L30.found = outC->_L29;
  outC->_L30.index = outC->_L28;
  outC->_L30.target = outC->_L21;
  noname = outC->_L13;
  kcg_copy_SSP_valid_section_t_TA_MRSP(&outC->Index_Last, &outC->_L30);
}
/* TA_Lib_internal::Update_SP_per_LRBG */
void Update_SP_per_LRBG_TA_Lib_internal(
  /* TA_Lib_internal::Update_SP_per_LRBG::new_SP */SSP_cat_t_TA_MRSP *new_SP,
  /* TA_Lib_internal::Update_SP_per_LRBG::v_static_section1 */V_internal_Type_Obu_BasicTypes_Pkg v_static_section1,
  /* TA_Lib_internal::Update_SP_per_LRBG::section1_delay */SSP_section_t_TA_MRSP *section1_delay,
  /* TA_Lib_internal::Update_SP_per_LRBG::section1 */SSP_section_t_TA_MRSP *section1,
  /* TA_Lib_internal::Update_SP_per_LRBG::Last_SpeedProfile_in */SSP_cat_t_TA_MRSP *Last_SpeedProfile_in,
  /* TA_Lib_internal::Update_SP_per_LRBG::SpeedProfile_out */SSP_cat_t_TA_MRSP *SpeedProfile_out)
{
  SSP_section_t_TA_MRSP tmp1;
  SSP_cat_t_TA_MRSP tmp;
  kcg_int i;
  /* TA_Lib_internal::Update_SP_per_LRBG::_L1 */ kcg_int _L1;
  /* TA_Lib_internal::Update_SP_per_LRBG::_L39 */ array__11213 _L39;
  
  _L1 = /* 1 */
    FindStartOfNewSpeedProfile_TA_Lib_internal(Last_SpeedProfile_in, new_SP);
  if ((0 <= _L1 - 1) & (_L1 - 1 < 33)) {
    kcg_copy_SSP_section_t_TA_MRSP(&tmp1, &(*Last_SpeedProfile_in)[_L1 - 1]);
  }
  else {
    kcg_copy_SSP_section_t_TA_MRSP(
      &tmp1,
      (SSP_section_t_TA_MRSP *) &DEFAULT_SSP_section_TA_MRSP);
  }
  if ((_L1 > 0) & (tmp1.speed < v_static_section1)) {
    kcg_copy_SSP_section_t_TA_MRSP(&(&_L39[0])[0], section1_delay);
  }
  else {
    kcg_copy_SSP_section_t_TA_MRSP(&(&_L39[0])[0], section1);
  }
  kcg_copy_array__12126(&_L39[1], (array__12126 *) &(*new_SP)[1]);
  kcg_copy_SSP_cat_t_TA_MRSP(SpeedProfile_out, Last_SpeedProfile_in);
  for (i = 0; i < 33; i++) {
    kcg_copy_SSP_cat_t_TA_MRSP(&tmp, SpeedProfile_out);
    /* 1 */
    Update_SP_per_LRBG_loop_TA_Lib_internal(
      i,
      &tmp,
      _L1,
      &_L39,
      SpeedProfile_out);
  }
}
/* TA_MRSP::MRSP_DetermineRelevantSpeedperCat */
SSP_s_section_t_TA_MRSP MRSP_DetermineRelevantSpeedperCat_TA_MRSP(
  /* TA_MRSP::MRSP_DetermineRelevantSpeedperCat::CurrentTarget */SSP_t_section_t_TA_MRSP CurrentTarget,
  /* TA_MRSP::MRSP_DetermineRelevantSpeedperCat::SSP_cat */SSP_cat_t_TA_MRSP *SSP_cat)
{
  SSP_relevant_target_t_TA_MRSP tmp2;
  kcg_bool tmp1;
  kcg_int i;
  SSP_section_t_TA_MRSP tmp;
  /* TA_MRSP::MRSP_DetermineRelevantSpeedperCat::_L11 */ SSP_valid_section_t_TA_MRSP _L11;
  /* TA_MRSP::MRSP_DetermineRelevantSpeedperCat::_L30 */ SSP_relevant_target_t_TA_MRSP _L30;
  /* TA_MRSP::MRSP_DetermineRelevantSpeedperCat::ValidSpeed */ SSP_s_section_t_TA_MRSP ValidSpeed;
  
  /* 1 */ MRSP_FindLastSSPSection_TA_MRSP(SSP_cat, &_L11);
  kcg_copy_SSP_relevant_target_t_TA_MRSP(
    &_L30,
    (SSP_relevant_target_t_TA_MRSP *) &DEFAULT_relevant_target_TA_MRSP);
  for (i = 0; i < 33; i++) {
    kcg_copy_SSP_relevant_target_t_TA_MRSP(&tmp2, &_L30);
    /* 1 */
    MRSP_DetermineRelevantSpeedperCat_LOOP_TA_MRSP(
      i,
      &tmp2,
      &_L11,
      &(*SSP_cat)[i],
      CurrentTarget,
      &tmp1,
      &_L30);
    if (!tmp1) {
      break;
    }
  }
  if ((0 <= _L30.index) & (_L30.index < 33)) {
    kcg_copy_SSP_section_t_TA_MRSP(&tmp, &(*SSP_cat)[_L30.index]);
  }
  else {
    kcg_copy_SSP_section_t_TA_MRSP(
      &tmp,
      (SSP_section_t_TA_MRSP *) &DEFAULT_SSP_section_TA_MRSP);
  }
  ValidSpeed = tmp.speed;
  return ValidSpeed;
}
/* TA_Lib_internal::FindFirstRelevantSPForNewLRBG_Loop */
void FindFirstRelevantSPForNewLRBG_Loop_TA_Lib_internal(
  /* TA_Lib_internal::FindFirstRelevantSPForNewLRBG_Loop::i */kcg_int i,
  /* TA_Lib_internal::FindFirstRelevantSPForNewLRBG_Loop::Acc */kcg_int Acc,
  /* TA_Lib_internal::FindFirstRelevantSPForNewLRBG_Loop::Profile_in */SSP_cat_t_TA_MRSP *Profile_in,
  /* TA_Lib_internal::FindFirstRelevantSPForNewLRBG_Loop::Distance_2LRBGs */kcg_int Distance_2LRBGs,
  /* TA_Lib_internal::FindFirstRelevantSPForNewLRBG_Loop::cont */kcg_bool *cont,
  /* TA_Lib_internal::FindFirstRelevantSPForNewLRBG_Loop::relevant_section */kcg_int *relevant_section)
{
  /* TA_Lib_internal::FindFirstRelevantSPForNewLRBG_Loop::_L172 */ SSP_section_t_TA_MRSP _L172;
  
  *relevant_section = i;
  if ((0 <= *relevant_section) & (*relevant_section < 33)) {
    kcg_copy_SSP_section_t_TA_MRSP(&_L172, &(*Profile_in)[*relevant_section]);
  }
  else {
    kcg_copy_SSP_section_t_TA_MRSP(
      &_L172,
      (SSP_section_t_TA_MRSP *) &DEFAULT_SSP_section_TA_MRSP);
  }
  *cont = !((*relevant_section > 0) & (0 == _L172.target)) & (_L172.target <
      Distance_2LRBGs);
}
/* TA_SSP::Convert_P27_to_DistanceProfile */
void _17_Convert_P27_to_DistancePr_TA_SSP(
  /* TA_SSP::Convert_P27_to_DistanceProfile::Packet27_in */P027V1_OBU_T_TM_baseline2 *Packet27_in,
  /* TA_SSP::Convert_P27_to_DistanceProfile::TrainLength */L_internal_Type_Obu_BasicTypes_Pkg TrainLength,
  outC__17_Convert_P27_to_DistancePr_TA_SSP *outC)
{
  kcg_int i5;
  kcg_int i4;
  kcg_int i3;
  kcg_int i2;
  kcg_int i1;
  SSP_cat_t_TA_MRSP tmp;
  kcg_int i;
  
  kcg_copy_P027V1_section_enum_T_TM_baseline2(
    &outC->_L86,
    (P027V1_section_enum_T_TM_baseline2 *)
      &DEFAULT_P027v1_OBU_section_TM_baseline2);
  for (i5 = 0; i5 < 1; i5++) {
    kcg_copy_P027V1_section_enum_T_TM_baseline2(&outC->_L85[i5], &outC->_L86);
  }
  kcg_copy_P027V1_OBU_T_TM_baseline2(&outC->_L73, Packet27_in);
  kcg_copy_P027V1_OBU_sectionlist_enum_T_TM_baseline2(
    &outC->_L71,
    &outC->_L73.sections);
  kcg_copy_array__10599(&outC->_L64, (array__10599 *) &outC->_L71[1]);
  kcg_copy_array__10599(&outC->_L84[0], &outC->_L64);
  kcg_copy_array__10605(&outC->_L84[32], &outC->_L85);
  kcg_copy_P027V1_OBU_T_TM_baseline2(&outC->_L63, Packet27_in);
  outC->_L65 = outC->_L63.q_scale;
  kcg_copy_P027V1_OBU_T_TM_baseline2(&outC->_L70, Packet27_in);
  kcg_copy_P027V1_section_enum_T_TM_baseline2(
    &outC->_L62,
    &outC->_L70.sections[0]);
  outC->_L72 = TrainLength;
  /* 3 */
  Convert_P27_to_DistancePr_TA_SSP(
    outC->_L65,
    &outC->_L62,
    outC->_L72,
    &outC->Context_3);
  outC->_L68 = outC->Context_3.v_static_section1;
  kcg_copy_SSP_section_t_TA_MRSP(&outC->_L66, &outC->Context_3.section1_delay);
  kcg_copy_SSP_section_t_TA_MRSP(&outC->_L67, &outC->Context_3.section1);
  kcg_copy_SSP_section_t_TA_MRSP(&outC->section1, &outC->_L67);
  kcg_copy_SSP_section_t_TA_MRSP(&outC->section1_delay, &outC->_L66);
  outC->v_static_section1 = outC->_L68;
  kcg_copy_SSP_cat_t_TA_MRSP(
    &outC->_L83,
    (SSP_cat_t_TA_MRSP *) &DEFAULT_SSP_cat_TA_MRSP);
  for (i4 = 0; i4 < 33; i4++) {
    kcg_copy_array__10437(&outC->_L74[i4], &outC->_L84);
  }
  outC->_L69 = TrainLength;
  for (i3 = 0; i3 < 33; i3++) {
    outC->_L82[i3] = outC->_L69;
  }
  for (i2 = 0; i2 < 33; i2++) {
    outC->_L76[i2] = outC->_L65;
  }
  for (i1 = 0; i1 < 33; i1++) {
    outC->_L81[i1] = outC->_L68;
  }
  kcg_copy_SSP_cat_t_TA_MRSP(&outC->_L77, &outC->_L83);
  for (i = 0; i < 33; i++) {
    kcg_copy_SSP_cat_t_TA_MRSP(&tmp, &outC->_L77);
    /* 3 */
    _16_Convert_P27_to_DistancePr_TA_SSP(
      i,
      &tmp,
      &outC->_L74[i],
      outC->_L82[i],
      outC->_L76[i],
      outC->_L81[i],
      &outC->_1_Context_3[i]);
    kcg_copy_SSP_cat_t_TA_MRSP(
      &outC->_L77,
      &outC->_1_Context_3[i].SpeedProfile);
  }
  kcg_copy_SSP_cat_t_TA_MRSP(&outC->SpeedProfile, &outC->_L77);
}