/* TM_lib_internal::C_P021_fs_flatten_array */
void C_P021_fs_flatten_array_TM_lib_internal(
  /* TM_lib_internal::C_P021_fs_flatten_array::i */kcg_int i,
  /* TM_lib_internal::C_P021_fs_flatten_array::Acc */P021_sections_array_flat_T_TM *Acc,
  /* TM_lib_internal::C_P021_fs_flatten_array::section_arrays */P021_OBU_sectionlist_array_T_TM *section_arrays,
  outC_C_P021_fs_flatten_array_TM_lib_internal *outC)
{
  outC->_L3 = i;
  outC->_L5 = 3;
  outC->_L154 = outC->_L3 / outC->_L5;
  kcg_copy_P021_OBU_sectionlist_array_T_TM(&outC->_L2, section_arrays);
  outC->_L6 = outC->_L3 % outC->_L5;
  if ((0 <= outC->_L154) & (outC->_L154 < 33) & ((0 <= outC->_L6) & (outC->_L6 <
        3))) {
    outC->_L10 = outC->_L2[outC->_L154][outC->_L6];
  }
  else {
    outC->_L10 = 0;
  }
  kcg_copy_P021_sections_array_flat_T_TM(&outC->_L1, Acc);
  outC->_L8 = i;
  kcg_copy_P021_sections_array_flat_T_TM(&outC->_L7, &outC->_L1);
  if ((0 <= outC->_L8) & (outC->_L8 < 99)) {
    outC->_L7[outC->_L8] = outC->_L10;
  }
  kcg_copy_P021_sections_array_flat_T_TM(&outC->flat, &outC->_L7);
}
/* TM_lib_internal::C_P021_unflatten_sections */
void C_P021_unflatten_sections_TM_lib_internal(
  /* TM_lib_internal::C_P021_unflatten_sections::nid_packet_ok */kcg_bool nid_packet_ok,
  /* TM_lib_internal::C_P021_unflatten_sections::n_iter */kcg_int n_iter,
  /* TM_lib_internal::C_P021_unflatten_sections::flat */P021_sections_array_flat_T_TM *flat,
  outC_C_P021_unflatten_sections_TM_lib_internal *outC)
{
  static kcg_int i2;
  static kcg_int i1;
  static kcg_int i;
  static kcg_int noname;
  
  outC->_L11 = nid_packet_ok;
  outC->_L3 = n_iter;
  for (i2 = 0; i2 < 33; i2++) {
    outC->_L5[i2] = outC->_L3;
  }
  kcg_copy_P021_sections_array_flat_T_TM(&outC->_L1, flat);
  for (i1 = 0; i1 < 33; i1++) {
    kcg_copy_P021_sections_array_flat_T_TM(&outC->_L6[i1], &outC->_L1);
  }
  if (outC->_L11) {
    for (i = 0; i < 33; i++) {
      /* 1 */
      C_P021_us_array_TM_lib_internal(
        i,
        outC->_L5[i],
        &outC->_L6[i],
        &outC->Context_1[i]);
      kcg_copy_P021_section_enum_T_TM(
        &outC->_L9[i],
        &outC->Context_1[i].sections);
      outC->_L7 = i + 1;
      if (!outC->Context_1[i].cont) {
        break;
      }
    }
  }
  else {
    outC->_L7 = 0;
  }
#ifdef KCG_MAPW_CPY
  
  for (i = outC->_L7; i < 33; i++) {
    kcg_copy_P021_section_enum_T_TM(
      &outC->_L9[i],
      (P021_section_enum_T_TM *) &DEFAULT_P021_OBU_section_TM);
  }
#endif /* KCG_MAPW_CPY */
  
  noname = outC->_L7;
  kcg_copy_P021_OBU_sectionlist_enum_T_TM(&outC->sections, &outC->_L9);
}
/* TM_lib_internal::C_P021_flatten_sections */
void C_P021_flatten_sections_TM_lib_internal(
  /* TM_lib_internal::C_P021_flatten_sections::MergedSections */P021_OBU_sectionlist_int_T_TM *MergedSections,
  /* TM_lib_internal::C_P021_flatten_sections::Flattened */P021_sections_array_flat_T_TM *Flattened)
{
  P021_sections_array_flat_T_TM tmp;
  kcg_int i;
  /* TM_lib_internal::C_P021_flatten_sections::_L74 */ array_int_3_33 _L74;
  
  for (i = 0; i < 33; i++) {
    /* 1 */
    C_P021_fs_struct_to_array_TM_lib_internal(&(*MergedSections)[i], &_L74[i]);
  }
  kcg_copy_P021_sections_array_flat_T_TM(
    Flattened,
    (P021_sections_array_flat_T_TM *) &DEFAULT_P021_sections_array_flat_TM);
  for (i = 0; i < 231; i++) {
    kcg_copy_P021_sections_array_flat_T_TM(&tmp, Flattened);
    /* 1 */ C_P021_fs_flatten_array_TM_lib_internal(i, &tmp, &_L74, Flattened);
  }
}
/* TM_lib_internal::C_P021_fs_flatten_array */
void C_P021_fs_flatten_array_TM_lib_internal(
  /* TM_lib_internal::C_P021_fs_flatten_array::i */ kcg_int i,
  /* TM_lib_internal::C_P021_fs_flatten_array::Acc */ P021_sections_array_flat_T_TM *Acc,
  /* TM_lib_internal::C_P021_fs_flatten_array::section_arrays */ P021_OBU_sectionlist_array_T_TM *section_arrays,
  /* TM_lib_internal::C_P021_fs_flatten_array::flat */ P021_sections_array_flat_T_TM *flat)
{
  /* TM_lib_internal::C_P021_fs_flatten_array */ kcg_int tmp;
  
  kcg_copy_P021_sections_array_flat_T_TM(flat, Acc);
  if ((0 <= i / 3) & (i / 3 < 33) & ((0 <= i % 3) & (i % 3 < 3))) {
    tmp = (*section_arrays)[i / 3][i % 3];
  }
  else {
    tmp = 0;
  }
  if ((0 <= i) & (i < 99)) {
    (*flat)[i] = tmp;
  }
}
/* TM_conversions::C_P021_tracksim_compr */
void C_P021_tracksim_compr_TM_conversions(
  /* TM_conversions::C_P021_tracksim_compr::P021_from_track */ P021_trackside_int_T_TM *P021_from_track,
  outC_C_P021_tracksim_compr_TM_conversions *outC)
{
  kcg_int i2;
  kcg_int i1;
  kcg_int i;
  kcg_bool noname_1;
  /* TM_conversions::CAST_Int_to_Q_DIR::error */ kcg_bool error_1;
  /* TM_conversions::CAST_Int_to_Q_DIR::q_dir */ Q_DIR q_dir_1;
  /* TM_conversions::CAST_Int_to_Q_DIR::error */ kcg_bool _3_error_1;
  /* TM_conversions::CAST_Int_to_Q_DIR::q_dir */ Q_DIR _4_q_dir_1;
  /* TM_conversions::CAST_Int_to_Q_DIR::q_dir */ Q_DIR _5_q_dir_1;
  /* TM_conversions::CAST_Int_to_Q_DIR::error */ kcg_bool _6_error_1;
  /* TM_conversions::CAST_Int_to_Q_DIR::q_dir */ Q_DIR _7_q_dir_1;
  /* TM_conversions::CAST_Int_to_Q_DIR::error */ kcg_bool _8_error_1;
  /* TM_conversions::CAST_Int_to_Q_DIR::q_dir */ Q_DIR _9_q_dir_1;
  /* TM_conversions::CAST_Int_to_Q_DIR::error */ kcg_bool _10_error_1;
  /* TM_conversions::CAST_Int_to_Q_DIR::q_dir */ Q_DIR _11_q_dir_1;
  /* TM_conversions::CAST_Int_to_Q_DIR::error */ kcg_bool _12_error_1;
  
  kcg_copy_P021_trackside_int_T_TM(&outC->_L1, P021_from_track);
  outC->_L387 = outC->_L1.NID_PACKET;
  outC->_L215 = outC->_L1.Q_DIR;
  outC->_L216 = outC->_L1.L_PACKET;
  outC->_L217 = outC->_L1.Q_SCALE;
  outC->_L373[0] = outC->_L387;
  outC->_L373[1] = outC->_L215;
  outC->_L373[2] = outC->_L216;
  outC->_L373[3] = outC->_L217;
  outC->_L370 = outC->_L1.N_ITER;
  /* pow */ for (i2 = 0; i2 < 1; i2++) {
    outC->_L376[i2] = outC->_L370;
  }
  kcg_copy_array_int_4(&outC->_L381[0], &outC->_L373);
  kcg_copy_array_int_1(&outC->_L381[4], &outC->_L376);
  outC->_L218 = outC->_L1.D_GRADIENT;
  outC->_L219 = outC->_L1.Q_GDIR;
  outC->_L371 = outC->_L1.G_A;
  outC->_L375.D_GRADIENT = outC->_L218;
  outC->_L375.Q_GDIR = outC->_L219;
  outC->_L375.G_A = outC->_L371;
  /* pow */ for (i1 = 0; i1 < 1; i1++) {
    kcg_copy_P021_section_int_T_TM(&outC->_L386[i1], &outC->_L375);
  }
  kcg_copy_P021_trackide_sectionlist_T_TM(&outC->_L369, &outC->_L1.SECTIONS);
  kcg_copy_array_10565(&outC->_L385[0], &outC->_L386);
  kcg_copy_P021_trackide_sectionlist_T_TM(&outC->_L385[1], &outC->_L369);
  /* 1 */
  C_P021_flatten_sections_TM_lib_internal(&outC->_L385, &outC->Context_1);
  kcg_copy_P021_sections_array_flat_T_TM(
    &outC->_L380,
    &outC->Context_1.Flattened);
  kcg_copy_array_int_5(&outC->_L384[0], &outC->_L381);
  kcg_copy_P021_sections_array_flat_T_TM(&outC->_L384[5], &outC->_L380);
  outC->_L336 = 0;
  /* pow */ for (i = 0; i < 396; i++) {
    outC->_L209[i] = outC->_L336;
  }
  kcg_copy_array_int_104(&outC->_L383[0], &outC->_L384);
  kcg_copy_array_int_396(&outC->_L383[104], &outC->_L209);
  kcg_copy_CompressedPacketData_T_Common_Types_Pkg(
    &outC->P005_compressed,
    &outC->_L383);
  /* 1 */
  T_Build_Metadata_Packet_ID_TM_lib_internal(
    outC->_L387,
    outC->_L215,
    0,
    21,
    INT_M_VERSION_2_0_TM,
    &outC->_1_Context_1);
  outC->_L388 = outC->_1_Context_1.nid_packet_meta;
  outC->q_dir_int_1 = outC->_L215;
  outC->_L12_1 = outC->q_dir_int_1;
  outC->q_dir_in_1 = outC->_L12_1;
  outC->IfBlock1_clock_1 = outC->q_dir_in_1 ==
    INT_Q_DIR_nomiinal_TM_conversions;
  /* 1_ck_IfBlock1 */ if (outC->IfBlock1_clock_1) {
    outC->_L4_15_IfBlock1 = ENUM_Q_DIR_nominal_TM_conversions;
    _11_q_dir_1 = outC->_L4_15_IfBlock1;
    outC->q_dir_1 = _11_q_dir_1;
  }
  else {
    outC->_4_else_clock_1_IfBlock1 = outC->q_dir_in_1 ==
      INT_Q_DIR_reverse_TM_conversions;
    /* 1_ck_anon_activ */ if (outC->_4_else_clock_1_IfBlock1) {
      outC->_L3_1_IfBlock1 = ENUM_Q_DIR_reverse_TM_conversions;
      q_dir_1 = outC->_L3_1_IfBlock1;
      _9_q_dir_1 = q_dir_1;
    }
    else {
      outC->else_clock_1_IfBlock1 = outC->q_dir_in_1 ==
        INT_Q_DIR_both_TM_conversions;
      /* 1_ck_anon_activ */ if (outC->else_clock_1_IfBlock1) {
        outC->_L2_13_IfBlock1 = ENUM_Q_DIR_both_TM_conversions;
        _7_q_dir_1 = outC->_L2_13_IfBlock1;
        _4_q_dir_1 = _7_q_dir_1;
      }
      else {
        outC->_L2_1_IfBlock1 = ENUM_Q_DIR_both_TM_conversions;
        _5_q_dir_1 = outC->_L2_1_IfBlock1;
        _4_q_dir_1 = _5_q_dir_1;
      }
      _9_q_dir_1 = _4_q_dir_1;
    }
    outC->q_dir_1 = _9_q_dir_1;
  }
  outC->_L356 = outC->q_dir_1;
  outC->_L214 = outC->_L1.valid;
  outC->_L206 = 0;
  /* 1 */
  T_DeterminePacketSizeInt_TM_lib_internal(
    outC->_L370,
    4 + 1 + 3,
    3,
    &outC->_2_Context_1);
  outC->_L379 = outC->_2_Context_1.p_size;
  outC->p_size = outC->_L379;
  outC->_L378 = outC->p_size;
  outC->_L213 = 1;
  outC->_L212 = outC->_L378 - outC->_L213;
  outC->_L204.nid_packet = outC->_L388;
  outC->_L204.q_dir = outC->_L356;
  outC->_L204.valid = outC->_L214;
  outC->_L204.startAddress = outC->_L206;
  outC->_L204.endAddress = outC->_L212;
  kcg_copy_MetadataElement_T_Common_Types_Pkg(&outC->Header, &outC->_L204);
  /* 1_ck_IfBlock1 */ if (outC->IfBlock1_clock_1) {
    outC->_L5_16_IfBlock1 = kcg_false;
    _12_error_1 = outC->_L5_16_IfBlock1;
    outC->error_1 = _12_error_1;
  }
  else {
    /* 1_ck_anon_activ */ if (outC->_4_else_clock_1_IfBlock1) {
      outC->_L5_1_IfBlock1 = kcg_false;
      error_1 = outC->_L5_1_IfBlock1;
      _10_error_1 = error_1;
    }
    else {
      /* 1_ck_anon_activ */ if (outC->else_clock_1_IfBlock1) {
        outC->_L4_1_IfBlock1 = kcg_false;
        _8_error_1 = outC->_L4_1_IfBlock1;
        _3_error_1 = _8_error_1;
      }
      else {
        outC->_L1_1_IfBlock1 = kcg_true;
        _6_error_1 = outC->_L1_1_IfBlock1;
        _3_error_1 = _6_error_1;
      }
      _10_error_1 = _3_error_1;
    }
    outC->error_1 = _10_error_1;
  }
  outC->_L13_1 = outC->error_1;
  noname_1 = outC->_L13_1;
}